我的语法中有几种不同的模式,并且发现如果<EOF>
在其中一种模式下达到,则当前文本将包含在<EOF>
令牌中。
例如,如果我通过语法传递一个格式错误的表达式,例如top hat" tailsWORD
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 的今天的 master 中尝试过这个并得到相同的结果。
戴夫