Re: [問題] 如何學寫COMPILER? [純拋磚引玉]
: 很多人都在猜 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
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章