是什么区别Left Factoring
和Left Recursion
? 据我所知, Left factoring
是一种前瞻性的自上而下的分析技术。 但我感到困惑,当我听到这两个词。
Answer 1:
左保被去除出现在相同的非终端的两个产生的共同左因子。 这是为了避免解析器后面跟踪。 假设解析器具有前瞻,认为这例 -
A - > QB | QC
其中A,B,C都是非终端和q是一个句子。 在这种情况下,解析器会混淆这两个作品来供您选择,它可能必须备份跟踪。 左保理后,语法转换TO-
A - > qD的
d - > C | C
在这种情况下,具有前瞻解析器总是会选择合适的生产。
左递归是的情况下,当最左侧的非末端在生产的非末端的是非终端本身(直接左递归),或通过一些其它的非末端的定义,重写到非终端再次(间接左递归)。 考虑这些例子 -
(1)A - > AQ(直接)
(2)A - >贝乙 - >氩(间接)
左递归如果有解析器进行自上而下的分析被删除
Answer 2:
左保理是一种文法转换技术。 它由在“分解出”前缀,这些都是常见的两个或两个以上的制作。
例如,从去:
A→AB | 一个C
至:
A A→A'
A“→C | ç
左递归是一个属性语法具有每当你可以从一个给定的可变(非终端)导出RHS具有相同变量开始,在一个或多个步骤。
例如:
A→A中的
要么
A→B一
乙→A C
有给定的左递归语法,语法另一个是等效,不剩递归语法变换技术称为左递归 ,它提供产生的方法的消除 。
这两个词之间的关系/混乱可能是从事实得出结论说这两个转换技术可能需要能够得到的预测自上而下解析器之前被应用到的语法。
Answer 3:
这是我见过用这两个词的方式:
- 左递归:当一个或多个作品可以从自己达到无消耗在中间的标记。
- 左保:转型的过程中,从左递归形式转向语法为等效的非左递归形式。
Answer 4:
左因素:
让定的文法:A - > AB1 | AB2 | AB3
1)我们可以看出,对于每一个生产,有一个共同的前缀,如果我们在这里选择任何生产,没有确认,我们将不再需要原路返回。
2)它是不确定性的,因为我们不能选择任何生产和放心,我们一定会作出正确的分析树在我们所期望的字符串到达。 但如果我们重写的方式是确定的语法,也给我们留下足够的灵活性,将其转换成可以在不回溯任何字符串,这将是:
A - > AA 'A' - > B1 | B2 | B3
现在,如果我们被要求做字符串AB2解析树,现在我们不需要回追踪。 因为我们总是可以选择正确的产品时,我们得到了一个”因此,我们将生成正确的解析树。
左递归:
A - > AA | B给很显然,A的左孩子将永远是一个,如果我们选择的第一个生产,这是左递归。因为,A是通过自称一遍又一遍。 从这个语法生成的字符串是:BA *,因为这不能是一个语法......我们通过书面消除左递归:
A - > BA 'A' - > E | AA”现在我们不会离开递归,也可以生成BA *。
Answer 5:
左递归:文法是左如果它有一个非终结符号A使得有一个推导递归- >Aα| β其中α和β是终端和非终结点不与A开头的序列
在设计一个自上而下的解析器,如果左递归语法中的存在,那么解析器落在一个无限循环,在这里,因为A被试图匹配本身,这是不可能的。 我们可以通过重写违规生产消除上述左递归。 如-
A - >βA”
A ' - >αA' | 小量
左保理:左保需要消除语法不确定性。 假设一个文法,S - > ABS | ASB
这里,S是导出生产规则相同的终端a(对于s两个替代选择),它遵循非确定性。 我们可以重写生产推迟小号AS-的决定
的S - >为”
S” - > BS | 锑
因此,S”可以被替换为用于BS或Sb
Answer 6:
左递归:=当左手非终端是相同的右手非终端。 例如:A-> A&| B,其中与为α。 我们可以通过重写这个生产像左删除ricursion。
A-> BA” A ' - >&A' |€
左因素意味着productn不应该不确定性。 。 实施例:A - >&A |&B |&C