1. 程式人生 > >ruby0.49 regex.c原始碼分析

ruby0.49 regex.c原始碼分析

ruby0.49 regex.c原始碼分析
網上買個日本人的二手顯示器,保護眼睛吧。安裝好顯示器就開始讀原始碼。
看regex.c,因為可以單獨進行測試,先加上幾句:
#define test 1
#include<stdio.h>
#include<malloc.h>
進行編譯時,報錯,說xmalloc,xrealloc等函式找不到,網上也找不到資料,後來,記起在awk還是sed的原始碼中,是可以編譯成功的。具體如何改的忘記了。
一狠心,不管三七二十一了,先把xmalloc中的x去掉,改為malloc,然後再編譯,果然少了錯誤,同樣再改xrealloc。
編譯完了,就讀main函式,其實,這個函式也寫得頭痛。

不過,因為編譯時,雖然報了不少警告,但好歹生成了可執行檔案,於是把可執行檔案先執行一次。
gcc regex.c -o my_regex
./my_regex
嘗試輸入,分析輸出結果。讀起來就有效多了。
作者先把正則表示式進行編譯,結果儲存起來,再進行優化編譯,用優化後的結果去進行匹配。
後面來有個可以列印編譯結果的函式,也進行了呼叫。
print_buf(buf)
加起來後,就錯誤很多了,再把錯誤改掉,再執行,居然報記憶體段錯誤。仔細分析,發現原來,print_buf的函式是個指標,但在main()函式中,buf不是指標,於是取地址,呼叫時,改為:
print_buf(&buf)
哈哈,就能執行成功了。真爽。
不過,列印了出buf一堆結果,一堆數字,不太好看。