此antlr4语法:
/* Parser rules */
statement: A '='? B;
/* Lexer rules */
A: ...
B: ...
...匹配A B
和A = 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() == null
或ctx.eq == null
检查=
是否存在。