以前在编译原理里面使用lex,yacc来进行词法分析,语法分析,在使用Spring过程中发现ANTLR原来也是做这个工作的,故拿来学习一下。 lexer语法是由一系列的lexer规则组成。lexer规则和parser规则类似,但没有参数,返回值和本地变量。 lexer 命名必须以大写字母开头(和parser命名规则不一样),格式如下:
/** Optional document comment */
TokenName : alternative1 | ... | alternativeN ;
可以定fragment规则,这个规则不产生token
# 格式 fragment HelperTokenRule : alternative1 | ... | alternativeN ;
INT : DIGIT+ ; // references the DIGIT helper rule
fragment DIGIT : [0-9] ; // not a token by itself
模式使得你可以通过内容来组织词法规则(如在xml标签内外的内容)。lexer只有在当前模式下找到匹配后才返回token,lexer一开始是在default模式。通过使用mode命令来进入一个模式。
rules in default mode
...
mode Mode1;
rules in Mode1
...
mode ModeN;
rules in ModeN
...
在匹配规则的最后可以加上 -> 来加上lexer命令
TokenName : <<alternative>>-> command-name [(<<dentifier or integer>>]
有如下的的命令