如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
南昌航空大学实验报告二0一0年十一月十七日课程名称:编译原理实验名称:扩充的PL\0程序班级:08061130姓名:胡作堃同组人:指导教师评定:签名:实验目的进一步熟悉编译程序的整体框架,给出整个编译程序的流程结构,用C或vc++语言编写程序;并将编制的编译程序进行调试、实现PL/0编译程序。实验要求(1)根据所选的程序设计语言,修改并调试。(2)举出例子程序,在程序中进行编译。(3)用此编译程序对有关语句进行编译,并输出目标指令。(4)书写出合格的实验报告。实验步骤1.输入文件中变量的声明形如:vara,b,c;以var保留字开始,不同变量以”,”分隔,最后以”;”结束。2.read语句格式为read(a)或者read(a,b);3.write语句格式为write(a),括号里面没有字符串常量,注意与书后的形如write(‘a=’,a)是不相同的。4.的声明形如:”procedureproname;”不含参数表。5.一维数组形如:变量类型array数组名[数组下标]。6.条件语句形如:if<条件>then<语句>{;else,语句>}7.扩充的记录型数据类型形如:for循环语句及带参数的过程。参考源代码#include<cstdio>#include<set>#include<cstring>#include<iostream>#include<iostream>#include<vector>#ifndefWIRTH_ZYC_#defineWIRTH_ZYC_usingnamespacestd;constintnorw=16;//no.ofreservedwords保留字的个数constinttxmax=100;//lengthofidentifiertable标示符表的长度(容量)constintal=10;//lengthofidentifiers标示符的最大长度constintnmax=14;//max.no.ofdigitsinnumbers数字的最大长度constintamax=2047;//maximumaddress寻址空间constintlevmax=3;//maximumdepthofblocknesting最大允许的块嵌套层数constintcxmax=200;//sizeofcodearray类PCODE目标代码数组长度(可容纳代码行数)constintlineLength=82;//行缓冲区长度typedefenum{NUL,IDENT,NUMBER,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,ELSESYM,REPEATSYM,UNTILSYM}symbol;//symobl类型标识了不同类型的词汇typedefcharalfa[al+1];//alfa类型用于标识符typedefenum{CONSTANT,VARIABLE,PROCEDURE,ARRAY}obj0;//三种标识符的类型typedefenum{LIT,OPR,LOD,STO,CAL,INT,JMP,JPC}fct;//functionstypedefset<symbol>symset;structinstruction{fctf;//functioncodeintl;//level,cann'tbigthanlevmaxinta;//displacementaddress,cann'tbigthanamax};//类PCODE指令类型,包含三个字段:指令f、层差l和另一个操作数a/********************************************lit0,a:loadconstanta**opr0,a:executeoperationa**lodl,a:loadvariablel,a**stol,a:storevariablel,a**call,a:callprocedureaatlevell**int0,a:incrementt-registerbya**jmp0,a:jumptoa**jpc0,a:jumpconditionaltoa********************************