1

我正在用 C 语言构建一个 flex/bison 可重入解析器,并且我在 flex 词法分析器中大量使用状态,其中大部分是排他的。

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

4

1 回答 1

1

这是可能的,但很难看。特别是当您返回解析器时,词法分析器始终处于一致状态(因为它返回了一个令牌),但是,它可能不是您期望的状态,因为解析器可能已经进行了前瞻称呼。

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

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

实际上是合法的语法,使用左边的 typedef-name 和右边X X的非 typedef 变量名。(自从我上次在 2.x 时代的低水平 gcc 中下降以来,其中一些可能已经改变。:-))

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

于 2013-11-25T22:59:47.530 回答