1. ANTLR可以一站式的解决词法与语法解析器的生成。
FLEX&BISON需要配合使用,一个实现词法解析器,一个实现语法解析器。
2. ANTLR通过在文法文件中的设置,可以生成多个语言代码。
options {language=Cpp;}
options {language=CSharp;}
options {language=Java;}
options {language=Python3;}
FLEX&BISON只能生成C代码。
3. ANTLR可以生成语法解析树的图形化表示,方便开发与测试。
FLEX&BISON没有。
4. ANTLR支持多种IDE的协同开发插件。
FLEX&BISON没有,是纯粹的命令行程序。
5. 语义代码,ANTLR有多种方式支持,可以在文法文件中嵌入代码,也可以使用其它方法(我估计是listener,visitor, channel这些方式,还没搞明白)
FLEX&BISON只有一种方式,将用户自己的语义代码嵌入式文法文件中。
https://stackoverflow.com/questions/29971097/how-to-create-ast-with-
antlr
4 这个很值得仔细看
https://github.com/alongubkin/modern/tree/master/compiler/ModernCompiler
https://www.jianshu.com/p/4bedad8dd70a
1.
Antlr
, @init, @after. 这个对于相似的逻辑处理可以避免重复的代码。
2.
Bison
, $1, @$, 不用定义一个变量,体现了script的方便性。
3. 优先级。
Antlr
以顺序来确定,
bison
依靠%left, %right定义,稍占优。不过
bison
的优先级只支持到token级别,不注意反而增加了疑惑。
4. AST的支持。其实即使没有...
第一部分 简单了解
Flex
和
Bison
1、
Flex
和
Bison
简介
Flex
和
Bison
(前身分别为Lex和Yacc),是Linux下两个用来生成程序的工具,它们生成的程序分别叫做词法分析器和语法分析器。词法分析把输入分割成一个个有意义的词块,称为记号(token);语法分析则确定这些记号是如何彼此关联的。
举个例子:
Flex
文件定义pattern(什么是黄豆,什么是绿豆……),输入文件(一袋豆子)通过
Flex
处理(词法分析),将输入划分为一段段的token(将输入的豆子一个个摘出来),从而执行不同
bison
和
flex
已经是上个世纪的东西了~
antlr
是一个java程序编写的库,用来帮助编程语言创作者提升语言实现效率,具体的可以访问http://www.
antlr
.org 细看,我们可以到网站上下载我们所需要的的jar包,
antlr
-4.0-complete.jar,我们可以把这个放到目录E:\
antlr
下,下文所有文件都放到该目录下。
Windows下路基配置方法为在运行模式下执
经 @沈默 在上文
Antlr
4添加中文变量赋求值,括号,各种问题评论中指出, 语法规则描述依赖于
Antlr
4生成的语法分析器的默认分析方法, 比如运算符的左联系, 以及优先级处理等等. 于是将语法修改为下面(源码版本号: program-in-chinese/quan5):
表达式: 求积表达式 (('+'|'-') 求积表达式)*;
求积表达式: 最小表达式 (('*'|'/'|'×'|'÷'...