Currecntly,我实现了生成Sys.unsetenv("R_LIBS")
Sys.unsetenv("R_LIBS_USER")
Sys.setenv(R_LIBS_SITE = "D:/R/libs/site")
Sys.setenv(R_LIBS_USER = "D:/R/libs/user")
Sys.setenv(R_LIBS = "D:/R/libs")
的ANTLR4。
当我需要检查令牌是否是一个或那个时,我做的事情如下:
BaseListener<Void>
有没有办法避免这些@Override
public Void visitTerminal(TerminalNode node) {
if (";".equals(node.getText()))
this.prepareQuery();
else if (",".equals(node.getText()))
this.prepareQuery();
return super.visitTerminal(node);
}
,";"
?
我已经弄清楚了,因为我已经宣布这个令牌作为LEXER规则的语法:
","
我可以写一些类似SCOL : ';';
COMMA : ',';
或Lexer.SCOL(...)
的内容吗?:
答案 0 :(得分:0)
您可以通过node.getSymbol()。getType();从节点获取词法分析器类型。
答案 1 :(得分:0)
Antlr4生成GrammLexer
,其中包含每个Lexer规则:
所以,替换将是:
@Override
public Void visitTerminal(TerminalNode node) {
if (GrammLexer.SCOL == node.getSymbol().getType()))
this.prepareQuery();
else if (GrammLexer.COMMA == node.getText().getType())
this.prepareQuery();
return super.visitTerminal(node);
}
或者,
@Override
public Void visitTerminal(TerminalNode node) {
switch (node.getSymbol().getType())
{
case GrammarLexer.SCOL:
break;
case GrammarLexer.COMMA:
break;
}
return super.visitTerminal(node);
}