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

3 bison flex-lexer

当处理字符串时(它有它自己的状态就像评论)我需要找出如果下一个字母是"与否.如果是我不结束的字符串的状态.所以会发生什么是我只是不结束的字符串我字符串状态(我<STRING_STATE>.逐字逐句地使用和处理).所以发生的是,我标记最后一个字符串是否是"并且如果当前不是我退出状态并且输出最后一个字母.

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

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

Chr*_*odd 9

在flex中,您可以使用/前瞻操作符在未来的令牌中"向前看" .所以像这样的规则

ab/cd
Run Code Online (Sandbox Code Playgroud)

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