PL0源代码(C语言版).doc
如果您需要使用本文档,请点击下载按钮下载!
如果您需要使用本文档,请点击下载按钮下载!
如果您需要使用本文档,请点击下载按钮下载!
/*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];//临时符号,多出的一个字节用于存放