ANTLR执行后,我将所有生成的java文件放在一个目录中,因此我使用了一些选项来生成一个单独的目录和命名空间来存储和编译,以存储所有生成的文件。
这是语法文件:
语法表达式;
prog: (expr NEWLINE)* ;
expr: expr ('*'|'/') expr
| expr ('+'|'-') expr
| INT
| '(' expr ')'
;
NEWLINE : [\r\n]+ ;
INT : [0-9]+ ;
Run Code Online (Sandbox Code Playgroud)
我可以使用 获取不同目录中生成的文件o,并使用package选项添加包信息。
java -jar /usr/local/lib/antlr-4.5.3-complete.jar -listener -visitor -package expr -lib . -o gen/expr Expr.g4
Run Code Online (Sandbox Code Playgroud)
编译代码需要d和sourcepath中的选项javac。
javac -cp .:/usr/local/lib/antlr-4.5.3-complete.jar -d out -sourcepath gen gen/expr/Expr*.java
Run Code Online (Sandbox Code Playgroud)
我可以通过制作可执行文件来检查代码的工作原理。
import expr.*;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
class ExprRunner …Run Code Online (Sandbox Code Playgroud)