编译原理提高型实验报告.doc

编译原理提高型实验报告.doc

ID:49659318

大小:146.00 KB

页数:11页

时间:2020-03-03

编译原理提高型实验报告.doc_第1页
编译原理提高型实验报告.doc_第2页
编译原理提高型实验报告.doc_第3页
编译原理提高型实验报告.doc_第4页
编译原理提高型实验报告.doc_第5页
资源描述:

《编译原理提高型实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、黄冈师范学院提高型实验报告实验课题OPG分析程序的设计___(实验类型:□综合型□设计型□应用型)实验课程编译原理__实验时间2014年12月16日学生姓名专业班级学号OPG分析表和分析程序的设计实验目的和要求:通过设计、编写和调试构造优先关系表的程序,了解构造算符优先关系表的步骤以及对文法的要求,并能够从文法G出发自动生成算符优先关系表。实验原理分析(包括算法):设计一个自动构造优先关系表的程序,该程序的输入是算符文法G,输出的是相应的优先关系表,并指出是否为算符优先文法。(1)例如以下文法:E->T+E

2、TT->F*T

3、FF->F↑P

4、PP->(E)

5、i注:I为整型

6、常数后者为标识符表示的整型变量,使用中↑用**表示。(2)构造优先分析表的算法,构造优先分析表需以下几个步骤:①构造文法G中非终结符号的FIRSTVT集合FIRSTVT集合用一个布尔数组F[P,a]表示,F是一个m*n的二维数组(m=文法G中非终结符号个数,n=文法G中终结符号个数)。其中P∈VN,a∈VT,F[P,a]=TRUE的条件是当且仅当a∈FIRSTVT[P]。对于文法G的所有非终结符号,构造布尔数组F[P,a]的算法(该算法使用一个数据结构STACK栈,用于存放相应于F[P,a]=TRUE的符号对(P,a))。②构造文法G中非终结符号的LASTVT集合类似于

7、构造FIRSTVT集合,LASTVT集合用一个布尔数组L[P,a]表示,F是一个m*n的二维数组(m=文法G中非终结符号个数,n=文法G中终结符号个数)。其中P∈VN,a∈VT,L[P,a]=TRUE的条件是当且仅当a∈LASTVT[P]。对于文法G的所有非终结符号,构造布尔数组L[P,a]的算法(该算法使用一个数据结构STACK栈,用于存放相应于L[P,a]=TRUE的符号对(P,a))。③构造文法G的优先关系表使用文法G任何非终结符号的FIRSTVT集合和LASTVT集合,可以构造文法G的优先关系表。优先关系表用一个数组R[a,b]表示,R是一个n*n的二维数组(n

8、=文法G中终结符号个数)。其中a,b∈VT,R[a,b]=‘=’、‘<’、‘>’或空(可能为多值),表示终结符号对(a,b)之间具有“=”“<”“>”优先关系或无优先关系。④判断文法G是否为算符优先文法构造出文法G的算符优先表R[a,b]后,判别文法G是否为算符优先文法的算法。实验方案或步骤(流程图、主要数据结构、程序、小结)·OPG分析程序的设计·实验目的和要求:通过设计,编写和调试算符优先分析程序,了解算符优先分析器的组成结构以及对文法的要求,掌握实现通用算符优先分析算法的方法。·实验原理分析:程序流程图从键盘读取表达式NY成功结束读入字符串赋给数组str[]将’#

9、’压入数组array[]从数组str[]中读取一个字符aNa的优先关系大于数组array[]中的最后一个终结符Y将数组array[]中优先关系一样的字符规约为MN将a移近数组array[]Ysixeofarray[]==0结束算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“#”结尾)。如果输入串是句子,则输出“YES”,否则输出“NO”和错误信息。算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法就失去了作用。本题目给出文法的目的是为了便于对语法分析结果进行验证。(1)文法设算符优先文法G为:E→E+T

10、TT→T

11、*F

12、FF→P↑F

13、PP→(E)

14、i说明:i为整形常数或者为表示符表示整形变量;使用中↑用**表示。(2)优先关系表设优先关系表如下所示。+*↑i()#+><<<<>>*>><<<>>↑>><<<>>i>>>>>(<<<<<=)>>>>>#<<<<<=·实验方案或步骤输出移近——规约过程。源代码如下:#include#include#include#defineSIZE128charpriority[6][6];//算符优先关系表数组charinput[SIZE];//存放输入的要进行分析的句子charremai

15、n[SIZE];//存放剩余串charAnalyseStack[SIZE];//分析栈voidanalyse();inttestchar(charx);//判断字符X在算符优先关系表中的位置voidremainString();//移进时处理剩余字符串,即去掉剩余字符串第一个字符intk;voidinit()//构造算符优先关系表,并将其存入数组中{priority[0][0]='>';priority[0][1]='<';priority[0][2]='<';priority[0][3]='<';priority[0][4]='>';p

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

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

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