作者halajohn (Wei Hu)
站内Programming
标题Re: [问题] 如何学写COMPILER? [纯抛砖引玉]
时间Wed Apr 18 19:00:38 2007
: parser 只是负责把 C++ code 转成内部 structure,
: 会出问题通常是内部表示 data structure 没规划好
: 因为 template/class 产生的资料量超大, worst case 没估好爆掉
: 不然就是写的人误解 C++ 语法
: C++ 对人应该是比对机器复杂, 人可记不得那麽多解读优先顺序
: 可以用 BNF 都算好 parse
只能说你把 parser 看简单了, grammar 的分析极其复杂
: 因为 MACRO 不能搞一大片 code, 写的时候就会避免了
: 在 C++ 也还是可以用 define, 烂人还不是照用
有时候用少许 macro 可以达到非常漂亮的 code
未尝不可
: 再加上继承, overloading 这些可能跨过无数 header, source
: 追进去早忘了上层是啥 datatype
这个用个好的 IDE 应该可以解决吧
: 所以用 template 写东西, 不能 crossplatform, 连 compiler version 都有差
: 产生的语法错误讯息还超难懂, 熟也只能熟一个 compiler
: C++ 做过头, 规定太多, 才会有 java, c# 跑出来
java, c# 的出现跟 C++ 没有绝对关系吧
: 真正优良的程式靠的是规划, 用那一种 library, tool, language 都没用
: 第一个 pascal compiler 用 pascal 写,
: 第一个 java compiler 用 java 写,
: compiler 跟语言本身一起完成, 靠的就是切割得好
要是没有 java compiler, 要怎麽编译用 java 写的 compiler?
你是说用先写好的 java interpreter 来 interpret 用 java 写的 compiler 吗?
如果是这样的话, 那跟程式的规划没关系
java interpreter 写的烂透了都没关系, 只要能正确 interpret 都行.
同理,
我也可以写一个 C 或 C++ 的 interpreter, 来 interpret 我写的 c program
你说的优良程式是靠规划, 我承认这是对的,
只不过如果他们能这样做, 并不是因为切割的好.
--
http://www.csie.ntu.edu.tw/~r88052/main/tw/frame.html
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.228.149.146