我正在使用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 +, -, ^
我不知道如何确保这种优先权。
答案 0 :(得分:0)
我不知道为什么,但事实证明这是要走的路。
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