部分跳过ANTLR4

时间:2018-06-13 05:36:31

标签: antlr

我试图匹配以下短语:

<svg/onload="alert(1);"> 

我需要令牌像:

'<svg', 'onload="alert(1);", '>'

所以基本上我需要跳过/部分中的<svg/onload。但此处不允许使用skip短语:

Attribute
    : ('/' -> skip) Identifier '=' StringLiteral?
    ;

错误是

error(133): HTML.g4:35:11: ->command in lexer rule Attribute must be last element of single outermost alt

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

错误消息几乎可以告诉您问题所在。 skip命令必须位于规则的末尾。您不能跳过中间令牌,只能跳过整个规则。

然而,我想知道你为什么要跳过斜线。为什么不让lexer扫描所有内容(无论如何),然后忽略你不需要的令牌?另外,我不会使用词法分析器规则,而是使用解析器规则,以允许元素之间的任意空格。

答案 1 :(得分:-1)

尝试lexer的setText(getText().replace("/", ""))或任何其他匹配的字符串操作