匹配:当XVT时它与a进行匹配,其结果可能成功,也可能失败,如果成功则符号栈中将X退栈并将输入流指针向前移动一位,否则报错。接受:当格局为(,空)时报告分析成功。报错:出错后,停止分析。并给出相应的错误提示信息。
2、实验内容
根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL(1)分析法的理解。
对下列文法,用LL(1)分析法对任意输入的符号串进行分析:(1)ETG(2)GTG(3)Gε(4)TFS(5)SFS(6)Sε(7)FE(8)Fi程序输入一以结束的符号串包括()i,如:iii。
三、实验过程及步骤
1
总体思路分析及流程图
给定一个正规文法G,在LL1预测分析中,必须先求出First集和Follow集,构造预测分析表。求出预测分析表之后,再输入一个字符串,依据LL1分析表单步输出字符串的分析过程。
f读取正规文法
求文法的First集
求文法的Follow集
求文法的Select集
键盘输入字符串(1)主程序流程图
字符串分析功能模块分解图
f开始输入文法
判断文法是否为LL1文法
Y
N
构造预测分析表
输入要分析的符号串
出错处理
N
判断该符号串是否可被该文法识别
Y
提示iii为可接受的字符
串
出错处理
结束
(2)核心算法流程图1计算非终结符的First集的算法及流程:First集合的构造算法:(1)若X∈VT,则First(X)X。(2)若X∈VN,且有产生式X→a……,则把a加入到FirstX中;若X→ε也是一条产生式,则把ε也加到FirstX中。(3)若X→Y……是一个产生式且Y∈VN,则把FirstY中的所有非ε元素都加到FirstX中;若X→Y1Y2…Yk是一个产生式,Y1,…,Yi1都是非终结符,而且,对于任何j,1≤j≤i1,FirstYj都含有ε(即Y1…Yi1ε),则把FirstYj中的所有非ε元素都加到FirstX中;特别是,若所有的FirstYj均含有ε,j12…,k,则把ε加到FirstX中。连续使用上面的规则,直至每个集合First不再增大为止。
f开始
添加一个删除空的标志为true
读取一个非终结符V
遍历所有产生式,查找左部是V的产生式
取出得到的一条产生式
V是不是有推导规则V空
产生式右部第一个符号V是终结符?
将该终结符V加入V的First集
中
删除空,得到V的First集
空标志为真剩有非终结符?
结束
2计算非终结符的Follow集:Follow集合的具体构造算法如下:(1)对于文法的开始符号S,置于FollowS中;(2)若A→αBβ是一个产生式,则把Firstβε加至FollowB中;(3)若A→αB是一个产生式,或Ar