规则中的野牛超前标记

时间:2013-07-31 15:23:00

标签: bison

我的问题是关于野牛规则的语法。我正在尝试为ecmascript生成解析器并最终出现关于'{''}'的shift-reduce冲突,其中这个生成可以是对象文字或块。事情是规范声明声明的规则:

Statement :
    Block |
    /*...*/
    ExpressionStatement |
    /*...*/
    ;
当前瞻不是“函数”或“{”时,

和ExpressionStatement在规范中被描述为表达式。我怎样才能与野牛一起实现这一目标?我试图使用优先权,但没有成功:

%nonassoc '{'
%nonassoc BLOCK

Block :
    '{' StatementListOpt '}' %prec BLOCK
    ;

假设我做错了。

冲突发生在'{'之前和'}之前(我的意思是'}'前瞻性)。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案: 实际上,我应该将%prec dirrective应用于我解决的规则,而不是减少规则。

这个答案实际上有助于理解该指令的工作原理: https://stackoverflow.com/a/12734499/1480424