Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Antlr4跳过规则时没有错误_Java_Antlr4 - Fatal编程技术网

Java Antlr4跳过规则时没有错误

Java Antlr4跳过规则时没有错误,java,antlr4,Java,Antlr4,我的语法很简单。antlr4似乎跳过了以下语法中的toLabel规则 grammar SOSLGrammar; options { language = Java; } main : query; query : findClause toLabelClause? searchGroupClause? ; findClause : find '{' searchClause '}'; find : Find; searchClause :

我的语法很简单。antlr4似乎跳过了以下语法中的
toLabel
规则

grammar SOSLGrammar;
options {
  language = Java;
}

main : query;

query : findClause
        toLabelClause?
        searchGroupClause?
        ;
findClause : find '{' searchClause '}';
find : Find;
searchClause : '(' searchClause ')'                     #bracketedSearch
             | searchClause AND NOT searchClause        #notSearch
             | searchClause AND searchClause            #andSearch
             | searchClause OR searchClause             #orSearch
             |terms                                     #simple
             ;

terms : term+;
term : StringLiteral|('"' reservedWordsWithOperators '"') | (TermLiteral|reservedWords);

toLabelClause : ToLabel '(' ')';

searchGroupClause : IN (email|all|phone|sidebar|name) Fields;
name : Name;
email : Email;
all : All;
phone : Phone;
sidebar : Sidebar;

reservedWordsWithOperators : reservedWords | NOT | AND | OR |IN;
reservedWords : Find|ToLabel|Name|Email|All|Phone|Sidebar;

Find : F I N D;
ToLabel :  T O L A B E L;
Fields : F I E L D S;
Name : N A M E;
All : A L L;
Phone : P H O N E;
Sidebar : S I D E B A R;
Email : E M A I L;

AND : A N D;
OR : O R;
NOT : N O T;
IN : I N;

StringLiteral :  '"' (  ~('\\'|'"') )* '"';
TermLiteral : ~('\\'|'"' | ' ' | '\t' | '}' | '{' | '\r' | '\n')+;
WS : (' ' | '\r' | '\n' | '\t' | '\f' | '\b' | '\r\n' )+ -> skip;


fragment A : 'A' | 'a' ;
fragment B : 'B' | 'b' ;
fragment C : 'C' | 'c' ;
fragment D : 'D' | 'd' ;
fragment E : 'E' | 'e' ;
fragment F : 'F' | 'f' ;
fragment G : 'G' | 'g' ;
fragment H : 'H' | 'h' ;
fragment I : 'I' | 'i' ;
fragment J : 'J' | 'j' ;
fragment K : 'K' | 'k' ;
fragment L : 'L' | 'l' ;
fragment M : 'M' | 'm' ;
fragment N : 'N' | 'n' ;
fragment O : 'O' | 'o' ;
fragment P : 'P' | 'p' ;
fragment Q : 'Q' | 'q' ;
fragment R : 'R' | 'r' ;
fragment S : 'S' | 's' ;
fragment T : 'T' | 't' ;
fragment U : 'U' | 'u' ;
fragment V : 'V' | 'v' ;
fragment W : 'W' | 'w' ;
fragment X : 'X' | 'x' ;
fragment Y : 'Y' | 'y' ;
fragment Z : 'Z' | 'z' ;
我运行了以下测试:

java org.antlr.v4.runtime.misc.TestRig SOSLGrammar main-gui-trace

有以下几行

查找{abc}toLabel()

我希望生成的树显示
toLabel()
,但它似乎被默默地忽略了

这个语法有什么问题

谢谢

拉胡尔
~

您希望输入
toLabel()
生成3个令牌:

  • toLabel
实际上,由于
TermLiteral
规则允许出现
字符,因此正在生成单个
TermLiteral
标记
toLabel()
。由于该令牌较长,因此选择该令牌而不是标签