0

以下是我的 antlr 3 语法。我想剥离 html 标签内的内容。当我< >在标签内有算术运算符时,就会出现问题。如何处理?

grammar T;
options {
  output=AST;
}
tokens {
  ROOT;
}
parse
  :  text+  ;
text
  :  (tag)=> tag !
  | SPACE !
  |  outsidetag 
  ;
SPACE
    :    (' ' | '\t' | '\r' | '\n')+ ;
tag
  :  OPEN INSIDETAG  CLOSE  ;
CLOSE : '>' ;
OPEN  : '<' ;
INSIDETAG 
: ~(CLOSE|OPEN)+ ;
outsidetag
  :  ~(SPACE) ;
4

1 回答 1

1

首先,您不需要在 INSIDETAG 规则中检查 OPEN,因为在此处跳过它没有任何害处。事实上,你想要这样。另外结合 tag 和 INSIDETAG 并使其变得贪婪,因此它会尝试消耗任何东西,直到最后一个 CLOSE TOKEN,跳过任何中间的:

tag: options { greedy = true; }: OPEN ~CLOSE* CLOSE;
于 2013-05-31T06:40:16.600 回答