Hi Phone Chan home

ANTLR lexer规则

以前在编译原理里面使用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

词法模式(Lexical Modes)

模式使得你可以通过内容来组织词法规则(如在xml标签内外的内容)。lexer只有在当前模式下找到匹配后才返回token,lexer一开始是在default模式。通过使用mode命令来进入一个模式。

  rules in default mode
  ...
  mode Mode1;
  rules in Mode1
  ...
  mode ModeN;
  rules in ModeN
  ...

lexer规则


lexer命令

在匹配规则的最后可以加上 -> 来加上lexer命令

  TokenName : <<alternative>>-> command-name [(<<dentifier or integer>>]

有如下的的命令

参考

top
Fork me on GitHub