0

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

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

/** [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 的意图吗?

4

1 回答 1

0

你需要 {...}?不是 {...}。$Char+.text 也不起作用。我建议制作执行测试的 Java 函数,返回布尔值然后调用它。

于 2014-04-17T15:35:02.497 回答