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

  • 121
  • 0
  • 约9.28千字
  • 约 15页
  • 2018-12-21 发布于浙江
  • 举报

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

第 PAGE 2页 共 NUMPAGES 15页 实验报告 学院(系)名称:计算机与通信工程学院 姓名 ***** 学号 ***** 专业 计算机科学与技术 班级 ***** 实验项目 实验三:语义分析与中间代码生成 课程名称 编译原理 课程代码 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.认真完成并按时提交实验报告。 【实验过程记录(源程序、测试用例、测试结果及心得体会等)】 分析的四元式: E→ (+,E1.place,T.place,E.place) E→ (-,E1.place,T.place,E.place) E→T (=,T.place,_,E.place) T→ (*,T1.place,F.place,T.place) T→ (/,T1.place,F.place,T.place) T→F (=,F.place,_,T.place) F→ (^,P.place,_,F.place) F→P (=,P.place,_,F.place) P→ (=,E.place,_,P.place) P→i (=,lookup(i.name),_,P.place) 根据语法分析修改的程序流程图 程序运行结果: 部分源代码: Main.cpp #include iostream #include Syntax.h int main(int argc, char ** argv) { std::string source; std::coutplease input an arithmetic expression std::endl; std::cin source; ccyg::Syntax * syn = new ccyg::Syntax(source); syn-analysis(); std::cout symbolStack: inputStack: semStack: std::endl; while (!syn-getSuccess()) { syn-printSymbol(); syn-printSource(); syn-printSemantic(); syn-nextStep(); std::cout std::endl; } delete syn; system(pause); } Lexical.h #pragma once #include string #include vector namespace ccyg { class Lexical { public: enum letter { add = 0, sub = 1, mul = 2, div = 3, pow = 4, ide = 5, lef = 6, rig = 7, sha = 8 }; Lexical(); Lexical(std::string); ~Lexical(); bool analysis(); void printSource(); void setSourceCode(std::string); char toChar(int); std::vectorint identifier; std::vectorint source; private: std::string sourceCode; }; } Lexical.cpp #include Lexic

文档评论(0)

1亿VIP精品文档

相关文档