这个语法是左递归还是因子



我对左递归和左因子分解这个话题不熟悉,请帮我确定这个语法是左递归还是左因子分解,如果是,那么为什么?

S-> aAd | bBd | aBe | bAe | cA | cB

左递归吗?回答:没有。

根据定义,"一个语法是左递归的,如果我们能找到一些非终结符A,它最终会得到一个句子形式,它自己作为左符号。"

的例子:直接左递归出现在

形式的规则中
A -> Aa | b
ab是非终结符和终结符的序列,且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

这张幻灯片用更简单的话解释了相同的内容

相关内容

  • 没有找到相关文章

最新更新