【编译原理】自上而下的语法分析之预测分析法
来源:互联网 发布:家庭记账软件免费版 编辑:程序博客网 时间:2024/05/17 05:57
最近学习了LL(1)文法的预测分析法,这种方法不同于递归下降分析法,可直观通过栈查看语法分析过程,现总结如下.
1. 定义
第一个L表示从左到右扫描输入串,第二个L表示最左推导,1表示每步只需向前看一个符号。
定理:若满足以下条件,则B N F中的文法就是LL(1)文法:
1. 在每个产生式A→a1 | a2 | . . . |an 中,对于所有的i 和j:1≤i,j≤n,i≠j,First (ai )与First (aj )交集为空。
2. 若对于每个非终结符A都有First (A) 包含了ε,那么First (A)与Follow (A)交集为空。
使用预测分析法需要首先构造预测分析表,构造之前需要构造文法的First集与Follow集, 其定义如下:
(1) First定义:
令X为一个文法符号(可以是terminal也可以是nonterminal)或ε,
则集合First(X)由terminal组成,此外可能还有ε,它的定义如下:
1.若X是terminal或ε,则First(X)={X}。
2 若X是nonterminal,则对每个产生式X—>X1X2.....Xn,
First(X)都包含了First(X1)-{ε}。
若对于某个i<n,所有的First(X1)......First(Xi)都包含了ε,则First(X)也包含了Fitst(X(i+1))-{ε}.
若所有First(Xi)都包含ε,则First(X)也包含ε,(如果X—>ε,很显然,此时First(X)包含了ε)
3.求任意串的First,这种情况一般是求某个产生式的候选式a的First(a),
先假设a=X1X2....Xn。则First(a)定义为:First(a)包含了First(X1)-{ε},
若对于每个i=2,3,。。。n。有k=1,2,。。。i-1,First(Xk)都包含ε,
则First(a)就包含了First(Xi)-{ε},
最后,如果对于所有的i=1,2,...... First(Xi)都包含ε,则First(a)也包含ε.
(2) Follow定义:
给出一个非终结符(non-terminal)A,那么集合Follow(A)则是由终结符(terminal)组成,此外可能还有$,
集合Follow(A)定义如下:
1 若A是开始符号,则$就在Follow(A)中。
2 若存在产生式B->aAy,则First(y)-{ε}在Follow(A)中
3 若存在产生式B->aAy,且ε在First(y)中,则Follow(A)也包含Follow(B)
(3) 预测分析表构造
LL(1) 分析表M[N, T] 的构造:为每个非终结符A和产生式A→a 重复以下两个步骤:
1) 对于First (a)中的每个记号a,都将A→a添加到项目M [A, a]中.
2) 若在First (a)中,则对于Follow (A) 的每个元素a(记号或是$),都将A→a 添加到M[A, a]中。
3. 预测分析法
4. 例子
- 【编译原理】自上而下的语法分析之预测分析法
- 自上而下的语法分析方法之预测分析
- 编译原理,自上而下非递归语法分析自上而下的语法分析
- 自上而下的语法分析(递归下降法,LL(1)预测分析法,预测分析表)
- 预测分析法进行语法分析(编译原理)
- 【编译原理】自下而上的语法分析之LR分析法
- 编译原理 之 语法分析器(自上而下分析法)
- 语法分析:自上而下分析
- 编译原理实验二——语法分析(预测分析)
- 语法分析 预测分析法
- 编译原理实习(应用预测分析法LL(1)实现语法分析)
- 编译原理笔记7 自上而下语法分析-…
- 编译原理笔记8 自上而下语法分析-…
- 编译原理笔记9 自上而下语法分析-…
- 编译原理之词法分析和语法分析
- 编译原理之词法分析和语法分析
- 【编译原理】自顶向下的语法分析之递归下降分析法
- 编译原理之语法分析
- 题目1 : 最长回文子串
- ACRush 楼天成 回忆录
- 通过量产解决U盘写保护,无法格式化问题
- Platform Devices and Drivers
- HDU 4111 Alice and Bob 记忆化搜索
- 【编译原理】自上而下的语法分析之预测分析法
- 数据类型整理
- Advanced Fruits
- jquery easyui的使用
- PAT循环-06. 统计一行文本的单词个数(15)
- UVALive 6342 The Mirror of Galadriel (回文串)
- OCP 1Z0 053 98
- KMP专题小结
- 多元线性回归模型和最小二乘法