我有这样的语法:
grammar SearchQuery;
queryDeclaration : predicateGroupItem predicateGroupItemWithBooleanOperator* ;
predicateGroupItemWithBooleanOperator : groupOperator predicateGroupItem ;
predicateGroupItem : LEFT_BRACKET variable variableDelimiter
expression expressionWithBoolean* RIGHT_BRACKET ;
variable : VARIABLE_STRING ;
variableDelimiter : VAR_DELIMITER ;
expressionWithBoolean : boolOperator expression ;
expression : value ;
value : polygonType;
boolOperator : or
;
or : OR ;
groupOperator : AND ;
polygonType : POLYGON LEFT_BRACKET pointList (POLYGON_DELIMITER pointList)* RIGHT_BRACKET ;
longType : LONG ;
doubleType : DOUBLE ;
pointList : point
| LEFT_BRACKET point ( POLYGON_DELIMITER point)* RIGHT_BRACKET
;
point : latitude longitude ;
latitude : longType
| doubleType
;
longitude : longType
| doubleType
;
POLYGON : [pP] [oO] [lL] [yY] [gG] [oO] [nN] ;
LONG : DIGIT+ ;
DOUBLE : DIGIT+ '.' DIGIT*
| '.' DIGIT+
;
AND : [aA] [nN] [dD] ;
OR : COMMA
| [oO] [rR]
;
VARIABLE_STRING : [a-zA-Z0-9.]+ ;
COMMA : ',' ;
POLYGON_DELIMITER : ';' ;
VAR_DELIMITER : ':' ;
RIGHT_BRACKET : ')' ;
LEFT_BRACKET : '(' ;
WS : [ \t\r\n]+ -> skip ;
fragment DIGIT : [0-9] ;
问题是,我不能在polygonType、pointList规则(除了POLYGON_分隔符,我需要使用逗号)和boolOperator规则(使用逗号)中同时使用逗号标记不同的规则。换句话说,如果我们将POLYGON_分隔符改为逗号,并用这样的值测试这样的语法
(polygons: polygon(20 30.4, 23.4 23),
polygon(20 30.4, 23.4 23),
polygon(20 30.4, 23.4 23))
我们将得到一个错误
mismatch input: ',' expecting {',', ')'}
如果有人能帮我理解这个问题,我会很高兴的。
另外,如果我们不改变当前语法,测试的值是
(poligons: polygon(20 30.4; 23.4 23),
polygon(20 30.4; 23.4 23),
polygon(20 30.4; 23.4 23))
由于这些规则:
OR : COMMA
| [oO] [rR]
;
COMMA : ',' ;
lexer永远不会生成逗号
标记,因为它已经与或
标记匹配。因为或
是在逗号
之前定义的,所以它具有优先权。
这就是错误消息不匹配输入:','期望 {',', ')'}
的真正含义。换句话说:不匹配输入:或期望{COMMA,RIGHT_BRACKET}
您应该做的是(如果OR运算符可以是“或”或“,”),让解析器规则或
匹配
逗号
:
or : OR
| COMMA
;
OR : [oO] [rR]
;
COMMA : ',' ;
如何在NGINX配置中为两个位置设置相同的规则? 我尝试了以下方法 但是nginx reload抛出了这个错误:
在我的代码中,我想区分相等和不相等的大小写。我想知道如何有效地做到这一点。目前,我以以下方式实现访问者: 我不确定这是否非常有效,因为/调用,它基本上循环所有子级。这样做了多次,所以我不确定这是否明智。另外,我调用两次。关于后者,我知道我可以缓存在一个局部变量中,但如果需要考虑多个子规则,这将很快导致相当丑陋的代码。 有没有办法更有效地做到这一点?基于某种令牌标识符或分支标识符的switch/ca
我目前正在尝试创建一个选项卡视图,其中每个选项卡打开不同的布局。我正在使用android.support.design.widget.TabLayout,并且我使用适配器成功地将其与pagerView链接起来。现在,在myFragment类中,如果我调用onCreateView并膨胀布局,则布局(fragment_main)将显示在所有选项卡中。 我有3个片段连接3个标签。现在如何为每个片段设置不
我有以下具有内部跨度的div: 和相关CSS: 问题是字体大小是良好的分辨率约640 x 320在横向,但如果我试图设置的分辨率设备,例如1920 x 1080,我总是得到的字体小于640 px分辨率(见下图)。 我应该设置什么以得到相同的尺寸和比例的不同的尺寸? 视口设置为: 车身: 整个模板为: 谢谢你的建议。
我有两个checkstyle文件用于目标源,另一个用于测试源。使用intellij的Checkstyle-Idea插件,我只能为整个项目配置一组规则。 是否可以为不同的作用域配置不同的CheckStyle?
请考虑这个非常简化的示例,其中应该匹配以下形式的输入 如果您需要一个简单的实际应用程序,那么您可以考虑Java中的字符串。其中一些可能是需要用完全不同的解析器解析的regex。它类似于您可以在IDEA内部使用的注入语言。 问:在ANTRL4中是否有一种惯用的方法来用不同的语法解析特定的规则?最好的情况是,我可以在语法级别上指定它,以便生成的AST是包含注入语言的子树的外部语言的组合。