我的问题是关于野牛规则语法。我正在尝试为 ecmascript 生成解析器,并最终导致关于 '{' '}' 的移位减少冲突,其中该生成可以是对象文字或块。事情是规范声明了语句的规则:
Statement :
Block |
/*...*/
ExpressionStatement |
/*...*/
;
当前瞻不是“函数”或“{”时,ExpressionStatement 在规范中被描述为表达式。我怎样才能用野牛做到这一点?我尝试使用优先级但没有成功:
%nonassoc '{'
%nonassoc BLOCK
Block :
'{' StatementListOpt '}' %prec BLOCK
;
假设我做错了什么。
冲突发生在'{'之后和'}'之前(我的意思是'}'前瞻)。