全球旧事资料 分类
一、实验目的
在分析理解一个教学型编译程序(如PL0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的目的。
二、实验成要求
1课内实验
对PL0作以下修改扩充:(1)增加单词:保留字ELSE,FOR,TO,DOWNTO,RETURN运算符,,,(2)修改单词:不等号改为(3)增加条件语句的ELSE子句
2课程设计
基本内容(成绩范围:“中”、“及格”或“不及格”)
(1)扩充赋值运算:和
(2)扩充语句(Pascal的FOR语句)
①FOR变量表达式TO表达式DO语句
②FOR变量表达式DOWNTO表达式DO语句
其中,语句①的循环变量的步长为1,
语句②的循环变量的步长为1。
选做内容(成绩评定范围扩大到:“优”和“良”)
(1)增加运算:和。
(2)增加类型:①字符类型;
②实数类型。
(3)扩充函数:①有返回值和返回语句;②有参数函数。
(4)增加一维数组类型(可增加指令)。
(5)其他典型语言设施。
三、实验环境
(1)实现平台:Wi
dowsXP,Visualstudio2005(2)教学型编译程序:PL0C语言版
1
f四、设计方案
Error()
出错处理,打印出错位置和错误编码
GetCh()
漏掉空格,读取一个字符
GetSym()词法分析,读取一个单词
GEN()
目标代码生成过程,本过程用于把生成的目标代码写入目标代码数
组,供后面的解释器解释执行
TEST()测试当前单词是否合法过程test
ENTER()登陆符号表过程e
ter
POSITION在符号表中查找指定符号所在位置的函数positio
,如果找不到就返
回0
VARDECLARATION()变量声明
LISTCODE()列出目标代码清单;
FACTOR()因子处理过程factor
TERM()项处理过程term;
EXPRESSION()表达式处理过程
CONDITION()条件处理过程
STATEMENT()语句处理过程
BLOCK()语法分析过程
BASE()
通过静态链求出数据区基地址的函数,
INTERPRET()对目标代码解释运行过程
启动
程序
置初值
调用getsym取单词
调用block过程
是否为源程序结束符
Y
源程序是否有错误
N调用解释过程i
terpret解释执行目标执行目标程序
结束
N出错
Y打印错误
分程序语句条件
表达式项
因子PL0语法调用关系图
2
f五、主要成分描述
1.符号表
在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,符号表中所登记的信息在编译的不同阶段都要用到。
在语义分析中,符号表所登记的内容将用于语义检查(如检查一个名字的使用和原先的说明是否一致)和产生中间代码。
r
好听全球资料 返回顶部