看板Programming
标 题Re: [问题] 如何学写COMPILER? [纯抛砖引玉]
发信站KKCITY (Mon Apr 23 13:59:26 2007)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ntu!news.au!zoonews.ee.ntu!news
※ 引述《[email protected] (汀)》之铭言:
> 在 C++ syntax 被证明成可用 LL(1) 实作之前,
> 很多人都在猜 C++ parser 没有 LR(2) 搞不出来,
> 因为许多人使用 bison 这个 LALR(1) parser generator 实作都碰壁得很惨,
> 不单是 LALR 和 LR 支援 syntax 的能力之差所造成的错觉,
> 还常常会遇上 lookahead 的 token 不够的问题。
> 一个 grammer 能用 BNF 表示,
> 并不会代表它的 parser 好写,
> 因为 BNF 可以随你高兴写,
至少 BNF 代表前文不会影响後文的语法,
这跟 bot 用的 parser 比起来就简单得多, 也比 perl 好弄
好写不好写是要把所有 parser 拿出来排, 不是只跟 C compiler 比
perl 都能用 yacc 做得出来, 还没有很多 bug,
yacc 有问题还是写的人有问题?
> 但很遗憾的是许多人看好的 GCC 还是很爱使用它,
> 打开 GCC 的 source code,
> 你就是会看到这麽一大片 macro,
> 只能说随着年龄增长会让人对新技术的接受能力下降,
> 导致 GNU 的守旧派人士一直都没有长进,
> 让 80 年代的 programming 技术仍活在 free software 的 source code 里。
C++ 也还是老旧的, template 不是新观念, 而且 C++ 连
obj dynamic linking 都没搞定, 本质上跟 C 是一样的
C++ 本来还是个 C 的 code generator: cfront
yacc 算是 4GL, goal oriented, 还比 C++ 新得多
新应该是指 style, 而不是订规格的日期
> 至於继承这种东西,
> 其实也没有你想像中的难追,
> 这和你一再强调的设计方法有关,
> 反过来说 debug/trace 别人程式得先了解其设计方法,
> 就像正统的 OO 设计一样,
> programmer 根本不需要去关心上层 type 是什麽,
> C++ 在 compile-time 就已经帮你确立了 type-safe,
> 除非设计程式的人乱搞,
C++ 有多少人能说自己 100% 了解了, 并记得:
template of template
public, friend, protected
C 最多就是 function pointer 长得比较怪
不能完全了解的东西才会被乱搞
--
┌─────◆KKCITY◆─────┐ ◢ ╱ 想要成立班系社团站台吗?
│ bbs.kkcity.com.tw │ █▉ ─ KKcity即日起开放BBS站申请罗!
└──《From:59.120.53.7
》──┘ ◥ ╲ 免程式技术、硬体成本的选择!!
--