Flex / Bison:令牌管理不好?

时间:2012-05-14 19:17:13

标签: c++ parsing bison lex flex-lexer

我的词法分析器和解析器中存在问题。

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

"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语句...

请帮帮我......

1 个答案:

答案 0 :(得分:1)

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

stmt: IF { beginScope(stOTHER); } '(' exp ')' stmts