如何获取Lexer规则的文本

时间:2012-10-09 09:47:20

标签: antlr antlr3 antlrworks

我有像这样的Antlr Grammar Lexer规则,

Letter
    :  '\u0024' | '\u005f'|
       '\u0041'..'\u005a' | '\u0061'..'\u007a' | 
       '\u00c0'..'\u00d6' | '\u00d8'..'\u00f6' | 
       '\u00f8'..'\u00ff' | '\u0100'..'\u1fff' | 
       '\u3040'..'\u318f' | '\u3300'..'\u337f' | 
       '\u3400'..'\u3d2d' | '\u4e00'..'\u9fff' | 
       '\uf900'..'\ufaff'
    ;

Name : Letter (Letter | '0'..'9' | '.' | '-')*;

我想获取Name的字符串值。我该怎么办?

1 个答案:

答案 0 :(得分:3)

来自解析器规则的

rule
 : Name {String s = $Name.text; System.out.println(s);}
 ;

rule
 : n=Name {String s = $n.text; System.out.println(s);}
 ;
来自词法分析器规则本身的

Name 
 : Letter (Letter | '0'..'9' | '.' | '-')*
   {String s = $text; System.out.println(s);}
 ;