XPath 3注释的Lexer谓词



我正在尝试在Antlr 4中实现XPath 3解析器。在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+.text也不起作用。我建议制作一个Java函数来进行测试,返回布尔值,然后直接调用它。

相关内容

  • 没有找到相关文章

最新更新