This is an old revision of the document!
Scrieți în jison o gramatică (lexer + parser) care generează un arbore AST pentru o expresie matematică cu +
și -
:
expresie: numar termen; termen: '+' numar termen | '-' numar termen |; numar: [0-9]+;
Spre exemplu, pentru expresia 1+3
, AST-ul arată astfel:
{"r":"expresie","l":[{"r":"numar","l":["1"]},{"r":"termen","l":["+",{"r":"numar","l":["3"]},null]}]}
Pentru expresia 1+3+4
, arată așa:
{"r":"expresie","l":[{"r":"numar","l":["1"]},{"r":"termen","l":["+",{"r":"numar","l":["3"]},{"r":"termen","l":["+",{"r":"numar","l":["4"]},null]}]}]}
Practic, în funcție de tipul fiecărui nod, vom returna în parserul din jison
ceva de genul:
{r:'expresie', l:[$numar,$termen]} {r:'termen', l:['+',$numar,$termen]} {r:'termen', l:['-',$numar,$termen]} {r:'numar', l:[$numar]}