chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在main函數(shù)中運行的自動機

冬至子 ? 來源:趙同學(xué)的代碼時間 ? 作者:Jun. ? 2023-05-23 11:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有了前文中的積木,繼續(xù)實現(xiàn)一個詞法分析器就不再困難。

先回顧一下各個模塊:

然后我們試圖將他們組裝起來,因為一開始實現(xiàn)的都是零件(子函數(shù))部分,本文主要介紹在main函數(shù)中運行的自動機。

還記得-1篇中的DFA嗎?

圖片

經(jīng)過第0篇,以及滿足題目要求,我們最終的DFA應(yīng)該是這樣:

圖片

流程大致為:

圖片

按照以上思路,經(jīng)過不斷地調(diào)試完善,主函數(shù)設(shè)計為:

int main()
{
    initialize();
    string tmp;
    char c;
    while((c = getchar()) != EOF)
    {
        if(isspace(c)) // 忽略空白
            continue;


        if(isdigit(c)) // 如果是數(shù)字開頭
        {
            ungetc(c, stdin);
            cout << "DIGIT : " << num() << endl;
            continue;
        }


        char peek;
        peek = getchar(); // 一步提前量
        if((c == '+' || c == '-') && isdigit(peek)) //輸入帶符號數(shù)
        {
            ungetc(peek, stdin);
            ungetc(c, stdin);
            cout << "DIGIT : " << num() << endl;
            continue;
        }

        if(c == '/' && peek == '*') //輸入注釋
        {
            cout << "COMMENTS : /*" << comments() << endl;
            continue;
        }
        int tkn = 0;
        string s;
        if(!isalnum(c)) // 輸入c為專用符號
        {
            s += c;
            if(peek == '=') // 所定義的雙目運算符中第二個只有 = 可以偷懶;
                s += peek;
            else ungetc(peek, stdin);
            tkn = query(s);
        }
        if(!tkn){  // 若不是專用符號開頭,即為字母開頭
            ungetc(peek, stdin);
            s += c;
            while((c = getchar()) != EOF) // 讀入這一串字母
            {
                if(isspace(c)) break;
                if(isalnum(c) || c == '_')
                    s += c;
                else{
                    ungetc(c, stdin);
                    break;
                }
            }
            tkn = query(s); // 查詢token
        }
        switch (tkn) // 依據(jù)token打印
        {
        case 1:
            cout << "KEYWORD : " << s << endl;
            break;
        case 2:
            cout << "BASIC : " << s << endl;
            break;
        case 3:
            cout << "IDENTITY : " << s << endl;
            break;
        case 5:
            cout << "SYMBOL : " << s << endl;
            break;

        default:
            break;
        }


    }
    return 0;
}

測試

使用測試樣例1:

{  /* An example */
    int i,j; float x; float[100] a;
    while ( true) {
      do i = i + 1; while ( a[i] < x);
    if ( i >= j ) break;
    x = a[i];
      }
    }

輸出結(jié)果:

// line 1   {  /* An example */
SYMBOL : {
COMMENTS : /* An example */


// line 2   int i,j; float x; float[100] a;
BASIC : int
IDENTITY : i
SYMBOL : ,
IDENTITY : j
SYMBOL : ;
BASIC : float
IDENTITY : x
SYMBOL : ;
BASIC : float
SYMBOL : [
DIGIT : 100
SYMBOL : ]
IDENTITY : a
SYMBOL : ;


// line 3   while ( true) {
KEYWORD : while
SYMBOL : (
KEYWORD : true
SYMBOL : )
SYMBOL : {


// line 4  do i = i + 1; while ( a[i] < x);
KEYWORD : do
IDENTITY : i
SYMBOL : =
IDENTITY : i
SYMBOL : +
DIGIT : 1
SYMBOL : ;
KEYWORD : while
SYMBOL : (
IDENTITY : a
SYMBOL : [
IDENTITY : i
SYMBOL : ]
SYMBOL : <
IDENTITY : x
SYMBOL : )
SYMBOL : ;


// line 5   if ( i >= j ) break;
KEYWORD : if
SYMBOL : (
IDENTITY : i
SYMBOL : >=
IDENTITY : j
SYMBOL : )
KEYWORD : break
SYMBOL : ;


// line 6   x = a[i];
IDENTITY : x
SYMBOL : =
IDENTITY : a
SYMBOL : [
IDENTITY : i
SYMBOL : ]
SYMBOL : ;


// line 7   }
SYMBOL : }

// line 8   }
SYMBOL : }

可以發(fā)現(xiàn)輸出結(jié)果是完全正確的。

測試樣例2:測試數(shù)字

+1212.551e1589

輸出:

DIGIT : +1212.551e1589

好,到此,我們就完成了本次實驗任務(wù),一個簡單的詞法分析器的設(shè)計,在設(shè)計過程中,我們使用到了Trie樹這一數(shù)據(jù)結(jié)構(gòu),使得代碼變得美觀了許多,同時,針對較為復(fù)雜的數(shù)字讀取行為,我們設(shè)計了一個DFA確定的有限狀態(tài)自動機完成,最終,我們在main函數(shù)中,將他們拼接起來,就形成了最后的詞法分析器,整個實驗用時半天,整體思想并不難理解,相信大家如果從頭看到此處應(yīng)該邏輯會相當(dāng)清晰。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 分析器
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    12845
  • 有限狀態(tài)自動機

    關(guān)注

    0

    文章

    2

    瀏覽量

    957
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    光電傳感器輕工自動機上有哪些應(yīng)用?

    請問一下,光電傳感器輕工自動機上有哪些應(yīng)用?
    發(fā)表于 05-08 08:58

    LabVIEW 生命小游戲 元胞自動機

    生命小游戲,又叫元胞自動機,一個令人著迷的圖靈完備系統(tǒng)參考資料:https://zhuanlan.zhihu.com/p/347305597https://www.zhihu.com
    發(fā)表于 02-12 18:33

    NFA→FA→GFA自動機轉(zhuǎn)換算法

    研究了不確定有窮自動機NFA、確定有窮自動機FA、規(guī)范有窮自動機GFA的基本關(guān)系與等價轉(zhuǎn)換;給出了“NFA→FA”等價轉(zhuǎn)換算法與“FA→GFA”等價轉(zhuǎn)換算法,構(gòu)造性證明了從FA到GFA的存
    發(fā)表于 12-10 17:25 ?14次下載

    加性細(xì)胞自動機的同構(gòu)性分析

    根據(jù)矩陣方程理論和細(xì)胞自動機原理,提出了加性細(xì)胞自動機狀態(tài)轉(zhuǎn)移結(jié)構(gòu)的同構(gòu)性方法,該方法利用狀態(tài)轉(zhuǎn)移矩陣方程及其特征多項式分析規(guī)則90和150加性細(xì)胞自動機,證明了特
    發(fā)表于 02-28 17:03 ?35次下載

    [自動機自動線].李紹炎.掃描版

    本書結(jié)合目前國內(nèi)自動機械行業(yè)的現(xiàn)狀,從應(yīng)用的角度系統(tǒng)介紹了自動機械的模塊化結(jié)構(gòu)及工作原理、設(shè)計選型方法、裝配調(diào)試及維護要領(lǐng)等。主要內(nèi)容包括:自動機械的結(jié)構(gòu)組成、輸
    發(fā)表于 09-17 16:02 ?0次下載

    基于元胞自動機的混合交通流模型的研究

    文章介紹了元胞自動機交通流模型的應(yīng)用,具有較好的參考價值
    發(fā)表于 06-17 16:00 ?0次下載

    元胞自動機的介紹資料

    元胞自動機的介紹資料,僅供參考和學(xué)習(xí),不得用作商業(yè)用途。
    發(fā)表于 06-24 17:01 ?3次下載

    自動機械設(shè)計

    自動機械設(shè)計》以自動機械的四大結(jié)構(gòu)組成部分為主要內(nèi)容展開,深入闡述了自動機械設(shè)計普遍性的理論問題。例舉實例
    發(fā)表于 08-02 08:54 ?0次下載

    異步多進程時間自動機的可覆蓋性問題

    已有的實時系統(tǒng)模型無法動態(tài)創(chuàng)建新進程.為此,基于時間自動機模型,提出了異步多進程時間自動機模型,將每個進程抽象為進程時間自動機,其部分狀態(tài)能夠觸發(fā)新進程,考慮到隊列會導(dǎo)致模型圖靈完備,進程都被緩存
    發(fā)表于 12-29 14:10 ?0次下載

    基于統(tǒng)計的AC自動機空間優(yōu)化

    基于訪問頻率、訪問層次以及結(jié)合上述2種特征對AC自動機的部分節(jié)點實現(xiàn)完全化的算法。Snort、ClamAV、URL等真實數(shù)據(jù)集上的實驗結(jié)果表明,HybridFA算法的存儲空間低于高級AC自動機的5%。此外,結(jié)合訪問頻率和訪問層
    發(fā)表于 03-13 16:47 ?0次下載
    基于統(tǒng)計的AC<b class='flag-5'>自動機</b>空間優(yōu)化

    自動機器學(xué)習(xí)簡述

    自動機器學(xué)習(xí)(AutoML)的目標(biāo)就是使用自動化的數(shù)據(jù)驅(qū)動方式來做出上述的決策。用戶只要提供數(shù)據(jù),自動機器學(xué)習(xí)系統(tǒng)自動的決定最佳的方案。領(lǐng)域?qū)<也辉傩枰鄲烙趯W(xué)習(xí)各種機器學(xué)習(xí)的算法。
    的頭像 發(fā)表于 12-26 10:56 ?1353次閱讀

    自動機終結(jié)字查找算法實現(xiàn)優(yōu)化綜述

    自動機的秩與工業(yè)自動的部件定向器設(shè)計問題和理論計算機科學(xué)的 Cerny-pin猜想密切相關(guān)。計算自動機的秩可以歸結(jié)于查找
    發(fā)表于 04-28 15:49 ?3次下載
    <b class='flag-5'>自動機</b>終結(jié)字查找算法實現(xiàn)優(yōu)化綜述

    基于Arduino和OLED的元胞自動機

    該項目使用I2C 128×64 OLED顯示由Arduino Nano供電的微型細(xì)胞自動機。
    發(fā)表于 12-06 10:22 ?0次下載

    基于Arduino和OLED元胞自動機

    電子發(fā)燒友網(wǎng)站提供《基于Arduino和OLED元胞自動機.zip》資料免費下載
    發(fā)表于 06-20 11:02 ?0次下載
    基于Arduino和OLED元胞<b class='flag-5'>自動機</b>

    GD32 MCU啟動后如何運行main函數(shù)

    GD32 MCU啟動后如何運行main函數(shù)入口?你是否也有這樣的疑慮。執(zhí)行到main函數(shù)之前
    的頭像 發(fā)表于 01-15 10:00 ?1667次閱讀
    GD32 MCU啟動后如何<b class='flag-5'>運行</b>到<b class='flag-5'>main</b><b class='flag-5'>函數(shù)</b>