cmm编译器试验报告.doc

上传人:xins****2008 文档编号:117121343 上传时间:2019-11-18 格式:DOC 页数:24 大小:261.50KB
返回 下载 相关 举报
cmm编译器试验报告.doc_第1页
第1页 / 共24页
cmm编译器试验报告.doc_第2页
第2页 / 共24页
cmm编译器试验报告.doc_第3页
第3页 / 共24页
cmm编译器试验报告.doc_第4页
第4页 / 共24页
cmm编译器试验报告.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《cmm编译器试验报告.doc》由会员分享,可在线阅读,更多相关《cmm编译器试验报告.doc(24页珍藏版)》请在金锄头文库上搜索。

1、CMM编译器试验报告 目录小组成员-P2Chapter 1编译器流程-P2Chapter 2编译器词法说明-P3Chapter 3编译器语法和语义说明-P3Chapter 4编译器中间代码生成说明-P5Chapter 5编译器执行中间代码说明-P8附录(源代码):Part 0界面-P10Form1.cs Form2.csPart 1词法-P10WordAnalyzer.cs Part 2语法&语义 -P11fenxi.cs Part 3符号表 -P15BStable.cs LStable.cs SZtable.cs Part 4中间代码 -P17MiddleCode.cs MCode.csPa

2、rt 5执行 -P21CompileMidCode.cs MidCodeAccessTABLE.cs Part 6测试-P24小组说明:小组成员成员信息分工完成否小组组长:王嘉学号: 200532580318班级:10班设计文档,试验报告,小组分工, Part5代码编写开发组长:朱雯学号: 200532580297班级:9班代码设计和分工,Part 1&2&4代码编写开发组员:周磊学号: 200732580327班级:10班界面设计 Part 0&2&3代码编写测试组长:陈依媛学号: 200532580292班级:9班测试文档,功能测试行号编写, Part6编写Chapter1: CMM编译器

3、流程说明:在最初的设计时,本来打算语法和语义分开,语义和中间代码放在一起执行的,不过后来我们采取了语法和语义一起执行,然后生成中间代码,最后执行得到结果,编译可能会有错误,我们进行了一定的错误处理。以下是我们的最终CMM编译器程序执行流程图:CMM编译器的程序执行流程图:输入CMM源文件N输出词法错误词法分析Y语法分析语义分析N输出语法错误Y生成中间代码输出中间代码输出编译错误N运行中间代码Y得到执行结果Y:执行正确N:执行错误Chapter2 编译器词法说明【词法分析】:对输入的CMM源文件进行词法分析,下面是可识别的词法分析表关键字if else while read write int

4、real标识符A a56 a_23 a_23dty实数1.2 0.23 92.00整数12 0 3490关系运算符= 赋值符=算数运算符+ - * / 逻辑运算符( )注释符/* */数组符号 嵌套符号 语句结束符;Chapter3 编译器语法说明【语法分析】&【语义分析】:由于语法和语义是一起进行的.先列出文法对输入的CMM源文件进行文法分析,下面是CMM文法终极版:Program := stmt-sequenceStmt-sequence := statement statementstatement := if-stmt | while-stmt| read-stmt | write-s

5、tmt | int-stmt | real-stmtIf-stmt := if (condition) Stmt-sequence | if (condition) Stmt-sequence else Stmt-sequencewhile-stmt := while (condition) Stmt-sequence read-stmt := read identifier|array;write-stmt := write expression;int-stmt := int array | int identifier = expressionreal-stmt := real arra

6、y | real identifier = expressionassign-stmt := identifier|array = expression ;condition := expression comparison-op expressioncomparison-op := | = | expression := term addop term addop := + | -term := factor mulop facror mulop := * | /factor := (expression) | int | real | identifier |arrayarray := i

7、dentifierint | identifier语义的步骤:1进行语义检查对输入的CMM源文件进行语义分析,下面是CMM的语义检查表:检查解决方案是否完成1.每个使用性标识符是否都有申明?在符号表中查找 是否存在 已完成2.运算符的分量类型是否相同?在符号表中查找 是否相同 此项在生成中间代码时完成3.赋值语句的左右部的类型是否相等?在符号表中查找 是否相等,若将int型的值赋給real,则先转换,否则就报错 此项在生成中间代码时完成4.在同层中有无标识符被申明多次?在符号表中查找 是否申明过 已完成5.if,while语句的()中是否是一个布尔类型的结果()里是不是只含有一个关系运算符的表

8、达式 已完成6.write语句后面跟的是否是标识符? 已完成7.read后面跟的是否是标识符,或是变量申明?read后面只可以接标识符和数组 已完成8.数组的下标是否是正整数?在符号表中查找 是否是正整数 已完成2在扫描声明部分时构造标识符的符号表所有构造用到的符号表如下:标识符符号表BStableBStable_nameBStable_typeBStable_levelBStable_valuedBStable_value标识符的名称标识符的类型标识符所在层标识符是否被赋值标识符的值数组符号表SZtableSZtable_nameSZtable_typeSZtable_lengthSZtab

9、le_levelSZtable_valuedSZtable_element数组的名称数则的类型数则的长度数则的层数组组员是否赋值数组组员的值临时变量符号表LStableLStable_nameLStable_typeLStable_levelLStable_valuedLStable_value临时变量的名称临时变量的类型临时变量的层临时变量是否被赋值临时变量的值Chapter4 中间代码生成说明【中间代码】2.4.1【4元式形式】:中间代码采用3地址代码的4元式:4元式形式表:运算符运算分量运算分量运算结果oparg1arg2resulta+bADDI (+)abt1a-bSUBI (-)a

10、bt1a*bMULTI (*)abt1a/bDIVIDI (/)abt1abLT ()abt1a=bET (=)abt1abUNET ()abt1read aREADIa-t1write aWRITEIa-t11+1.1real1-t1a=bMOVE (=)ab-If ab a =3elsea = 5LABEL ( )JUMP0t1-L1JUMP-L22.4.2【ARG的符号表地址法】:临时变量:TARG运算分量 变量:VARG数组SARG2.4.3【中间代码扫描】1】 INT/REAL变量和数组的声明在中间代码不需要显示,只需要在符号表中构造出来,构造方式如下 标识符变量情形: V(real

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号