嘗試把正規表示式轉換成指令序列形式

2021-04-09 08:11:57 字數 873 閱讀 6359

將識別正規表示式的dfa表示成轉移函式表,每次都查詢在轉移比較麻煩。如果能表示成乙個順序的指令序列,通過順序解釋這個序列來處理字串,將是一種很有效的方法。如果還能加入優化,把**最小化還能提高不少效率。不過這也可能只是丫丫。

先做乙個試驗

對於正規表示式 (a|b)[0-9].*c,可以用以前的方法先生成語法樹,然後出dfa。

狀態 (1,2)表示含有葉子1,2,等等。

用偽碼描述這個自動機

str ::= input string

begin

12:if ( lookahead == a || lookahead ==  b ) then

else

3:if ( lookahead >= 0 && lookahead <= 9 ) then

else

45:if ( lookahead == c ) then

else if ( lookahead != 0 )

else

456:

matched

if ( lookahead == c ) then

else if ( lookahead != 0 ) then 

else stop

end這樣定義retry

begin

if  ( once matched )   // 有一次成功說明之前的匹配成功的地方已經是最長了,後面的嘗試是失敗的

else   // 一次都沒匹配成功過,從新的位置從新嘗試。這裡沒有考慮強制開始的運算符號。

end這樣似乎並不是足夠簡單,有很多重複無聊的定式。如果能想展開成彙編一樣的**就好了。

也可以不必去再解釋if命令。只要乙個乙個執行就可以了。

困……遁覺

中綴表示式轉換成字尾表示式

一 基礎知識 中綴表示式 人們常用的表示式就叫做中綴表示式,如a b c d 字尾表示式 又叫做逆波蘭表示式,由一名波蘭數學家提出,方便進棧操作 字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字...

中綴表示式轉換成字尾表示式

中綴表示式轉字尾表示式 思路 三個方法 將中綴表示式轉換成 中綴表示式對應的 list 自定義運算子優先順序 將中綴表示式對應的 list 轉換成 字尾表示式.1.1 使用 list 更好的和 stack 配合,list 比 字串的遍歷更加靈活.將中綴表示式對應的 list 轉換成 字尾表示式 2....

中綴表示式轉換成字尾表示式

優先順序 如果輸入運算子的優先順序低於或等於棧頂的操作符優先順序,則棧內元素進入輸入佇列,輸入運算子入棧。乙個簡單的例子 演算法示意圖,使用了3個空間。輸入用符號代替,如果輸入是乙個數字則直接進輸出佇列,即圖中 b d f h 如果輸入是運算子,則壓入操作符堆疊,即圖中 c e 但是,如果輸入運算子...