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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上海电力学院

编译原理

课程实验报告

实验名称:实验三自下而上语法分析及语义分析院系:计算机科学与技术学院

专业年级:

学生姓名:学号:

指导老师:

实验日期:

实验三自上而下的语法分析

一、实验目的:

通过本实验掌握LR分析器的构造过程,并根据语法制导翻译,掌握属性文法的自下而上计算的过程。

二、实验学时:

4学时。

三、实验内容

根据给出的简单表达式的语法构成规则(见五),编制LR分析程序,要求能对用给定的语法规则书写的源程序进行语法分析和语义分析。

对于正确的表达式,给出表达式的值。

对于错误的表达式,给出出错位置。

四、实验方法

采用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

五、处理程序例和处理结果例

示例1:20133191*(20133191+3191)+ 3191#

六、源代码

【cifa.h】

//cifa.h

#include

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);

string concat(string str);

【Table.action.h】

//table_action.h

class Table_action

{

int row_num,line_num;

int lineName[8];

string tableData[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(int m=0;m

for(int n=0;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][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";

相关文档
最新文档