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支持。