Re: [問題] 如何學寫COMPILER? [純拋磚引玉]
※ 引述《halajohn (Wei Hu)》之銘言:
: : 很多人都在猜 C++ parser 沒有 LR(2) 搞不出來,
: : 因為許多人使用 bison 這個 LALR(1) parser generator 實作都碰壁得很慘,
: : 不單是 LALR 和 LR 支援 syntax 的能力之差所造成的錯覺,
: 挑個錯, LALR or LR 支援 syntax 的能力並不差,
: 理論上 (實際上也是), LR 要比 LL 強大 (的多).
你好像沒看懂我的意思,
還是說你截錯位置了,
第一句的「在 C++ syntax 被證明成可用 LL(1) 實作之前」你似乎沒看到,
所謂「在 xxx 被證明可用 LL(1) 實作之前,很多人都在猜沒有 LR(2) 搞不出來」,
意思就是說 LR(2) 處理能力較強,
所以一堆人以為 C++ syntax 複雜到 LR(2) 才能解,
結果居然有人證明出來 LL(1) 就能搞定了,
原文合起來就是這樣的意思而已。
另一個你可能誤會的是「能力之差」四個字,
可能是我用詞不當,
它的意思是指「能力上的差距」,
所謂的「差」是指 difference 不是指 bad。
: : 還常常會遇上 lookahead 的 token 不夠的問題。
: lookahead 的問題不在夠不夠用,
: 要是覺得不夠用, 你自己把他加大不就好了.
: lookahead 的問題在於, 大於某個數值的 lookahead 下,
: grammar 展開的時間 (或空間, 看你要用哪種實作) 將會大到超過你的想像,
: 就連目前個人電腦上能用到的最快 CPU 也沒法輕易的負擔.
: 而這個數值在現實生活中所用到的一般性 grammar 而言,
: 大約是 2....
這時 parser generator 的劣勢就會出現了,
手工或利用 library 製成的 parser 有辦法偶爾偷作弊往前看幾個 token,
但 parser generator 就比較難做到這種彈性,
因此會對 lookahead 的 token 數有相當硬性的限制。
: 理論上是這樣啦, 不過要 100% 支援 C++ 的 compiler 才行
在 2005 年之後,
這個理論早已成為事實,
除了 export 的特性之外。
: 我個人很喜歡寫 template code,
: 之前用 gcc 3 寫, 一些複雜的 syntax 都做不出來
: (不知道 gcc 4 有沒有因為 parser 換過所以好點).
好非常多了,
就算有 bug 你報上去也修得非常快,
不像以前 parser 有 bug 只能一整個擺爛。
: 現在改用 VC 2005...
: 說真的, Microsoft 做得還真不錯, 不是蓋的, 100 分.
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Tsing Hua University Department: Computer Science
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage: https://it.muds.net/~uranus
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.226.51
※ 編輯: tinlans 來自: 61.230.226.51 (04/19 18:02)
推
04/20 11:20, , 1F
04/20 11:20, 1F
→
04/20 11:20, , 2F
04/20 11:20, 2F
→
04/20 11:21, , 3F
04/20 11:21, 3F
→
04/20 11:21, , 4F
04/20 11:21, 4F
推
04/20 14:32, , 5F
04/20 14:32, 5F
推
04/20 22:54, , 6F
04/20 22:54, 6F
討論串 (同標題文章)