編譯原理課程
2015~2023年度第2學期
實驗題目:詞法分析程式設計
院系: 計算機學院
班級130808
學號: 3113003906
姓名: 王峰
任課教師: 白明成績評定:
完成日期:2023年 5 月 21 日
一、 程式設計題目與說明
設計乙個關於某種高階語言子集的詞法分析程式
功能包括:輸入源程式字串,識別出單詞符號串,同時檢查詞法錯誤。
二、 核心**(或全部**)
#include<>
#include<>
#include<>
#include<>
char *key[10]=;
char word[20],ch;
int isalpha(char c判斷是否為字母
if(((c<='z')&&(c>='a'))||((c<='z')&&(c>='a'))) return 1;
else return 0;
}int isnum(char c判斷是否為數字
if(c>='0'&&c<='9')
return 1;
else return 0;
}int iskey(char *word)
} return 0;
}void scanner(file *fp掃瞄函式
char word[20]=;
char ch;
int i,c;
ch=fgetc(fp); //獲取字元,指標fp並自動指向下乙個字元
if(isalpha(ch)||ch=='_')
word[i]='\00' 代表字元結束(空格)
fseek(fp,-1,1回退乙個字元
c=iskey(word判斷是否是關鍵字
if(c==0) printf("%s\t$普通識別符號\n\n",word);//不是關鍵字
else if(c==2) printf("%s\t$主函式\n\n",word);
else printf("%s\t$關鍵字\n\n",word輸出關鍵字
}else開始判斷的字元不是字母
if(isnum(ch判斷是否是數字
word[0]=ch;
ch=fgetc(fp);
i=1;
while(isnum(ch))
word[i]='\0';
fseek(fp,-1,1回退
printf("%s\t$無符號實數\n\n",word);
}else開始判斷的字元不是字母也不是數字
if(isalpha(ch)) printf("%s\t$型別識別符號\n\n",word);
else
}} main()
printf("\n詞法分析結果如下n");
do //忽略空格,空白,和換行
else
}while(ch!='#'); return(0);
}三、 測試資料和實驗結果分析
測試檔案為d:\檔案內容為:if _else else _0abv 0a _12a 1a _a_ #
編譯原理實驗
實驗三中間的 優化 一 實驗目的 掌握區域性優化方法 提高機器的執行速度 二 相關知識 某些編譯程式在中間 或目標 生產之後要對其進行優化,所謂優化就是對 進行等價的變換。而變換後的 執行結果與變換前的 執行結果相同。而執行速度加快或占用記憶體空間減少。中間的 優化就是對中間 進行等價的變換。基本塊...
編譯原理實驗
第一篇高階程式語言到中間語言 第一章編譯概論及程式語言規定 1 1 編譯程式概論 計算機執行乙個高階語言程式一般要分為兩步 第一步,用乙個編譯程式把高階語言翻譯成機器語言程式 第二步,執行所得的機器語言程式,求得計算結果。編譯程式的工作貫穿於從輸入源程式開始到輸出目標程式為止的整個過程,是非常複雜的...
編譯原理實驗三
實驗報告 第 2 組 專業 軟體工程 班級 3 學號 123012012095 94 101 103 姓名吳藝萍 陳璐 崔旻 劉超群 實驗日期 2014 年 3 月 20 告退發 訂正 重做 課程實驗名稱遞迴下降的 分析 一 實驗目的 1.學會用語法圖來形式化地描述一門簡單的語言 2.掌握遞迴下降的...