C++编译技术探秘

来源: YDX 2010-12-01 10:18:01 [] [博客] [旧帖] [给我悄悄话] 本文已被阅读: 次 (1847 bytes)
若干年前,C++的发明者Bjarne Stroustrup曾写道,他在开发C++编译器时最大的错误是没有使用TOP DOWN技术,而是用了YACC。当时,我对此很不解,因为根据我的经验,LL(k)的语法比LALR语法构造要困难。在YACC之后,出现了PCCTS(后称ANTLR)等LL(*)工具,理论上很强大,用起来就发现有各种问题需要人为地处理。

前几天与朋友聚会,其中两人都是COMPILER高手,在大公司专攻COMPILER,手下有若干兵将,闲聊之中谈到C++和编译技术。众所周知,C++标准化后已经变得非常复杂,标准好像上千页。一位朋友提到,业界真懂C++的已经不多了。又提到,新版g++的PARSER没有用工具,全部是手写的。我听罢,相当吃惊,因为当年我们经常参考的就是CFRONT的YACC语法。现代C++,居然手写PARSER,这无疑是奇迹。

回来查了一下,果然如此。整个gcc(g++)的PARSER是2万2千行手写的代码,而且就在同一个文件里 (见链接:http://gcc.gnu.org/viewcvs/branches/gcc-4_4-plugins/gcc/cp/parser.c?revision=157341&view=markup)作者是一个人:Mark Mitchell

只能说这是个牛人。居然手写2万2千行C代码parse如此复杂的C++。也许当年Stroustrup说的就是要这样?


请阅读更多我的博客文章>>>
  • C++编译技术探秘
  • 张衡地动仪见证汉文明的成就
  • 汉城这片土地,曾是我们的将士浴血奋战的地方
  • 中国何时出手--广义战争的积极防御
  • 引发朝鲜大战是美国经济脱困的不二法门
  • 所有跟帖: 

    为啥要用手写,打字机不好用? -大干快上- 给 大干快上 发送悄悄话 (0 bytes) () 12/01/2010 postreply 10:38:54

    其实YACC不错, ANTL及后来的总用不顺手 -怪哉- 给 怪哉 发送悄悄话 怪哉 的博客首页 (133 bytes) () 12/01/2010 postreply 11:09:13

    C++ 标准化就该被淘汰了。 -scim- 给 scim 发送悄悄话 (100 bytes) () 12/01/2010 postreply 13:40:57

    我当年也手写了LL(1) -安心草- 给 安心草 发送悄悄话 安心草 的博客首页 (0 bytes) () 12/01/2010 postreply 20:00:38

    的compiler, 很容易的, 用了一个星期而已。 因为算法是用的现成的 -安心草- 给 安心草 发送悄悄话 安心草 的博客首页 (0 bytes) () 12/01/2010 postreply 20:01:59

    请您先登陆,再发跟帖!

    发现Adblock插件

    如要继续浏览
    请支持本站 请务必在本站关闭/移除任何Adblock

    关闭Adblock后 请点击

    请参考如何关闭Adblock/Adblock plus

    安装Adblock plus用户请点击浏览器图标
    选择“Disable on www.wenxuecity.com”

    安装Adblock用户请点击图标
    选择“don't run on pages on this domain”