最新LL(1)语法分析程序实验报告.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《最新LL(1)语法分析程序实验报告.doc》由会员分享,可在线阅读,更多相关《最新LL(1)语法分析程序实验报告.doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品资料LL(1)语法分析程序实验报告.LL1实验报告1. 设计原理 所谓LL(1)分析法,就是指从左到右扫描输入串(源程序),同时采用最左推导,且对每次直接推导只需向前看一个输入符号,便可确定当前所应当选择的规则。实现LL(1)分析的程序又称为LL(1)分析程序或LL1(1)分析器。我们知道一个文法要能进行LL(1)分析,那么这个文法应该满足:无二义性,无左递归,无左公因子。当文法满足条件后,再分别构造文法每个非终结符的FIRST和FOLLOW集合,然后根据FIRST和FOLLOW集合构造LL(1)分析表,最后利用分析表,根据LL(1)语法分析构造一个分析器。LL(1)的语法分析程序包含了三
2、个部分,总控程序,预测分析表函数,先进先出的语法分析栈,本程序也是采用了同样的方法进行语法分析,该程序是采用了C+语言来编写,其逻辑结构图如下:LL(1)预测分析程序的总控程序在任何时候都是按STACK栈顶符号X和当前的输入符号a做哪种过程的。对于任何(X,a),总控程序每次都执行下述三种可能的动作之一:()若X = a =#,则宣布分析成功,停止分析过程。()若X = a #,则把X从STACK栈顶弹出,让a指向下一个输入符号。()若X是一个非终结符,则查看预测分析表M。若MA,a中存放着关于X的一个产生式,那么,首先把X弹出STACK栈顶,然后,把产生式的右部符号串按反序一一弹出STACK
3、栈(若右部符号为,则不推什么东西进STACK栈)。若MA,a中存放着“出错标志”,则调用出错诊断程序ERROR。事实上,LL(1)的分析是根据文法构造的,它反映了相应文法所定义的语言的固定特征,因此在LL(1)分析器中,实际上是以LL(1)分析表代替相应方法来进行分析的。2.分析LL ( 1) 分析表是一个二维表,它的表列符号是当前符号,包括文法所有的终结和自定义。的句子结束符号#,它的表行符号是可能在文法符号栈SYN中出现的所有符号,包括所有的非终结符,所有出现在产生式右侧且不在首位置的终结符, 自定义的句子结束符号#表项。为当前栈符号与当前符号匹配后,所要求的栈操作和输入操作。表项表明了文
4、法的终结符与非终结符是否可能相遇。其中 , 栈操作包括两种,一是弹栈;二是弹栈后,将符号串ABc反转后压栈;输 入 操作 包 括 两 种 ,一 是 读 入下一符号,是保持当前符号不变。具体的造算法为171。(1 )设 A , B 为文法的非终结符,C为文法的终结符和非终结符组成的字符串,a为文法的终结符将所 有 产 生式分为四类:6)A-aB,则(A,a )项填写为(B调向后压栈,读入下一个字符):(ii)A-a; A-a,则将A, a)项填写为(弹栈,读入下一个字符):(iii)A-BC,则将(A,select(A-BC)项全部填写为(将BC调向后压栈,保持当前字符不读入):(iv)A-N,
5、则将(A, follow(A)项全部填写为(弹栈,保持当前字符不读)。(2) 对表行和表列的所有字符进行循环;(3) 如果当前表行的字符是非终结符,它必有产生式,依据此产生式的类型,填写表项。(4) 如果当前表列的字符不在此产生式的选择集合中,该项填写为Eror。(5)对 (# ,#)项填写为OK;(6) 对当前表行字符为终结符的,只有它与表列字符相同时,才填写为(弹栈,读入下一个字符),否则填入Eror。有效?读入文法开始3.流程图是是LL(1)文法?结束报错判断句型是数据结构#includeiostream.h#include stdio.h#include malloc.h#includ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 LL 语法分析 程序 实验 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内