Parsing 不允许外圆括号的表达式的语法

Parsing 不允许外圆括号的表达式的语法,parsing,expression,grammar,context-free-grammar,bnf,Parsing,Expression,Grammar,Context Free Grammar,Bnf,对于涉及二进制运算符(|^&>+-*/)的表达式,我有以下语法: 这似乎很好,但不太符合我的需要,因为它允许使用外圆括号,例如((3+4)*2) 如何将语法更改为不允许外圆括号,同时仍允许在表达式中使用外圆括号,例如(3+4)*2,甚至是冗余的,例如(3*4)+2?将此规则添加到语法中: top_level : expression BITWISE_OR xor_expression | xor_expression BITWISE_XOR and_expression

对于涉及二进制运算符(|^&>+-*/)的表达式,我有以下语法:

这似乎很好,但不太符合我的需要,因为它允许使用外圆括号,例如
((3+4)*2)


如何将语法更改为不允许外圆括号,同时仍允许在表达式中使用外圆括号,例如
(3+4)*2
,甚至是冗余的,例如
(3*4)+2

将此规则添加到语法中:

top_level : expression BITWISE_OR xor_expression
          | xor_expression BITWISE_XOR and_expression
          | and_expression BITWISE_AND shift_expression
          | shift_expression LEFT_SHIFT arith_expression
          | shift_expression RIGHT_SHIFT arith_expression
          | arith_expression PLUS term
          | arith_expression MINUS term
          | term TIMES factor
          | term DIVIDE factor
          | NUMBER
并在需要不带外部参数的表达式时使用顶层。

原始语法为LALR(1)-添加此规则将保留该属性。但是,可以通过删除递归(例如,
表达式:按位或异或表达式|异或表达式
=>
表达式:异或表达式表达式表达式1;表达式1->按位或异或表达式表达式1 |空
)将原始语法转换为LL(1)。是否可以将
top_level
规则添加到此转换后的语法中,同时保持它为LL(1)?如果不是,那么LL(k)呢?
top_level : expression BITWISE_OR xor_expression
          | xor_expression BITWISE_XOR and_expression
          | and_expression BITWISE_AND shift_expression
          | shift_expression LEFT_SHIFT arith_expression
          | shift_expression RIGHT_SHIFT arith_expression
          | arith_expression PLUS term
          | arith_expression MINUS term
          | term TIMES factor
          | term DIVIDE factor
          | NUMBER