作者halajohn (Wei Hu)
站内Programming
标题Re: [问题] 如何学写COMPILER? [纯抛砖引玉]
时间Sat Apr 28 16:20:13 2007
: > spirit 是 boost 之中特别容易让 compiler 挂点的东西之一,
: 这年头会因为这样就挂掉的 compiler 不多了,
: 除非你还在用 VC6 跟 gcc 2.95.x。
纵使是 visual c++ 2005 在使用 boost 时也会遇到 internal fatal error,
这我在使用 boost::multiIndex set 时遇到过.
: > xxx = a|b;
: > yyy = xxx|c;
: > 因 C++ 语法限制所以还不能像 yacc 用 LR, spirit 是 LL only
: > 从来没有比 yacc 先进的说法
: 不对,
: 这是因为 spirit 故意选择了 recursive descent parsing,
: 为什麽?
: 因为合乎人类的直觉,
: 所以也因此更容易 debug (容易 debug 的理由又多了一个)。
: GCC 4.x 也选择了「纯手工」打造的 LL(1) parser,
No, 你记错了,
GCC 4.x 的不管是 C parser 还是 C++ parser 都不是 LL(1),
至少是 LL(2), 去 trace 一下 c-parser.c 即可证明.
: 答案很简单,
: 因为 C++ 和 Java 一直还有在改进,
: 但是 yacc 停住了,
: spirit 不但使用了新技术且确实达到了使用该技术的目的 (好写好 debug),
: 而且它仍然在不断改进当中 (要注意是技术面的改进,可以比较看看它的历史纪录)。
boost::spirit 有使用新技术吗?
应该都是旧技术吧, 只是封装在 C++ 绚丽的用法里面.
--
http://www.csie.ntu.edu.tw/~r88052/main/tw/frame.html
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.74.227.11