编译原理学习笔记---自上而下分析
来源:互联网 发布:c语言从单数1加到100 编辑:程序博客网 时间:2024/06/05 00:32
语法分析---自上而下分析
面临的问题:
左递归性问题
例如:P→Pa
如果存在非终结符P含有左递归的文法将上述自上而下的分析过程陷入无限循环
回溯
???
LL(0)分析法
左递归的消除
P→Pα|β 改写为 P→βp’
P’→ α P’ |ε
消除左递归的做法:
把文法G的所有非终结符按人一种顺序排列成P1,P2……Pn,按此顺序执行;
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO i-1 DO
把形如Pi→Pjγ的规则改写成
Pi→δ1γ|δ2γ|………|δkγ。其中Pj→δ1|δ2|…….| δk是关于Pj的所有规则;
消除关于Pj规则的直接左递归性
END
化简由(2)所得的文法。即去除那些从开始符号出发永远无法到达的非终结符的产生规则。
(其实就是先展开再消除左递归)
消除回溯,提左因子
消除回溯的实质就是为了减少回溯所造成的不必要的资源浪费
方法有 提取公共左因子.
A→δβ1|δβ2|…………|δβn|γ1|γ2|………|γm
改写为:A→δ A’|γ1|γ2|………|γm
A’→ β1|β2|……|βn
LL(1)文法的判断:
文法不含有左递归
对于文法中的每一个非终结符A的各个产生式的候选首符集两两不相交。即,若
A→α1|α2|…….|αn
则 FIRST(αi) ∩ FIRST(αj) = Φ
对于文法中的每一个非终结符A,若它存在某个候选首符集包含ε,则FIRST(A) ∩ FOLLOW(A) = Φ
递归下降分析程序
预测分析程序:
预测分析表的构建:
首先求出各个非终结符的FIRST和FOLLOW。
对文法G的每个产生式A→α执行第二步和第三步;
对每个终结符a∈FIRST(α),把A→α加至M[A,a]中;
若ε∈FIRST(α),则对任何b∈FOLLOW(A)把A→α加至M[A,b]中;
把所有无定义的M[A,a]标上”出错标志“。
理解:
先求出各个非终结符号的FIRST和FOLLOW;
然后画数组,行为终结符,列为非终结符;
对应上下图可以看出:
先根据各个非终结符的FIRST填写数组
然后FIRST中含有ε的,根据其FOLLOW填写
然后利用分析表进行预测分析:
- 编译原理学习笔记---自上而下分析
- 编译原理笔记10 自上而下分析-预…
- 编译原理笔记11 自上而下分析-递…
- 【编译原理】自上而下的语法分析之预测分析法
- 编译原理 之 语法分析器(自上而下分析法)
- 编译原理笔记7 自上而下语法分析-…
- 编译原理笔记8 自上而下语法分析-…
- 编译原理笔记9 自上而下语法分析-…
- 编译原理,自上而下非递归语法分析自上而下的语法分析
- 编译原理学习笔记之词法分析
- 编译原理学习笔记 三 -- 词法分析
- 编译原理学习笔记
- 编译原理学习笔记
- 编译原理学习笔记
- 编译原理学习笔记
- 编译原理学习笔记
- 编译原理学习笔记
- 编译原理学习笔记
- Java1.7下的ConcurrentHashMap【简要总结】
- 并查集(Union-Find Set)模板
- tk库的使用
- 继原创保护功能开通之后,又开通赞赏功能
- postman测试post请求参数为json类型
- 编译原理学习笔记---自上而下分析
- 邮递员送信(letter)
- pico-ctf 2013 overflow-4
- 【Unity】【转】四元数(Quaternion)和旋转
- C语言--无类型指针
- 如何解决使用pypal库创建svg图表失败
- nginx+tomcat实现主备切换
- 从1到n整数中1出现的次数(Java实现)
- recvmsg和sendmsg函数