資源簡介
編譯原理的綜合性實驗,有詳細實驗報告以及完整代碼

代碼片段和文件信息
#include
#include
#include
#include
#define?KeyWordNum?13//關鍵字的個數
#define?maxvartablep?500//符號表的最大行數
char?*KeyWord[KeyWordNum]={“?““program““var““procedure““begin““end““if“
???????????????????????“then““else““while““do““integer““real“};//12個關鍵詞,其中第個設置為空是為了第二個的syn從開始
int?line;//記錄程序的行數
int?error_count;//錯誤編號
int?syn;//種別碼
int?var_count;//變量的數目
char?token[20]temp1[10]temp2[10]temp3op1[10]op2[10];//一些單詞碼,臨時數組,操作數
char?place1[10]place2[10];//變量和常量的臨時單元
char?strTempID[10];//新的臨時變量單元
int?flag;//錯誤標記
int?vartablep=0;//符號表的總行數????datap=0
int?nNXQnT;//四元式的個數和臨時變量的個數
int?i;//常用變量
FILE?*fin*fout*fp;//文件指針
struct{
char?name[8];
int?address;
}vartable[maxvartablep];//符號表,用來記錄變量
struct
{
char?op[10];
char?argv1[10];
char?argv2[10];
char?result[10];
}pQuad[maxvartablep];//四元式
//QUATERNION?*pQuad;
//函數的定義
void?init();//初始化
void?P_declear();
void?P_begin();
char*?S_let();
void?P_analize();
void?S_if();
void?S_while();
void?P_begin();
void?enter(char?*name);
void?lookup(char?*name);
void?Scaner();
void?parser();
void?printQuaternion();
void?main()
{??
printf(“請按任意鍵來運行簡單的編譯器,謝謝“);
????getchar();??
system(“cls“);??//?清屏函數
init();//初始化
Scaner();//詞法掃描,把結果寫入Scaner.txt文件中
parser();//語法和語義分析程序
printf(“\n-----------------------------------------\n“);
printf(“程序編譯完畢,結果以四元式輸出如下\n\n“);
printQuaternion();//顯示輸出所有的四元式
printf(“\n-----------------------------------------\n“);
}??????
void?init()//初始化
{
line=1;
error_count=0;
}
void?error(int?n)//出錯處理
{
flag=1;
error_count++;
switch(n)
{
case?1:?printf(“Error?%d?格式出錯缺少‘program‘?錯于第%d行\n“error_countline);
break;
????case?2:?printf(“Error?%d?格式出錯缺少程序名錯于第%d行\n“error_countline);
break;
????case?3:?printf(“Error?%d?格式出錯缺少;?錯于第%d行\n“error_countline);
break;
????case?4:?printf(“Error?%d?格式出錯缺少var?錯于第%d行\n“error_countline);
break;
????case?5:?printf(“Error?%d?未寫任何語句錯于第%d行!\n“error_countline);
break;
????case?6:?printf(“Error?%d?程序結束缺少.?錯于第%d行!\n“error_countline);
break;
case?7:?printf(“Error?%d?說明語句出錯!?錯于第%d行\n“error_countline);
break;
case?8:?printf(“Error?%d?不存在匹配的end?錯于第%d行!\n“error_countline);
break;
case?9:?printf(“Error?%d?語句出錯錯于第%d行!\n“error_countline);
break;
case?10:printf(“Error?%d?賦值語句出錯錯于第%d行!\n“error_countline);
break;
case?11:?printf(“Error?%d?非法標識符錯于第%d行!\n“error_countline);
break;
case?12:?printf(“Error?%d?沒有匹配的注釋符‘*/‘?錯于第%d行!\n“error_countline);
break;
case?13:?printf(“Error?%d?非正常結束錯于第%d行!\n“error_countline);
break;
case?14:?printf(“Error?%d?非法字符錯于第%d行!\n“error_countline);
break;
case?15:?printf(“Error?%d?if語句出錯錯于第%d行!\n“error_countline);
break;
case?16:?printf(“Error?%d?while語句出錯錯于第%d行!\n“error_countline);
break;
case?17:?printf(“Error?%d?符號表溢出錯于第%d行!\n“error_countline);
break;
case?18:?printf(“Error?%d?變量重復定義錯于第%d行!\n“error_countline);
brea
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????33792??2010-05-31?13:35??綜合實驗\Debug\vc60.idb
?????文件??????45056??2010-05-31?13:35??綜合實驗\Debug\vc60.pdb
?????文件?????217178??2010-05-31?13:35??綜合實驗\Debug\綜合實驗.exe
?????文件?????230688??2010-05-31?13:35??綜合實驗\Debug\綜合實驗.ilk
?????文件??????53391??2010-05-31?13:35??綜合實驗\Debug\綜合實驗.obj
?????文件?????226120??2010-05-31?13:35??綜合實驗\Debug\綜合實驗.pch
?????文件?????443392??2010-05-31?13:35??綜合實驗\Debug\綜合實驗.pdb
?????文件????????408??2008-12-31?15:37??綜合實驗\fin.txt
?????文件????????970??2010-05-31?13:35??綜合實驗\Scaner.txt
?????文件????????277??2008-12-31?16:11??綜合實驗\種別碼.txt
?????文件??????21484??2010-05-31?13:29??綜合實驗\綜合實驗.cpp
?????文件???????3427??2010-05-31?13:29??綜合實驗\綜合實驗.dsp
?????文件????????524??2010-05-31?13:32??綜合實驗\綜合實驗.dsw
?????文件??????33792??2010-05-31?13:35??綜合實驗\綜合實驗.ncb
?????文件??????48640??2010-05-31?13:35??綜合實驗\綜合實驗.opt
?????文件???????1172??2010-05-31?13:35??綜合實驗\綜合實驗.plg
?????文件????1144023??2010-05-31?13:44??綜合實驗\編譯原理實驗報告.doc
?????目錄??????????0??2010-05-31?13:35??綜合實驗\Debug
?????目錄??????????0??2010-05-31?13:44??綜合實驗
-----------?---------??----------?-----??----
??????????????2504334????????????????????19
評論
共有 條評論