若干年前,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,这无疑是奇迹。
只能说这是个牛人。居然手写2万2千行C代码parse如此复杂的C++。也许当年Stroustrup说的就是要这样?