Parsing 必填和可选空格

Parsing 必填和可选空格,parsing,antlr,antlr3,Parsing,Antlr,Antlr3,我需要像这样解析字符串: "qqq www eee" -> "qqq", "www", "eee" (case A) "qqq www eee" -> "qqq", "www", "eee" (case B) 以下是我目前掌握的语法: grammar Query; SHORT_NAME : ('a'..'z')+ ; name returns [String s]: SHORT_NAME { $s = $SHORT_NAME.text; }; names

我需要像这样解析字符串:

"qqq www eee" -> "qqq", "www", "eee" (case A)
"qqq   www  eee" -> "qqq", "www", "eee" (case B)
以下是我目前掌握的语法:

grammar Query;

SHORT_NAME : ('a'..'z')+ ;

name returns [String s]: SHORT_NAME { $s = $SHORT_NAME.text; };      

names 
    returns [List<String> v]
    @init { $v = new ArrayList<String>(); }
    : name1 = name { $v.add($name1.s); } 
      (' ' name2 = name { $v.add($name2.s); })*;

有什么想法可以让它工作吗?

名称
规则中删除文本
'
,并将其替换为
空格
标记:

grammar Query;

SPACES
 : (' ' | '\t')+
 ;

SHORT_NAME 
 : ('a'..'z')+ 
 ;

name returns [String s]
 : SHORT_NAME { $s = $SHORT_NAME.text; }
 ;      

names returns [List<String> v]
@init { $v = new ArrayList<String>(); }
 : a=name { $v.add($a.s); } (SPACES b=name { $v.add($b.s); })*
 ;
语法查询;
空间
:(“|”\t”)+
;
简称
:('a'..'z')+
;
name返回[String s]
:SHORT_NAME{$s=$SHORT_NAME.text;}
;      
名称返回[列表五]
@init{$v=newArrayList();}
:a=name{$v.add($a.s);}(空格b=name{$v.add($b.s);})*
;
或者干脆放弃lexer级别的空格,这样就不需要将它们放在解析器规则中:

grammar Query;

SPACES
 : (' ' | '\t')+ {skip();}
 ;

SHORT_NAME 
 : ('a'..'z')+ 
 ;

name returns [String s]
 : SHORT_NAME { $s = $SHORT_NAME.text; }
 ;      

names returns [List<String> v]
@init { $v = new ArrayList<String>(); }
 : (name { $v.add($b.s); })+
 ;
语法查询;
空间
:(''|'\t')+{skip();}
;
简称
:('a'..'z')+
;
name返回[String s]
:SHORT_NAME{$s=$SHORT_NAME.text;}
;      
名称返回[列表五]
@init{$v=newArrayList();}
:(姓名{$v.add($b.s);})+
;
grammar Query;

SPACES
 : (' ' | '\t')+ {skip();}
 ;

SHORT_NAME 
 : ('a'..'z')+ 
 ;

name returns [String s]
 : SHORT_NAME { $s = $SHORT_NAME.text; }
 ;      

names returns [List<String> v]
@init { $v = new ArrayList<String>(); }
 : (name { $v.add($b.s); })+
 ;