是否有可能从野牛语法行为中改变弹性状态?

时间:2013-11-25 22:42:04

标签: c bison flex-lexer reentrancy

我正在用C构建一个flex / bison重入解析器,我正在大量使用flex lexer中的状态,其中大多数是独占的。

但是如果可能的话,我会很感激从一个野牛中期规则行动中设置词法分析状态。 是否有可能在执行期间改变词法分析状态,从野牛 - 即在野牛规则的中间,通过其相关的行动?

1 个答案:

答案 0 :(得分:1)

这是可能的,但很难看。特别是当你回到解析器中时,词法分析器总是处于一致的状态(因为它已经返回了一个令牌),但是,它可能不会处于你期望的解析器状态可能已经做过预告。

一般来说,解析器和词法分析器之间的反馈非常混乱。这至少部分是为什么gcc的词法分析器是手工编码的,因为词法分析器在解析C typedef时必须返回“typedef word”,而在解析C变量声明时必须返回“non-typedef variable name”,而且它非常难看,因为:

typedef int X;
void f(void) {
    X X;

实际上是合法语法,使用X X左侧的typedef-name和右侧的非typedef变量名称。 (其中一些可能已经改变了,因为我上次在gcc的低级别下降,这是在2.x时代。:-))

如果您可以通过其他方式处理此问题,我建议您改为使用。