我最近购买了The Definitive ANTLR Reference,我很高兴开始使用 ANTLR。
在第一章中,这个语法被展示:
grammar T;
options {
language = Java;
}
r : 'call' ID ';' {System.out.println("invoke " + $ID.text);} ;
ID : 'a'..'z'+ ;
WS : (' '|'\n'|'\r')+ {$channel=HIDDEN;} ;
我将这个语法复制到一个文件中(.g 扩展名),生成 Lexer 和 Parser,并创建了一个主类,如下所示:
import org.antlr.runtime.*;
public final class Test {
public static void main(String[] args) throws Exception {
ANTLRInputStream input = new ANTLRInputStream(System.in);
TLexer lexer = new TLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
TParser parser = new TParser(tokens);
parser.r();
}
}
没有真正的错误,但是当我运行主类并输入时:
call foo;
没发生什么事。“invoke foo”应该输出到屏幕上,但什么也没有发生。我不想在没有完成任何练习的情况下继续看书。如果重要的话,我在 Eclipse 中使用 ANTLR 3.4。抱歉,这似乎是一个简单的问题,但我是 ANTLR 的新手。
谢谢,
奥马尔