数学与软件科学学院 实验报告
学期: 2015 至 2016第 2 学期 2016 年 4 月 15 日
2013 5
课程名称: 编译原理 专业: 信息与计算科学 级 班
实验编号: 3 实验名称: LL(1)分析器 指导教师: 王开端
学生姓名: 李丹 学号: 2013060510 实验成绩:
实验三 LL(1)分析器
实验目的:
根据书本知识和查阅相关资料,设计一个LL(1)语法分析器。
实验内容:
利用所设计的LL(1)语法分析器判断输入串i+i*i 是否为文法G[E]的句子。文
法G[E]如下:
G[E]:
E TE'
E' TE'|
T FT'
T'*FT'|
F (E)|i
实验步骤:
1LL(1)分析法
LL(1)分析法又称预测分析法,是一种不带回溯的非递归自顶向下分析法。
LL(1)的含义是:第一个L 表明自顶向下分析是从左至右扫描输入串的;第二个
L “1”
表明分析过程中将用最左推导; 表明只需向右查看一个符号就可以决定如
何推导 (即可知用哪一个产生式进行推导)。
LL(1) 1
分析器结构如图 :
图1 LL(1)分析器
使用LL(1)分析法将会涉及到LL(1)分析表,而分析表又会涉及到FIRST 集
和FOLLOW 集。
2FIRST 集构造
X FIRST(X)
对文法中的每一个非终结符 构造 ,其方法是连续使用以下规则,
直到每个集合的FIRST 不再增大为止。
若有产生式X a...,且aVT ,则把a 加入到FIRST(X)中;若存在X ,
ε FIRST(X)
则将 也加入到 中。
若有X Y...且Y V ,则将FIRST(Y)中的所有非ε元素 (记为“\{ε}”)都
N
加入到FIRST(X)中;若有X YY ...Y ,且Y ~ Y 都是非终结符,而Y ~ Y 的候
1 2 K 1 i 1 i
Y
选式都有ε存在,则把FIRST( )(j 1,2,...i)的所有非ε元素都加入到FIRST(X)中;j
特别是当Y ~ Y 均含有ε产生式时,应把ε也加入到FIRST(X)中。
1 k
文法G[E]的FIRST 集如下:
1 FIRST(E’) {+,ε} FIRST(T’) {*,ε} FIRST(F) {(,i}
() ; ; ;
2 T F...和E T... FIRST(F)FIRST(T)FIRST(E)
( )由 知 ,即有
FIRST(T) FIRST(E) FIRST(F) {(,i};
3FOLLOW 集构造
对文法G[S]的每一个非终结符A 构造FOLLOW(A),其方法是连续使用以下
规则,直到每个集合的FOLLOW 不再增大为止。
对文法开始符号S,置#于FOL