5

我的词法分析器和解析器有问题。

首先,在我的词法分析器中,我有这样一行:

"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说法...

请帮我...

4

1 回答 1

1

正如 Zack 在评论中提到的,您应该beginScope从解析器操作中调用:

stmt: IF { beginScope(stOTHER); } '(' exp ')' stmts
于 2013-02-28T06:16:04.893 回答