一、實驗目的
設計、編制並除錯乙個簡單語言cp(compiler principle)的詞法分析程式,加深對詞法分析原理的理解。
二、實驗內容
說明(1)cp語言是大小寫敏感語言;
(2)字母為a-za-z,數字為0-9;
(3)學有餘力同學可以在上述詞法要求基礎上進行擴充和改造;
(4)每行**中從#開始的部分為注釋部分(參考python語法)
設計要求
(1) 給出各類單詞符號的分類編碼(可以根據自己程式的需要來給各種類別單詞編碼,給每個詞法單位乙個編碼,也可以給乙個類別裡所有符號都編同乙個編碼)。
(2) 詞法分析程式應該能發現輸入串中的錯誤
(3) 詞法分析作為單獨一遍,將詞法分析程式輸出的二元式序列儲存為中間檔案形式【也可以在螢幕視窗直接輸出】
三、實驗要求
寫出程式框圖、設計過程、主要資料結構等。
寫出程式源**,並除錯通過,輸出實驗結果。
四、實驗**
#include
#include
#include
using
namespace std;
struct
keywords =
;struct
operators =
;//運算子
struct
boundaries =
;//分界符
struct
identifieres =
;//識別符號,以下劃線或字母開頭的字母數字下劃線組成的符號串。
struct
unsigned_integer =
;//無符號整數num:數字串
string changinstr
(vector<
char
> a)
return temp;
}//觀察哪些是分界符,不是分界符則積累
intmain()
if(onestr.
size()
>0)
if(k == unsigned_integer.number)
else cout <<
"《數字,"
<< k <<
'>';}
else}if
(k == keywords.number)
if(k == identifieres.number)
else cout <<
"《識別符號,"
<< k <<
">";}
} onestr.
clear()
;}if(strin[i]
=='('
|| strin[i]
==')'
|| strin[i]
==','
|| strin[i]
==';'
|| strin[i]
=='#')}
}else
if(strin[i]
=='+'
|| strin[i]
=='-'
|| strin[i]
=='*'
|| strin[i]
=='/'
|| strin[i]
=='>'
|| strin[i]
=='|| strin[i]
=='='
|| strin[i]
==':='
|| strin[i]
=='>='
|| strin[i]
=='<='
|| strin[i]
=='<>'
|| strin[i]
=='++'
|| strin[i]
=='--'
)else
if(strin[i]
=='#'
) i++;}
} cout << endl;
//輸出
cout <<
"identifieres:"
;for
(int i =
0; i < identifieres.number; i++
) cout <<
"unsigned_integer:"
;for
(int i =
0; i < unsigned_integer.number; i++
)system
("pause");
}
五、實驗結果
編譯原理詞法分析程式設計(C )
1.對源程式進行理解,從pl0文件中抽取出詞法部分的 單獨作為乙個程式,變成乙個詞法程式,用visual6.0或者dev c 進行編譯,編譯成為可執行檔案 詞法分析部分的 如下 include include include include include include include inclu...
編譯原理詞法分析
編譯原理實驗一 詞法分析練習 include include include define tokenmax 100 define progmax 1000 define k esc 27 void analytics 詞法分析 void scanner 輸入掃瞄 bool isletter cha...
詞法分析(編譯原理)
詞法分析 英語 lexical analysis 是電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer,簡稱lexer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱...