gawk1.01源碼分析——進行調試2


gawk1.01源碼分析——進行調試2
今天讀代碼時,發現我對awk2.c中如何生成解析樹的過程還是很模糊。於是想上網搜索資料。發現沒有。於是,心想,沒人寫,那我就再接着寫吧。不指望有多少人看,就當成是把自己分析源碼的心得、想法進行總結。就當寫日記一樣。
以前讀源碼,因爲編譯不了,總是紙上談兵,但讀着讀着,發現不行。因爲我無法驗證我的理解對不對?而且也沒有人和我交流,那不行。還是要把程序編譯成功,進行調試。這樣才能真正的讀懂代碼。
當你不調試時,可以能代碼的整體結構有一個瞭解,但不能達到深刻的理解。
於是,又找到以前修改過的gawk源碼,再進行調試。
昨天學學bison,因爲gawk1.01源碼中awk.y這個文件總是報歸約/歸約衝突。
今天接着調試gawk源碼。把debug.c中的讀懂了。接着看awk.y,前面一段是bnf相關,關鍵是後面的處理。如下:
yylex()
{
  如果要處理正則表達式,
    很長一段邏輯,我省略了。
  switch(c=*lexptr++) {
    case 0:
    等等

  }
}
那個主要的處理邏輯,好象是進行了詞法分析。人工寫了flex能處理的那一段。
而awk2.c中把返回的詞,進行分析後,寫進語法樹中。
對awk2.c這個沒看懂。爲了看懂它,我需要把bison用戶手冊學一遍。

前段時間有些想放棄讀gawk1.01版本,心想,這個調不通,還不如干脆讀版本呢,我的電腦上安裝的gawk4.1.0版本,我從網上下載這個版本的源碼,居然有5萬多行,心想,算了,還是讀1.01版本吧。

把1.01看懂後,就學着讀ruby0.49版本。我現在發覺,matz肯定是通讀了gawk的源碼,因爲ruby0.49的結構和gawk差不多。你看ruby中也有BEGIN,END塊,在ruby0.49中,也是用bison進行語法分析,matz也象gawk一樣,手工進行詞法分析,沒有用flex。等等。

前段時間讀ruby
的一些gem,如algorithms0.6的源碼,涉及到fib堆的算法,紅黑樹算法沒看懂,其它的倒還是很流暢的。但對ruby到底如何運行的,還是不懂。於是就接着讀matz寫的《編譯語言的設計與實現》,發現,作者寫ruby的思路和gawk一樣,感覺還是要讀gawk的源碼。
我真希望matz能出一本,詳細介紹如何設計出ruby的書。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章