这会让我的语法变得暧昧吗?

时间:2017-05-01 18:11:26

标签: context-free-grammar

好吧,假设我有以下语法

<Exp> ->  <Term>
<EXp>  -> <Term> {<AddOp> <Exp>}  
<Term> -> <Factor> {<MultOp> <Term>}
<Factor> -> <id> |  <no> | ( <Exp> )

{}内的东西是可选的。所以我在技术上可以只有exp-&gt; term或term-&gt; Factor。现在,以下推导是可能的,例如10号.exp-&gt; term-&gt; factor-&gt; no-&gt; 10 ..我可以只为exp添加no吗?

<Exp> ->  <Term>|<no>

或者这会使语法模糊或出现其他问题吗?感谢。

P.s Addop和MultOp只是+和*

1 个答案:

答案 0 :(得分:0)

您的初始语法已经含糊不清:<Exp>以两种不同的方式派生<Term>,通过制作1和制作2.制作1不会在语法中添加任何内容,因此您可以只需删除它,你就可以得到同一种语言的明确语法。

但是,如果您添加了作品<Exp> -> <no>,您将再次获得含糊不清的语法,因为<Exp>将以两种不同的方式派生<no>。您已经展示的第一种方式,第二种方式是新产品的简单应用。