编译原理实验三-自下而上语法分析及语义分析.docx

上传人:F****n 文档编号:99618373 上传时间:2019-09-20 格式:DOC 页数:17 大小:525.50KB
返回 下载 相关 举报
编译原理实验三-自下而上语法分析及语义分析.docx_第1页
第1页 / 共17页
编译原理实验三-自下而上语法分析及语义分析.docx_第2页
第2页 / 共17页
编译原理实验三-自下而上语法分析及语义分析.docx_第3页
第3页 / 共17页
编译原理实验三-自下而上语法分析及语义分析.docx_第4页
第4页 / 共17页
编译原理实验三-自下而上语法分析及语义分析.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《编译原理实验三-自下而上语法分析及语义分析.docx》由会员分享,可在线阅读,更多相关《编译原理实验三-自下而上语法分析及语义分析.docx(17页珍藏版)》请在金锄头文库上搜索。

1、上海电力学院编译原理课程实验报告 实验名称: 实验三 自下而上语法分析及语义分析 院系: 计算机科学与技术学院 专业年级: 学生姓名: 学号: 指导老师: 实验日期: 实验三自上而下的语法分析 一、实验目的: 通过本实验掌握LR分析器的构造过程,并根据语法制导翻译,掌握属性文法的自下而上计算的过程。 二、实验学时: 4学时。 三、实验内容 根据给出的简单表达式的语法构成规则(见五),编制LR分析程序,要求能对用给定的语法规则书写的源程序进行语法分析和语义分析。对于正确的表达式,给出表达式的值。对于错误的表达式,给出出错位置。四、实验方法 采用LR分析法。首先给出S-属性文法的定义(为简便起见,

2、每个文法符号只设置一个综合属性,即该文法符号所代表的表达式的值。属性文法的定义可参照书137页表6.1),并将其改造成用LR分析实现时的语义分析动作(可参照书145页表6.5)。接下来给出LR分析表。然后程序的具体实现: l LR分析表可用二维数组(或其他)实现。l 添加一个val栈作为语义分析实现的工具。l 编写总控程序,实现语法分析和语义分析的过程。注:对于整数的识别可以借助实验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+-*/()#

3、ETF0S5S41231S6S12acc2R3R3S7S13R3R33R6R6R6R6R6R64S5S48235R8R8R8R8R8R86S5S4937S5S4108S6R12S119R1R1S7S13R1R110R4R4R4R4R4R411R7R7R7R7R7R712S5S414313S5S41514R2R2S7S13R2R215R5R5R5R5R5R55、 处理程序例和处理结果例 示例1:*(+3191)+ 3191#六、源代码【cifa.h】/cifa.h#includeusing namespace std;/单词结构定义struct WordTypeint code;string p

4、ro;/函数声明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.hclass Table_actionint row_num,line_num;int lineName8;string tableData168;public:Table_action()row_num=16;line_num=8;lineNa

5、me0=30;lineName1=7;lineName2=13;lineName3=8;lineName4=14;lineName5=1;lineName6=2;lineName7=15;lineName8=0;for(int m=0;mrow_num;m+)for(int n=0;n=0&row=0&line=line_num)return tableDatarowline;else return;int getLineNumber(int lineN)for(int i=0;iline_num;i+)if(lineNamei=lineN)return i;return -1;【Table_

6、go.h】/table_go.hclass Table_goint row_num,line_num;/行数、列数string lineName3;int tableData163;public:Table_go()row_num=16;line_num=3;lineName0=E;lineName1=T;lineName2=F;for(int m=0;mrow_num;m+)for(int n=0;nline_num;n+)tableDatamn=0;tableData00=1;tableData01=2;tableData02=3;tableData40=8;tableData41=2;tableData42=3;tableData61=9;tableData62=3;tableData72=10;tableData121=14;tableData122=3;tableData132=15;int getCell(int rowN,string lineNa)int row=rowN;int line=getLineNumber(lineNa);if(ro

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号