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

Java 如何检查字符串在ANTLR上下文中是否匹配?,java,parsing,antlr4,Java,Parsing,Antlr4,此ANTLR4语法: /* Parser rules */ statement: A '='? B; /* Lexer rules */ A: ... B: ... …匹配ab和A=B 如果我是访客: public String visitStatement(StatementContext ctx) { ... } 如何检查匹配的内容是ab还是A=B(更具体地说,是不是=匹配)?我可以这样做: ctx.getChild(1).getText().equals("=") 但是它看起

此ANTLR4语法:

/* Parser rules */
statement: A '='? B;
/* Lexer rules */
A: ...
B: ...
…匹配
ab
A=B

如果我是访客:

public String visitStatement(StatementContext ctx) {
    ...
}
如何检查匹配的内容是
ab
还是
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
访问与给定
语句上下文匹配的
=
标记。如果没有
=
,您将得到
null
。因此,您可以使用
ctx.EQ()==null
ctx.EQ==null
来检查
=
是否存在