编译原理实验三

上传人:汽*** 文档编号:489159932 上传时间:2022-11-06 格式:DOCX 页数:19 大小:47.59KB
返回 下载 相关 举报
编译原理实验三_第1页
第1页 / 共19页
编译原理实验三_第2页
第2页 / 共19页
编译原理实验三_第3页
第3页 / 共19页
编译原理实验三_第4页
第4页 / 共19页
编译原理实验三_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《编译原理实验三》由会员分享,可在线阅读,更多相关《编译原理实验三(19页珍藏版)》请在金锄头文库上搜索。

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

2、代表的表达式的 值。属性文法的定义可参照书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+-*/()#ETF0S5S41231S6S12a

3、cc2R3R3S7S13R3R33R6R6R6R6R6R64S5S48235R8R8R8R8R8R86S5S4937S5S4108S6R12S119R1R1S7S13R1R110R4R4R4R4R4R411R7R7R7R7R7R712S5S414313S5S41514R2R2S7S13R2R215R5R5R5R5R5R5五、处理程序例和处理结果例示例1: 20133191*(20133191+3191)+ 3191#20133191*(20133191+3191)+3191#步骤状态栈符号栈值栈当前词动作转向10020133191205#20133191020133191*RS33030201

4、33191本R62402#T020133191半S750270201331910CS460274#T*(0201331910020133191S5702745#T+(201331910201331910020133191+R338027430201331910020133191十肪2g02742#T*(T0201331910020133191亠R3S1002748#T*(E0201331910020133191+S611027486m(E+020133191002013319103191S5120274865#T*(E+3191020133191002013319103191)RS120274

5、863#T*(E+F020132191002013219102191)R6g140274869#T*(E+T020133191002013319103191)R1s1502748#T*(E02013319100201363S2)Sil160274811#T*(E)02013319100201363S204-R7101702710#T*F0201331910201363S24-R421802虹0-928149070十R311901#E0-928149070+S&200160-92814907003191S5210165#E+31910-928U907003191R83220163竝十F0-928

6、14907003191R&g230169#E+T0-92814907003191R1124010-928M5879岸分析成功!结果为:-928145879六、源代码【cifa.h】/cifa.h #includevstring 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);

7、string concat(string str); 【Table.action.h】 /table_action.h class Table_action int row_num,line_num;int lineName8;string tableData168;public:Table_action() row_num=16; line_num=8; lineName0=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;elsereturn;int getLineNumber(int lineN)for(int i=0;iline_num;i+)if(lineNamei=lineN)return i;return -1;【Table_go.h】/table_go.hc

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

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

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