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  } ;

CommentContentsEBNFの意図と一致するように、正しい述語があるかどうかを誰かが確認できますか?

4

1 に答える 1