不到1000行的正則表示式原始碼分析04
阿新 • • 發佈:2019-01-13
不到1000行的正則表示式原始碼分析04
今天購買了一個usb變多個usb的玩意兒,感覺很神奇,一個usb口可以當多個口用,如果同時連線滑鼠、鍵盤,系統是如何處理的呦,難道象令牌環網,傳遞一個令牌?太神奇。
感覺今天基本能把程式碼串起來了。
在grep.c中,執行時
echo "foooo" | ./ogrep 'fo*'
先執行re_comp,把'fo*'變為
chr f
clo chr o
再執行re_exec進行字串匹配。
在re_exec中,分三種情況:
1)如果是bol
調pmatch進行匹配
2)如果是chr
先從源串中找到一個與nfa相等的字串,再進行第3)
3)從源串第一個字開始匹配,如果匹配不上,就從下個字元開始,一直到結束。
pmatch呢,開始看得太細,現在從巨集觀上一看,其邏輯也很好理解。就是把nfa編譯的結果逐字與源串比較,如果不等就報錯,如果相等就繼續。
可能按程式的執行過程來理解,是比較好的。光看程式,不知它在執行中的地位,這樣看,很容易迷失方向。
而按程式執行的思路來理解,就好了。今天先到這裡。明天再繼續吧。
巨集觀上理解了,就完成了一大半,明天就把它串起來,把沒理解的細節理解。再多加printf語句,進行除錯吧。
另外,這個匹配是nfa的,而ruby0.49中的,好象是dfa的。nfa是正則表示式主導,而dfa是文字主導,明天再細看吧。