当前位置:首页 > 天津理工大学编译原理实验3:语义分析与中间代码生成
实验报告
学院(系)名称:计算机与通信工程学院
姓名 班级 ***** ***** 课程名称 学号 实验项目 ***** 专业 计算机科学与技术 实验三:语义分析与中间代码生成 编译原理 课程代码 0668056 实验时间 ******* 实验地点 计算机软件实验室7-219 批改意见 成绩 教师签字: 实验内容: 可选择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.认真完成并按时提交实验报告。 第1页 共15页
【实验过程记录(源程序、测试用例、测试结果及心得体会等)】 分析的四元式: ??→??1+?? (+,E1.place,T.place,E.place) ??→??1??? (-,E1.place,T.place,E.place) ??→?? (=,T.place,_,E.place) ??→??1??? (*,T1.place,F.place,T.place) ??→??1??? (/,T1.place,F.place,T.place) ??→?? (=,F.place,_,T.place) ??→???? (^,P.place,_,F.place) ??→?? (=,P.place,_,F.place) ??→(??) (=,E.place,_,P.place) ??→?? (=,lookup(i.name),_,P.place) 根据语法分析修改的程序流程图
开始从输入串获取字符从标识符中查找数值压入语义栈N出错处理Error与符号栈比较关系>将符号移进符号栈>|=归约根据四元式修改语义栈是否成功Y输出结果结束
程序运行结果:
第2页 共15页
部分源代码: Main.cpp #include
} std::cout<< \ << \ <<\ while (!syn->getSuccess()) { } delete syn; system(\); syn->printSymbol(); syn->printSource(); syn->printSemantic(); syn->nextStep(); std::cout << std::endl; < Lexical.h #pragma once #include add = 0, sub = 1, mul = 2, div = 3, pow = 4, ide = 5, lef = 6, rig = 7, sha = 8
共分享92篇相关文档