[英]Converting given ambiguous arithmetic expression grammar to unambiguous LL(1)
[英]Make this Expression Grammar unambiguous for LL(1)
我们如何才能使该表达式语法对于LL(1)进行解析?
语法与大多数类似C的语言中使用的表达式非常相似。
注意:<>中的字符串是非终结符,而大写中的字符串是终结符。
<expression> --> <arithmeticExpr> | <booleanExpr>
<arithmeticExpr> --> <arithmeticExpr> <op1> <term> | <term>
<term> --> <term> <op2> <factor>
<term> --> <factor>
<factor> --> BO <arithmeticExpr> BC
<factor> --> <var>
<op1> --> PLUS | MINUS
<op2> --> MUL | DIV
<booleanExpr> --> <booleanExpr> <logicalOp> <booleanExpr>
<booleanExpr> --> <arithmeticExpr> <relationalOp> <arithmeticExpr>
<booleanExpr> --> BO <booleanExpr> BC
<logicalOp> --> AND | OR
<relationalOp> --> LT | LE | GT | GE | EQ | NE
<var> --> ID <whichId> | NUM | RNUM
<whichId> --> SQBO ID SQBC | ε
PS:我在处理Boolean Expressions.
Stackoverflow上找不到任何问题Boolean Expressions.
首先,您需要消除规则的歧义
<booleanExpr> --> <booleanExpr> <logicalOp> <booleanExpr>
它应该如何处理这样的输入a AND b OR c
和a OR b AND c
? 有多种可能的解释。 您需要决定要哪个。
然后,您将获得一个明确的语法,但不是LL(1)。 要使其成为LL(1),您需要对其进行左分解 。
@Chris,您的问题可能已纠正如下。 但是完整语法的歧义不会消失。
同样,此处不可能以标准格式进行左因子分解。
仅当我们尝试找到<booleanExpr>
和<expression>
的第一组时,我们才得到左公因数(如<booleanExpr>
BO
)。
<booleanExpr> --> <arithmeticExpr> <relationalOp> <arithmeticExpr> <BooleanX>
<booleanExpr> --> BO <booleanExpr> BC <BooleanX>
<BooleanX> --> <logicalOp> <booleanExpr> <BooleanX> | ε
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.