你的語法:
grammar Test;
sentence_with_int
: sentence {System.out.println("Parsed: sentence='"+$sentence.text+"'");}
INT {System.out.println("Parsed: int='"+$INT.text+"'");}
;
sentence
: (ANY_WORD | INT)+
;
ANY_WORD
: ('a'..'z' | 'A'..'Z')+
;
INT
: ('0'..'9')+
;
WS
: (' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;}
;
正是這麼做的。這裏有一個小測試工具:
import org.antlr.runtime.*;
public class Demo {
public static void main(String[] args) throws Exception {
ANTLRStringStream in = new ANTLRStringStream("the number of size 14 shoes bought was 3");
TestLexer lexer = new TestLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
TestParser parser = new TestParser(tokens);
parser.sentence_with_int();
}
}
首先生成一個解析器&詞法分析器(假設所有的文件,以及ANTLR罐子,都在同一個目錄):
java -cp antlr-3.2.jar org.antlr.Tool Test.g
和編譯所有.java
源文件:
javac -cp antlr-3.2.jar *.java
最後運行Demo
類:
java -cp .:antlr-3.2.jar Demo
產生以下輸出(在Windows ,具有;
更換:
):
Parsed: sentence='the number of size 14 shoes bought was'
Parsed: int='3'
非常感謝巴特! – 2010-06-19 07:48:59
沒問題@Richard,儘管我沒有做太多的事情:你的語法開頭很好! :) – 2010-06-19 08:20:29