当前位置: 首页 > 知识库问答 >
问题:

在Antlr4中基于每个解析器规则忽略空格

董阳平
2023-03-14

我的语法在很大程度上必须忽略空格,除非在某些上下文中。这个问题的答案建议定义特定的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一无所知。

共有1个答案

柳灿
2023-03-14

如果您想根据语法上下文跳过某些Tokens,您应该在此处查看这个问题,其中描述了用于跳过空格的给定过程(如您所愿)。

 类似资料:
  • 如果没有引用,会导致解析发生更改吗?

  • 我正在使用antlr4语法存储库中的JSON语法来解析JSON文件。它工作得很好,并使用通常的规则忽略空格:

  • 我对是否允许以下情况感到困惑: UPDATE:我知道当我在for循环中提供正确的声明类型时,它就会工作。问题是如果我不这样做会发生什么?

  • 可能在内部使用的代码将在规则之后被取消,如下所示: ANTLR4就是这样做事的吗?

  • 我们在ANTLR中遇到的问题是,我们有这样一个语法: 请记住“鲍勃。”第一行是动态的,可以是任何东西。其中之一就是“鲍勃”。“Bob Offset”行不是动态的,它存在于我们正在解析的每一个类型的文件中。 理想的解决方案是,如果ANTLR有某种方法来指定上下文或解析器规则特定的lexer规则。这样,“Bob offset:”标记在语法中的其他地方就不会出错了。 对此问题的任何想法都将不胜感激。

  • 我刚刚将Intellij Idea的SonarLint插件更新为2.3.2版。Changelog表示,由于2.3版,连接模式下的规则排除应该可用。 下面是我的配置,似乎被更正了,然而,忽略的规则仍然弹出。