编译原理课程设计报告---编译器功能的实现.doc_第1页
编译原理课程设计报告---编译器功能的实现.doc_第2页
编译原理课程设计报告---编译器功能的实现.doc_第3页
编译原理课程设计报告---编译器功能的实现.doc_第4页
编译原理课程设计报告---编译器功能的实现.doc_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

编译原理课程设计编译原理课程设计 实验报告实验报告 课课 题:编译器功能的实现题:编译器功能的实现 编译原理课程设计 衡阳师范学院2019/1/13 i 目目 录录 1 1 介绍介绍 1 1 1.1 前言 .1 2 2 编译器编译器 2 2 2.1 pl/x 编译器结构概述.2 2.2 语法元素 .4 2.3 语法图5 2.4 判断是否符合两条限制规则.13 2.5 语法出错表定义 16 3 3 虚拟机虚拟机 1717 3.1 虚拟机组织结构 17 3.2 虚拟机指令格式 18 4 4 程序设计程序设计 2121 4.1 全局变量、全局常量 21 4.2 函数接口 28 5 5编译器功能的实现编译器功能的实现 3737 5.1 概述 37 编译原理课程设计 衡阳师范学院2019/1/13 ii 5.2 实例一 37 5.3 实例二 41 5.4 实例三 43 编译原理课程设计 衡阳师范学院2019/1/13 1 1 介绍介绍 1.1 前言前言 根据课程设计要求制作 pl/x 语言的编译器,完成词法分析、 语法分析、语义分析及代码生成、出错处理和解释运行程序,并添 加一定的扩展,最终实现一个 pl/x 的编译器。 所完成扩展点说明: 1)支持三种注释 a)单行注释 b)/*-*/ 多行注释 c)(*-*) 多行注释 2)支持 read 语句,因此可从终端获取输入 3)支持 write 语句,因此可从终端输出 4)支持 for 语句 5)支持 dowhile 语句 6) call 过程 7) 求余运算% 8) 整数的奇偶 odd 9) 幂运行* 编译原理课程设计 衡阳师范学院2019/1/13 2 关于出错处理:分为词法分析错误、句法分析错误、运行时错误(如 除数为 0) 允许变量名或函数名重复,但访问的时候以最后一次声明的为有效 2 编译器编译器 2.1 pl/x 编译器结构概述编译器结构概述 图 1 pl/x 编译程序的结构图 图 2 pl/x 的解释执行结构 编译原理课程设计 衡阳师范学院2019/1/13 3 图 3 pl/x 编译程序总体流程图 语法分析过程 prog 是整个编译过程的核心,是指开始由主程 序调用 getsym 取一个单词,再调用语法分析过程 prog, prog 由当前单词根据语法规则再调用其它过程,如说明处理、代 码生成或出错处理等过程进行分析,当分析完一个单词后,prog 再调用 getsym 取下一个单词,一直重复到当前单词为结束符“ 表明源程序已分析结束。若未取到结束符“,而源程序已没有输 入符号,这时表明源程序有错误,无法再继续分析。 编译原理课程设计 衡阳师范学院2019/1/13 4 图 4 pl/x过程调用相关示意图 2.2 语法元素语法元素 关键字: “and“, “begin“, “call“, “case“, “constant“, “do“, “else“, “end“, “false“, “for“, “if“, “integer“, “logical“, “not“, “or“, “odd”,“procedure“, “program“, “read“, “repeat“, “switch“, “then“, “true“, “until“, “while“, “write“ 编译原理课程设计 衡阳师范学院2019/1/13 5 操作符: “.“, “;“, “*“, “+“, “-“, “+“, “-“, “*“, “/“, “%“, “=“, “, “=“, “=“, “!“,“+=“, “-=“, “*=“, “/=“ 2.3 语法图语法图 程序 程序体 程序体 . constidentnumber = var ; ident procedure , ident ; ; 程序体 ; 语句 , 编译原理课程设计 衡阳师范学院2019/1/13 6 语句序列 语句 条件 语句 ; ident call begin while end ident := if do then语句 语句 表达式 语句序列 条件 条件 表达式odd 表达式 = 表达式 编译原理课程设计 衡阳师范学院2019/1/13 7 表达式 项 因子 项 项 + -+ 因子 因子 /* ident number 表达式 () + %* - 编译原理课程设计 衡阳师范学院2019/1/13 8 1) prog = “program“ ds proc “begin“ ss “end“ “.“ 2) proc = “procedure“ aident ds “begin“ ss “end“ 3) ds = d “;“ d 4) d = “integer“ aident “,“ aident | “logical“ bident “,“ bident | “constant“ aident “=“ number “,“ aident “=“ number 编译原理课程设计 衡阳师范学院2019/1/13 9 5) ss = s ; s 6) s = aident “ := “ ae | bident “ := “ be | “if“ be “then“ ss “else“ ss “end“ | “while“ be “do“ ss “end“ | “repeat“ ss “until“ be | “write“ ae . “read“ aident | bident “for“ s ; be ; s “do“ ss “end“ 编译原理课程设计 衡阳师范学院2019/1/13 10 “call“ procedure “do“ ss “.“ “while“ be “end“ 7) ae= “-“ at (“-“|“+“) at 8) at = af1 (“*“|“/“) af1. 编译原理课程设计 衡阳师范学院2019/1/13 11 9) af1 = af (“%“|“*“) af. /扩展的求余运算 10) af = aident | number | “(“ ae “)“ | constant 11)be = bt “or“ bt 编译原理课程设计 衡阳师范学院2019/1/13 12 12)bt = bf “and“ bf 13)bf = bident | “true“ | “false“ |“not“ bf |“(“ be “)“ | re1 14)re1=odd re 编译原理课程设计 衡阳师范学院2019/1/13 13 15)re = (aident | number )( “=“ | “ | “=“ | “ | “=“ | “2 do repeat n:=i/j; m:=n*j; p:=i/2; if i=m then i:=i-1; j:=2 else j:=j+1 end until j=p; write i; i:=i-1; j:=2 end; write 2 end. 测 试 步 骤 编译此程序 查看输出 编译原理课程设计 衡阳师范学院2019/1/13 39 测 试 结 果 编译原理课程设计 衡阳师范学院2019/1/13 40 编译原理课程设计 衡阳师范学院2019/1/13 41 5.3 实例二实例二 test 2:测试 2 个数的最小公倍数 测 试 目 标 语法分析 代码生成 解释程序 if 语句 while.do 语句 read 语句 write 语句 测 试 用 例 的 pl x 源 程 序: /求两数的最小公倍数 /if.then 和 whiledo 语句的测试 program integer i,j,temp,m,p begin read i; read j; p:=i*j; if ij then temp:=i; i:=j; j:=temp end; while j/=0 do m:=i-i/j*j; i:=j; j:=m end; j:=p/i; write j end. 测 试 步 骤 编译此程序 输入 24 36 回车 查看输出 测 试 结 果 编译原理课程设计 衡阳师范学院2019/1/13 42 编译原理课程设计 衡阳师范学院2019/1/13

温馨提示

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

评论

0/150

提交评论