《编译原理》课程设计报告

上传人:xzh****18 文档编号:35521585 上传时间:2018-03-16 格式:DOC 页数:11 大小:303KB
返回 下载 相关 举报
《编译原理》课程设计报告_第1页
第1页 / 共11页
《编译原理》课程设计报告_第2页
第2页 / 共11页
《编译原理》课程设计报告_第3页
第3页 / 共11页
《编译原理》课程设计报告_第4页
第4页 / 共11页
《编译原理》课程设计报告_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《《编译原理》课程设计报告》由会员分享,可在线阅读,更多相关《《编译原理》课程设计报告(11页珍藏版)》请在金锄头文库上搜索。

1、编译原理编译原理课程设计报告课程设计报告学学 院:院: 信息与机电工程学院信息与机电工程学院 班班 级:级: 计算机(计算机(2)班)班 姓姓 名:名: 郭艳婕郭艳婕 学学 号:号: 090400106 指导教师:指导教师: 程晓锦程晓锦 设计题目:设计题目:pl0 编译器设计编译器设计一、一、PL0 程序的文法及,指令及属性翻译程序的文法及,指令及属性翻译简化简化 c 语言文法定义(语言文法定义(LL(1)文法)文法) C 程序:=void main()函数体 函数体:=变量定义部分 语句列 变量定义部分:=变量定义 变量定义部分| 变量定义:=int 变量表 变量表:=标识符|标识符,变量

2、表 语句列:=语句 语句列| 语句:=条件语句| 循环语句 | 读语句 | 写语句 | 复合语句 | 表达式语句 | 空语句 条件语句:=if(表达式)语句 循环语句:=while(表达式)语句 读语句:=read(变量表) ; 写语句:=write(表达式表) ; 复合语句:=语句列; 表达式语句:=表达式; 空语句:=;表达式定义(算符优先文法)表达式定义(算符优先文法) 表达式:=变量=表达式 | 变量+=表达式 | 变量-=表达式 | 变量*=表达式 | 变量/=表达 式 | 变量%=表达式 | 表达式 1 表达式 1:=表达式 1 | 表达式 2 | 表达式 2 表达式 2:=表达式

3、 2语句Ident call begin if while,;end条件Odd+-(ident numberThen do表达式+-(ident number,;) R end then doPl0 词法分析程序流程图:词法分析程序流程图:PL/0 的语言的词法分析器将要完成以下工作:的语言的词法分析器将要完成以下工作: (1) 跳过分隔符(如空格,回车,制表符); (2) 识别诸如begin,end,if,while 等保留字; (3) 识别非保留字的一般标识符,此标识符值(字符序列)赋给全局量id, 而全局量sym 赋值为SYM_IDENTIFIER。项Ident number(,;) R

4、 +-end then do例子Ident number(,;) R +-*/ end then do(4) 识别数字序列,当前值赋给全局量NUM,sym 则置为SYM_NUMBER; (5) 识别:=,=之类的特殊符号,全局量sym 则分别被赋值为 SYM_BECOMES,SYM_LEQ,SYM_GTR 等。解释执行解释执行 pcode 代码时,数据段存储分配方式如下:代码时,数据段存储分配方式如下:对于源程序的每一个过程,在被调用时,首先在数据段开辟第三个空间,存放 静态链 SL,动态链 DL 和返回地址 RA。静态链记录了定义该过程的直接外过程运行时的 最新数据段的基地址。动态链记录调用

5、该过程前正在运行的过程的数据段基址。返回地址 记录了调用该过程时程序运行的断点位置。对于主程序来说,SL DL RA 的值均为 0.静态 链的功能是在一个子过程要引用他的直接或间接父过程的变量时可以通过静态连,跳过个 数为层差的数据段,找到包含要引用的变量所在的数据段基址,然后通过偏移地址访问它在过程返回时,解释程序通过返回地址恢复指令指针的值到调用前的地址,通过当前 段基址恢复数据段的分配指针,通过动态链接恢复局部段基址指针。实现子过程的返回。 对于主程序来说,解释程序会遇到返回地址为 0 的情况,这时就认为程序运行结束解释程序过程中的 base 函数的功能,就是用于沿着静态连,向前查找相差

6、制定层数 的局部数据段基址,这在是使用 sto,lod 等访问局部变量的指令中会经常用到。总结总结编译器的编写涉及到程序设计语言,计算机体系结构,语言理论,算法和编译原理等学科。一个编译程序从逻辑上分为词法分析,语法分析,语义分析,代码级代码优化等 5部分,为编好编译程序还需要有出错处理及符号表管理两个辅助模块。一个编译程序是将某一个高级语言编写的源程序翻译成机器语言目标程序或者翻译成汇编语言目标程序。然而翻译成汇编语言目标程序或机器语言目标程序需要十分熟悉目标机的指令系统,为编译器的编写带来很多麻烦。为了简化编译器的编写,我们仅仅完成编译器的前端设计,即实现解释执行简化后 的 c 语言源程序。通过这次的课程设计,我了解高级语言的编译过程,理解了词法分析,语法分析及语义分析,理解符号表及符号表的作用以及出错在编译过程中的作用。同时通过 c 语言的编写,进一步提升了自己的编程水平,锻炼了独立编程的能力。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 计算机原理

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