我的问题是关于野牛规则的语法。我正在尝试为ecmascript生成解析器并最终出现关于'{''}'的shift-reduce冲突,其中这个生成可以是对象文字或块。事情是规范声明声明的规则:
Statement :
Block |
/*...*/
ExpressionStatement |
/*...*/
;
当前瞻不是“函数”或“{”时,和ExpressionStatement在规范中被描述为表达式。我怎样才能与野牛一起实现这一目标?我试图使用优先权,但没有成功:
%nonassoc '{'
%nonassoc BLOCK
Block :
'{' StatementListOpt '}' %prec BLOCK
;
假设我做错了。
冲突发生在'{'之前和'}之前(我的意思是'}'前瞻性)。
答案 0 :(得分:0)
我找到了解决方案: 实际上,我应该将%prec dirrective应用于我解决的规则,而不是减少规则。
这个答案实际上有助于理解该指令的工作原理: https://stackoverflow.com/a/12734499/1480424