我对左递归和左保理这个话题不熟悉,请帮我确定这个语法是递归还是留下因素,如果是为什么呢?
S-> aAd | bBd | aBe | bAe | cA |的cB
答案 0 :(得分:0)
是左递归吗?答:不。
根据定义,“如果我们能找到一些非终端A,最终会得到一个以自身为左符号的句子形式,那么语法是左递归的。”
例如: 立即左递归发生在表单
的规则中A -> Aa | b
其中 a 和 b 是非终端和终端的序列, b 不以 A 开头
显然不是这样的情况:
S-> aAd | bBd | aBe | bAe | cA |的cB
是否留下了因素?答:是的。
根据定义,在左分解中,不清楚选择哪两种替代生产,扩展非终端。
当您有两个以相同终端/非终端开头的替代生产时,会出现这种歧义。 在你的情况下,我可以看到三个,两个替代路径:
S-> aAd | aBe
S-> bBd | bAe
S-> cA | cB
如果我删除左分解,则语法变为:
S-> aA'
A'-> Ad | Be
S-> bB'
B'-> Bd | Ae
S-> cC'
C'-> A | B
这个slide用更简单的词语解释了相同的内容