ANTLR4能够自动地帮助你完成词法分析和语法分析的工作,此例中尝试使用antlr4对类似路径的一组数据进行解析。
如test.txt:
usr/local/work/Test/Path
usr/local, usr/data
usr/local/..
usr/local/*
usr/**
$/*
首先,根据写一个g4文件(如Path.g4),用于提供语法和词法解析规则(此语法中'$'表示根目录,‘@’表示当前目录,‘@@’表示上一级目录,‘*’表示下一级目录下的所有文件,‘**’表示所有子目录下的所有子文件),具体语法规则可根据需要自己进行定义,此例只做参考作用:
grammar Path;
prog: stat+;
stat: expr NEWLINE
| NEWLINE;
expr: expr '/' (expr) # separate
| expr ',' expr # comma
| '$' # root
| '@' # current
| '@@' # parent
| '*' # children
| '**' # descendants
| NAME # Name
;
NAME: ('a' .. 'z' | 'A' .. 'Z' | '\u4E00'..'\u9FA5' | '\uF900'..'\uFA2D')+;
NEWLINE:'\r'? '\n' ;
WS: [ \t]+ -> skip;
首先,运行命令生成相关java文件与token文件
D:\localwork\antlr4Test\PathTest>antlr4 Path.g4
编译
D:\localwork\antlr4Test\PathTest>antlr4Compile
查看生成的树形结构
D:\localwork\antlr4Test\PathTest>grun4 Path prog -gui < test.txt