野牛修复已签名终端的移位/减少冲突



基于这个问题,这个野牛代码中的移位/减少冲突从何而来?我正在尝试为这样的语法创建语法:

-10 + 3 - 2+4 - 2 + 1 .第一个整数显然有一个符号。

这是我已经拥有的:

%token INT
...
Term: INT;
TermOps: "+" | "-";
SignedTerm: TermOps Term | Term;
reminder: /* EPS */ | TermOps TermList;
TermList: SignedTerm reminder;

我知道SignedTerm规则显然是错误的,因为它会造成歧义,但我该如何解决这个问题?

Bison 生成 LALR 解析器,因此无需将语法扭曲为可使用 LL 算法解析的版本。

语法只需要反映语言的结构。在这种简单的情况下,语言指定术语是一个整数,前面可能有一个符号,并且表达式从左到右分组。(这是我的假设,但这是通常的惯例。

这可以简单地写成:

term: INT
    | '+' term
    | '-' term
expr: term
    | expr '+' term
    | expr '-' term

这些定义直接来自描述。

相关内容

  • 没有找到相关文章

最新更新