我的语法在很大程度上必须忽略空格,除非在某些上下文中。这个问题的答案建议定义特定的lexer规则来处理我想要的异常。
问题是(我认为)我不能在lexer级别处理这种情况,因为它们似乎是在解析器级别被触发的。
更具体地说:我想认识一些东西,比如
MyRule:
MyParseTree1 Operator MyParseTree2 // WS is skipped
| MyParseTree1 WS SensitiveOperator WS MyParse // WS carries meaning
记住我有一个WS-
在Xtext中,规则可以在规则范围的基础上指定在规则范围内应用哪些隐藏令牌:
MyRule (hidden COMMENTS):
... // WS reaches the parser, comments don't
MyRule2 (hidden WS, COMMENTS):
... // WS is skipped, comments too
但是我对antlr4一无所知。
如果您想根据语法上下文跳过某些Tokens
,您应该在此处查看这个问题,其中描述了用于跳过空格的给定过程(如您所愿)。
如果没有引用,会导致解析发生更改吗?
我正在使用antlr4语法存储库中的JSON语法来解析JSON文件。它工作得很好,并使用通常的规则忽略空格:
我对是否允许以下情况感到困惑: UPDATE:我知道当我在for循环中提供正确的声明类型时,它就会工作。问题是如果我不这样做会发生什么?
可能在内部使用的代码将在规则之后被取消,如下所示: ANTLR4就是这样做事的吗?
我们在ANTLR中遇到的问题是,我们有这样一个语法: 请记住“鲍勃。”第一行是动态的,可以是任何东西。其中之一就是“鲍勃”。“Bob Offset”行不是动态的,它存在于我们正在解析的每一个类型的文件中。 理想的解决方案是,如果ANTLR有某种方法来指定上下文或解析器规则特定的lexer规则。这样,“Bob offset:”标记在语法中的其他地方就不会出错了。 对此问题的任何想法都将不胜感激。
我刚刚将Intellij Idea的SonarLint插件更新为2.3.2版。Changelog表示,由于2.3版,连接模式下的规则排除应该可用。 下面是我的配置,似乎被更正了,然而,忽略的规则仍然弹出。