编译原理实验LL(1)文法的判断及转换

编译原理实验LL(1)文法的判断及转换

ID:47466727

大小:81.81 KB

页数:12页

时间:2020-01-11

编译原理实验LL(1)文法的判断及转换_第1页
编译原理实验LL(1)文法的判断及转换_第2页
编译原理实验LL(1)文法的判断及转换_第3页
编译原理实验LL(1)文法的判断及转换_第4页
编译原理实验LL(1)文法的判断及转换_第5页
资源描述:

《编译原理实验LL(1)文法的判断及转换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、2016.11.30LL(1)文法的判断及转换11目录一、实验名称2二、实验目的2三、实验原理21、First集定义22、Follow集定义23、Select集定义34、含左递归文法3四、实验思路31、求非终结符是否能导出空32、求First集算法33、求Follow集算法34、求Select集算法4五、实验小结4六、附件41、源代码42、运行结果截图1011一、实验名称LL(1)文法的判断及转换二、实验目的输入:任意一个文法输出:(1)是否为LL(1)文法(2)若是,给出每条产生式的select集(3)若不是,看看是否含有左公共因子或者含有左递归,并用相应的方法将非LL(1)

2、文法变成LL(1)文法,并输出新文法中每条产生式的select集。三、实验原理1、First集定义令X为一个文法符号(终止符或非终止符)或ε,则集合First(X)有终止符组成,此外可能还有ε,它的定义如下:1. 若X是终止符或ε,则First(X)= {X}。2. 若X是非终结符,则对于每个产生式X—>X1X2…Xn,First(X)包含了First(X1)-{ε}。若对于某个i < n,所有的集合First(X1),... ,First(Xi)都包含了ε,则First(X)也包 括了First(Xi+1)- {ε}。若所有集合First(X1),...,First(Xn)都

3、包括了ε,则First(X)也包括了ε。2、Follow集定义给出一个非终结符A,那么集合Follow(A)则是由终结符组成,此外可能还含有#(#是题目约定的字符串结束符)。集合Follow(A)的定义如下:1.若A是开始符号,则#在Follow(A)中。2.若存在产生式B—>αAγ,则First(γ)-{ε}在Follow(A)中。3.若存在产生式B—>αAγ,且ε在First(γ)中,则Follow(A)包括Follow(B)。113、Select集定义对于产生式A—>α。集合select(A—>α)定义如下:1.若α不能推出ε,则select(A—>α)=first(α)

4、。2.若α能推出ε,则select(A—>α)=first(α)∪follow(A)。4、含左递归文法一个文法G,若存在P经过一次或多次推导得到Pa(即能推导出以P开头的式子),则称G是左递归的。  左递归分为直接左递归和间接左递归。  直接左递归经过一次推导就可以看出文法存在左递归,如P→Pa|b。  间接左递归侧需多次推导才可以看出文法存在左递归,如文法:S→Qc|c,Q→Rb|b,R→Sa|a有S=>Qc=>Rbc=>Sabc四、实验思路本次实验采用python完成。1、求非终结符是否能导出空a.第一轮扫描。当前的产生式还没被删除,非终结符lp可以导出空,将以该非终结符为

5、左部的产生式标记为要删除的。产生式右部分解,若该产生式右部包含终结符,删除该产生式因为由它不会导出空。判断没有被删除的产生式中是否还有以该非终结符为左部的产生式。b.第二轮扫描。逐一扫描每一条产生右部的每一个符号,循化直至每个非终结符的状态都确定下来。2、求First集算法存储每一个非终结符对应的First集,扫描每一条产生式,记录每一轮扫描是每个非终结符First集是否增大过。全部初始化为没有增大的状态,对于课本的五种类型依次求解,每次将结果加入对应的集合中,若一次扫描First集没有增大,则说明循环结束。3、求Follow集算法11存储每一个非终结符对应的Follow集,将

6、'#'加入文法的开始符号的Follow集合中,记录每一轮扫描是每个非终结符Follow集合是否增大过,全部初始化为没有增大的状态,扫描每一条产生式的右部,扫描到非终结符,判断在该非终结符之后的子串能否推导空,若该符号串可以推导出空,还要将Follow(lp)加入到里面。4、求Select集算法初始化每条产生式对应的Select集合为空,若产生式右部不能推导出空,则将右部的First集加入Select集,如果可以推出空,则需要同时将左部的Follow集合右部的First集去掉空的部分加入Select集。五、实验小结通过本次实验,知道了如何判断一个文法是不是LL(1)文法,同时对于

7、First、Follow以及Select集的求解原理变得更加熟悉,并且知道了如何用计算机语言求解First,Follow以及Select集。不足之处是,没有完成判断文法是否为左递归文法以及左递归文法的转换部分。六、附件1、源代码classGw:def__init__(self):withopen('Gw.txt')asf:content=f.readlines()content=[line.strip()forlineincontent]self.Vn=content[0].split(''

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。