Lexer谓词为XPath 3评论

时间:2014-04-16 19:12:23

标签: parsing antlr4 xpath-3.0

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

我正在努力从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的意图?

1 个答案:

答案 0 :(得分:0)

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