將識別正規表示式的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 但是,如果輸入運算子...