数据结构与算法基础实验指导书.doc_第1页
数据结构与算法基础实验指导书.doc_第2页
数据结构与算法基础实验指导书.doc_第3页
数据结构与算法基础实验指导书.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理实验指导书实验3 语义分析实验目的1 巩固对语义分析的基本功能和原理的认识。2 能够基于语法指导翻译的知识进行语义分析。3 掌握类高级语言中基本语句所对应的语义动作。4 理解并处理语义分析中的异常和错误。实验要求一、对学生要求:1掌握语法制导翻译的基本功能,并将其实现。2自行给出各语句的语义动作。3应仔细分析语义分析结果的输出形式。4需尽可能处理符号表中的信息。二、对实验指导教师要求:1明确语义分析的基本功能和原理,并掌握语法制导翻译的思想。2对基本语句的语义动作有深刻的理解。3对语义分析中用到的语义属性有深刻的理解。4理解语义分析对符号表的处理。5理解语义分析的异常和错误处理。6编写并运行该题目程序代码,具有该题目的参考答案。7深刻理解题目内涵,能够清晰描述问题,掌握该题目涉及的知识点,指导学生实验时需要注意的问题。实验内容1任务描述:给定一个语法分析的语法树和词法分析输出的符号表,根据所给的标准四元式,运用语义分析技术翻译出中间代码并输出。此次实验中,应该将整个三个实验组合成一个完成的编译程序,输入是源程序,输出是四元式中间代码。2所用高级语言的文法产生式说明:下列是一个简化的C语言文法产生式列表,其中斜体为产生式中的变量,加粗的是终结符,终结符或者是C语言中的保留字,或者是由词法规则定义的原子式。各部分含义解释如下:Program代表一个函数(不支持函数调用)Slist函数主体部分(变量声明在最前部)Dlist代表一系列变量声明语句Olist代表一系列操作语句D一个变量声明语句O一个操作语句type变量类型(文法只支持int型变量)expression表达式simple_expression表达式term表达式factor表达式id num relop addop mulop词法规则定义的原子式( ) ; if else while ! = int文法的保留字文法产生式如下(Program是文法的起始元素):Program id ( ) Slist Slist Dlist Olist | Olist | Dlist Dlist D | DD type id ;Olist Olist O | OO id = expression ;| if ( expression ) Olist else Olist | if ( expression ) Olist | while ( expression ) Olist expression simple_expression | simple_expression relop simple_expressionsimple_expression term | simple_expression addop termterm factor | term mulop factorfactor id | num | ( expression ) | ! factortype int3词法规则说明:letter代表一个大写或小写字母,区分大小写,digit代表一个数字。id表示一个变量或函数的标示符,它以字母开头,由字母和数字组成;num表示一个整数。id = letter ( letter | digit ) *num = digit digit*relop = = | | | | =addop + | mulop * | /4标准四元式 mov, addr1, addr2, _将addr2地址存储的内容复制给addr1mov, addr1, _, val将val复制给addr1cmp, addr1, addr2, addr3比较addr1与addr2所存储的内容,按int方式比较,如果addr1大,addr3存储1,如果addr2大,addr3存储-1,否则存储0jmp, addr1, addr2, addr3如果addr2和addr3内容相等,跳转到addr1jmpn, addr1, addr2, addr3如果addr2和addr3内容不相等,跳转到addr1jmpl, addr1, addr2, addr3如果addr2内容大于addr3内容,跳转到addr1jmple, addr1, addr2, addr3如果addr2内容大于等于addr3内容,跳转到addr1jmp, addr1, _, _跳转到addr1add, addr1, addr2, addr3将addr1与addr2存储的内容相加存储到addr3add, addr1, _, val将addr1存储的内容加valsub, addr1, addr2, addr3将addr1与addr2存储的内容相减存储到addr3sub, addr1, _, val将addr1存储的内容减valmul, addr1, addr2, addr3将addr1与addr2存储的内容相乘存储到addr3mul, addr1, _, val将addr1存储的内容乘valdiv, addr1, addr2, addr3将addr1与addr2存储的内容相除存储到addr3div, addr1, _, val将addr1存储的内容除以val_, _, _, _空语句5示例 示例输入:main( ) int i; int k; int sum; k=5; i=0; sum=0; while( i=25 ) i=1;else i=0; 示例输出:注意,四元式代码生成方式不唯一,只要语义与源程序相同即可。假设代码被加载到101开始的地址空间。 101:mov, &k, _, 5 102:mov, &i, _, 0 103:mov, &sum, _, 0 104:jmpl, 108, &i, &k 105:add, &sum, &sum, &i 106:add, &i, _, 1 107:jmp, 104, _, _ 108:mov, temp, _, 25 109:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论