bison / flex:查看下一个字母或标记

时间:2011-02-09 14:18:55

标签: bison flex-lexer

当处理字符串时(它有自己的状态如注释)我需要找出下一个字母是否是“或者不是。如果它是我不结束字符串状态。那么会发生什么,我只是不结束在我的字符串状态中的字符串(我使用<STRING_STATE>.并逐字处理它。)所以发生的是,我标记最后一个字符串是否“并且如果当前不是我退出状态并且输出最后一个字母。” / p>

这有一个奇怪的效果。当我在带有字符串的行上出错时,我会看到两次字母(通常是','或')')。如果它碰巧在线的末端,副作用计为两行! (即使没有错误)。

我该如何解决这个问题?我唯一的选择是创建一个全局变量并在我离开字符串状态时标记它并破解YY_USer来修复它自己?我有点想避免这种情况。为了更清洁,我可以只看下一个字母或代币,这可能吗?

1 个答案:

答案 0 :(得分:9)

在flex中,您可以使用/前瞻操作符在未来的令牌中“向前看”。所以像

这样的规则
ab/cd

将匹配'ab'输入,当且仅当它后跟'cd'时。这意味着flex实际匹配此规则的'cd',但在调用规则的动作之前将其推回输入缓冲区,因此yytext只在你看到它时包含'ab',并且'cd'将是再次阅读下一个标记