编译原理实验三-自下而上语法及语义.x探析.doc

编译原理实验三-自下而上语法及语义.x探析.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
上海电力学院 编译原理 课程实验报告 实验名称: 实验三 自下而上语法分析及语义分析 院  系:  计算机科学与技术学院  专业年级:  学生姓名:  学号: 指导老师: 实验日期: 实验三自上而下的语法分析 一、实验目的: 通过本实验掌握LR分析器的构造过程,并根据语法制导翻译,掌握属性文法的自下而上计算的过程。 二、实验学时: 4学时。 三、实验内容 根据给出的简单表达式的语法构成规则(见五),编制LR分析程序,要求能对用给定的语法规则书写的源程序进行语法分析和语义分析。 对于正确的表达式,给出表达式的值。 对于错误的表达式,给出出错位置。 四、实验方法 采用LR分析法。 首先给出S-属性文法的定义(为简便起见,每个文法符号只设置一个综合属性,即该文法符号所代表的表达式的值。属性文法的定义可参照书137页表6.1),并将其改造成用LR分析实现时的语义分析动作(可参照书145页表6.5)。 接下来给出LR分析表。 然后程序的具体实现: LR分析表可用二维数组(或其他)实现。 添加一个val栈作为语义分析实现的工具。 编写总控程序,实现语法分析和语义分析的过程。 注:对于整数的识别可以借助实验1。 五、文法定义 简单的表达式文法如下: (1)E-E+T (2)E-E-T (3)E-T (4)T-T*F (5)T-T/F (6)T-F (7)F-(E) (8)F-i 状态 ACTION(动作) GOTO(转换) i + - * / ( ) # E T F 0 S5 S4 1 2 3 1 S6 S12 acc 2 R3 R3 S7 S13 R3 R3 3 R6 R6 R6 R6 R6 R6 4 S5 S4 8 2 3 5 R8 R8 R8 R8 R8 R8 6 S5 S4 9 3 7 S5 S4 10 8 S6 R12 S11 9 R1 R1 S7 S13 R1 R1 10 R4 R4 R4 R4 R4 R4 11 R7 R7 R7 R7 R7 R7 12 S5 S4 14 3 13 S5 S4 15 14 R2 R2 S7 S13 R2 R2 15 R5 R5 R5 R5 R5 R5 处理程序例和处理结果例 示例13191)+ 3191# 六、源代码 【cifa.h】 //cifa.h #includestring using namespace std; //单词结构定义 struct WordType{ int code; string pro; }; //函数声明 WordType get_w(); void getch(); void getBC(); bool isLetter(); bool isDigit(); void retract(); int Reserve(string str); string concat(string str); 【Table.action.h】 //table_action.h class Table_action { int row_num,line_num; int lineName[8]; string tableData[16][8]; public: Table_action() { row_num=16; line_num=8; lineName[0]=30; lineName[1]=7; lineName[2]=13; lineName[3]=8; lineName[4]=14; lineName[5]=1; lineName[6]=2; lineName[7]=15; lineName[8]=0; for(int m=0;mrow_num;m++) for(int n=0;nline_num;n++) tableData[m][n]=; tableData[0][0]=S5; tableData[0][5]=S4; tableData[1][1]=S6; tableData[1][2]=S12; tableData[1][7]=acc; t

文档评论(0)

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

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档