ANTLR4 与 flex/bision、lex/yacc 的比较

时间:2024-10-04 07:24:06

ANTLR4、flex/bison、lex/yacc 都是可根据形式化文法生成程序语言分词器(lexer)与解析器(parser)的工具。

lex 与 yacc 分别是词法分析器生成器与语法分析器生成器。历史悠久,早期是在Unix 系统中的工具。flex/bison 分别是兼容 lex/yacc 的lexer与parser生成器。在Linux系统中,flex/bison 更加常用。ANTLR 是1992年起开始发布的lexer/parser 生成器,目前的新版本为 ANTLR4。

## 输出语言种类的支持

flex 支持的输出语言有 c99[1]、c++。其中,对 c++ 的支持为试验性(experimental)状态[2]。Bison 支持的输出语言除了 C 之外,还支持 C++、D、Java[3]。

ANTLR4 支持的目标语言有 Cpp, CSharp, Dart, Java, JavaScript, PHP, Python3, Swift, TypeScript, Go 等[4]。对 C++ 目标语言对应的运行时环境,对C++标准最低要求为 C++17[5].

文法的支持

ANTLR4 文法支持EBNF文法形式,生成ALL 自顶向下parser。Bison 文法支持 BNF 文法形式,生成 LALR 自底向上 parser。

项目活跃程度

ANTLR4 最新发布版本为 24年8月4日发布[4],17k stars, 维护人数351。

Flex 最新发布版本为 17年5月7日发布[6],3.6k stars, 维护人数 64。

Bison 最新发布版本为 21年9月25发布[7],329 stars, 维护人数 43。

[1]: The Generated Scanner, westes.github.io/flex/manual/Generated-Scanner.html

[2]: Generating C++ Scanners, westes.github.io/flex/manual/Cxx.html

[3]: www.gnu.org/software/bison/manual/bison.html

[4]: github.com/antlr/antlr4

[5]: github.com/antlr/antlr4/tree/dev/runtime/Cpp

[6]: github.com/westes/flex/tree/master

[7]: github.com/akimd/bison