我为加法和减法创建了简单的语法:
S : EXPRESSION ENDLINE {printf("Result: %d\n",$1);}
;
EXPRESSION
: NUMBER '+' NUMBER {$$ = $1 + $3;}
| NUMBER '-' NUMBER {$$ = $1 - $3;}
;
NUMBER : NUM {$$ = $1;}
;
%%
到达S终端后,我想在打印第一个结果后写入新输入。不幸的是,插入第二个公式后我收到了语法错误。我怎样才能做到这一点?我很感激你的帮助。
答案 0 :(得分:1)
这不是重置解析树;您需要扩展语法以允许包含表达式的任意数量的行。只需扩展规则S
以包含递归调用,如下所示:
S : EXPRESSION ENDLINE {printf("Result: %d\n",$1);}
| S EXPRESSION ENDLINE {printf("Result: %d\n",$2);}
;
这可能有点俗气,所以你可以添加一个新规则到同样的效果:
S: RESULT
| S RESULT
;
RESULT : EXPRESSION ENDLINE {printf("Result: %d\n",$1);}