- .
LL1 实验报告
1.设计原理
所谓 LL〔1〕分析法,就是指从左到右扫描输入串〔源程序〕,同时采用最左推导,
且对每次直接推导只需向前看一个输入符号,便可确定当前所应中选择的规那么。实现
LL〔1〕分析的程序又称为 LL〔1〕分析程序或 LL1〔1〕分析器。
我们知道一个文法要能进展 LL〔1〕分析,那么这个文法应该满足:无二义性,无左
递归,无左公因子。当文法满足条件后,再分别构造文法每个非终结符的 FIRST 和
FOLLOW 集合,然后根据 FIRST 和 FOLLOW 集合构造 LL〔1〕分析表,最后利用分析表,
根据 LL(1)语法分析构造一个分析器。LL〔1〕的语法分析程序包含了三个局部,总控程序,
预测分析表函数,先进先出的语法分析栈,本程序也是采用了同样的方法进展语法分析,
该程序是采用了 C++语言来编写,其逻辑构造图如下:
LL〔1〕预测分析程序的总控程序在任何时候都是按 STACK 栈顶符号 X 和当前的输入
符号 a 做哪种过程的。对于任何〔X,a〕,总控程序每次都执行下述三种可能的动作之一:
〔1〕假设 X = a =‘#’,那么宣布分析成功,停顿分析过程。
〔2〕假设 X = a ‘#’,那么把 X 从 STACK 栈顶弹出,让 a 指向下一个输入符号。
〔3〕假设 X 是一个非终结符,那么查看预测分析表 M。假设 M[A,a]中存放着关于
X 的一个产生式,那么,首先把 X 弹出 STACK 栈顶,然后,把产生式的右部符号串按反
序一一弹出 STACK 栈〔假设右部符号为 ε,那么不推什么东西进 STACK 栈〕。假设
M[A,a]中存放着“出错标志〞,那么调用出错诊断程序 ERROR。
事实上,LL〔1〕的分析是根据文法构造的,它反映了相应文法所定义的语言的固定
特征,因此在 LL〔1〕分析器中,实际上是以 LL〔1〕分析表代替相应方法来进展分析的。
2.分析
LL ( 1) 分析表是一个二维表,它的表列符号是当前符号,包括文法所有的终结
和自定义。
的句子完毕符号#,它的表行符号是可能在文法符号栈 SYN 中出现的所有符号,
包括所有的非终结符,所有出现在产生式右侧且不在首位置的终结符, 自定义
的句子完毕符号#表项。
为当前栈符号与当前符号匹配后,所要求的栈操作和输入操作。表项说明了文
法的终结符与非终结符是否可能相遇。其中 , 栈操作包括两种,一是弹栈 ;二
是弹栈后,将符号串 ABc 反转后压栈;输 入 操作 包 括 两 种 ,一 是 读 入下
一符号,是保持当前符号不变。
- . 可修编.