繁体   English   中英

使此表达式语法对于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 ca 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM