我的词法分析器和解析器中存在问题。
首先,在我的词法分析器中,我有这样一句话:
"if" beginScope(stOTHER); return IF;
在我的解析器中:
stmt: IF '(' exp ')' stmts
...
stmts: stmt
| '{' stmt_list '}'
| '{' '}'
在这样的代码中:
if(sth) {
dosth;
}
if(other) {
doothersth;
}
beginScope将被调用两次,因为(我认为)Bison不知道if
语句的结尾在哪里,所以当它找到IF
标记时,他将其视为if
语句的结尾,并再次读取它以启动另一个if
语句...
请帮帮我......
答案 0 :(得分:1)
正如Zack在评论中提到的那样,您应该从解析器操作中调用beginScope
:
stmt: IF { beginScope(stOTHER); } '(' exp ')' stmts