編譯原理實驗一 DFA的程式設計實現

2021-09-10 08:56:11 字數 2245 閱讀 1249

初步認識編譯器系統和目標機,體會系統程式設計,了解條件編譯和增量程式設計。

獲取tiny語言編譯器相關源**。

了解tiny語言定義,可參見文件《tiny語言及其編譯器實現》。第一次實驗時對tiny語言有大致了解即可,後續實驗中會陸續閱讀更多tiny語言及其編譯器的文件,詳細了解其詞法、語法、語義、執行時環境、目標機器、目標語言等內容,最終能編寫出該語言的編譯器。

生成和使用tiny語言的編譯器。

大致了解tiny編譯器源**。

生成tiny編譯器

生成tm虛擬機器

通過條件編譯生成部分編譯器

使用flex生成tiny編譯器

使用bison生成tiny編譯器

具體步驟詳見tiny編譯器的使用.ppt。

1.實驗資料

tiny編譯器及tm虛擬機器源**

flex和bison程式

開發環境

相容c的開發環境,如:vs或者dev c++。

此部分實驗學生自行完成,要求人人過關。

(一)不寫實驗報告,把心得體會寫在實驗一(二)的實驗報告的心得體會部分。

這個實驗環境配置比較麻煩,當時做實驗的時候見過很多人環境配置出錯,甚至裝了xp虛擬機器的都有。。。建議使用vc++6.0版本建立工程,可以省去很多麻煩。

通過本次實驗,加深對dfa及其識別的語言的理解,學習對一般的dfa的表達方法與程式設計實現方法。

編寫乙個c語言程式,模擬實現dfa識別字串的過程。

dfa的輸入;

dfa的儲存與讀寫;

dfa的正確性檢查;

dfa的語言集列表顯示;

dfa的規則字串判定;

(1)dfa的輸入:

分別輸入dfa的「字符集」、「狀態集」、「開始狀態」、「接受狀態集」、「狀態轉換表」等內容,並儲存在設定的變數中。

(2)dfa的儲存與讀寫:

將上述dfa的五元組儲存在乙個文字檔案中,副檔名指定為.dfa。請自行設計dfa檔案的儲存格式,並說明其含義。能將儲存在記憶體變數中的dfa寫入dfa檔案,也能將dfa檔案讀入記憶體中。(思考:對稀疏dfa**換表中為空的地方較多)或用「或」表達轉換的dfa(如下的測試用例三),如何改進dfa轉換表的表達。)

(3)dfa的正確性檢查:

檢查所有集合的元素的唯一性。

檢查「開始狀態」是否唯一,並是否包含在「狀態集」中。

檢查「接受狀態集」是否為空,並是否包含在「狀態集」中。

檢查「狀態轉換表」是否滿足dfa的要求。

檢查「狀態轉換表」並非填滿時的處理是否得當…

(4)dfa的語言集列表顯示:

(5)dfa的規則字串判定:

輸入(或用字符集隨機生成)乙個字串,模擬dfa識別字串的過程判定該字串是否是規則字串(屬於dfa的語言集)。

#include#include#include#include#includeusing namespace std;

struct transitiondiagram //狀態轉換圖類

};struct dfa_class //dfa結構體

dfa; //乙個物件

int find_letter(char a,string s) //從乙個字串s中查詢是否有字元a

while(check_letter(dfa.letter)==0);

dfa.letter+='o'; //輸入字符集之後,在字符集的最後加上乙個o代表others

dowhile(check_letter(dfa.state)==0);

dowhile(find_start_state(dfa.start_state)==0 || dfa.start_state.length()>1);

dowhile(find_end_state(dfa.end_state)==0);

cout<<"請輸入狀態轉換表,格式(1a2),o代表其他字元,輸入星號『*』停止:"<>rule)

cout<<"檔案讀取完畢!"<>choice;

if(choice==1)

init_and_input();

else

read();

write();

cout<<"請輸入乙個整數,求滿足dfa長度不大於該整數的所有字串:";

cin>>n;

generate(dfa.start_state[0],n);

cout<<"一共有上述"<>s;

identify(s);

return 0;

}

編譯原理實驗一 實現簡單的DFA

標頭檔案 include include 巨集定義 define max 100 define max1 1000 變數定義 int char num 字符集數目 char chars max 字符集 int state num 狀態數目 int states max 狀態集 int start s...

編譯原理 DFA的程式設計實現

編寫乙個c語言程式,模擬實現dfa識別字串的過程。dfa的輸入 dfa的儲存與讀寫 dfa的正確性檢查 dfa的語言集列表顯示 dfa的規則字串判定 dfa的輸入 分別輸入dfa的 字符集 狀態集 開始狀態 接受狀態集 狀態轉換表 等內容,並儲存在設定的變數中。dfa的儲存與讀寫 將上述dfa的五元...

編譯原理實驗 將NFA轉化為DFA

將nfa轉化為dfa 1.實驗目的 輸入 非確定有限 窮 狀態自動機。輸出 確定化的有限 窮 狀態自動機 2.實驗原理 採用子集對nfa轉dfa。1 若nfa的全部初態為s1,s2,sn,則令dfa的初態為 s s1,s2,sn 其中方括號用來表示若干個狀態構成的某一狀態。2 設dfa的狀態集k中有...