在ANTLR执行之后,我将所有生成的java文件都放在一个目录中,所以我使用一些选项来生成一个单独的目录和名称空间来存储和编译所有生成的文件。
这是语法文件:
语法费用;
prog: (expr NEWLINE)* ;
expr: expr ('*'|'/') expr
| expr ('+'|'-') expr
| INT
| '(' expr ')'
;
NEWLINE : [\r\n]+ ;
INT : [0-9]+ ;我可以使用o在不同的目录中获取生成的文件,并使用package选项添加包信息。
java -jar /usr/local/lib/antlr-4.5.3-complete.jar -listener -visitor -package expr -lib . -o gen/expr Expr.g4编译代码需要d和sourcepath选项在javac中。
javac -cp .:/usr/local/lib/antlr-4.5.3-complete.jar -d out -sourcepath gen gen/expr/Expr*.java我可以通过生成可执行文件来检查代码的工作。
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 {
public static void main(String[] args) throws Exception {
// create a CharStream that reads from standard input
String filePath = "input.txt";
File fileInput = new File(filePath);
FileInputStream fileInputStream = new FileInputStream(fileInput);
ANTLRInputStream input = new ANTLRInputStream(fileInputStream);
ExprLexer lexer = new ExprLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
ExprParser parser = new ExprParser(tokens);
ParseTree tree = parser.prog(); // begin parsing at init rule
System.out.println(tree.toStringTree(parser)); // print LISP-style tree
}
}我可以建造和运行它。
javac -cp .:/usr/local/lib/antlr-4.5.3-complete.jar:out -d out -sourcepath . ExprRunner.java
java -cp .:/usr/local/lib/antlr-4.5.3-complete.jar:out ExprRunner这是目录结构。

在检查了所有操作之后,我尝试使用grun (TestRig)。我试过grun Expr prog -tree和grun out/expr/Expr prog -tree,但是它们没有工作。
如何在位于其他目录中的ANTLR文件上运行grun?
发布于 2016-04-17 20:31:57
只有当所有文件都在同一个文件夹中时,grun才能工作。它是一个快速调试工具。
发布于 2019-10-05 22:48:10
我在Linux上所做的是在运行 grun之前更改目录 (cd)。
我的项目目录有以下结构:
- src/ (where `.java` files are stored)
- bin/ (where `.class` files are stored)
- input/ (where input programs in `.txt` are stored)
- Makefile
我的Makefile有以下规则:
start:
@cd bin && cat ../$(INPUT) | grun MyGrammar program -gui因此,当我调用make start INPUT="input/test.txt"时,它启动grun,显示输入程序的解析树。
https://stackoverflow.com/questions/36678576
复制相似问题