我目前正在实现 Decaf(编程语言)语法的一部分。这是野牛代码的相关片段:
type:
INT
| ID
| type LS RS
;
local_var_decl:
type ID SEMICOLON
;
name:
THIS
| ID
| name DOT ID
| name LS expression RS
;
然而,一旦我开始研究名称生成规则,我的解析器就会发出reduce-reduce警告。
这是.output文件中的内容(由野牛生成):
State 84
23 type: ID .
61 name: ID .
ID reduce using rule 23 (type)
LS reduce using rule 23 (type)
LS [reduce using rule 61 (name)]
$default reduce using rule 61 (name)
所以,如果我们给出以下输入{ abc[1] = abc; }
,它会说syntax error, unexpected NUMBER, expected RS
。NUMBER来自表达式规则(基本上,它必须如何解析它),尽管它尝试通过local_var_decl规则解析它。
你认为应该改变什么来解决这个问题?花了大约 2 个小时,尝试了不同的东西,没有奏效。
谢谢!!
PS。这是完整.y源代码的链接