私の文法にはいくつかの異なるモードがあり、これらのモードのいずれかで に到達すると、現在のテキストがトークン<EOF>
内に組み込まれることがわかりました。<EOF>
たとえば、シルクハットのテールなどの不正な表現を文法に渡すと、WORD
WORD
<EOF>
代わりにWORD
WORD
QUOTE
IN_QUOTE
<EOF>
ctx = {org.epo.presto.pql.grammar.PQL$ParseContext@520}"[]" children = {java.util.ArrayList@869} size = 2 [0] = {org.epo.presto.pql.grammar.PQL$ProximityExpressionContext@1022}"[24]" _p = 0 children = {java.util.ArrayList@1033} size = 2 start = {org.antlr.v4.runtime.CommonToken@881}"[@0,0:2='top',<34>,1:0]" stop = {org.antlr.v4.runtime.CommonToken@882}"[@1,4:7='hat',<34>,1:4]" altNum = 0 exception = null parent = {org.epo.presto.pql.grammar.PQL$ParseContext@520}"[]" invokingState = 24 [1] = {org.antlr.v4.runtime.tree.TerminalNodeImpl@1023}"<EOF>" symbol = {org.antlr.v4.runtime.CommonToken@1028}"[@2,8:14='\" tails',<-1>,1:8]" parent = {org.epo.presto.pql.grammar.PQL$ParseContext@520}"[]"
私の文法の関連セクションは次のとおりです。
QUOTE : '"' -> more, pushMode(QUOTED);
OTHER : ~[\{\}()!,./:|\[\] "=<>\~$];
WORD : OTHER+;
mode QUOTED;
QUOTATION : '"' -> popMode;
IN_QUOTE : ~["] -> more;
<EOF>
モード内で処理するための好ましい方法はありますか?
ANTlr 4 リリースと github の今日のマスターの両方でこれを試しましたが、同じ結果が得られました。
デイブ