2022年编译原理实验三-自下而上语法分析及语义分析 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年编译原理实验三-自下而上语法分析及语义分析 .pdf》由会员分享,可在线阅读,更多相关《2022年编译原理实验三-自下而上语法分析及语义分析 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、上海电力学院编译原理课程实验报告实验名称:实验三 自下而上语法分析及语义分析院系:计算机科学与技术学院专业年级:学生姓名:学号:指导老师:实验日期:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - 实验三自上而下的语法分析一、实验目的:通过本实验掌握 LR分析器的构造过程,并根据语法制导翻译,掌握属性文法的自下而上计算的过程。二、实验学时:4学时。三、实验内容根据给出的简单表达式的语法构成规则(见五),编制LR分析程序,要求能对
2、用给定的语法规则书写的源程序进行语法分析和语义分析。对于正确的表达式,给出表达式的值。对于错误的表达式,给出出错位置。四、实验方法采用LR分析法。首先给出 S-属性文法的定义(为简便起见,每个文法符号只设置一个综合属性,即该文法符号所代表的表达式的值。属性文法的定义可参照书137页表 6.1 ),并将其改造成用LR分析实现时的语义分析动作(可参照书145页表 6.5 )。接下来给出 LR分析表。然后程序的具体实现: LR分析表可用二维数组(或其他)实现。添加一个 val 栈作为语义分析实现的工具。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
3、- - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - 编写总控程序,实现语法分析和语义分析的过程。注:对于整数的识别可以借助实验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
4、 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 五、处理程序例和处理结果例名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 -
5、 - - - - - - - - 示例1:20133191*(20133191+3191)+ 3191# 六、源代码【cifa.h】/cifa.h #include using namespace std; /单词结构定义struct WordType int code; string pro; ; /函数声明名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - WordType get_w(); void getch(); voi
6、d 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 lineName8; string tableData168; public: Table_action() row_num=16; line_num=8; lineName0=30; lineName1=7; line
7、Name2=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
8、】/table_go.h class Table_go int row_num,line_num;/行数、列数string lineName3; int tableData163; public: Table_go() row_num=16; line_num=3; lineName0=E; lineName1=T; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - lineName2=F; for(int m=0;mrow_n
9、um;m+) for(int n=0;n=0&rowrow_num&line=line_num) return tableDatarowline; else return -1; int getLineNumber(string lineNa) for(int i=0;iline_num;i+) if(lineNamei=lineNa) return i; return -1; ; 【Stack_num.h 】class Stack_num int i; /栈顶标记int *data; /栈结构public: Stack_num() /构造函数 名师资料总结 - - -精品资料欢迎下载 - -
10、 - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - 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 topNumber() return i; void outStack() for(i
11、nt m=0;m=i;m+) coutdatam; ; 【Stack_str.h 】class Stack_str int i; /栈顶标记string *data; /栈结构public: Stack_str() /构造函数 data=new string50; i=-1; int push(string m) /进栈操作名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 17 页 - - - - - - - - - i+; datai=m; return i; int p
12、op() /出栈操作 datai=; i-; return i; string getTop() /返回栈顶 return datai; Stack_str() /析构函数 delete data; int topNumber() return i; void outStack() for(int m=0;m=i;m+) coutdatam; ; 【cifa.cpp】/cifa.cpp #include #include #includecifa.h using namespace std; /关键字表和对应的编码string codestring10=main,int,if,then,els
13、e,return,void,cout,endl; int codebook10=26,21,22,23,24,25,27,28,29; /全局变量char ch; int flag=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 17 页 - - - - - - - - - /*/ 主函数int main() WordType word; cout请输入源程序序列 :; word=get_w(); while(word.pro!=#)/# 为自己设置的结束标志 c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年编译原理实验三-自下而上语法分析及语义分析 2022 编译 原理 实验 自下而上 语法分析 语义 分析
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内