好文档 - 专业文书写作范文服务资料分享网站

天津理工大学编译原理实验3:语义分析及中间代码生成

天下 分享 时间: 加入收藏 我要投稿 点赞

实验报告

学院(系)名称:计算机与通信工程学院

姓名 班级 课程名称 学号 实验项目 专业 实验三:语义分析与中间代码生成 编译原理 课程代码 计算机软件实验室7-220 计算机软件实验室7-215 实验时间 实验地点 批改意见 成绩 教师签字: 实验内容: 可选择LL1分析法、算符优先分析法、LR分析法之一,实现如下表达式文法的语法制导翻译过程。文法G[E]如下所示: E→E+T | E-T | T T→T*F | T/F | F F→P^F | P P→(E) | i 要求构造出符合语义分析要求的属性文法描述,并在完成实验二(语法分析)的基础上,进行语义分析程序设计,最终输出与测试用例等价的四元式中间代码序列。 实验目的: 1.掌握语法制导翻译的基本功能。 2.巩固对语义分析的基本功能和原理的认识。 3.能够基于语法制导翻译的知识进行语义分析。 4.掌握类高级语言中基本语句所对应的语义动作。 5.理解并处理语义分析中的异常和错误。 实验要求: 1.在实验二的基础上,实现语法制导翻译功能,输出翻译后所得四元式序列; 2.要求详细描述所选分析方法进行制导翻译的设计过程; 3.完成对所设计分析器的功能测试,并给出测试数据和实验结果; 4.为增加程序可读性,请在程序中进行适当注释说明; 5.整理上机步骤,总结经验和体会; 6.认真完成并按时提交实验报告。

【实验过程记录(源程序、测试用例、测试结果及心得体会等)】

#include #include #define size 1024 using namespace std;

int step=0;

typedef struct variable_T {

char operate;//操作符 string var1;//变量 1 string var2;//变量 2 int num;//第几个变量 }variable_T;

variable_T t[size];//记录四元式变量的变量 int tsize=-1;//表示是第tsize+1个变量

typedef struct char_stack {

char content;//当前字符

string endchar;//这个符号代表的中间变量 可以是 i, 也可以是 t1, t2, 等等 int num;//和该字符相关的中间变量的序号 }char_stack;

string table[19][13]={// + - * / ^ ) # ( i E T F P /* 0 */ \ \ \ \ \ /* 1 */ \ /* 2 */ \ /* 3 */ \ /* 4 */ \ /* 5 */ \ \ \ \ \ /* 6 */ \ /* 7 */ \ \ \ \ /* 8 */ \ \ \ \ /* 9 */ \ \ \ /* 10*/ \ \ \ /* 11*/ \ \ \ /* 12*/ \ /* 13*/ \ /* 14*/ \ /* 15*/ \ /* 16*/ \

/* 17*/ \ /* 18*/ \

int getLength(char str[size]) {

int i=0;

while(str[i]!='\\0') i++; return i; }

int getLengthc(char_stack str[size]) {

int i=0;

while(str[i].content!='\\0') i++; return i; }

int getstringLength(string str) {

int i=0;

while(str[i]!='\\0') i++; return i; }

char gettop(char stack[size],int top) {

if(stack[top]!='\\0') return stack[top]; else return '#'; }

void popstack(char *stack,int *pointer,int times) {

int p;

for(int i=1;i<=times;i++) { p=*pointer; stack[p]='\\0'; (*pointer)--; } }

天津理工大学编译原理实验3:语义分析及中间代码生成

实验报告学院(系)名称:计算机与通信工程学院姓名班级课程名称学号实验项目专业实验三:语义分析与中间代码生成编译原理课程代码计算机软件实验室7-220计算机软件实验室7-215实验时间实验地点批改意见成绩教师签字:实验内容:可选择LL1分析法、算符优先分析
推荐度:
点击下载文档文档为doc格式
6tiex6p52i5zpak1cslt1is530855j00ibw
领取福利

微信扫码领取福利

微信扫码分享