資源簡介
計算機系統中最重要的系統軟件,編譯系統的實現。本軟件以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
- 上一篇:俄羅斯方塊(C語言實現,有注釋
- 下一篇:操作系統 進程調度 多級隊列反饋
評論
共有 條評論