Таким образом, во всех случаях примеров AST, есть производства следующего вида:
expr -> expr "+" expr;
expr -> expr "-" expr;
And in this case it's easy to create a new node like this:
expr: expr "+" expr {newNode("+",$1,$3);}
;
Теперь моя грамматика имеет следующую реализацию:
assignment:IDENTIFIER '=' expression ';'
;
expression:term expression_1
;
expression_1: '+' term expression_1 |
'-' term expression_1 |
;
term: factor term_1
;
term_1: '*' factor term_1 |
'/' factor term_1 |
;
factor: IDENTIFIER |
'(' expression ')' |
NUM | FNUM | STRING
;
Здесь, делаяновый узел, как мне взять первый операнд (который находится в предыдущем производстве) и передать его в функцию newNode, которая будет иметь оператор и второй операнд (оба они вместе в другом производстве)?