我不确定它是否是一个bug。但是使用以下简单的ANTLR语法来识别令牌“程序”,
grammar w;
options{
language = Java;
ASTLabelType=CommonTree;
}
root : 'program' ;
以下尝试通过语法TWICE的测试工具虽然编译了
,但仍会显示错误消息import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import antlr.CommonAST;
public class wT{
public static void main(String[] args) throws Exception {
wLexer lexer = new wLexer(new ANTLRStringStream ("program"));
wParser parser = new wParser(new CommonTokenStream(lexer));
System.out.println("###Test1");
parser.root();
parser.root();
System.out.println("ok for w.g gramma");
}
}
ANT调用的错误消息是,
bash-3.2$ ant testrig
Buildfile: /Users/fuzl/while-comp/trunk/_test/build.xml
antlr:
compile:
[javac] Compiling 1 source file to /Users/fuzl/while-comp/trunk/_test
testrig:
[java] ###Test1
[java] ok for w.g gramma
[java] line 1:7 missing 'program' at '<EOF>'
非常有趣的是,最后一行
[java] line 1:7 missing 'program' at '<EOF>'
是由于testrig的两次“parser.root()”,当只使用一个parser.root()时,此错误消息消失。
我想parser.root()会更改对象“解析器”。如果是这样,这应该是一个错误,对吗?