好吧,假设我有以下语法
<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只是+和*
答案 0 :(得分:0)
您的初始语法已经含糊不清:<Exp>
以两种不同的方式派生<Term>
,通过制作1和制作2.制作1不会在语法中添加任何内容,因此您可以只需删除它,你就可以得到同一种语言的明确语法。
但是,如果您添加了作品<Exp> -> <no>
,您将再次获得含糊不清的语法,因为<Exp>
将以两种不同的方式派生<no>
。您已经展示的第一种方式,第二种方式是新产品的简单应用。