3
我有以下的語法涉及二元運算表達式(|^& < < >> + - * /):語法爲表達其不允許外括號
expression : expression BITWISE_OR xor_expression
| xor_expression
xor_expression : xor_expression BITWISE_XOR and_expression
| and_expression
and_expression : and_expression BITWISE_AND shift_expression
| shift_expression
shift_expression : shift_expression LEFT_SHIFT arith_expression
| shift_expression RIGHT_SHIFT arith_expression
| arith_expression
arith_expression : arith_expression PLUS term
| arith_expression MINUS term
| term
term : term TIMES factor
| term DIVIDE factor
| factor
factor : NUMBER
| LPAREN expression RPAREN
這似乎很好地工作,但沒有按」 t完全符合我的需求,因爲它允許使用外部括號((3 + 4) * 2)
。
如何更改語法以禁止使用外括號,同時仍允許它們在表達式中(3 + 4) * 2
,甚至冗餘地例如(3 * 4) + 2
?
謝謝,這看起來不錯。 – user200783
原始語法是LALR(1) - 添加此規則可保留該屬性。然而,可以通過移除遞歸(例如'expression:expression BITWISE_OR xor_expression | xor_expression' =>'expression:xor_expression expression1; expression1 - > BITWISE_OROROR expression1 | empty')將原始語法轉換爲LL(1)。是否可以在保持LL(1)的同時向這個轉換後的語法添加一個'top_level'規則?如果不是,LL(k)怎麼樣? – user200783