若幹年前,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說的就是要這樣?