Compiler construction 野牛中间规则操作不起作用

Compiler construction 野牛中间规则操作不起作用,compiler-construction,bison,flex-lexer,yacc,bisonc++,Compiler Construction,Bison,Flex Lexer,Yacc,Bisonc++,这是我的解析器 当我使用.c文件运行这些文件时,输出如下: after insertion inserted 其中,我的预期输出为: inserted after insertion 为什么会这样 Yacc/bison语法使用一个lookahead标记,即LALR1中的1来决定要采取的解析操作。因此解析器和lexer不同步;先行标记的lexer操作通常会在前面的解析器缩减之前执行 我经常写,但并不总是这样,因为Bison而不是yacc有时会延迟读取lookahead标记,如果它实际上

这是我的解析器

当我使用.c文件运行这些文件时,输出如下:

 after insertion
 inserted
其中,我的预期输出为:

 inserted
 after insertion

为什么会这样

Yacc/bison语法使用一个lookahead标记,即LALR1中的1来决定要采取的解析操作。因此解析器和lexer不同步;先行标记的lexer操作通常会在前面的解析器缩减之前执行

我经常写,但并不总是这样,因为Bison而不是yacc有时会延迟读取lookahead标记,如果它实际上不需要在解析时引用它的话。很难预测何时会发生这种优化。最好的规则是避免依赖解析器和lexer之间的操作执行序列

 after insertion
 inserted
 inserted
 after insertion