我下载了最新版本的ANTLR(带有ANTLR 3.3的AntlrWorks 1.4.2)。
我启动了AntlrWorks UI,并输入了样本expression evaluator grammar。接下来,我从AntlrWorks UI生成代码。接下来,我选择了调试菜单选项来生成输入文件和__Test ___。java
直到现在一切都很好,但是,当我从命令行运行__Test___时,ANTLR就会挂起。我在Java代码中放了一些System.out,似乎程序挂起来自__Test___.java的以下行
ExprParser g = new ExprParser(tokens, 49100, null);
我也尝试打印令牌流,但它不会打印任何内容。
有没有人知道可能出错的地方?我试过多个语法,但得到了相同的结果。
我正在使用OpenJDK运行64位Ubuntu。
答案 0 :(得分:4)
调试器创建一个套接字并等待从ANTLRWorks内部建立的连接。因此,您只能在ANTLRWorks中运行此自动生成的__Test__.java
类。如果要从命令行创建测试类,请使用以下类:
import org.antlr.runtime.*;
public class Main {
public static void main(String[] args) throws Exception {
ExprLexer lexer = new ExprLexer(new ANTLRStringStream("4 + 5 * 6\n"));
ExprParser parser = new ExprParser(new CommonTokenStream(lexer));
parser.prog();
}
}
bart@hades:~/Programming/ANTLR/Demos/Expr$ java -cp antlr-3.3.jar org.antlr.Tool Expr.g
bart@hades:~/Programming/ANTLR/Demos/Expr$ javac -cp antlr-3.3.jar *.java
bart@hades:~/Programming/ANTLR/Demos/Expr$ java -cp .:antlr-3.3.jar Main
34