bison和flex已经是上个世纪的东西了~
antlr是一个java程序编写的库,用来帮助编程语言创作者提升语言实现效率,具体的可以访问http://www.antlr.org 细看,我们可以到网站上下载我们所需要的的jar包,antlr-4.0-complete.jar,我们可以把这个放到目录E:\antlr下,下文所有文件都放到该目录下。
Windows下路基配置方法为在运行模式下执行如下命令(注意有个点,千万不能漏掉;运行窗口不关闭,否则下面配置的系统变量会失效):
SET CLASSPATH=.;E:\antlr\antlr4-complete.jar;%CLASSPATH%
我主要讲一个用antlr实现一个简单的计算器。
首先我们看下我们打算输入的数据E:\antlr\t.expr:
193
a = 5
b = 6
a+b*2
(1+2)*3
对应的lex rule和paser rule,E:\antlr\Expr.g4如下:
grammar Expr;
prog: stat+ ;
/** The start rule; begin parsing here. */
stat: expr NEWLINE
| ID '=' expr NEWLINE
| NEWLINE
;
expr: expr ('*'|'/') expr
| expr ('+'|'-') expr
| INT
| ID
| '(' expr ')'
;
ID : [a-zA-Z]+ ; // match identifiers
INT : [0-9]+ ; // match integers
NEWLINE:'\r'? '\n' ; // return newlines to parser (is end-statement signal)
WS : [ \t]+ -> skip ; // toss out whitespace
大家可以发现,这里只有rule没有如何计算的东西,这是因为我们只打算用这一部分生成代码框架,具体如何处理之后自己再填写。
在上面提到的运行重口中执行以下命令:
java org.antlr.v4.Tool Expr.g4
javac Expr*.java
java org.antlr.v4.runtime.misc.TestRig Expr prog -gui t.expr
看到一个窗口,表示这时我们已经完成了一半~
下一半,下次讲~