编译原理——网工0801—夏涛.doc_第1页
编译原理——网工0801—夏涛.doc_第2页
编译原理——网工0801—夏涛.doc_第3页
编译原理——网工0801—夏涛.doc_第4页
编译原理——网工0801—夏涛.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

黄黄冈冈师师范范学学院院 提高型提高型实验报实验报告告 实验课题 简易简易 C 语言编译器语言编译器 (实验类型:综合性综合性 设计性 应用性) 实验课程编译原理 实验时间 2010 年 12 月 19 日 学生姓名 夏涛 专业班级网络 200801 学 号 200826340124 目目 录录 一一 、 设计题目设计题目- - 1 1 - - 二二 、 运行环境运行环境- - 1 1 - - 三三 、 算法设计的思想算法设计的思想- - 1 1 - - 四四 、 算法的流程图算法的流程图- - 3 3 - - 五五 、 算法设算法设计计分析分析- - 6 6 - - 六六 、 源代码源代码- - 1111 - - 七七 、 运行结运行结果果分析分析- - 3030 - - 八八 、 收获及体会收获及体会- - 3232 - - 一一 、设计题目设计题目 简易 C 语言编译器 二二 、运行环境运行环境 硬件环境:硬件环境:奔腾处理器,主频 2.0GHz;内存 512M;硬盘 80G 以 上;1024768 显示分辨率 软件环境:软件环境:Windows XP2;Visual C+6.0 三三 、算法设计的思想算法设计的思想 编译程序的工作过程一般可以分为五个阶段:词法分析、语法分析、 语义分析与中间代码产生、优化、目标代码生成。每一个阶段在功能上 是相对独立的,它一方面从上一个阶段获取分析的结果来进行分析,另 一方面由将结果传递给下一个阶段。由编译程序的五个阶段就对应了编 译系统的结构。 其中词法分析器利用超前搜索、状态转换等方法,将源程序转化成 为一个一个的单词符号二元式。一般程序语言的单词符号包括关键字、 运算符、常数、标识符和界符。语法分析器将这些单词符号作为输入, 对它进行语法分析。语法分析分为两种方法:自上而下分析法和自下而 上分析法。针对不同程序语言的语法规则可以采取不同的分析方法,当 然两种方法也可以同时使用。语法分析器把语法单元作为输入供语义分 析器使用。一般的语义分析器主要采用的是语法制导方法,即在语法分 析的同时进行语法分析,并产生一定的语义动作,来生成中间代码。上 面三个过程可以与硬件无关,而接下来的优化器和目标代码生成器是针 对某一种处理器而言的。代码优化是将语义分析生成的中间代码进行优 化,产生执行效率更高的代码。目标代码生成器最终生成可以在某种机 器上运行的机器语言或者汇编语言。在整个编译过程中还包括对表格的 操作和对错误的处理,这些也都是非常重要的环节。 下图给出了编译系统的结构框图: 表 格 管 理 出 错 处 理 单词符号 语法单元 中间代码 中间代码 目标代码 语法分析器 语义分析与中间代码生成器 优化器 目标代码生成器 词法分析器 源程序 四四 、算法的流程图算法的流程图 1、词法分析:词法分析: Main() initial_buffer() init() bufferChar!=# note(); isalpha(buffer Char) bufferChar=alpha( bufferChar); rollback(); isdigit(bufferCh ar) bufferChar=digit (bufferChar); rollback(); bufferChar=other (bufferChar); rollback(); bufferChar!=# Out() p pr ri in nt tf f( (“ “o ov ve er r n n“ “) ); ; Fclose(fp); Getch(); 结束 2、语法分析:语法分析: 开始 结束 从词法输出中读入 token 序列,放入 input 初始化堆栈,并将 #和S放入堆栈 出栈 get=getch() Get=getch ()getch 栈顶为终结符 栈顶不为#” 栈顶 =get() 是 是 是 否 查分析表是否 需要错误恢复 否 出栈,产生式逆序 入栈,并输出产生式 , 错误恢复否 是 否 3、语义分析:语义分析: 开始 词法分析 语法分析 生成语法树 语法树入栈 增加属性Buffer缓存 输出 结束 五五 、算法设计分析算法设计分析 1、使用的数据结构和关键变量使用的数据结构和关键变量 struct Stack / 栈结构体: 序号、内容、连接下一结点指针 int num; char name; struct Stack *next; ; struct Guiyue / 规则集结构体:序号、规则长度、符号、连接下一结点 指针 int num; int count; char name; struct Guiyue *next; ; struct Relation / 分析表结构体:状态序号、对应符号列、操作类型的对 应序号、操作类型、连接下一结点指针 int line_States ; char rank_Letter; int relationship; char name; struct Relation *next; ; struct Sign / 符号表结构体: 自变量名、标识类型、连接下一结点指针 char name20; char kind; struct Sign *next; ; struct Word / 单词表结构体: 单词名字、标识类型、状态、序号、行 号、连接符号表指针、连接下一结点指针 char name20; char mark_name; int state; int num; int line; struct Sign *link; struct Word *next; ; FILE *fp1, fp2; / 文件指针 int row = 1; / 字符行变量 int line10000, Lin300; / 字符行 int w_num; / 单词所在行、字符数 char buffer10000; / 字符串缓冲区 struct Word *head,*find; / 单词表结构体头指针 struct Relation *r_head; / 分析表结构体头指针 struct Guiyue *g_head; / 规约集结构体头指针 struct Stack *s_head; / 栈结构体头指针 2、用到的用到的 LR 文法文法 Terminator m v ( ) i = ; f e w a b c d , S 03、A-S A 04、A-S 05、C-C ; X 06、C-X 07、X-Y Z 08、Y-a 09、Y-b 10、Y-c 11、Y-d 12、Z-i , i 13、Z-i 14、S-f ( E ) A e A 15、S-w ( E ) A 16、S-i = L ; 17、E-E if(ch=!|ch=$|ch=| ch=:|ch=“|ch=|ch=.|ch=/|ch=) flag=1; else if(0mark_name=i) w_namecal=find; cal+; if(find-next!=NULL) if(find-mark_name=find-next-mark_name)|(find-mark_name=;)|(find-mark_name=)|find-next- mark_name=(|find-next-mark_name=)| find-next-mark_name=+|find-next- mark_name=-|find-next-mark_name=*| find-next-mark_name=/|find-next- mark_name= ca+; if(find-name0=0 int j=0; for(i=0;ilink; end=1; while(s_first else s_first=s_first-next; if(end=1 for(i=0;imark_name=()|(word_fui-mark_name=) ip=MarkPush(ip,word_fui-mark_name,i); else if(ip-name=( else coutlinenamename!=$) coutlinename“ ” 存在符号匹配错误 !“endl; cout“n= =n“endl; 七七 、运行结果分析运行结果分析 1、打开源文件(正确的) 2、词法分析: 3、语法分析结果四元式生成 4、打开有错误的源

温馨提示

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

评论

0/150

提交评论