【发布时间】:2022-10-21 02:21:21
【问题描述】:
expr ::= expr MINUS expr.
expr ::= MINUS expr.
我需要为 2 个 MINUS 标记设置不同的关联性。但我不能两次为 MINUS 设置关联性。
%left PLUS MINUS. // + -
%right NOT MINUS. // ! - // error!
【问题讨论】:
expr ::= expr MINUS expr.
expr ::= MINUS expr.
我需要为 2 个 MINUS 标记设置不同的关联性。但我不能两次为 MINUS 设置关联性。
%left PLUS MINUS. // + -
%right NOT MINUS. // ! - // error!
【问题讨论】:
这在Lemon documentation 中得到了回答,它提供了该特定要求的示例:
语法规则的优先级等于定义了优先级的规则中最左边的终端符号的优先级。这通常是您想要的,但在您希望语法规则的优先级有所不同的情况下,您可以通过将符号放在方括号中来指定替代优先级符号,该符号位于规则末尾的句点之后和之前任何 C 代码。例如:
expr = MINUS expr. [NOT]此规则的优先级等于
NOT符号的优先级,而不是默认情况下的MINUS符号。上面的示例假设您有一个令牌
NOT,您已将其按正确顺序放置在优先级列表中。
【讨论】: