- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE
PAGE 1
课 程 设 计
班级:21301
学号:1361080108
姓名:马瑞泽
百度
一.课程设计目的
在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的目的。
二.课程设计要求
1. 基本内容
(1)扩充赋值运算:+= 和 -=
(2)扩充语句(Pascal的FOR语句):
①FOR 变量:=表达式 TO 表达式 DO 语句
②FOR 变量:=表达式 DOWNTO 表达式 DO 语句
其中,语句①的循环变量的步长为2,
语句②的循环变量的步长为-2。
2. 选做内容
(1)增加运算:++ 和 --。
(2)增加类型:① 字符类型; ② 实数类型。
(3)扩充函数:① 有返回值和返回语句;② 有参数函数。
(4)增加一维数组类型(可增加指令)。
(5)其他典型语言设施。
3.本人在课程设计中已实现的功能
(1)增加单词:保留字 ELSE,FOR,TO,DOWNTO, REPEAT, UNTIL, RETURN
运算符 +=,-=,++,--
(2)修改单词:不等号# 改为
(3)增加条件语句的ELSE子句
(4)扩充赋值运算:+= 和 -=
(5)扩充语句
①FOR 变量:=表达式 TO 表达式 DO 语句
②FOR 变量:=表达式 DOWNTO 表达式 DO 语句
(6)增加运算:++ 和 --(包括前后++、--运算)
(7)增加一维数组类型
其他典型语言设施:REPEAT 语句 UNTIL 语句
三.课程设计环境与工具
(1)计算机及操作系统:PC机,Win7
(2)实现工具:VC++ 6.0, C语言
教学型编译程序:PL/0
四.结构设计说明
PL/0编译程序的结构图
PL/0编译程序的过程或函数的功能表
过程或函数名
简要功能说明
pl0
主程序
error
出错处理,打印出错位置和错误编码
getsym
词法分析,读取一个单词
getch
漏掉空格,读取一个字符
gen
生成目标代码,并送入目标程序区
test
测试当前单词符号是否合法
block
分程序分析处理过程
enter
登录名字表
position(函数)
查找标识符在名字表中的位置
constdeclaration
常量定义处理
vardeclaration
变量说明处理
listode
列出目标代码清单
statement
语句处理
expression
表达式处理
term
项处理
factor
因子处理
condition
条件处理
interpret
对目标代码的解释执行程序
base(函数)
通过静态链求出数据区的基地址
PL/0编译程序的总体流程图
调用解释过程interpret解释执行目标执行目标程序 启动置初值
调用解释过程interpret解释执行目标执行目标程序
启动
置初值
词法分析
词法分析是编译的第一个阶段,它的主要任务是从左向右逐个字符地对源程序进行扫描,产生一个个单词序列用于语法分析。PL/0词法分析程序GETSYM的功能是为语法分析提供单词用的,是语法分析的基础,把输入的字符串形式的源程序分割成一个个单词符号。经过词法分析程序分析出来的单词,对语言固有的单词只给出类别存放在全程变量SYM中,而对用户定义的单词(标识符或常数)既给出类别又给值,其类别放在SYM中,值放在全程变量ID或全程变量NUM中,全部单词种类由编译程序定义的纯量类型SYMBOL给出,称为语法词汇表。
词法分析器的分析过程:调用GETSYM时,它通过GETCH过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把SYM变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把SYM置为IDENT,把这个单词存入ID变量。查保留字表时使用了二分法查找以提高效率。如果Getch获得的字符是数字,则继续用Getch获取数字,并把它们拼成一个整数或实数,然后把SYM置为 INTEGER,并把拼成的数值放入NUM变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把SYM则成相应的类型。如果遇到不合法的字符,把SYM置成NUL。
词法分析程序GETSYM将完成下列任务:
(1)滤空格 (2)识别保留字 (3)识别标识符
(4)拼数 (5)拼复合词 (6)输出源程序
程序分程序语句条件
程序
分程序
语句
条件
表达式
项
因子
PL/0 语法调用关系图
PL/0编译程序的语法分析采
文档评论(0)