編譯原理 乙個詞法分析器原始碼的剖析

2021-08-26 21:19:21 字數 2380 閱讀 6923

一,詞法分析器

作用:讀取源程式的輸入字元、將他們組成詞素,生成並輸出乙個詞法單元序列

二,設計原理

1)c程式語言的符號分類:關鍵字、識別符號、常數、運算子、界符

2)詞法分析器的二元輸出:《單詞種別,單詞符號屬性值》

3)正規式和狀態轉換圖

4)程式說明:

1>main 中開啟原始碼檔案,從第乙個字元流讀取

2>如果第乙個是字元,則交給letterprocess(str); 處理

3>如果第乙個是數字,則交給numberprocess(str); 處理

4>如果第乙個是數字,則交給otherprocess(str);處理

5>注意上述過程中,file *fp每讀取乙個詞素,fp都會移動到下乙個詞素。對於空格的處理:isspace(ch)檢查引數c是否為空格字元,也就是判斷是否為空格('')、定位字元

('\t')、cr('\r')、換行('\n')、垂直定位字元('\v')或

翻頁('\f')的情況

這個程式輸出結果情況彙總:關鍵字、算術運算子、關係運算子、分割符號、特殊符號、注釋符號、邏輯運算子、非法符號

三,程式原始碼

#include #include #include #include #include #include #define null 0

file *fp;

char ch;

char *keyword[34]=;

char *operatornum[6]=;

char *comparison[8]=;

char *interpunction[8]="};

char *biaoshifu[6]=;//特殊識別符號

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<=7;i++)

break;

case 4:

for(i=0;i<=7;i++)

break;

case 5:

for(i=0;i<=5;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))

else

return(ch);

}char numberprocess(char ch)//數字處理程式

if(isalpha(ch)!=0)//數字後面是字元

num[i+1]='\0';

printf("錯誤!非法識別符號:%s\n",num);

goto u;

} num[i+1]='\0';

printf("

u: return(ch);

}char otherprocess(char ch)//其他處理程式

while ((isspace(ch)==0)&&(isalnum(ch)==0))

other[i+1]='\0';

if (search(other,2))

printf("

else if (search(other,3))

printf("

else if (search(other,4))

printf("

else if (search(other,5))

printf("

else if (search(other,6))

printf("

else if (search(other,7))

printf("

else

printf("錯誤!非法字元:%s\n",other);

u: return (ch);

}int main ()

};printf("詞法分析結束,謝謝使用!\n");

//printf("點任意鍵退出!\n");

}//c=getch();

return 0;

}

編譯原理 詞法分析器

1 從源程式檔案中讀入字元。2 統計行數和列數用於錯誤單詞的定位。3 刪除空格類字元,包括回車 製表符空格。4 按拼寫單詞,並用 內碼,屬性 二元式表示。屬性值 token 的機內表示 5 如果發現錯誤則報告出錯 6 根據需要是否填寫識別符號表供以後各階段使用 int tag 0 設立標誌 一開始本...

編譯原理(一)詞法分析器

詞法分析器的功能是輸入源程式,輸出單詞符號。單詞符號是乙個程式語言的基本語法符號。程式語言的符號一般可以定義為以下幾種 關鍵字 是由程式語言定義的具有固定意義的識別符號,也稱這些識別符號為保留字或基本字。例如 c 語言中的define do for while if else等 識別符號用來表示各種...

編譯原理,例 詞法分析器

編譯原理課作業要求自己寫乙個詞法分析器,我嘗試寫了一下。詞法分析 電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱為...