看板Programming
标 题Re: [问题] 如何学写COMPILER? [纯抛砖引玉]
发信站KKCITY (Tue Apr 17 23:33:27 2007)
转信站ptt!ctu-reader!ctu-peer!ctu-gate!news.nctu!news.ntu!news.au!zoonews.ee
※ 引述《[email protected] (汀)》之铭言:
> 而且是针对 flex & bison 的:
> 当初 4.0 之所以把 C++ parser 整个拿纯 C 手工重写,
> 有一大原因就是 flex & bison 生出来的 code 太难 debug 了,
> 而 C++ 的 syntax 又是极其复杂 (对 compiler 而言),
C++ 语法不复杂, 但是容易搞错, 排列组合过多
parser 对 compiler 来说是很小的一部份, 甚至该当成独立的模组
> 要加什麽东西都非常困难,
> 导致一堆 parser 上的 bug 一直到 4.x 才被修正,
> 这其中还包含了各种跟 template 相关的有名 bug。
> > 我想应该不能这样解读才是 ......
> > 这边写个小小的 parser, 光是「有用辅助工具」的时候, 就都快搞到头脑爆浆了
> > 如果从头到尾都不善用这些辅助工具的话
> > 完成的时间想必拖得更久, 所谓的「效率」、「强度」又真的会有多少优势?
> > 小弟作品: http://sbt.idv.tw/tBoard/index.py?f=25&t=732&m=pl
> > 嗯 ... 好吧, 它的确需要 ...
> > Toy Parser Generator. XD http://christophe.delord.free.fr/tpg/
> 你可能搞错我的意思了,
> 工具会随着时代演进,
> 事实上我并不鼓励大家学 GCC 4.x 一样用纯手工重写 parser,
> 我们有更好的选择:
> boost spirit library (http://www.boost.org/libs/spirit/index.html)
> 撰写 parser 的过程变得更加轻松愉快,
> 而且真的出了 bug 时找起来也没有这麽痛苦,
> 我并没有说用工具不好,
> 而是工具应该随着时代而变换,
> 现在各种软体的规模早已今非昔比,
> compiler 也不例外,
C++ 的 templates 是 define 扩充版, 这玩意个人认为比 define 更难 debug
trace 的时候还更是困难, 跳来跳去, 而且不同 compiler 连 STL 版本都不同
不是每个写 C++ 的人都会去钻一堆特殊写法, 可读性不是只针对 C++ 上瘾者
真正优良的程式靠的是规划, 如 mozilla 用的 apple coding style
mozilla 的程式非常好 debug, 其中的 javascript parser 比 C++ 不知麻烦多少倍
javascript 充满着例外, 不完整的语句也还是要能跑, 它的 parser 才算经典
--
┌─────◆KKCITY◆─────┐ KK免/费/拨/接 ◤
│ bbs.kkcity.com.tw │▏电话(1):449◤1999 电话(2):4058-6000
└──《From:59.120.53.7
》──┘▏帐号:kkcity 密码:kkcity
--