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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

实验二利用自动机理论实现词法分析器

發布時間:2024/3/12 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实验二利用自动机理论实现词法分析器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗二利用自動機理論實現詞法分析器

?1.實驗目的熟悉詞法分析階段的要求,掌握利用自動機理論實現詞法分析器的方法。

?2.實驗設備硬件:PC 機一臺軟件:Windows 系統,高級語言集成開發環境

3.實驗內容根據詞法要求采用自動機理論實現詞法分析器

4.實驗要求及步驟

  • 理解課件第3章26、27張的詞法表述和狀態圖表示;
  • 將課件第3章26張的狀態圖轉換為確定有限自動機的狀態轉換矩陣;
  • 根據DFA的狀態轉換矩陣實現詞法分析器;
  • 總結對比實驗一和實驗二。
  • 注:

    1、實現語言不限,推薦使用C語言,不可用腳本類語言;

    2、不允許使用任何語言的正規式控件實現實驗要求。

    根據改狀態圖寫代碼

    #include <iostream> using namespace std; #include<cstring> static int Array[14][10] = {{ 0, 1, 3, 5, 6, 7, 10, 11, 12, 13},{2, 1, 1, 2, 2, 2, 2, 2, 2, 2},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{4, 4, 3, 4, 4, 4, 4, 4, 4, 4},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{8, 8, 8, 8, 8, 9, 8, 8, 8, 8},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, }; int CheckCode(char ch) {if (ch == ' ') {return 0;} else if (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {return 1;} else if (ch >= '0' && ch <= '9') {return 2;} else if (ch == '=') {return 3;} else if (ch == '+') {return 4;} else if (ch == '*') {return 5;} else if (ch == ',') {return 6;} else if (ch == '(') {return 7;} else if (ch == ')') {return 8;} elsereturn 9; } int main() {string sr = "int a aaa aaa **** = ,";string temp = ""; char temp_char;//之前這個地方寫成int型了,想想運行也沒錯,但是還是改過來int now = 0;int next_input;cout << sr << endl;for (int i = 0; i < sr.length(); i++) {temp_char = sr[i];next_input = CheckCode(temp_char);while (1) {int flag = Array[now][next_input];if (flag == 0) {now = flag;temp_char = sr[++i];next_input = CheckCode(temp_char);} else if (flag == 1 | flag == 3 | flag == 7) { //非終態根據下個符號來判斷temp += temp_char;now = flag;temp_char = sr[++i];next_input = CheckCode(temp_char);} else if (flag == 2 | flag == 4 | flag == 8) { //終結符后帶*的處理if (flag == 2) {cout << '<' << temp << ',' << "標識符" << '>' << endl;} else if (flag == 4) {cout << '<' << temp << ',' << "數" << '>' << endl;} else if (flag == 8) {cout << '<' << temp << ',' << "*號終結符" << '>' << endl;}temp = "";now = 0;break;}else { //終結符后不帶*處理temp += temp_char;if (flag == 5) {cout << '<' << temp << ',' << "=號終結符" << '>' << endl;} else if (flag == 6) {cout << '<' << temp << ',' << "+號終結符" << '>' << endl;} else if (flag == 9) {cout << '<' << temp << ',' << "**號終結符" << '>' << endl;} else if (flag == 10) {cout << '<' << temp << ',' << "逗號終結符" << '>' << endl;} else if (flag == 11) {cout << '<' << temp << ',' << "(號終結符" << '>' << endl;} else if (flag == 12) {cout << '<' << temp << ',' << ")號終結符" << '>' << endl;} else {cout << '<' << temp << ',' << "其他終結符" << '>' << endl;}temp = "";now = 0;break;}}} }

    運行截圖:

    并無考慮c語言c++保留字,誤噴僅僅供個人編譯語言考試參考使用

    代碼中Array 和CheckCore 函數參考學長的,如有侵權聯系我刪除?

    總結

    以上是生活随笔為你收集整理的实验二利用自动机理论实现词法分析器的全部內容,希望文章能夠幫你解決所遇到的問題。

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