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