0
Antlr 4에서 XPath 3 파서를 구현하려고합니다. XPath 사양에 제공된 EBNF에서 올바르게 이해되면 무언가를 제외해야 함을 나타 내기 위해 -
을 사용합니다. Antlr 대신 동일한 동작을 달성하기 위해 술어를 사용할 수 있습니다.XPath 용 Lexer 술어 3 comments
나는 술어를 구성하는 방법을 확실히 모르겠으므로 EBNF에서 CommentContents
을 구현하는 데 어려움을 겪고 있습니다. 내가 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 } ;
사람은 확인할 수 : 이것은 내가 지금까지 가지고 무엇인가?
좋아, 나는 여기 조금 벙어리가 될 수 있습니다! $ Char +를 현재 Lexer 토큰에 대한 참조로 사용할 수 없기 때문에 의사 결정을위한 현재 컨텍스트를 갖기 위해 Java 함수의 인수로 사용해야하는 것은 무엇입니까? – adamretter
이 경우 함수에 getText() ($ getText? 기억할 수 있음)를 전달한 다음 문자열의 접두사를 검사하게하면됩니다. –