PL0源代码C语言版

上传人:wdg****h8 文档编号:269193577 上传时间:2022-03-22 格式:DOC 页数:64 大小:92KB
返回 下载 相关 举报
PL0源代码C语言版_第1页
第1页 / 共64页
PL0源代码C语言版_第2页
第2页 / 共64页
PL0源代码C语言版_第3页
第3页 / 共64页
PL0源代码C语言版_第4页
第4页 / 共64页
PL0源代码C语言版_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《PL0源代码C语言版》由会员分享,可在线阅读,更多相关《PL0源代码C语言版(64页珍藏版)》请在金锄头文库上搜索。

1、- /*PL/0 编译系统C版本头文件 pl0.h*/# define norw 13 /a number of reserved word /*关键字个数*/ # define t*ma* 100 /length of identifier table /*名字表容量*/# define nma* 14 /ma* number of digits in numbers /*number的最大位数*/# define al 10 /length of identifier /*符号的最大长度*/# define ama* 2047 /ma*imum address /*地址上界*/# defi

2、ne levma* 3 /ma* depth of block nesting /*最大允许过程嵌套声明层数0,le*ma*/# define c*ma* 200 /size of code array /*最多的虚拟机代码数*/*符号*/enum symbol nul, ident, number, plus, minus, times, slash, oddsym, eql, neq, /slash斜线 lss, leq, gtr, geq, lparen, /leq :less than or equal to; gtr: great than;lparen:left parenthes

3、isrparen, ma, semicolon,period, bees,/ma逗号 semicolon分号 period句号 bees赋值号 beginsym, endsym, ifsym, thensym, whilesym,writesym, readsym, dosym, callsym, constsym,varsym, procsym,;#define symnum 32/*-*/enum object /object为三种标识符的类型 constant, variable, procedur,;/*-*/enum fct /fct类型分别标识类PCODE的各条指令lit, opr

4、, lod, sto, cal, inte, jmp, jpc, /书本P23 ;#define fctnum 8/*-*/struct instruction /指令 enum fct f; /功能码 int l; /层次差 int a; /P23;FILE * fas; /输知名字表 FILE * fa; /输出虚拟机代码 FILE * fa1; /输出源文件及其各行对应的首地址 FILE * fa2; /输出结果 bool tableswitch; /显示名字表与否 bool listswitch; /显示虚拟机代码与否 char ch; /获取字符的缓冲区,getch使用 enum s

5、ymbol sym; /当前符号 char idal+1; /当前ident,多出一个字节用于存放0 int num; /当前number int cc,ll; /getch使用的计数器,cc表示当前字符(ch)的位置 int c*; /虚拟机代码指针,取值围0,c*ma*-1char line81; /读取行缓冲区 char aal+1; /临时符号,多出的一个字节用于存放0 struct instruction codec*ma*; /存放虚拟机代码的数组 char wordnorwal; /保存字enum symbol wsymnorw; /保存字对应的符号值 enum symbol s

6、sym256; /单字符的符号值 char mnemonicfctnum5; /虚拟机代码指令名称 bool declbegsyssymnum; /表示声明开场的符号集合 ,declaring begin symbol setbool statbegsyssymnum; /表示语句开场的符号集 , statementbool facbegsyssymnum; /表示因子开场的符号集合 ,factor/*-*/struct tablestruct char nameal; /*名字*/ enum object kind; /*类型:const,var,array or procedure*/ i

7、nt val; /*数值,仅const使用*/ int level; /*所处层,仅const不使用*/ int adr; /*地址,仅const不使用*/ int size; /*需要分配的数据区空间,仅procedure使用*/;struct tablestruct tablet*ma*; /*名字表*/FILE * fin; /fin文本文件用于指向输入的源程序文件FILE* fout; /fout文本文件用于指向输出的文件char fnameal;int err; /*错误计数器*/*当函数中会发生fatal error时,返回1告知调用它的函数,最终退出程序*/#define get

8、symdo if(-1=getsym()return -1#define getchdo if(-1=getch()return -1#define testdo(a,b,c) if(-1=test(a,b,c)return -1#define gendo(a,b,c) if(-1=gen(a,b,c)return -1#define e*pressiondo(a,b,c) if(-1=e*pression(a,b,c)return -1#define factordo(a,b,c) if(-1=factor(a,b,c)return -1#define termdo(a,b,c) if(-1

9、=term(a,b,c)return -1#define conditiondo(a,b,c) if(-1=condition(a,b,c)return -1#define statementdo(a,b,c) if(-1=statement(a,b,c)return -1#define constdeclarationdo(a,b,c) if(-1=constdeclaration(a,b,c)return -1#define vardeclarationdo(a,b,c) if(-1=vardeclaration(a,b,c)return -1void error(int n);int g

10、etsym();int getch();void init();int gen(enum fct *,int y,int z);int test(bool*s1,bool*s2,int n);int inset(int e,bool*s);int addset(bool*sr,bool*s1,bool*s2,int n);int subset(bool*sr,bool*s1,bool*s2,int n);int mulset(bool*sr,bool*s1,bool*s2,int n);int block(int lev,int t*,bool* fsys);void interpret();

11、int factor(bool* fsys,int* pt*,int lev);int term(bool*fsys,int*pt*,int lev);int condition(bool*fsys,int*pt*,int lev);int e*pression(bool*fsys,int*pt*,int lev);int statement(bool*fsys,int*pt*,int lev);void listcode(int c*0);int vardeclaration(int* pt*,int lev, int* pd*);int constdeclaration(int* pt*,

12、int lev, int* pd*);int position(char* idt,int t*);void enter(enum object k,int* pt*,int lev,int* pd*);int base(int l,int* s,int b);/A.2 C 版 本/*编译和运行环境:*1Visual C+6.0,VisualC+.NET and Visual C+.NET 2003*WinNT, Win 200, Win*P and Win2003 *2 gcc version 3.3.2 20031022(Red Hat Linu* 3.3.2-1)*Redhat Fedora core 1*Intel 32 platform*使用方法:*运行后输入PL/0 源程序文件名*答复是否输出虚拟机代码*答复是否输知名字

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

最新文档


当前位置:首页 > 大杂烩/其它

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