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

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

举报
开通vip

编译原理实验三-自下而上语法分析及语义分析上海电力学院编译原理课程实验报告实验名称: 实验三自下而上语法分析及语义分析院 系:   计算机科学与技术学院     专业年级:       学生姓名:    学号:   指导老师:           &n...

编译原理实验三-自下而上语法分析及语义分析
上海电力学院编译原理课程实验报告实验名称: 实验三自下而上语法分析及语义分析院 系:   计算机科学与技术学院     专业年级:       学生姓名:    学号:   指导老师:              实验日期:     实验三自上而下的语法分析一、实验目的:通过本实验掌握LR分析器的构造过程,并根据语法制导翻译,掌握属性文法的自下而上计算的过程。二、实验学时:4学时。三、实验内容根据给出的简单表达式的语法构成规则(见五),编制LR分析程序,要求能对用给定的语法规则书写的源程序进行语法分析和语义分析。对于正确的表达式,给出表达式的值。对于错误的表达式,给出出错位置。四、实验 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 采用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                              5、处理程序例和处理结果例示例1:20133191*(20133191+3191)+3191#六、源代码【cifa.h】//cifa.h#include<string>usingnamespacestd;//单词结构定义structWordType{intcode;stringpro;};// 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 声明WordTypeget_w();voidgetch();voidgetBC();boolisLetter();boolisDigit();voidretract();intReserve(stringstr);stringconcat(stringstr);【Table.action.h】//table_action.hclassTable_action{introw_num,line_num;intlineName[8];stringtableData[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(intm=0;m<row_num;m++)for(intn=0;n<line_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";tableData[2][1]="R3";tableData[2][2]="R3";tableData[2][3]="S7";tableData[2][4]="S13";tableData[2][6]="R3";tableData[2][7]="R3";tableData[3][1]="R6";tableData[3][2]="R6";tableData[3][3]="R6";tableData[3][4]="R6";tableData[3][6]="R6";tableData[3][7]="R6";tableData[4][0]="S5";tableData[4][5]="S4";tableData[5][1]="R8";tableData[5][2]="R8";tableData[5][3]="R8";tableData[5][4]="R8";tableData[5][6]="R8";tableData[5][7]="R8";tableData[6][0]="S5";tableData[6][5]="S4";tableData[7][0]="S5";tableData[7][5]="S4";tableData[8][1]="S6";tableData[8][2]="S12";tableData[8][6]="S11";tableData[9][1]="R1";tableData[9][2]="R1";tableData[9][3]="S7";tableData[9][4]="S13";tableData[9][6]="R1";tableData[9][7]="R1";tableData[10][1]="R4";tableData[10][2]="R4";tableData[10][3]="R4";tableData[10][4]="R4";tableData[10][6]="R4";tableData[10][7]="R4";tableData[11][1]="R7";tableData[11][2]="R7";tableData[11][3]="R7";tableData[11][4]="R7";tableData[11][6]="R7";tableData[11][7]="R7";tableData[12][0]="S5";tableData[12][5]="S4";tableData[13][0]="S5";tableData[13][5]="S4";tableData[14][1]="R2";tableData[14][2]="R2";tableData[14][3]="S7";tableData[14][4]="S13";tableData[14][6]="R2";tableData[14][7]="R2";tableData[15][1]="R5";tableData[15][2]="R5";tableData[15][3]="R5";tableData[15][4]="R5";tableData[15][5]="R5";tableData[15][6]="R5";tableData[15][7]="R5";}stringgetCell(introwN,intlineN){introw=rowN;intline=getLineNumber(lineN);if(row>=0&&row<row_num&&line>=0&&line<=line_num)returntableData[row][line];elsereturn"";}intgetLineNumber(intlineN){for(inti=0;i<line_num;i++)if(lineName[i]==lineN)returni;return-1;}};【Table_go.h】//table_go.hclassTable_go{introw_num,line_num;//行数、列数stringlineName[3];inttableData[16][3];public:Table_go(){row_num=16;line_num=3;lineName[0]="E";lineName[1]="T";lineName[2]="F";for(intm=0;m<row_num;m++)for(intn=0;n<line_num;n++)tableData[m][n]=0;tableData[0][0]=1;tableData[0][1]=2;tableData[0][2]=3;tableData[4][0]=8;tableData[4][1]=2;tableData[4][2]=3;tableData[6][1]=9;tableData[6][2]=3;tableData[7][2]=10;tableData[12][1]=14;tableData[12][2]=3;tableData[13][2]=15;}intgetCell(introwN,stringlineNa){introw=rowN;intline=getLineNumber(lineNa);if(row>=0&&row<row_num&&line<=line_num)returntableData[row][line];elsereturn-1;}intgetLineNumber(stringlineNa){for(inti=0;i<line_num;i++)if(lineName[i]==lineNa)returni;return-1;}};【Stack_num.h】classStack_num{inti;    //栈顶标记int*data;  //栈结构public:Stack_num()  //构造函数{ data=newint[100];
本文档为【编译原理实验三-自下而上语法分析及语义分析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_601191
暂无简介~
格式:doc
大小:55KB
软件:Word
页数:15
分类:互联网
上传时间:2019-01-14
浏览量:27