资源描述:
《PL0编译系统C版本》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、/*PL/0编译系统C版本头文件pl0.h*/typedefenum{false,true}bool;#definenorw13/*关键字个数*/#definetxmax100/*名字表容量*/#definenmax14/*number的最大位数*/#defineal10/*符号的最大长度*/#defineamax2047/*地址上界*/#definelevmax3/*最大允许过程嵌套声明层数[0,levmax]*/#definecxmax200/*最多的虚拟机代码数*/enumsymbol{nul,ident,n
2、umber,plus,minus,times,slash,oddsym,eql,neq,lss,leq,gtr,geq,lparen,rparen,comma,semicolon,period,becomes,beginsym,endsym,ifsym,thensym,whilesym,writesym,readsym,dosym,callsym,constsym,varsym,procsym};#definesymnum32/*名字表中的类型*/enumobject{constant,variable,proce
3、dur,array};/*虚拟机代码*/enumfct{lit,opr,lod,sto,cal,inte,jmp,jpc};#definefctnum8/*虚拟机代码结构*/structinstruction{enumfctf;intl;inta;};FILE*fas;FILE*fa;FILE*fa1;FILE*fa2;boollistswitch;booltableswitch;charch;enumsymbolsym;charid[al+1];intnum;intcc,ll;intcx;charline[81]
4、;chara[al+1];structinstructioncode[cxmax];charword[norw][al];enumsymbolwsym[norw];enumsymbolssym[256];charmnemonic[fctnum][5];booldeclbegsys[symnum];boolstatbegsys[symnum];boolfacbegsys[symnum];/*名字表结构*/structtablestruct{charname[al];enumobjectkind;intval;intl
5、evel;intadr;intsize;};structtablestructtable[txmax];FILE*fin;FILE*fout;charfname[al];interr;/*当函数中会发生fatalerror时,返回-1告知调用它的函数,最终退出程序*/#definegetsymdoif(-1==getsym())return-1#definegetchdoif(-1==getch())return-1#definetestdo(a,b,c)if(-1==test(a,b,c))return-1#de
6、finegendo(a,b,c)if(-1==gen(a,b,c))return-1#defineexpressiondo(a,b,c)if(-1==expression(a,b,c))return-1#definefactordo(a,b,c)if(-1==factor(a,b,c))return-1#definetermdo(a,b,c)if(-1==term(a,b,c))return-1#defineconditiondo(a,b,c)if(-1==condition(a,b,c))return-1#def
7、inestatementdo(a,b,c)if(-1==statement(a,b,c))return-1#defineconstdeclarationdo(a,b,c)if(-1==constdeclaration(a,b,c))return-1#definevardeclarationdo(a,b,c)if(-1==vardeclaration(a,b,c))return-1voiderror(intn);intgetsym();intgetch();voidinit();intgen(enumfctx,int
8、y,intz);inttest(bool*s1,bool*s2,intn);intinset(inte,bool*s);intaddset(bool*sr,bool*s1,bool*s2,intn);intsubset(bool*sr,bool*s1,bool*s2,intn);intmulset(bool*sr,bool*s1,bool*s2,intn);