标准实验报告(PL0编译程序)

2020-04-14 05:15

[标准实验报告]

南昌航空大学实验报告

年月日

课程名称: 编译原理 实验名称: 扩充的PL/0编译程序 班级: 姓名: 同组人:

指导教师评定: 签名:

一、 实验目的

进一步熟悉编译程序的整体框架,给出整个编译程序的流程结构,用C或vc++语言编写程序;并将编制的编译程序进行调试、实现PL/0编译程序。

二、 实验要求

(1)根据所选的程序设计语言,修改并调试。 (2)举出例子程序,在程序中进行编译。

(3)用此编译程序对有关语句进行编译,并输出目标指令。 (4)书写出合格的实验报告。

三、 实验步骤

1.输入文件中变量的声明形如:var a,b,c; 以var保留字开始,不同变量以”,”分隔,最后以”;”结束。

2.read语句格式为read(a)或者read(a,b);

3.write语句格式为write(a),括号里面没有字符串常量,注意与书后的形如write(‘a=’,a)是不相同的。

4.的声明形如:”procedure proname;”不含参数表。 5.一维数组形如:变量类型array 数组名[数组下标]。 6.条件语句形如:if <条件>then<语句> {;else,语句>}

7.扩充的记录型数据类型形如:for 循环语句及带参数的过程。

四、 参考源代码

#include /*#include\#include\#define stacksize 500 typedef enum{ false, true }bool;

1

char ch;

enum symbol sym; char id[al+1]; int num; int cc,ll; int cx;

char line[81]; char a [al+1]; int num ; int cc,ll; int cx;

char line [81]; char a [al+1];

struct instruction code [cxmax]; char word [norw][al];

struct instruction code [cxmax]; char word [norw][al];

enum symbol wsym [norw]; enum symbol ssym [256]; char mnemonic [fctnum][5]; bool declbegsys [symnum]; bool statbegsys [symnum]; bool facbegsys [symnum]; bool facstatbegsys[symnum]; struct tablestruct { char name [al]; enum object kind ; int val; int level; int adr; int size; };

struct tablestruct table [txmax]; FILE * fin; FILE * fout; char fname [al]; int err;

3

#define getsymdo if(-1==getsym())return -1 #define getchdo if(-1==getch())return -1

#define testdo(a,b,c) if(-1==test(a,b,c))return -1 #define gendo(a,b,c) if(-1==gen(a,b,c))return -1

#define expressiondo(a,b,c) if(-1==expression(a,b,c))return -1 #define factordo(a,b,c) if(-1==factor(a,b,c))return -1 #define termdo(a,b,c) if(-1==term(a,b,c))return -1

#define conditiondo(a,b,c) if(-1==condition(a,b,c))return -1 #define statementdo(a,b,c) if(-1==statement(a,b,c))return -1

#define constdeclarationdo(a,b,c) if(-1==constdeclaration(a,b,c))return -1 #define vardeclarationdo(a,b,c) if(-1==vardeclaration(a,b,c))return -1 void error(int n); int getsym(); int getch(); void init();

int gen(enum fct x,int y,int z); int test(bool *sl,bool *s2,int n); int inset (int e,bool *s);

int addset (bool* sr,bool* sl,bool *s2,int n); int subset (bool* sr,bool* sl,bool *s2,int n); int mulset (bool* sr,bool* sl,bool *s2,int n); int block (int lev,int tx,bool* fsys); void interpret();

int factor (bool* fays,int * ptx,int lev); int term (bool* fays,int * ptx,int lev); int condition (bool* fays,int * ptx,int lev); int expression (bool* fays,int * ptx,int lev); int statement (bool* fays,int * ptx,int lev); void listcode(int cx0);

int vardeclaration (int * ptx,int lev,int * pdx); int constdeclaration (int * ptx,int lev ,int * pdx); int position (char * idt,int tx);

void enter (enum object k,int * ptx ,int lev ,int *pdx); int base (int l,int * s,int b);

int main()

{bool nxtlev[symnum]; printf(\

4

scanf(\fin=fopen(fname,\if(fin)

{printf(\scanf(\

/*listwitch=(fname[0]=='y'||fname[0]=='Y');*/ printf(\scanf(\

tableswitch=(fname[0]=='y'||fname[0]=='Y'); fal=fopen(\fprintf(fal,\fprintf(fal,\init(); err=0;

cc=cx=ll=0; ch='';

if(-1 !=getsym())

{ fa=fopen(\fas=fopen(\

addset(nxtlev,declbegsys,statbegsys,symnum); nxtlev[period]=true;

if(-1==block(0,0,nxtlev)) {

fclose(fa); fclose(fal); fclose(fas); fclose(fin); printf(\return 0; }

fclose(fa); fclose(fal); fclose(fas); if(sym!=period) {error(9); }

if(err==0)

{fa2=fopen(\

5


标准实验报告(PL0编译程序).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:班级管理练习题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: