2
當我運行下面的語法:「測試」
test : WORD+;
WORD : ('a'..'z')+;
WS : ' '+ {$channel = HIDDEN;};
,我給輸入爲什麼ANTLR接受這個作爲有效的輸入?我認爲('a'..'z')只能匹配小寫字母內的字符?
當我運行下面的語法:「測試」
test : WORD+;
WORD : ('a'..'z')+;
WS : ' '+ {$channel = HIDDEN;};
,我給輸入爲什麼ANTLR接受這個作爲有效的輸入?我認爲('a'..'z')只能匹配小寫字母內的字符?
ANTLR 確實使用您發佈的語法解析輸入字符串?test
時產生錯誤。通常情況下,錯誤在於圍繞ANTLR使用的工具(不幸的是,我發現它也發生了很多ANTLRWorks)。
爲了測試它自己(正確),創建一個文件Test.g
:
grammar Test;
test : WORD+;
WORD : ('a'..'z')+;
WS : ' '+ {$channel = HIDDEN;};
和文件Main.java
:
import org.antlr.runtime.*;
public class Main {
public static void main(String[] args) throws Exception {
ANTLRStringStream in = new ANTLRStringStream("?test");
TestLexer lexer = new TestLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
TestParser parser = new TestParser(tokens);
parser.test();
}
}
,並在同一目錄下下載ANTLR 3.2 JAR的副本。
現在產生一個詞法&解析器:
java -cp antlr-3.2.jar org.antlr.Tool Test.g
編譯所有的Java源文件:
javac -cp antlr-3.2.jar *.java
和運行主類:
java -cp .:antlr-3.2.jar Main
(更換:
與;
如果你是在Windows上)
將產生以下錯誤消息:
line 1:0 no viable alternative at character '?'
我還以爲。你確定 ?你是否說「?test」被解析爲WORD標記? – leonbloy 2010-07-06 17:33:41
是的,這就是發生的事情。我正在使用antlr3 IDE進行eclipse測試... – 2010-07-07 12:13:27