Re: [問題] 如何學寫COMPILER? [純拋磚引玉]

看板Programming作者 (Wei Hu)時間18年前 (2007/04/19 13:17), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串15/38 (看更多)
: 很多人都在猜 C++ parser 沒有 LR(2) 搞不出來, : 因為許多人使用 bison 這個 LALR(1) parser generator 實作都碰壁得很慘, : 不單是 LALR 和 LR 支援 syntax 的能力之差所造成的錯覺, 挑個錯, LALR or LR 支援 syntax 的能力並不差, 理論上 (實際上也是), LR 要比 LL 強大 (的多). : 還常常會遇上 lookahead 的 token 不夠的問題。 lookahead 的問題不在夠不夠用, 要是覺得不夠用, 你自己把他加大不就好了. lookahead 的問題在於, 大於某個數值的 lookahead 下, grammar 展開的時間 (或空間, 看你要用哪種實作) 將會大到超過你的想像, 就連目前個人電腦上能用到的最快 CPU 也沒法輕易的負擔. 而這個數值在現實生活中所用到的一般性 grammar 而言, 大約是 2.... : 一個 grammer 能用 BNF 表示, : 並不會代表它的 parser 好寫, : 因為 BNF 可以隨你高興寫, : 但寫出來的 form 不見得適合 context-free LALR(1) parser 去 parse。 : > 再加上繼承, overloading 這些可能跨過無數 header, source : > 追進去早忘了上層是啥 datatype : 不對,用 template 寫東西絕對可以 cross, : 一直以來都沒有問題, : 而且要同時讓支援 export 跟不支援 export 的 compiler 都不會有問題, : 講 template 的書上也有說明做法, : 我還是第一次聽說用 template 寫的東西不能 cross platform。 理論上是這樣啦, 不過要 100% 支援 C++ 的 compiler 才行 我個人很喜歡寫 template code, 之前用 gcc 3 寫, 一些複雜的 syntax 都做不出來 (不知道 gcc 4 有沒有因為 parser 換過所以好點). 現在改用 VC 2005... 說真的, Microsoft 做得還真不錯, 不是蓋的, 100 分. -- http://www.csie.ntu.edu.tw/~r88052/main/tw/frame.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.157.82
文章代碼(AID): #169ljTRb (Programming)
討論串 (同標題文章)
文章代碼(AID): #169ljTRb (Programming)