Java 如何检查字符串在ANTLR上下文中是否匹配?
此ANTLR4语法: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("=") 但是它看起
/* 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
来检查=
是否存在