我对左递归和左因子分解这个话题不熟悉,请帮我确定这个语法是左递归还是左因子分解,如果是,那么为什么?
S-> aAd | bBd | aBe | bAe | cA | cB
左递归吗?回答:没有。
根据定义,"一个语法是左递归的,如果我们能找到一些非终结符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
这张幻灯片用更简单的话解释了相同的内容