詞法分析(一):狀態轉換圖


詞法分析概述


狀態轉換圖

狀態轉換圖是一張有限有向圖

  • 結點表示狀態,結點用圓圈表示
  • 狀態之間存在有向弧,弧上標記有字符字符集
    表示某一狀態接受箭弧上的字符/字符集輸入后到達另一狀態
  • 一張狀態轉換圖中的狀態個數是有限的,其中有一個初態,至少有一個終態
    在這里插入圖片描述
    如上圖表示狀態1為初態,狀態3為終態,狀態1接受字符a到達狀態2,接受數字到達狀態3
    終態用雙圈表示

狀態轉換圖可用於識別 / 接受一定的字符串

若存在一條從初態到某一終態的道路,記這條路上所有弧上的標記符連接成的字(即字符串 )為α,則稱α被該狀態轉換圖識別 / 接受

在這里插入圖片描述
比如上面的狀態轉換圖,可以用來識別以字母開頭,可以存在數字的標識符(狀態3的*號表示,不包含到狀態3的弧上的字符)

在這里插入圖片描述
可以識別整常數的狀態圖


狀態轉換圖在詞法分析中的應用

有某種簡單的程序設計語言,單詞表如下
該語言所有合法的字都在該單詞表內描述

單詞符號 種別編碼 助記符 內碼值
DIM 1 $DIM
IF 2 $IF
DO 3 $DO
STOP 4 $STOP
END 5 $END
標識符 6 $ID 內部字符串
常數 7 $INT 標准二進制形式
= 8 $ASSIGN
+ 9 $PLUS
* 10 $STAR
** 11 $POWER
, 12 $COMMA
( 13 $LPAR
) 14 $RPAR

可為單詞表設計如下狀態轉移圖
在這里插入圖片描述
狀態2識別關鍵字和標識符
狀態4識別常數
狀態5~12識別操作符和括號
狀態13為出錯狀態
那么,可以由此圖對該語言的所有代碼進行詞法分析


詞法分析器的實現:狀態轉換圖→程序

使用循環和swith或if,我們很容易把上面的狀態轉移圖實現為詞法分析程序
或者使用更巧妙的表驅動方式

當前狀態 \ 字符 space letter digit = + * , ( ) 其他
0 0 1 3 5 6 7 10 11 12 13
1 0 1 3 5 6 7 10 11 12 13
3 4 4 4 4 4 4 4 4 4 4
7 8 8 8 8 8 9 8 8 8 8

設該數組為state
由當前狀態cur_state和讀取的字符ch
我們可以查表得到下一個狀態state[cur_state][ch]


狀態轉換圖與有限自動機

有限自動機

可以用狀態轉換圖等價表示確定有限自動機(DFA) 或者 非確定有限自動機(NFA)


2019/7/20


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM