資源簡介
大學課程編譯原理的實驗報告,c/c++編寫,共三個實驗階段,以及三個合并成完成版。每一個都有實驗報告文檔以及代碼,附帶使用說明。

代碼片段和文件信息
#?include?
#?include?
#?include?
#?include?
#?define?LB?0//(
#?define?RB?1//)
#?define?PL?2//+
#?define?MI?3//-
#?define?MU?4//*
#?define?DI?5//?/
#?define?II?6
#?define?WE?7//#
#?define?e?8
#?define?t?9
#?define?f?10
#?define?BEGIN?11
#?define?END?12
#?define?IF?13
#?define?THEN?14
#?define?ELSE?15
#?define?WHILE?16
#?define?DO?17
#?define?ID?18
#?define?FCON?19
#?define?LT?20
#?define?LE?21
#?define?EQ?22
#?define?NE?23
#?define?GT?24
#?define?GE?25
#?define?PU?26
#?define?PLU?27
#?define?MIN?28
#?define?MUL?29
#?define?DIV?30
#?define?IS?31
#define?idlen?20//此編譯程序允許標識符的最大長度
#define?MAX_KEY_NUMBER?20??//此編譯程序允許的最大關鍵字數量
#define?KEY_WORD_END?“waiting?for?your?expanding“??
char?*KeyWordTable[MAX_KEY_NUMBER]={“begin““end“?“if“?“then“?“else“?“while““do“KEY_WORD_END};//要添加關鍵字
void?analyse();
void?push(intstruct?type);
void?act(int);
int?advance(struct?type);//函數聲明
char?TOKEN[idlen];//存儲從文檔中讀取的字符串
struct?type
{
char?prename[idlen];//規約前的name
char?name;
float?num;
}type1type2type11type12;//type1表示經過詞法分析后讀入的詞的類型,若是浮點型,則name有值,type2表示規約出的表達式
struct?type?fenxi[100];//分析棧
int??zhuangtai[100];//狀態棧
int?k?=?0;//分析棧指針
int?TopStat;//SLR1分析表的行
int?InpSym;//SLR1分析表的列
int?ifSpace?=?0;//讀入的是否是空格、制表等無意義字符
int?isRight?=?1;//文法正確標志位
int?endtext?=?0;//文檔結束標志位
int?signal?=?0;//判斷輸入浮點型數字時是否重復輸入小數點的標志位
int?lookup?(char?*token)
{
int?n=0;
while?(strcmp(KeyWordTable[n]?KEY_WORD_END))?//strcmp比較兩串是否相同,若相同返回0
{
if?(!strcmp(KeyWordTable[n]?token))?//比較token所指向的關鍵字和保留字表中哪個關鍵字相符
{
return?n+11;?//根據單詞分類碼表I,設置正確的關鍵字類別碼,并返回此類別碼的值
break;
}
n++;
}
return?0;?//單詞不是關鍵字,而是標識符
}
void?out(int?identifychar?*tokenFILE?*f2)
{
switch(identify)
{
case?BEGIN:
fprintf(f2“(begin%s)\n“token);
break;
case?END:
fprintf(f2“(end%s)\n“token);
break;
case?IF:
fprintf(f2“(if%s)\n“token);
break;
case?THEN:
fprintf(f2“(then%s)\n“token);
break;
case?ELSE:
fprintf(f2“(else%s)\n“token);
break;
case?WHILE:
fprintf(f2“(while%s)\n“token);
break;
case?DO:
fprintf(f2“(do%s)\n“token);
break;
case?ID:
fprintf(f2“(ID%s)\n“token);
type1.name?=?‘i‘;
strcpy(type1.prenametoken);
break;
case?FCON:
fprintf(f2“(FCON%s)\n“token);
type1.name?=?‘i‘;
type1.num?=?(float)?atoi(token);
strcpy(type1.prenametoken);
break;
case?LE:
fprintf(f2“(LE%s)\n“token);
break;
case?NE:
fprintf(f2“(NE%s)\n“token);
break;
case?LT:
fprintf(f2“(LT%s)\n“token);
break;
case?EQ:
fprintf(f2“(EQ%s)\n“token);
break;
case?GE:
fprintf(f2“(GE%s)\n“token);
break;
case?GT:
fprintf(f2“(GT%s)\n“token);
break;
case?PU:
fprintf(f2“(PU?%s?)\n“token);
break;
case?PLU:
fprintf(f2“(PLU?%s?)\n“token);
type1.name?=?‘+‘;
break;
case?MIN:
fprintf(f2“(MIN?%s?)\n“token);
type
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-03-03?11:20??編譯原理實驗報告\
?????目錄???????????0??2017-12-24?23:42??編譯原理實驗報告\1\
?????文件????????4643??2017-12-24?21:29??編譯原理實驗報告\1\shiyan1.cpp
?????文件???????28133??2017-12-23?22:29??編譯原理實驗報告\1\編譯實驗一.docx
?????目錄???????????0??2017-12-24?23:42??編譯原理實驗報告\1+2\
?????文件????????9923??2017-12-24?21:28??編譯原理實驗報告\1+2\1+2.cpp
?????文件???????16424??2017-12-24?19:49??編譯原理實驗報告\1+2\編譯1+2.docx
?????目錄???????????0??2017-12-24?23:42??編譯原理實驗報告\1+2+3\
?????文件???????12206??2017-12-24?23:15??編譯原理實驗報告\1+2+3\1+2+3.cpp
?????文件???????54081??2017-12-24?23:20??編譯原理實驗報告\1+2+3\1+2+3.docx
?????文件???????12206??2017-12-24?23:15??編譯原理實驗報告\1+2+3綜合版.cpp
?????目錄???????????0??2017-12-24?23:42??編譯原理實驗報告\2\
?????文件????????4961??2017-12-24?21:29??編譯原理實驗報告\2\shiyan2.cpp
?????文件???????52993??2017-12-23?22:22??編譯原理實驗報告\2\編譯實驗二.docx
?????文件?????????239??2017-12-24?23:22??編譯原理實驗報告\使用說明.txt
?????文件??????319695??2017-12-24?23:41??編譯原理實驗報告\編譯原理實驗報告.docx
評論
共有 條評論