antlr與bison的一些比較

1. Antlr, @init, @after. 這個對於相似的邏輯處理可以避免重複的代碼。

2. Bison, $1, @$, 不用定義一個變量,體現了script的方便性。

3. 優先級。Antlr以順序來確定,bison依靠%left, %right定義,稍佔優。不過bison的優先級只支持到token級別,不注意反而增加了疑惑。

4. AST的支持。其實即使沒有工具本身的支持,用bison產生一個語法樹還是不算困難的,比如通過一個stack維護parent節點。不過antlr畢竟直接支持並增加了redirection.

5. Channel特性。

6. 生成代碼的可讀性及可調試性。Antlr略好,不過畢竟還是會產生類似於 if ( (LA8_0==39) ) { alt8=1;  }等自動臨時變量。Bison 通過 #line 106 "../INPUT/src/xxx.yy"實現。想要觀察比如$1的值需要額外處理。

7. shift/reduce warnning. 這個門檻比較高,在複雜邏輯中完全去除對於俺相當困難

8. @lexer/parser::members {}. 由於繼承的關係,override的處理不夠直觀。也許工具能夠克服這個缺點。

9. 出錯處理。Java的異常處理和字符串比C++稍好,個人意見。Antlr還有腳本層面上的catch支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章