目錄編譯方法是計算機類專業特別是計算機軟體專業的一門重要專業課。設定該課程的目的在於系統地向學生講述編譯系統的結構、工作流程及編譯程式各組成部分的設計原理和實現方法,使學生通過學習既掌握編譯理論和方法方面的基本知識,也具有設計、實現、分析和維護編譯程式等方面的初步能力。編譯原理是一門理論性和實踐性都比較強的課程。進行上機實驗的目的是使學生通過完成上機實驗題目加深對課堂教學內容的理解。同時培養學生實際動手能力。
編譯實驗由三個既是獨立又能最終組成乙個系統的實驗組成,按照由淺入深進行排列,希望通過本實驗使學生更深學習並理解編譯的主要過程和相關方法。
詞法分析的目的是將輸入的源程式進行劃分,給出基本符號(token)的序列,並掠過註解和空格等分隔符號。基本符號是與輸入的語言定義的詞法所規定的終結符。
本實驗要求學生編制乙個讀單詞過程,從輸入的源程式中,識別出各個具有獨立意義的單詞,即基本保留字、識別符號、常數、運算子、分隔符五大類。並依次輸出各個單詞的內部編碼及單詞符號自身值。(遇到錯誤時可顯示「error」,然後跳過錯誤部分繼續進行)
1.課餘準備;2.上機一次到二次,第一次編好程式,第二次修改完善,並盡量擴充程式的功能;3.完成實驗報告2小時。
確定並熟悉開發工具,如j**a 、c、c++等;充分了解被處理的語言的語法特點(語言定義見下面)。寫好實驗報告,編好程式並測試。
準備:確定並熟悉開發工具,如j**a 、c、c++等;充分了解被處理的語言的語法特點(語言定義見下面)。寫好實驗報告,編好程式並測試。
#include #include #include #include #include #include file *fp;
char ch;
char *keyword[34]=;
char *operatornum[6]=;
char *comparison[7]=;
char *fuzhi = "=";
char *interpunction[8]="};
char *biaoshifu[5]=;//特殊識別符號
char *zhushifu[3]=;//注釋符
char *luoji[3]=;//邏輯運算子
bool search(char searchstr,int wordtype)//符號匹配
break;
case 2:
for(i=0;i<=5;i++)
break;
case 3:
for(i=0;i<=6;i++)
break;
case 4:
for(i=0;i<=7;i++)
break;
case 5:
for(i=0;i<=4;i++)
break;
case 6:
for(i=0;i<=2;i++)
break;
case 7:
for(i=0;i<=2;i++)
break;
}return false;
}char letterprocess (char ch)//字母處理函式
letter[i+1]='\0';
if (search(letter,1))
printf("<%s,key>\n",letter);
else
printf("<%s,id>\n",letter);
return(ch);}
char numberprocess(char ch)//數字處理程式
if(isalpha(ch)!=0 || point>=2)//數字後面是字元或小數點
num[i+1]='\0';
if(point>=2)
printf("錯誤!非法num:%s\n",num);
else
printf("錯誤!非法id:%s\n",num);
goto u;
} num[i+1]='\0';
printf("<%s,num>\n",num);
u: return(ch);}
char otherprocess(char ch)//其他處理程式
while ((isspace(ch)==0)&&(isalnum(ch)==0))
other[i+1]='\0';
if (search(other,2))
printf("<%s,op>\n",other);
else if (search(other,3))
printf("<%s,relop>\n",other);
else if (search(other,4))
printf("<%s,界符》\n",other);
else if (search(other,5))
printf("<%s,special char>\n",other);
else if (search(other,6))
printf("<%s,note>\n",other);
else if (search(other,7))
printf("<%s,logop>\n",other);
else if (strcmp(other,fuzhi)==0)
printf("<%s,賦值》\n",other);
else
printf("錯誤!非法字元:%s\n",other);
u: return (ch);}
int main ()
else
else
}} printf("詞法分析結束,謝謝使用。");
} fclose(fp);
return 0;
}
詞法分析程式實驗報告
實驗一詞法分析程式實驗 專業 商軟2班 姓名 區展翔 學號 201506110183 一 實驗目的 編制乙個詞法分析程式。二 實驗內容和要求 輸入 源程式字串 輸出 二元組 種別,單詞符號本身 三 實驗方法 步驟及結果測試 1.源程式名 詞法分析.c 可執行程式名 詞法分析.exe 2.原理分析及流...
詞法分析程式實驗報告
實驗 一 詞法分析實驗 專業 商業軟體工程 姓名王芷玲 學號201606110246 一 實驗目的 編制乙個詞法分析程式。二 實驗內容和要求 對字串表示的源程式,從左到右進行掃瞄和分解,根據詞法規則,識別出乙個乙個具有獨立意義的單詞符號,以供語法分析之用 發現詞法錯誤,則返回出錯資訊。三 實驗方法 ...
實驗一 詞法分析實驗
實驗一 詞法分析實驗 專業 商軟2班 姓名 李文輝 學號 201506110168 一 實驗目的 編制乙個詞法分析程式 二 實驗內容和要求 實驗內容 1.對字串表示的源程式 2.從左到右進行掃瞄和分解 3.根據詞法規則 4.識別出乙個乙個具有獨立意義的單詞符號 5.以供語法分析之用 6.發現詞法錯誤...