Я новичок в ANTLR4.Я пытаюсь обработать игрушечный язык с именем Mo и распечатать текст токена и его тип.
Ниже приведен мой файл Mo.java:
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
import static org.antlr.v4.runtime.CharStreams.fromFileName;
public class Mo {
public static void main (String [] args) {
CharStream cs = null;
try {
cs = fromFileName(args[0]); //load the file
} catch (Exception e) {
System.err.println("No input file: " + e.getMessage());
return;
}
MoLexer lexer = new MoLexer(cs); //instantiate a lexer
CommonTokenStream tokens = new CommonTokenStream(lexer); //scan stream for tokens
MoParser parser = new MoParser(tokens); //parse the tokens
ParseTree tree = parser.molang(); // parse the content and get the tree
MoWalker listener = new MoWalker();
ParseTreeWalker walker = new ParseTreeWalker();
walker.walk(listener,tree);
}
}
, а это мой файл MoWalker.java:
public class MoWalker extends MoBaseListener {
public void enterMicrolang(MoParser.MolangContext ctx ) {
for (int i = 0; i<ctx.children.size()-1; i++){
Token representedToken = ((TerminalNodeImpl) ctx.getChild(i)).getSymbol();
System.out.print("Token: "+representedToken.getText());
int typee = representedToken.getType();
System.out.println(" --- "+typee);
}
}
public void exitMicrolang(MicroParser.MicrolangContext ctx ) {
System.out.println( "Exiting R" );
}
}
Моя проблема : Вместо того, чтобы печатать тип токена в виде целого числа, я хочу напечатать его имя.(то есть, если type INTLITERAL (== 4) вместо печати 4, я хочу напечатать INTLITERAL) I так что это post , но он использует класс Vocabulary.
Есть ли другой способ, например, что-то вроде getSymbolType(int type) ?