Parsing XPath3注释的Lexer谓词

Parsing XPath3注释的Lexer谓词,parsing,antlr4,xpath-3.0,Parsing,Antlr4,Xpath 3.0,我试图在Antlr4中实现XPath3解析器。在XPath规范中给出的EBNF中,它使用-表示应该排除某些内容,如果我理解正确,那么在Antlr中,我可以使用谓词来实现相同的行为 我正在努力从EBNF实现CommentContents,因为我不太确定如何构造谓词。这就是我到目前为止所做的: /** [2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] * * //any Unicode character, excl

我试图在Antlr4中实现XPath3解析器。在XPath规范中给出的EBNF中,它使用
-
表示应该排除某些内容,如果我理解正确,那么在Antlr中,我可以使用谓词来实现相同的行为

我正在努力从EBNF实现
CommentContents
,因为我不太确定如何构造谓词。这就是我到目前为止所做的:

/** [2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
 *
 * //any Unicode character, excluding the surrogate blocks, FFFE, and FFFF
 */
 Char : '\u0001'..'\uD7FF' | '\uE000'..'\uFFFD' | '\u10000'..'\u10FFFF' ;


/** [108] CommentContents ::= (Char+ - (Char* ('(:' | ':)') Char*)) */
CommentContents : Char+ { $Char+.text.indexOf("(:") + $Char+.text.indexOf(":)") == 0  } ;

有人能确认我的
CommentContents
谓词是否正确,以便与EBNF的意图匹配吗?

您需要{…}?不是{…}。另外$Char+。文本将不起作用。我建议使用Java函数进行测试,返回布尔值,然后调用它。

好吧,我可能有点傻!如果我不能使用$Char+作为对当前Lexer标记的引用,因此我有当前上下文来做出决定,那么我应该使用什么作为Java函数的参数?在这种情况下,您只需将getText()($getText?可以记住)传递给函数,然后让它检查字符串的前缀。