This shows you the differences between two versions of the page.
cpl-atm:laboratoare:laborator5.1 [2013/11/15 12:58] laura.vasilescu |
cpl-atm:laboratoare:laborator5.1 [2013/11/15 13:58] (current) laura.vasilescu |
||
---|---|---|---|
Line 10: | Line 10: | ||
Spre exemplu, pentru expresia ''1+3'', AST-ul arată astfel: | Spre exemplu, pentru expresia ''1+3'', AST-ul arată astfel: | ||
+ | <code> | ||
+ | {"r":"expresie","l":[{"r":"numar","l":["1"]},{"r":"termen","l":["+",{"r":"numar","l":["3"]},null]}]} | ||
+ | </code> | ||
+ | |||
+ | Pentru expresia ''1+3+4'', arată așa: | ||
+ | <code> | ||
+ | {"r":"expresie","l":[{"r":"numar","l":["1"]},{"r":"termen","l":["+",{"r":"numar","l":["3"]},{"r":"termen","l":["+",{"r":"numar","l":["4"]},null]}]}]} | ||
+ | </code> | ||
+ | |||
+ | Practic, în funcție de tipul fiecărui nod, vom returna în parserul din ''jison'' ceva de genul: | ||
+ | <code> | ||
+ | {r:'expresie', l:[$numar,$termen]} | ||
+ | {r:'termen', l:['+',$numar,$termen]} | ||
+ | {r:'termen', l:['-',$numar,$termen]} | ||
+ | {r:'numar', l:[$numar]} | ||
+ | </code> | ||
+ | |||
+ | Prelucrați arborele AST și realizați adnotări de calcule intermediare pentru a evalua expresia. | ||
+ | |||
+ | <note> | ||
+ | <code> | ||
+ | var file=require('./jison.js').parser; | ||
+ | var tree=file.parse("1+3+4"); | ||
+ | console.log(JSON.stringify(tree,null, 4)); | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | Pentru expresia ''1+3'' ar trebui să arate de forma: | ||
+ | <code> | ||
+ | { | ||
+ | "r": "expresie", | ||
+ | "l": [ | ||
+ | { | ||
+ | "r": "numar", | ||
+ | "l": [ | ||
+ | "1" | ||
+ | ], | ||
+ | "valoare": 1 | ||
+ | }, | ||
+ | { | ||
+ | "r": "termen", | ||
+ | "l": [ | ||
+ | "+", | ||
+ | { | ||
+ | "r": "numar", | ||
+ | "l": [ | ||
+ | "3" | ||
+ | ], | ||
+ | "valoare": 3 | ||
+ | }, | ||
+ | null | ||
+ | ], | ||
+ | "valoare": 3 | ||
+ | } | ||
+ | ], | ||
+ | "valoare": 4 | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Pentru expresia ''1+3+4'': | ||
+ | <code> | ||
+ | { | ||
+ | "r": "expresie", | ||
+ | "l": [ | ||
+ | { | ||
+ | "r": "numar", | ||
+ | "l": [ | ||
+ | "1" | ||
+ | ], | ||
+ | "valoare": 1 | ||
+ | }, | ||
+ | { | ||
+ | "r": "termen", | ||
+ | "l": [ | ||
+ | "+", | ||
+ | { | ||
+ | "r": "numar", | ||
+ | "l": [ | ||
+ | "3" | ||
+ | ], | ||
+ | "valoare": 3 | ||
+ | }, | ||
+ | { | ||
+ | "r": "termen", | ||
+ | "l": [ | ||
+ | "+", | ||
+ | { | ||
+ | "r": "numar", | ||
+ | "l": [ | ||
+ | "4" | ||
+ | ], | ||
+ | "valoare": 4 | ||
+ | }, | ||
+ | null | ||
+ | ], | ||
+ | "valoare": 4 | ||
+ | } | ||
+ | ], | ||
+ | "valoare": 7 | ||
+ | } | ||
+ | ], | ||
+ | "valoare": 8 | ||
+ | } | ||
+ | |||
+ | </code> |