编译原理--增加数据类型.doc

编译原理--增加数据类型.doc

ID:55612453

大小:179.00 KB

页数:48页

时间:2020-05-19

编译原理--增加数据类型.doc_第1页
编译原理--增加数据类型.doc_第2页
编译原理--增加数据类型.doc_第3页
编译原理--增加数据类型.doc_第4页
编译原理--增加数据类型.doc_第5页
资源描述:

《编译原理--增加数据类型.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、//pl0.h///这个文件中的代码与课本的一致//对于使用C++的编译器,这句话可以注释掉,但对于C语言不行//typedefenum{FALSE,TRUE,}bool;#definenorw16//关键字的个数#definetxmax100//名字表的容量#definenmax14//数字的最大位数#defineal10//符号的最大长度#defineamax2047//地址上界#definelevmax3//最大允许的嵌套声明层数#definecxmax200//最多的虚拟机代码数enumsymbol{//

2、枚举类型://nul=0,ident=1,number=2,plus=3,minus=4//times=5,依次类推,procsym=31nul,ident,number,//下面的表示的是系统的算数运算符以及逻辑运算符,知道意思就可以plus,minus,times,//相乘的意思slash,oddsym,eql,neq,lss,leq,gtr,geq,lparen,//左括号rparen,comma,semicolon,period,becomes,//赋值的意思//下面的表示是系统的保留字beginsym,

3、endsym,ifsym,thensym,whilesym,writesym,readsym,dosym,callsym,constsym,varsym,procsym,integersym,charactersym,doubsym,charnum,integercon,doubnum};#definesymnum38enumobject{constant,variable,procedur,integer,character,doub,};enumfct{lit,opr,lod,sto,cal,inte,jmp

4、,jpc,};#definefctnum11structinstruction{enumfctf;//虚拟机代码指令intl;//引用层与声明层的层差doublea;//根据f的不同而不同,参考课本};FILE*fas;//输出名字表FILE*fa;//输出虚拟机代码FILE*fa1;//输出源文件及其各行对应的首地址FILE*fa2;//输出结果boollistswitch;booltableswitch;charch;//获取字符的缓冲区enumsymbolsym;charid[al+1];doublenum

5、;intcc,ll;//cc表示当前字符的位置intcx;//虚拟机代码指针charline[81];//读取行缓冲区chara[al+1];//临时符号,多出的一个字节用于表示字符串的结尾structinstructioncode[cxmax];//存放虚拟机代码的数组charword[norw][al];//保留字enumsymbolwsym[norw];//保留字对应的符号值enumsymbolssym[256];//单符号的符号值charmnemonic[fctnum][5];//虚拟机代码指令的名称bo

6、oldeclbegsys[symnum];//表示声明开始的符号集合boolstatbegsys[symnum];//表示语句开始的符号集合boolfacbegsys[symnum];//表示因子开始的符号集合//名字表结构structtablestruct{charname[al];//名字//enumdatatypetype;//数据类型:integer,character,doub,enumobjectkind;//类型:const,var,array,proceduredoubleval;//数值,仅co

7、nst使用,使用双精度浮点型intlevel;//所处层intadr;//地址intsize;//需分配的数据空间};structtablestructtable[txmax];//名字表FILE*fin;FILE*fout;charfname[al];interr;//错误计数器,每出一次错误,其加一#definegetsymdoif(-1==getsym())return-1#definegetchdoif(-1==getch())return-1#definetestdo(a,b,c)if(-1==test

8、(a,b,c))return-1#definegendo(a,b,c)if(-1==gen(a,b,c))return-1#defineexpressiondo(a,b,c)if(-1==expression_r(a,b,c))return-1#definefactordo(a,b,c)if(-1==factor(a,b,c))return-1#definetermdo(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。