PL/0编译程序的扩充

1 扩充功能的总体概述

增加处理更多语法成分的功能:一维数组,++,+=,–,-=,*=,/=,<>,for-to,repeat-util,if-then-else,floor向下取整,ceil向上取整,pow2求二次方,pow3求三次方,float类型,出错展示等。
1、修改PL/0编译程序的头文件pl0.h:

1)关键字的个数norw扩展到24,其中新增已经实现else, for, repeat, to,  until, array,float,floor,ceil,pow2,pow3;
(2)在enum symbol中新加入共19个单词种别(numberf,elsesym,forsym,tosym,repeatsym,untilsym,twoplus,pluseql,twominus,minuseql,timeseql,slasheql,lbrack,rbrack,flosym,floorsym,ceilsym,pow2sym,pow3sym),同时将symnum改为51。
(3)在名字表中的类型enum object中加入array,flo。
(4)在虚拟机代码中新增STA,LDA,LTF用于一维数组,同时将fctnum改为11

2、修改PL/0编译程序的源文件pl0.c初始化部分:

1)设置新增单字符符号
 ssym['['] = lbrack;
 ssym[']'] = rbrack;2)重新设置保留字名字,并按照字母顺序重新排列,便于折半查找
 strcpy(&(word[0][0]), "begin"); 
 strcpy(&(word[1][0]), "call");  
 strcpy(&(word[2][0]), "ceil");//新增ceil   
 strcpy(&(word[3][0]), "const");  
 strcpy(&(word[4][0]), "do");  
 strcpy(&(word[5][0]), "else");//新增else  
 strcpy(&(word[6][0]), "end");  
 strcpy(&(word[7][0]), "float");//新增float  
 strcpy(&(word[8][0]), "floor");//新增floor  
 strcpy(&(word[9][0]), "for");//新增for   
 strcpy(&(word[10][0]), "if");  
 strcpy(&(word[11][0]), "odd");  
 strcpy(&(word[12][0]), "pow2");//新增pow2  
 strcpy(&(word[13][0]), "pow3");//新增pow3  
 strcpy(&(word[14][0]), "procedure");  
 strcpy(&(word[15][0]), "read");  
 strcpy(&(word[16][0]), "repeat");//增加repeat   
 strcpy(&(word[17][0]), "then");  
 strcpy(&(word[18][0]), "to");//新增to    
 strcpy(&(word[19][0]), "until");//新增until  
 strcpy(&(word[20][0]), "var");  
 strcpy(&(word[21][0]), "while");  
 strcpy(&(word[22][0]), "write");3)设置新增保留字符号 
 wsym[0] = beginsym;
 wsym[1] = callsym;  
 wsym[2] = ceilsym;  
 wsym[3] = constsym;  
 wsym[4] = dosym;  
 wsym[5] = elsesym;  
 wsym[6] = endsym;  
 wsym[7] = flosym;  
 wsym[8] = floorsym;  
 wsym[9] = forsym;  
 wsym[10] = ifsym;  
 wsym[11] = oddsym;  
 wsym[12] = pow2sym;  
 wsym[13] = pow3sym;  
 wsym[14] = procsym;  
 wsym[15]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值