This shows you the differences between two versions of the page.
|
alf:teme:tema3_en_draft [2019/03/14 23:55] alexandru.radovici |
alf:teme:tema3_en_draft [2019/04/03 10:25] (current) alexandru.radovici |
||
|---|---|---|---|
| Line 4: | Line 4: | ||
| <note important> | <note important> | ||
| - | Deadline: **15th of April, 23:55**\\ | + | Deadline: **7th of April, 23:55**\\ |
| Points: **2 points** out of the final grade\\ | Points: **2 points** out of the final grade\\ | ||
| Upload the homework: [[https://vmchecker.cs.pub.ro|vmchecker.cs.pub.ro]]\\ | Upload the homework: [[https://vmchecker.cs.pub.ro|vmchecker.cs.pub.ro]]\\ | ||
| Line 26: | Line 26: | ||
| * add the parser rules for the loops | * add the parser rules for the loops | ||
| * add the parser rules for the function definitions | * add the parser rules for the function definitions | ||
| - | * add the parser rules for the function run | + | * add the parser rules for the function call |
| * add the parser rules for the branches and loops | * add the parser rules for the branches and loops | ||
| * add the parser rules for the array and struct | * add the parser rules for the array and struct | ||
| Try running small scripts to test every feature. | Try running small scripts to test every feature. | ||
| - | |||
| - | ===== Syntax highlighting ===== | ||
| - | If you use sublime text, you may use this [[https://github.com/alexandruradovici/alf2018/blob/master/Devoirs/alf/verify/alf.tmLanguage|syntax highlighting file]] to write Alf language. | ||
| - | |||
| - | You may [[http://stackoverflow.com/questions/12785583/add-ts-language-files-to-sublime-text-to-support-additional-syntax-coloring|read]] here how to add the file. | ||
| ===== AST Format ===== | ===== AST Format ===== | ||
| Line 66: | Line 61: | ||
| * for - for statement | * for - for statement | ||
| * loop ... if - for statement | * loop ... if - for statement | ||
| - | * function_run - run a function | + | * function_call - call (run) a function |
| * return - value of a function | * return - value of a function | ||
| * value - a value (integer, logic, float, user_defined) | * value - a value (integer, logic, float, user_defined) | ||
| Line 72: | Line 67: | ||
| ===== Questions ===== | ===== Questions ===== | ||
| - | If you have any questions related to the homework, please ask them by posting an issue on the github [[https://github.com/alexandruradovici/alf2018.git|repository]] with the title format //[calculator] <your question title>//. You will need a github account for that. | + | If you have any questions related to the homework, please ask them by posting an issue on the github [[https://github.com/upb-fils/alf|repository]] with the title format //[alf] <your question title>//. You will need a github account for that. |
| <note warning> | <note warning> | ||
| Line 78: | Line 73: | ||
| </note> | </note> | ||
| - | If you want to receive an email when issues are posted or when there are new messages, got to the github [[https://github.com/alexandruradovici/alf2018|repository]] and click //Watch//. | + | If you want to receive an email when issues are posted or when there are new messages, got to the github [[https://github.com/upb-fils/alf|repository]] and click //Watch//. |
| | | ||
| Line 91: | Line 86: | ||
| * values | * values | ||
| * attributions | * attributions | ||
| - | * function run | + | * function call |
| * branch (if) | * branch (if) | ||
| * loop (loop , for) | * loop (loop , for) | ||
| <note> | <note> | ||
| - | The instructions are separated by newline. | + | The instructions are separated by ;. |
| <code> | <code> | ||
| - | a:=10 | + | a=10; |
| - | b:=20l | + | b=20; |
| - | s:=55 | + | s=55; |
| </code> | </code> | ||
| </note> | </note> | ||
| Line 134: | Line 129: | ||
| <code> | <code> | ||
| {this is a text to describe the script} | {this is a text to describe the script} | ||
| - | def v=55 | + | def v:integer=55; |
| </code> | </code> | ||
| Line 178: | Line 173: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/1_value|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/1_value|Example]] |
| ==== Variable definition ==== | ==== Variable definition ==== | ||
| Line 193: | Line 188: | ||
| def a:integer = 3; | def a:integer = 3; | ||
| def a = 3; | def a = 3; | ||
| - | def a1:integer = 3, a2:string = "text", a3:int; | + | def a1:integer = 3, a2:string = "text", a3:integer; |
| def a,b : integer; | def a,b : integer; | ||
| </code> | </code> | ||
| Line 214: | Line 209: | ||
| { | { | ||
| type:"data type", | type:"data type", | ||
| - | title: "varable name", | + | title: "variable name", |
| - | value: "varable value" | + | value: "variable value" |
| }, | }, | ||
| ] | ] | ||
| Line 221: | Line 216: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/2_variable_definition|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/2_variable_definition|Example]] |
| ==== Sruct ==== | ==== Sruct ==== | ||
| Line 249: | Line 244: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/6_class|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/6_class|Example]] |
| === Property access === | === Property access === | ||
| Line 272: | Line 267: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/6_class|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/6_class|Example]] |
| Line 309: | Line 304: | ||
| { | { | ||
| id:"element_of_array", | id:"element_of_array", | ||
| - | list:{ | + | array:{ |
| expression for array | expression for array | ||
| }, | }, | ||
| Line 318: | Line 313: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/7_array|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/7_array|Example]] |
| ==== Expressions ==== | ==== Expressions ==== | ||
| Line 336: | Line 331: | ||
| <code> | <code> | ||
| - | 2+5 | + | 2+5; |
| - | 2*4+5 | + | 2*4+5; |
| - | variable+5 | + | variable+5; |
| - | x>y | + | x>y; |
| - | x=y | + | x=y; |
| - | 2+(x+y)*(5+6) | + | 2+(x+y)*(5+6); |
| </code> | </code> | ||
| Line 377: | Line 372: | ||
| === Examples === | === Examples === | ||
| <code> | <code> | ||
| - | x = 1000 | + | x = 1000; |
| - | s = "text" + "s" | + | s = "text" + "s"; |
| - | y = f() | + | y = f(); |
| - | l[i] = 900 | + | l[i] = 900; |
| - | q.e = "this is a text" | + | q.e = "this is a text"; |
| </code> | </code> | ||
| Line 398: | Line 393: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/2_variable_definition|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/2_variable_definition|Example]] |
| Line 407: | Line 402: | ||
| <code> | <code> | ||
| - | fn function_name:return_type (parameter1:[parameter1_type][=value], ...) => expression | + | fn function_name:return_type (parameter1:[parameter1_type][=value], ...) => expression; |
| </code> | </code> | ||
| Line 426: | Line 421: | ||
| <code> | <code> | ||
| - | message sum:int a:int, b:int = is a+b | + | fn sum:integer (a:integer, b:integer) => a+b; |
| </code> | </code> | ||
| <code> | <code> | ||
| - | message power:int a:int, n:int | + | fn power:integer (a:integer, n:integer) |
| begin | begin | ||
| - | define p:int | + | def p:integer; |
| - | define i:int | + | def i:integer; |
| - | if n = 0 then | + | if n == 0 then |
| begin | begin | ||
| - | power:=1 | + | power=1; |
| - | end | + | end; |
| - | for i in [1,n] p:=p * a | + | for i in [1,n] p=p * a; |
| - | return p | + | return p; |
| - | end | + | end; |
| </code> | </code> | ||
| Line 447: | Line 442: | ||
| <code javascript> | <code javascript> | ||
| { | { | ||
| - | id:"message", | + | id:"fn", |
| - | title:"message_name", | + | title:"function_name", |
| parameters:[ // array of parameters | parameters:[ // array of parameters | ||
| { | { | ||
| type:"data type", | type:"data type", | ||
| - | id: "parameter name" | + | name: "parameter name" |
| }, | }, | ||
| ], | ], | ||
| - | return_type:"type of the value that the message returns", | + | return_type:"type of the value that the function returns", |
| statements:[ // array of statements (even if it is only one) | statements:[ // array of statements (even if it is only one) | ||
| ... | ... | ||
| Line 462: | Line 457: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/4_messages|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/4_messages|Example]] |
| === Return === | === Return === | ||
| - | This is the statements that sets the return value of the message. | + | This is the statement that sets the return value of the function. |
| == Example == | == Example == | ||
| <code> | <code> | ||
| - | return x+y | + | return x+y; |
| </code> | </code> | ||
| Line 482: | Line 477: | ||
| </code> | </code> | ||
| - | ==== Message dispatch ==== | + | ==== function call ==== |
| The is a call for a function | The is a call for a function | ||
| Line 489: | Line 484: | ||
| <code> | <code> | ||
| - | [object message_name parameter_name1:value1, parameter_name2:value, ...] | + | function_name (parameter_name1:value1, parameter_name2:value, ...); |
| </code> | </code> | ||
| <code> | <code> | ||
| - | [object message_name value1, value2, ...] | + | function_name (parameter1_value, parameter2_value, ...) |
| </code> | </code> | ||
| Line 499: | Line 494: | ||
| <code> | <code> | ||
| - | [module write text:"Text"] | + | write (text:"Text"); |
| - | s := [sum n1:3 n2:5] | + | s = sum (3, 5); |
| - | [module getdir] | + | getdir (); |
| </code> | </code> | ||
| Line 508: | Line 503: | ||
| <code javascript> | <code javascript> | ||
| { | { | ||
| - | id:"dispatch", | + | id:"function_call", |
| - | message:"message_name", | + | function:"function_name", |
| - | object:"destination_object_name", | + | |
| parameters:{ // dictionary of parameter name or index and value | parameters:{ // dictionary of parameter name or index and value | ||
| "parameter1": parameter_value, | "parameter1": parameter_value, | ||
| Line 519: | Line 513: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/4_messages|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/4_messages|Example]] |
| ==== Branch ==== | ==== Branch ==== | ||
| Line 526: | Line 520: | ||
| <code> | <code> | ||
| - | if expression | + | if expression then |
| ... | ... | ||
| - | end | + | end; |
| </code> | </code> | ||
| <code> | <code> | ||
| - | if expression | + | if expression then |
| ... | ... | ||
| else | else | ||
| ... | ... | ||
| - | end | + | end; |
| </code> | </code> | ||
| Line 560: | Line 554: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/5_branch|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/5_branch|Example]] |
| - | ==== Loop ==== | + | ==== Loops ==== |
| There are three types of loops: while, repeat and for. | There are three types of loops: while, repeat and for. | ||
| - | === while === | + | === loop run === |
| <code> | <code> | ||
| - | while expression | + | loop expression run |
| ... | ... | ||
| - | end | + | end; |
| </code> | </code> | ||
| Line 577: | Line 571: | ||
| <code javascript> | <code javascript> | ||
| { | { | ||
| - | id:"while", | + | id:"loop_run", |
| exp :expression, | exp :expression, | ||
| statements: [ // array of statements | statements: [ // array of statements | ||
| Line 585: | Line 579: | ||
| </code> | </code> | ||
| - | === repeat === | + | === loop ... when === |
| <code> | <code> | ||
| - | repeat | + | loop |
| ... | ... | ||
| - | when expression | + | when expression; |
| </code> | </code> | ||
| Line 596: | Line 590: | ||
| <code javascript> | <code javascript> | ||
| { | { | ||
| - | id:"repeat", | + | id:"loop_when", |
| exp :expression, | exp :expression, | ||
| statements: [ // array of statements | statements: [ // array of statements | ||
| Line 607: | Line 601: | ||
| <code> | <code> | ||
| - | for variable_name in expression | + | for variable_name in expression run |
| ... | ... | ||
| - | end | + | end; |
| </code> | </code> | ||
| Line 615: | Line 609: | ||
| <code> | <code> | ||
| - | for variable_name in (number to number) | + | for variable_name from number to number run |
| ... | ... | ||
| - | end | + | end; |
| </code> | </code> | ||
| <code> | <code> | ||
| - | for variable_name in (number downto number) | + | for variable_name from number downto number run |
| ... | ... | ||
| - | end | + | end; |
| </code> | </code> | ||
| Line 648: | Line 642: | ||
| id:"for", | id:"for", | ||
| variable:variable_name, | variable:variable_name, | ||
| - | list:{ | + | from: { expression }, |
| - | low: { expression }, | + | to/downto: { expression }, |
| - | high: { expression }, | + | |
| - | direction: "to" or "downto" | + | |
| - | }, | + | |
| statements: [ // array of statements | statements: [ // array of statements | ||
| Line 659: | Line 650: | ||
| </code> | </code> | ||
| - | [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf/verify/alf/3_loop|Example]] | + | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/3_loop|Example]] |
| ===== Errors ===== | ===== Errors ===== | ||
| Line 730: | Line 721: | ||
| #else | #else | ||
| p := "Linux" {this source code is ignored if platform is not linux} | p := "Linux" {this source code is ignored if platform is not linux} | ||
| - | end | + | #endif |
| </code> | </code> | ||
| Line 761: | Line 752: | ||
| ==== Public Tests ==== | ==== Public Tests ==== | ||
| - | You can download the public tests from the GitHub [[https://github.com/alexandruradovici/alf2018/tree/master/Devoirs/alf|repository]]. | + | You can download the public tests from the GitHub [[https://github.com/upb-fils/alf/tree/master/Devoir/alf|repository]]. |
| To run the tests, download the contents of the repository in the folder with the homework. Enter the //verify// folder and run ./run_all.sh. | To run the tests, download the contents of the repository in the folder with the homework. Enter the //verify// folder and run ./run_all.sh. | ||
| Line 811: | Line 802: | ||
| * your main file (set in package.json) | * your main file (set in package.json) | ||
| * your javascript files (*.js) | * your javascript files (*.js) | ||
| - | * your jison file (grammar.jison) | + | * your l and y file (grammar.l and grammar.y) |
| * the package.json file | * the package.json file | ||
| * the Readme file | * the Readme file | ||
| Line 834: | Line 825: | ||
| echo '{ "node":true, "loopfunc": true, "esnext":true }' > .jshintrc | echo '{ "node":true, "loopfunc": true, "esnext":true }' > .jshintrc | ||
| jshint *.js | jshint *.js | ||
| - | jison grammar.jison -o grammar.js | + | jison grammar.y grammar.l -o grammar.js |
| </code> | </code> | ||