编译原理课程设计——算符优先分析法研究——附源程序

编译原理课程设计——算符优先分析法研究——附源程序

ID:22756983

大小:536.97 KB

页数:30页

时间:2018-10-31

编译原理课程设计——算符优先分析法研究——附源程序_第1页
编译原理课程设计——算符优先分析法研究——附源程序_第2页
编译原理课程设计——算符优先分析法研究——附源程序_第3页
编译原理课程设计——算符优先分析法研究——附源程序_第4页
编译原理课程设计——算符优先分析法研究——附源程序_第5页
资源描述:

《编译原理课程设计——算符优先分析法研究——附源程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、目录1课程设计的目的和要求21.1课程设计的目的21.2课程设计的要求22系统描述22.1自底向上分析方法的描述:22.2算符优先文法的描述:23)输入符号串,进行移进-规约分析。33概要设计33.1设计思路33.2系统功能结构43.3技术路线或实现方法53.4开发环境54详细设计54.1模块划分54.2主要算法的流程图74.3数据分析与定义84.4系统界面设计85测试方法和测试结果95.1测试用例195.2测试用例2105.3测试用例3115.4测试用例4126结论和展望13结论13展望13学习编译技术课程的

2、体会和对本门课程的评价137参考文献138源代码14111课程设计的目的和要求1.1课程设计的目的本次设计的时间为1周,目的是通过使用高级语言实现部分算法加强对编译技术和理论的理解。设计的题目要求具有一定的规模,应涵盖本课程内容和实际应用相关的主要技术。1.2课程设计的要求1、文法使用产生式来定义;2、用大写字母和小写字母分别表示非终结符和终结符;产生式使用->;3、文法中的空字符串统一使用@表示;4、分别给出每一个非终结符的FIRSTVT集和LASTVT集;5、画出算符优先关系表6、判定给定的文法是否是算符优

3、先文法;7、给定符号串判定是否是文法中的句子,分析过程用分析表格的方式打印出来。2系统描述本次实验使用windowsvista操作系统下visualC++6.0平台,使用C语言,利用读文件方式将待分析的文法读入到程序中,通过定义数组和结构体作为具有一定意义或关系的表或栈,存放FIRSTVT、LASTVT、算符优先关系表的元素。系统能够对由文件读入的文法进行分析,构造出FIRSTVT表和LASTVT表以及算符优先关系表。可以根据构造的优先关系表对输入的任意符号串进行分析,判断是否为本文法的句子,若是则打印规约过程

4、。结果显示到DOS界面上。2.1自底向上分析方法的描述:对输入的符号串自左向右进行扫描,并将输入符逐个移入栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时(该句柄对应某个产生式的右部),就用该产生式的左部非终结符代替相应右部的文法符号串,这一过程称为规约。重复这一过程,直到栈中只剩下文法的开始符则分析成功。2.2算符优先文法的描述:11只规定算符之间的优先关系,也就是说只考虑终结符之间的优先关系。由于算富有先分析不考虑非终结符之间的优先关系,在规约过程中只要找到最左素短语就可以规约。如给定一个文法G[S]

5、:S->#E#E->E+TE->TT->T*FT->FF->P/FF->PP->(E)P->i利用算符优先文法分析过程处理如下:1)计算给定文法中任意两个终结符对(a,b)之间的优先关系,首先计算两个集合FIRSTVT(B)={b

6、B->b…或B->Cb…}LASTVT(B)={a

7、B->…a或B->…aC}表2-1FIRSTVT集和LASTVT集 SE T F P  FIRSTVT#+*/i( */i( /i( i(  LASTVT #+*/i) */i) /i) i) 2)计算三种优先关系,求出算符优先关系

8、表:表2-2算符优先关系表+*/i()#+﹒﹥﹤﹒﹤﹒﹤﹒﹤﹒﹒﹥﹒﹥*﹒﹥﹒﹥﹤﹒﹤﹒﹤﹒﹒﹥﹒﹥/﹒﹥﹒﹥﹤﹒﹤﹒﹤﹒﹒﹥﹒﹥I﹒﹥﹒﹥﹒﹥﹒﹥﹒﹥(﹤﹒﹤﹒﹤﹒﹤﹒﹤﹒﹦﹒)﹒﹥﹒﹥﹒﹥﹒﹥﹒﹥#﹤﹒﹤﹒﹤﹒﹤﹒﹤﹒﹦﹒3)输入符号串,进行移进-规约分析。3概要设计3.1设计思路111)首先在源程序相同的目录下创建一个txt文档,并在文档中输入待分析的文法。然后定义一个输入流文件,调用这个流文件中的open函数打开该txt文件,再定义一个二维数组通过循环接收读入的产生式。2)接着开始构造FIRSTVT、L

9、ASTVT、算符优先关系表。在构造表的时候首先定义了两个重要的结构体。一个结构体作为存放具有一定关系的一对非终结符和终结符,另一个结构体作为存放上述元素的栈,包括栈顶指针、栈底指针、栈的长度。既然定义了栈,就存在对栈的初始化、栈是否为空的判断、入栈、出栈操作,利用循环和指针的操作来定义这些函数,以完成元素的进栈和弹出。定义了这两个结构体,就可以用来构造FIRSTVT、LASTVT、算符优先关系表。在构造FIRSTVT表时,通过循环找出每条产生式中的非终结符的FIRSTVT集,并把该非终结符和终结符压栈,设置标志

10、位,标志一对非终结符和终结符具有对应关系。LASTVT表的构造则是将求FIRSTVT的过程翻转过来,可以仅仅将函数中的参数稍作修改就能够完成。3)构造算符优先关系表。算符优先关系表是一个二维数组,用来存放任意两个终结符之间的优先关系。首先构造表头,通过扫描所有产生式将终结符不重复的存放在一个一维数组中并置为优先关系表的行和列,并将优先关系表其他内容全部初始化为空。接着遍历所有产生式,找

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

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

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