0

我的问题是关于野牛规则语法。我正在尝试为 ecmascript 生成解析器,并最终导致关于 '{' '}' 的移位减少冲突,其中该生成可以是对象文字或块。事情是规范声明了语句的规则:

Statement :
    Block |
    /*...*/
    ExpressionStatement |
    /*...*/
    ;

当前瞻不是“函数”或“{”时,ExpressionStatement 在规范中被描述为表达式。我怎样才能用野牛做到这一点?我尝试使用优先级但没有成功:

%nonassoc '{'
%nonassoc BLOCK

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

假设我做错了什么。

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

4

1 回答 1

0

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

这个答案实际上有助于了解该指令如何工作的细节: https ://stackoverflow.com/a/12734499/1480424

于 2013-07-31T15:55:32.983 回答