expr ::= expr MINUS expr.
expr ::= MINUS expr.
我需要为2个MINUS标记设置不同的关联性。但我不能两次为MINUS设置关联性。
%left PLUS MINUS. // + -
%right NOT MINUS. // ! - // error!
Lemon文档中对此进行了回答,该文档提供了该特定要求的示例:
语法规则的优先级等于为其定义优先级的规则中最左端符号的优先级。这通常是您想要的,但在那些希望语法规则的优先级不同的情况下,您可以通过将符号放在规则末尾的句点之后和任何C代码之前的方括号中来指定另一个优先级符号。例如:
expr = MINUS expr. [NOT]
此规则的优先级等于
NOT
符号的优先级,而不是默认情况下的MINUS
符号的优先级。
上面的示例假设您有一个令牌NOT
,该令牌已按正确顺序放置在优先级列表中。