算符优先分析法研究--附源程序.doc

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算符优先分析法研究--附源程序

目 录 1 课程设计的目的和要求 2 1.1 课程设计的目的 2 1.2 课程设计的要求 2 2 系统描述 2 2.1 自底向上分析方法的描述: 2 2.2 算符优先文法的描述: 2 3)输入符号串,进行移进-规约分析。 3 3 概要设计 3 3.1 设计思路 3 3.2 系统功能结构 4 3.3 技术路线或实现方法 5 3.4 开发环境 5 4 详细设计 5 4.1 模块划分 5 4.2 主要算法的流程图 7 4.3 数据分析与定义 8 4.4 系统界面设计 8 5 测试方法和测试结果 9 5.1 测试用例1 9 5.2 测试用例2 10 5.3 测试用例3 11 5.4 测试用例4 12 6 结论和展望 13 结论 13 展望 13 学习编译技术课程的体会和对本门课程的评价 13 7 参考文献 13 8 源代码 14 1 课程设计的目的和要求 1.1 课程设计的目的 本次设计的时间为1周,目的是通过使用高级语言实现部分算法加强对编译技术和理论的理解。设计的题目要求具有一定的规模,应涵盖本课程内容和实际应用相关的主要技术。 1.2 课程设计的要求 1、文法使用产生式来定义; 2、用大写字母和小写字母分别表示非终结符和终结符;产生式使用-; 3、文法中的空字符串统一使用@表示; 4、分别给出每一个非终结符的FIRSTVT集和LASTVT集; 5、画出算符优先关系表 6、判定给定的文法是否是算符优先文法; 7、给定符号串判定是否是文法中的句子,分析过程用分析表格的方式打印出来。 2 系统描述 本次实验使用windowvisual C++6.0平台,利用,S-#E# E-E+T E-T T-T*F T-F F-P/F F-P P-(E) P-i 利用算符优先文法分析过程处理如下: 1)计算给定文法中任意两个终结符对(a,b)之间的优先关系,首先计算两个集合 FIRSTVT(B)={b|B-b…或B-Cb…} LASTVT(B)={a|B-…a…aC} 表2-1 FIRSTVT集和LASTVT集   S E  T  F  P   FIRSTVT # +*/i(  */i(  /i(  i(   LASTVT  # +*/i)  */i)  /i)  i)  2)计算三种优先关系,求出算符优先关系表: 表2-2算符优先关系表 + * / i ( ) # + ﹒﹥ ﹤﹒ ﹤﹒ ﹤﹒ ﹤﹒ ﹒﹥ ﹒﹥ * ﹒﹥ ﹒﹥ ﹤﹒ ﹤﹒ ﹤﹒ ﹒﹥ ﹒﹥ / ﹒﹥ ﹒﹥ ﹤﹒ ﹤﹒ ﹤﹒ ﹒﹥ ﹒﹥ I ﹒﹥ ﹒﹥ ﹒﹥ ﹒﹥ ﹒﹥ ( ﹤﹒ ﹤﹒ ﹤﹒ ﹤﹒ ﹤﹒ ﹦﹒ ) ﹒﹥ ﹒﹥ ﹒﹥ ﹒﹥ ﹒﹥ # ﹤﹒ ﹤﹒ ﹤﹒ ﹤﹒ ﹤﹒ ﹦﹒ 3)输入符号串,进行移进-规约分析。 3 概要设计 3.1 设计思路 1)首先在源程序相同的目录下创建一个txt文档,并在文档中输入待分析的文法。然后定义一个输入流文件,调用这个流文件中的open函数打开该txt文件,再定义一个二维数组通过循环接收读入的产生式。 2)接着开始构造FIRSTVT、LASTVT、算符优先关系表。在构造表的时候首先定义了两个重要的结构体。一个结构体作为存放具有一定关系的一对非终结符和终结符,另一个结构体作为存放上述元素的栈,包括栈顶指针、栈底指针、栈的长度。既然定义了栈,就存在对栈的初始化、栈是否为空的判断、入栈、出栈操作,利用循环和指针的操作来定义这些函数,以完成元素的进栈和弹出。 定义了这两个结构体,就可以用来构造FIRSTVT、LASTVT、算符优先关系表。在构造FIRSTVT表时,通过循环找出每条产生式中的非终结符的FIRSTVT集,并把该非终结符和终结符压栈,设置标志位,标志一对非终结符和终结符具有对应关系。LASTVT表的构造则是将求FIRSTVT的过程翻转过来,可以仅仅将函数中的参数稍作修改就能够完成。 3)构造算符优先关系表。算符优先关系表是一个二维数组,用来存放任意两个终结符之间的优先关系。首先构造表头,通过扫描所有产生式将终结符不重复的存放在一个一维数组中并置为优先关系表的行和列,并将优先关系表其他内容全部初始化为空。接着遍历所有产生式,找出任意两个终结符之间存在的关系(可以没有关系),并判断任意两终结符是否至多存在一种优先关系,如发现优先关系表不为空,则证明该文法不是算符优先文法,否则,将相应的关系填入到相应的行列对应的单元中。 4)输入串分析过程的设计。首先将大于、小于、等于和无关系分别定义成一种类型的数据表示,通过查询符号栈栈顶以及当前符号之间的优先关系来判断移进和规约的操作。 3.2 系统功能结构 图-1 系统功能结构图Main()函数:调用主函

文档评论(0)

2017meng + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档