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