如何在ANTLR上下文中检查字符串是否匹配



此antlr4语法:

/* Parser rules */
statement: A '='? B;
/* Lexer rules */
A: ...
B: ...

...匹配A BA = B

如果我成为访客:

public String visitStatement(StatementContext ctx) {
    ...
}

如何检查匹配的内容是A B还是A = B(更具体地说,是否匹配=)?我可以这样做:

ctx.getChild(1).getText().equals("=")

但是它似乎太骇客了,如果B的文本为" =",它不起作用。有没有接受的方法来执行此操作?

您可以在该特定规则中添加'='令牌名称或在'='?中添加标签。

命名令牌:

statement: A '='? B; // You can write EQ? here or leave it as '='?
/* Lexer rules */
EQ: '=';

使用标签:

statement: A eq='='? B;

然后,您可以分别使用.EQ().eq来访问由给定的StatementContext匹配的=令牌。如果没有=,您将获得null。因此,您可以使用ctx.EQ() == nullctx.eq == null检查=是否存在。

相关内容

  • 没有找到相关文章

最新更新