资源简介

计算机系统中最重要的系统软件,编译系统的实现。本软件以C/C++语言为实现语言,包括词法分析,语法分析,语义分析,中间代码生成等部分。实现了Pascal语言子集PL/0语言编译器

资源截图

代码片段和文件信息

/*#########################################################################

*   PL/0 编译程序 由南京航空航天大学 040630221 严晓军编写
* 代码版权由严晓军拥有,使用者必须遵循以下约定:
* 可以免费使用此文件,但必须包含此声明。
* 可以修改、传播、打印、出版这里的源代码。
* 可以在任何软件工程中使用这里的源代码。
* 严晓军对于由此源代码的使用而引起的任何问题没有任何责任。
* 严晓军地址:南京航空航天大学计算机系
*       信箱:xiaoxiaon@vip.qq.com
*   QQ: 603275094

###########################################################################*/

# include 
# include 
# include 
# include 
# include 
# include 

char file[2008];//在内存中储存源代码
char strToken[15];//词法分析器用以储存抓取词的数组
int char_num=0;
int str_num=0;
char ch;
char sym[10];
char id[10];
long int num;
int LEV=0;
int MI=0;
int MIS=1;
int DX=3;
int jishu=0;
int code_num=0;
int swit=1;
int DL;
int code_case;
int out_num;
int out[100];
int IsError=0;
struct table{     //符号表结构体
char name[10];
char kind[10];
int val;
int adr;
int size;
struct table *next;
}*tx0*tx1*p;

struct code{ //目标代码储存结构体
int n;
char f[3];
int l;
int a;
struct code *next;
}*cd0*cd;

void Getsym();//词法分析器
void Getchar();
bool IsLetter();
bool IsDigit();
void Concat();
void Retract();
void GetBC();
int Reserve();//查保留字
int base(int lint bint s[]);
void block();//分程序处理过程
void statement();//语句处理过程
void expression();//表达式处理过程
void term();//项处理过程
void factor();//因子处理过程
void cases();//条件处理过程
bool postion();//查询定位符号表
bool compare();
void interpret();//目标代码解释
void recode();
void ProcError();

void main()
{
char temp;
cout<<“###############################################################################“< cout< cout<<“                 作者: 040630221 严晓军 于 2008年12月27日“< cout<<“###############################################################################“< cout<<“即将开始编译“< system(“pause“);
tx0=(struct table *)malloc(sizeof(struct table));//符号表初始化
tx0->name[0]=NULL;
tx0->kind[0]=NULL;
tx0->val=NULL;
tx0->adr=NULL;
tx0->size=NULL;
tx0->next=NULL;
p=tx0;

cd0=(struct code *)malloc(sizeof(struct code));//程序段初始化
cd0->n=code_num;
code_num++;
cd0->f[0]=‘j‘;
cd0->f[1]=‘m‘;
cd0->f[2]=‘p‘;
cd0->f[3]=NULL;
cd0->l=0;
cd0->a=NULL;
cd0->next=NULL;
cd=cd0;
cd->next=(struct code *)malloc(sizeof(struct code));
cd=cd->next;
cd->n=NULL;
cd->f[0]=NULL;
cd->l=NULL;
cd->a=NULL;
cd->next=NULL;


fstream dataFile;
dataFile.open(“code.txt“ios::in);//读取源程序到内存中
if(!dataFile)
{
cout<<“打开文件失败“< exit(0);
}
dataFile.get(file[char_num]);
char_num++;
while(!dataFile.eof())
{
dataFile.get(file[char_num]);
char_num++;
}
char_num=0;
dataFile.close();


Getsym();
block();
if(sym[0]==‘.‘);
else 
{
cout<<“error:   程序末尾缺少句号“< ProcError();
}
cd->n=code_num;
code_num++;
cd->f[0]=‘o‘;
cd->f[1]=‘p‘;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        111  2008-12-25 20:54  PL0编译器\baoliuzi.txt

     文件        171  2008-12-27 21:24  PL0编译器\code.txt

     文件        164  2008-12-27 17:30  PL0编译器\code测试代码2.txt

     文件        111  2008-12-25 20:54  PL0编译器\Debug\baoliuzi.txt

     文件        171  2008-12-27 20:16  PL0编译器\Debug\code.txt

     文件      65915  2008-12-27 22:21  PL0编译器\Debug\main.obj

     文件     286812  2008-12-27 22:21  PL0编译器\Debug\PL0编译器.exe

     文件     415764  2008-12-27 22:21  PL0编译器\Debug\PL0编译器.ilk

     文件     294656  2008-12-25 13:30  PL0编译器\Debug\PL0编译器.pch

     文件     672768  2008-12-27 22:21  PL0编译器\Debug\PL0编译器.pdb

     文件      50176  2008-12-27 22:22  PL0编译器\Debug\vc60.idb

     文件      61440  2008-12-27 22:21  PL0编译器\Debug\vc60.pdb

     文件      25428  2008-12-27 22:21  PL0编译器\main.cpp

     文件       4315  2008-12-24 21:26  PL0编译器\PL0编译器.dsp

     文件        526  2008-12-24 20:07  PL0编译器\PL0编译器.dsw

     文件      50176  2008-12-27 22:24  PL0编译器\PL0编译器.ncb

     文件      48640  2008-12-27 22:24  PL0编译器\PL0编译器.opt

     文件        891  2008-12-27 22:21  PL0编译器\PL0编译器.plg

     目录          0  2008-12-27 22:21  PL0编译器\Debug

     目录          0  2008-12-27 22:24  PL0编译器

----------- ---------  ---------- -----  ----

              1978235                    20


评论

共有 条评论