Antlr版本:3.4
Antlr下载地址:http://www.antlr.org/download.html
Antlr字节码包在lib下。
实例:
1、创建L.g文件,内容如下:
class SimpleParser extends Parser;
entry : (d:DOB n:NAME a:AGE(SEMI)
{
System.out.println(
"Name: " +
n.getText() +
", Age: " +
a.getText() +
", DOB: " +
d.getText()
);
})*
;
class SimpleLexer extends Lexer;
NAME : ('a'..'z'|'A'..'Z')+;
DOB : ('0'..'9' '0'..'9' '/')=>
(('0'..'9')('0'..'9')'/')(('0'..'9')('0'..'9')'/')('0'..'9')('0'..'9') //{ $setType(DOB); }
| ('0'..'9')+ { $setType(AGE); } ;
WS :
(' '
| '\t'
| '\r' '\n' { newline(); }
| '\n' { newline(); }
)
{ $setType(Token.SKIP); }
;
SEMI : ';' ;
该文件内容通过文法分析器解析后(Lexer)生成Java文件
具体命令:
java -cp /home/xfc/antlr/antlr3.4/lib/antlr-3.4-complete.jar antlr.Tool L.g
2、结束后生成3个Java文件:
LLexer.java
LParser.java
LParserTokenTypes.java
3、写一个test测试:
import java.io.*;
public class Main {
public static void main(String args[]) {
FileInputStream f = null;
try {
f = new FileInputStream("/home/xfc/antlr/s_antlr/src/test.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
DataInputStream input = new DataInputStream(f);
LLexer lexer = new LLexer(input);
LParser parser = new LParser(lexer);
try {
parser.entry();
} catch(Exception e) {}
}
}
4、新建特定目录下的test.txt
06/06/82 Peter 20;
03/04/83 Rosie 19;
04/05/81 Mikey 21;
5、执行后结果显示:
写道
Name: Peter, Age: 20, DOB: 06/06/82
Name: Rosie, Age: 19, DOB: 03/04/83
Name: Mikey, Age: 21, DOB: 04/05/81
Name: Rosie, Age: 19, DOB: 03/04/83
Name: Mikey, Age: 21, DOB: 04/05/81
参考资料:http://zbw.iteye.com/blog/25860