1
我不確定它是否是一個錯誤。但有以下簡單的ANTLR語法識別記號「程序」,要走兩次相同的ANTLR解析器會給出錯誤消息。這是一個錯誤嗎?
grammar w;
options{
language = Java;
ASTLabelType=CommonTree;
}
root : 'program' ;
試圖去通過語法兩倍以下試驗檯給出錯誤信息,儘管它編譯
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()更改對象「分析器」。如果是這樣,這應該是一個錯誤,對吧?
沒有錯誤(sarnold是正確的)。 –