2009级编译原理实验PL0流程图

上传人:人*** 文档编号:512468295 上传时间:2024-01-30 格式:DOC 页数:22 大小:203KB
返回 下载 相关 举报
2009级编译原理实验PL0流程图_第1页
第1页 / 共22页
2009级编译原理实验PL0流程图_第2页
第2页 / 共22页
2009级编译原理实验PL0流程图_第3页
第3页 / 共22页
2009级编译原理实验PL0流程图_第4页
第4页 / 共22页
2009级编译原理实验PL0流程图_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《2009级编译原理实验PL0流程图》由会员分享,可在线阅读,更多相关《2009级编译原理实验PL0流程图(22页珍藏版)》请在金锄头文库上搜索。

1、PL/0编译程序流程图 2009年11月 主程序main()输入pl/0源程序文件名 返回打开源程序文件。正确? N Y用户回答:是否列出虚拟机代码?是否列出符号表?打开输出文件fa1.tmp,并输出源程序文件名。初始化初始化目标代码指针cx为0,ch为读入一个单词打开文件fa.tmp,fas.tmp设置分程序后跟符号集nextlev: 声明开始单词、语句开始单词分程序处理分程序处理出错?关闭文件并返回 Y N解释执行虚拟机代码关闭文件并返回 解释程序interpret()置栈顶指针t为0;置数据段起始地址b为0;置当前指令指针p为0;置栈s的前三个单元为0。取当前指令到i,指令指针p指向下一

2、条指令。指令i的功能码将常量值i.a入栈顶st lit该运算指令的a域 opr过程调用结束返回调用点:释放被调用过程占用的栈空间;指令指针指向返回地址;恢复调用者数据段起始地址。 0 -栈顶 =栈顶 1次栈顶+栈顶 =次栈顶 2次栈顶-栈顶 =次栈顶 3次栈顶*栈顶 =次栈顶 4次栈顶/栈顶 =次栈顶 5栈顶为奇数? =栈顶 6次栈顶=栈顶 =次栈顶 8次栈顶!=栈顶 =次栈顶 9次栈顶=栈顶 =次栈顶 11次栈顶栈顶 =次栈顶 12次栈顶0? N Y根据静态链,取外层过程的基址到b1l=l-1返回b1(即l外层基址) :=分程序block():本过程的初始化:置本过程变量分配的相对地址dx为

3、3,保存当前符号表表尾指针tx到tx0即本层符号的开始位置)登记首条目标代码JMP 0 0的地址到符号表中该过程名的adr域,生成指令 jmp 0 0当前单词是const? Y 常量说明部分处理读入下一个单词 N登记常量名到符号表当前单词是, ? N Y读入下一个单词登记常量名到符号表当前单词是; ? N Y读入下一个单词报错当前单词是标识符? N Y当前单词是var? 变量说明部分处理 Y读入下一个单词 N登记变量名到符号表当前单词是, ? N Y读入下一个单词登记变量名到符号表当前单词是; ? N Y读入下一个单词报错当前单词是标识符? N Y 过程说明部分处理读入下一个单词当前单词是pr

4、ocedure? Y N单词是标识符? N Y在符号表登记过程名字报错读入下一个单词当前单词是; ? N Y报错读入下一个单词生成下一级分程序后跟符号集:本分程序后跟符号集及;调用分程序block处理,层次加1。返回,返回值-1Block()返回-1? Y生成后跟符号集nextlev: 语句开始单词、标识符、 N当前单词为; ? N Y读入下一个单词报错滤去非法后跟单词,只允许nextlev单词及声明开始单词。生成后跟符号集nextlev:语句开始单词、标识符、procedure当前单词是声明开始符号?滤去过程说明部分非法的后跟单词,只允许nextlev的单词及本分程序的后跟符号。 Y N 语

5、句处理用当前目标指令地址cx对本过程的首条指令jmp 0 0的目标地址回填更正符号表本过程名的信息:入口地址为当前目标指令地址,过程数据区大小为当前变量分配的相对地址。保存过程入口地址到CX0生成本过程的入口指令:分配数据区空间的指令INT 0 a要输出本过程符号表? Y N从符号表tx0位置开始输出所有常量名、变量名、过程名生成语句的后跟符号集nextlev:本分程序后跟符号集; end语句处理生成调用过程结束指令OPR 0 0置nextlev为空过滤非法后跟单词,只允许本分程序的后跟符号。输出目标代码清单返回,返回值0初始化init()设置单字符符号ssym: + - * / ()= , 。 # ;设置保留字名字word: begin call const do end if odd procedure read then var while write设置保留字符号wsym: 放入保留字名字对应的编号设置指令名称mnemonic: lit opr lod sto cal int jmp jpc设置声明开始符号集declbegsys:const var procedure设置语句开始符号集statbegsys:begin call if while设置因子开始符号集facbegsys:标识符 数字 (

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

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