编译原理实验三-自下而上语法分析及语义分析.x.doc
《编译原理实验三-自下而上语法分析及语义分析.x.doc》由会员分享,可在线阅读,更多相关《编译原理实验三-自下而上语法分析及语义分析.x.doc(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+-*/()#ETF0S5
3、S41231S6S12acc2R3R3S7S13R3R33R6R6R6R6R6R64S5S48235R8R8R8R8R8R86S5S4937S5S4108S6R12S119R1R1S7S13R1R110R4R4R4R4R4R411R7R7R7R7R7R712S5S414313S5S41514R2R2S7S13R2R215R5R5R5R5R5R5五、 处理程序例和处理结果例 例如1:2*(+3191)+ 3191#六、源代码【cifa.h】/cifa.h#includeusing namespace std;/单词结构定义struct WordTypeint code;string pro;/函
4、数声明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;lineName0=3
5、0;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_go.h】
6、/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;n=0&rowrow_num&line=line_num)return tableDatarowline;elsereturn -1;int getLineNumber(string lineNa)for(
7、int i=0;iline_num;i+)if(lineNamei=lineNa)return i;return -1;【Stack_num.h】class Stack_numint i; /栈顶标记int *data; /栈结构public:Stack_num() /构造函数 data=new int100;i=-1;int push(int m) /进栈操作 i+;datai=m;return i;int pop() /出栈操作i-;return datai+1;int getTop() /返回栈顶return datai;Stack_num() /析构函数delete data;int
8、topNumber()return i;void outStack()for(int m=0;m=i;m+)coutdatam;【Stack_str.h】class Stack_strint i; /栈顶标记string *data; /栈结构public:Stack_str() /构造函数 data=new string50;i=-1;int push(string m) /进栈操作 i+;datai=m;return i;int pop() /出栈操作datai=;i-;return i;string getTop() /返回栈顶return datai;Stack_str() /析构函数
9、delete data;int topNumber()return i;void outStack()for(int m=0;m=i;m+)coutdatam;【cifa.cpp】/cifa.cpp#include#include#includecifa.husing namespace std;/关键字表和对应的编码string codestring10=main,int,if,then,else,return,void,cout,endl;int codebook10=26,21,22,23,24,25,27,28,29;/全局变量char ch;int flag=0;/*/主函数int
10、main()WordType word;cout请输入源程序序列:;word=get_w(); while(word.pro!=#)/#为自己设置的结束标志cout(word.code,“word.pro) wordtmp.code=9;wordtmp.pro=;else if(ch=) wordtmp.code=10;wordtmp.pro=a&ch=A&ch=0&ch=9)return true;else return false;string concat(string str)return str+ch;void retract()flag=1;int Reserve(string s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 自下而上 语法分析 语义 分析
限制150内