有没有办法从野牛改变弹性开始状态?

时间:2011-03-21 15:35:57

标签: parsing bison flex-lexer

我已经在我的词法分析器中定义了不同的状态,这些状态不依赖于令牌而是依赖于一系列标记(类似于模板引擎的工作方式)。我可以定义更长的令牌,但我更喜欢这种方法。

2 个答案:

答案 0 :(得分:3)

您可以在使用BEGIN宏的.l文件的第三部分中添加一个函数,然后从您的bison操作(或其他任何地方)调用该函数。你需要注意这样一个事实:在减少规则(运行它的动作)之前,野牛可能会先读取一个令牌,因此在正确的时刻设置正确的状态可能会很棘手。

答案 1 :(得分:0)

您可以向yylex()添加一个参数,然后在每次调用时显式设置状态。然后你在yacc中有一个参数,你在你的动作中更新,然后传递给yylex()。这不一定是一个全局参数。

这里讨论的是实际技术,但可能需要适应bison和/或sourceforge flex:http://my.opera.com/myrkraverk/blog/2012/01/04/passing-parameters-to-yacc-and-flex