将令牌类型整数映射到 ANTLR4 中的字符串

我是 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" );

  }

}

我的问题:我想打印其名称,而不是将令牌类型打印为整数。(即如果类型是INTLITERAL(==4) 而不是打印4 我想打印INTLITERAL)我所以这篇文章,但它使用词汇类。


有没有其他方法,比如类似的东西 getSymbolType(int type) ?


jeck猫
浏览 198回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java