导航:首页 > 源码编译 > 左递归消除编译原理

左递归消除编译原理

发布时间:2025-02-21 13:08:07

❶ 【编译原理】自顶向下LL(1)分析中,消除左递归和提取左因子的目的是什么

通常LL(1) 是以函数递归调用来实现的
如文法: A -> A + a | a
代码实现则为:
function A()
{
A();
match('+');
Term(a);
}
这样你可以看得出死循环了吧...?
将文法消除左递归后
A -> aA'
A' -> +aA'
则可以避免这一问题
提出公因式 就像楼上说的一样,避免程序回溯,消除二义性.
楼上高手啊,求搞基.

❷ 编译原理 G[S]: S::=a|b|(T) T::=T,S|S怎么消去左递归

T::=T,S|S 转化为以下两个式子
T::=SK
K::=,SK|空
这样就消除左递归了~
不懂的可以继续问我~

❸ 编译原理的消除左递归是怎么回事啊

如果一个CFG像这样
A -> Ab
A -> e

就是有左递归,语法分析里的递归下降法和LL(1)就不能处理啦,因为程序会陷入递归而无法前进。
而CFG
A -> bA'
A' -> bA'|e
和前面一个表达的语言是一样的,但所有语法的第一项都是终结符,就消除了左递归。

有消除左递归的算法,一般编译原理书上会有介绍,不是很复杂。

❹ 编译原理左递归消除

这些题很难啊!!!
都有间接左递归。要先变成直接左递归,然后消除掉。
--------------------
G3.1
S->SA|Ab|b|c
A->Bc|a
B->Sb|b
--------------------
间接左递归转直接左递归
B代入A:A ->(Sb|b)c|a -> Sbc|bc|a
A代入S:S -> S(Sbc|bc|a)|(Sbc|bc|a)b|b|c -> SSbc|Sbc|Sa|Sbcb|bcb|ab|b|c
消除直接左递归
S->bcbS'|abS'|bS'|cS'
S'->SbcS'|bcS'|aS'|bcbS'|ε
S'还是有直接左递归,继续消除
S'->bcS'T|aS'T|bcbS'T
T->bcS'T|ε
最后,这题答案就是S,S',T的产生式

--------------------
下面两题更难了,上一题反复代入还能把其他非终结符消掉,下面两个文法都是最后代入还剩下两个非终结符反复迭代,佛了!
G3.2
E->ET+|T

T->TF*|F

F->E|i
--------------------
F代入T: T->T(E|i)*|(E|i)->TE*|Ti*|E|i
T代入E:

--------------------
G3.3
S->V_1

V_1->V_2|V_1 2 V_2

V_2->V_3|V_2 + V_3
V_3->V_1 * |(
这些字母我都不认识了,换一下
S->A|SiA
A->B|A+B
B->S*|(
--------------------
B代入A:A->(S*|()|A+(S*|()->S*|(|A+S*|A+(
A代入S:

--------------------

❺ 编译原理中的左递归

1.A->Aa
2.A->Ba
B->Ab (A和B属于非终结符,a和b属于终结符)

通俗点讲:左递归就是情况1所说的“->”两边都含有同一个非终结符;
情况2所说的A->Ba中“->”后面的B 与 B->Ab中“->”前面的B是相同的非终结符
这两种情况就叫作左递归。

阅读全文

与左递归消除编译原理相关的资料

热点内容
php注册判断 浏览:652
我的世界服务器名称和地址 浏览:145
将军不听元帅命令出关 浏览:136
linuxawk命令 浏览:986
三菱plc编程软件gxdevelop 浏览:402
php从入门到精通光盘下载 浏览:924
不能表示算法的是什么 浏览:139
读卡器在文件夹怎么查看照片 浏览:804
程序员是属于哪个部门管理 浏览:617
交换机命令be 浏览:332
存储压缩加密技术情况 浏览:504
知名的可编程步进电机驱动器工厂 浏览:184
银行卡信息加密想取消 浏览:219
程序员唱可爱 浏览:824
除了移动花卡怎么更改定向app 浏览:326
python多线程java 浏览:255
2021程序员笔记本r5 浏览:662
算法监管的要点在于 浏览:895
长安s460压缩机 浏览:246
php访问符 浏览:142