日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DFA的构造C语言,DFA的编程实现含源代码实验报告剖析

發布時間:2024/9/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DFA的构造C语言,DFA的编程实现含源代码实验报告剖析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《DFA的編程實現含源代碼實驗報告剖析》由會員分享,可在線閱讀,更多相關《DFA的編程實現含源代碼實驗報告剖析(20頁珍藏版)》請在人人文庫網上搜索。

1、實驗一(一)程序設計語言及其編譯器實現概覽(2小時) 實驗目的:學習一門簡單的程序設計語言的定義及其編譯器實現 實驗任務:針對一門簡單的程序設計語言,閱讀其定義文檔,初步了解其編譯器的源代碼。 實驗內容: (1)選擇一門語言:TINY或其它語言也可(需自備其編譯器的源代碼)。 (2)閱讀其定義文檔,了解語言定義的方法,包括:詞法、語法、語義、運行時環境、目標機器、目標語言等內容。 (3)了解其編譯器源代碼。 ? 對TINY語言編譯器,其源代碼由多個文件組成,請弄清楚每個文件的作用是什么。詳情請見編譯原理及實踐第1.7節。請做一個C+工程文件(Win32 Console Application,。

2、 tiny.dsp),把它們組織起來,然后編譯成可執行文件(tiny.exe),即為TINY語言編譯器。然后用它編譯TINY語言示例源代碼(sample.tny)。看看編譯生成的目標文件(sample.tm)是怎樣的。要運行目標程序,還需要一個虛擬機,名為TM機。TM機是以軟件形式存在的,其源代碼為tm.c,需要編譯生成可執行文件tm.exe。然后將目標程序作為TM機的輸入運行TM機即可得到所期待的結果。要求讀懂main.c、globals.h、util.h、scan.h和util.c、scan.c等文件,三人一組進行討論,給每一行加上注釋,總結你們各自對程序的理解和閱讀程序的收獲,每組提交1。

3、份加了注釋的文件和心得。有能力的同學可加上tm.c。 實驗一(二)DFA的編程實現(2小時) 實驗目的:通過本次實驗,加深對DFA及其識別的語言的理解,學習對一般的DFA的表達方法與編程實現方法。 實驗任務:編寫一個C語言程序,模擬實現DFA識別字符串的過程。 實驗內容:(1)DFA的輸入;(2)DFA的存儲與讀寫;(3)DFA的正確性檢查;(4)DFA的語言集列表顯示;(5)DFA的規則字符串判定; 內容說明: (1)DFA的輸入: 分別輸入DFA的“字符集”、“狀態集”、“開始狀態”、“接受狀態集”、“狀態轉換表”等內容,并保存在設定的變量中。 (2)DFA的存儲與讀寫: 將上述DFA的五。

4、元組保存在一個文本文件中,擴展名指定為.dfa。請自行設計DFA文件的存儲格式,并說明其含義。能將保存在內存變量中的DFA寫入DFA文件,也能將DFA文件讀入內存中。(思考:對稀疏DFA(轉換表中為空的地方較多)或用“或”表達轉換的DFA(如下的測試用例三),如何改進DFA轉換表的表達。) (3)DFA的正確性檢查: 檢查所有集合的元素的唯一性。 檢查“開始狀態”是否唯一,并是否包含在“狀態集”中。 檢查“接受狀態集”是否為空,并是否包含在“狀態集”中。檢查“狀態轉換表”是否滿足DFA的要求。 檢查“狀態轉換表”并非填滿時的處理是否得當 (4)DFA的語言集列表顯示: 輸入待顯示的字符串的最大。

5、長度N,輸出以上定義的DFA的語言集中長度N的所有規則字符串。(提示:注意算法中while循環的次數) (5)DFA的規則字符串判定: 輸入(或用字符集隨機生成)一個字符串,模擬DFA識別字符串的過程判定該字符串是否是規則字符串(屬于DFA的語言集)。 測試用例: DFA(一) DFA(二) DFA(三) 實驗要求: 選擇”的算法case雙層+循環while按照編譯原理及實踐參考書第二章中描述的“編程實現一般的DFA。 要求能通過以上三個測試用例的測試。 完成內容中(1)(5)部分,可得C。 完成內容中(1)(2)(5)部分,可得B。 完成內容中(1)(2)(4)(5)部分,可得A。 完成全部。

6、內容,可得獎勵。 判定算法概要: 準備:開始狀態s, 接受狀態集F, 狀態轉換表T(s, c), s?S, c? 0c = getchar(); s = 開始狀態s; 0while ( c != EOF ) / 輸入未結束則循環 s = T(s, c); if (s = NULL) error(); c = getchar(); if (s ? 接受狀態集F) accept (); else error (); 通用DFA存儲格式的建議:(用以上的第三個測試DFA為例) 3 / 字符集中的字符個數 (以下兩行也可合并成一行) / * o / 以空格分隔的字符集。O代表任意非/和*的字符 5 /。

7、 狀態個數 (以下兩行也可合并成一行) 1 2 3 4 5 / 狀態編號。若約定總是用從1開始的連續數字表示,則此行可省略 1 / 開始狀態的編號。若約定為1,則此行可省略 1 / 結束狀態個數。若約定為1,則此行可省略 5 / 結束狀態的編號 2 -1 -1 / 狀態1的所有出去的轉換。按字符集中的字符順序給出。-1表示出錯狀態 -1 3 -1 3 4 3 5 4 3 -1 -1 -1 實驗報告: 同時上交紙質報告與電子版報告。紙質報告以實驗分析、實驗中遇到的問題及解決方法、實驗測試(含屏幕截圖)、實驗心得等為主,不得大量引用源程序(引用源程序總行數不得超過100行)。電子版報告以源程序、測。

8、試用例、輸出文件等為主,包括紙質報告的電子版,須確保提并的源程序能編譯運行,否則不要上交。電子版請發送到248133074qq.com,郵件標題請寫明學號、姓名與實驗編號,形如: 。不得抄襲實驗報 告與源程序,否則后果自負!提高內容: (1)圖形化的用戶界面; (2)任意DFA的狀態轉換圖、狀態轉換表的圖形繪制; 附實驗報告 源碼 實驗一DFA的編程實現 實驗目的: 通過本次實驗,加深對DFA及其識別的語言的理解,學習對一般的DFA的表達方法與編程實現方法。 實驗任務: 編寫一個C語言程序,模擬實現DFA識別字符串的過程。 實驗內容: (1)DFA的輸入;(2)DFA的存儲與讀寫;(3)DFA。

9、的正確性檢查;(4)DFA的語言集列表顯示;(5)DFA的規則字符串判定; 實驗分析: DFA的初始化 一個DFA的基本信息 狀態集、字符集、開始狀態、結束狀態集、狀態轉換表; 在程序中狀態集、字符集、開始狀態、結束狀態集都用string類型來表示,即可不用考慮用戶輸入內容的長度。但缺點是字符集只能是字符而不可以是字符串。 狀態轉換表:為三個字符的字符串,第一個為當前狀態,第二個為輸入字符,第三個為下一狀態。 用vector容器存放轉換函數的內容 字符串判斷 DFADFA初始化一個,后可以通過一下算法判斷一個字符串是否符合該。 判定算法概要: 準備:開始狀態s0, 接受狀態集F, 狀態轉換表T。

10、(s, c), s?S, c? c = getchar(); s = 開始狀態s0; while ( c != EOF ) / 輸入未結束則循環 s = T(s, c); if (s = NULL) error(); c = getchar(); if (s ? 接受狀態集F) accept (); else error (); 在實際編寫代碼中的體現為 void identify() /判斷字符串 coutstr; int i=0; char present=StartStates; while (i容器存儲即可; 實驗用例:實驗結果: 的初始化DFA判斷字符串: 顯示小于N的語言集: 文件。

11、:DFA讀取實驗總結: 在這次實驗中,學習對一般的DFA的表達方法與編程實現方法。對課本提供的算法有了更深刻的認識。在編寫和調試代碼的過程中對自身的編程能力也有了很大的提高。對自動機和其識別語言有了更透徹的理解。在動手編程之前一定要好好明確實驗的理論準備和思路的理清,能幫助我們在實驗過程中少走更多的彎路。總之在這次實驗中收獲很多,提高了動手能力和分析問題的能力。 源代碼: /構造一個DFA #include #include #include #include using namespace std; class TransitionTable public: char present; /當。

12、前狀態 char next; /下一狀態 char input; /輸入字符 TransitionTable(char P,char I,char D) present=P; next=D; input=I; ; class DFA public: DFA() coutselect; if(select=1) inti(); if(select=2) read(); string States; /狀態集 char StartStates; /開始狀態 string FinalStates; /結束狀態集 string Alphabet; /字符集 vector Trans; /轉換函數 vo。

13、id inti() /初始化自動機 潣瑵?請輸入有限狀態集S:States; 潣瑵?請輸入字符集A:Alphabet; 潣瑵?請輸入轉換函數MOVE -格式為:當前狀態-輸入字符-下一狀態:(輸入#結束輸入)input; if(strcmp(input,#)=0) break; TransitionTable Temp(input0,input1,input2); Trans.push_back(Temp); 潣瑵?請輸入開始狀態集S0:StartStates; 潣瑵?請輸入結束狀態集F:FinalStates; void identify() /識別字符串 潣瑵?請輸入字符串:str; int i=0; char present=StartStates; while(iN; example.Traversal(example.StartStates,N); example.write(); system(pause); return 0; /*測試用例 輸入狀態轉換表 0a1 0b2 1b2 2a1 1a3 2b3 3a3 3b3 # 0a1 0b2 2a1 1b2 1a3 2b5 3a3 5b5 3b4 5a6 6b4 4a6 6a3 4b5 */。

總結

以上是生活随笔為你收集整理的DFA的构造C语言,DFA的编程实现含源代码实验报告剖析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。