繁体   English   中英

如何在Antlr语法中处理算术运算符<和>以删除html标签

[英]How to handle arithmetic operator < and > in antlr grammar that removes html tags

以下是我的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) ;

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

tag: options { greedy = true; }: OPEN ~CLOSE* CLOSE;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM