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); })+
;