文档详情

PL0源代码(C语言版).doc

发布:2024-09-18约3.12万字共34页下载文档
文本预览下载声明

如果您需要使用本文档,请点击下载按钮下载!

如果您需要使用本文档,请点击下载按钮下载!

如果您需要使用本文档,请点击下载按钮下载!

/*PL/0编译系统C版本头文件pl0.h*/

#definenorw13//anumberofreservedword/*关键字个数*/

#definetxmax100//lengthofidentifiertable/*名字表容量*/

#definenmax14//maxnumberofdigitsinnumbers/*number的最大位数*/

#defineal10//lengthofidentifier/*符号的最大长度*/

#defineamax2047//maximumaddress/*地址上界*/

#definelevmax3//maxdepthofblocknesting/*最大允许过程嵌套声明层数[0,lexmax]*/

#definecxmax200//sizeofcodearray/*最多的虚拟机代码数*/

/*符号*/

enumsymbol{

nul,ident,number,plus,minus,

times,slash,oddsym,eql,neq,//slash斜线

lss,leq,gtr,geq,lparen,//leq:lessthanorequalto;gtr:greatthan;lparen:leftparenthesis

rparen,comma,semicolon,period,becomes,//comma逗号semicolon分号period句号becomes赋值号

beginsym,endsym,ifsym,thensym,whilesym,

writesym,readsym,dosym,callsym,constsym,

varsym,procsym,

};

#definesymnum32

/*-------------*/

enumobject{//object为三种标识符的类型

constant,

variable,

procedur,

};

/*--------------*/

enumfct{//fct类型分别标识类PCODE的各条指令

lit,opr,lod,sto,cal,inte,jmp,jpc,//书本P23

};

#definefctnum8

/*--------------*/

structinstruction//指令

{

enumfctf;//功能码

intl;//层次差

inta;//P23

};

FILE*fas;//输出名字表

如果您需要使用本文档,请点击下载按钮下载!

如果您需要使用本文档,请点击下载按钮下载!

如果您需要使用本文档,请点击下载按钮下载!

FILE*fa;//输出虚拟机代码

FILE*fa1;//输出源文件及其各行对应的首地址

FILE*fa2;//输出结果

booltableswitch;//显示名字表与否

boollistswitch;//显示虚拟机代码与否

charch;//获取字符的缓冲区,getch使用

enumsymbolsym;//当前符号

charid[al+1];//当前ident,多出一个字节用于存放0

intnum;//当前number

intcc,ll;//getch使用的计数器,cc表示当前字符(ch)的位置

intcx;//虚拟机代码指针,取值范围[0,cxmax-1]

charline[81];//读取行缓冲区

chara[al+1];//临时符号,多出的一个字节用于存放

显示全部
相似文档