我正在使用Java,JFlex将数据传递到Java Cup。

如何定义运算符的优先级,它可以是后缀和前缀,但具有不同的优先级。

我的意思是:

terminal END;
terminal OP1, OP2, OP3;

precedence OP3;
precedence OP2;
precedence OP1_POSTFIX;  //OP1 in postfix position
precedence OP1_PREFIX;   //OP1 in prefix position

EXPR ::= END |OP1_PREFIX EXPR | EXPR OP1_POSTFIX


我不知道该如何做这样的工作。无论我做什么,最终都会产生转移/减少冲突。

感谢您的时间和帮助。

更新:

这是针对学校项目的,我得到了操作员优先级的列表,因此我必须坚持下去。

这是从最小到最大优先级的给定操作员优先级列表的一部分:

binary +, -    (left precedence)
not
unary postfix ^
unary prefix +, -, ^


我不知道如何确保这种优先。

最佳答案

我不知道为什么,但是事实证明这是要走的路。

terminal END, EXPR, EXPR1, EXPR2;
terminal OP1, OP2, OP3;

precedence OP3;
precedence OP2;
precedence OP1_POSTFIX;  //OP1 in postfix position
precedence OP1_PREFIX;   //OP1 in prefix position

EXPR  ::= END | EXPR1 | EXPR2
EXPR1 ::= OP1_PREFIX EXPR
EXPR2 ::= EXPR OP1_POSTFIX

07-26 05:00