Parsing 如何从ANTLR中具有标记化的代码中获取ID Lexer

Parsing 如何从ANTLR中具有标记化的代码中获取ID Lexer,parsing,antlr,token,lexer,Parsing,Antlr,Token,Lexer,我有一个lexer类,它决定了令牌ID lexer。代码是: public class Antlr3JavaLexer extends Lexer { public static final int PACKAGE=84; public static final int PUBLIC=87; public static final int STATIC=90; public static final int IDENT=164; public static final int CLASS = 7

我有一个lexer类,它决定了令牌ID lexer。代码是:

public class Antlr3JavaLexer extends Lexer {
public static final int PACKAGE=84;
public static final int PUBLIC=87;
public static final int STATIC=90;
public static final int IDENT=164;
public static final int CLASS = 70;  
}
现在我有一个名为hello.java的java类,它将由ANTLR生成。代码是这样的
公共类你好{
公共静态void main(字符串参数[]){
System.out.print(“Hello World”);}
}

现在,是我创建的ANTLR lexer拍摄的时候了

BufferedReader in = null;
try {
        in = new BufferedReader(new FileReader(mainFile.getAbsolutePath())); // Assumption this is to read the hello.class
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    final Antlr3JavaLexer lexer = new Antlr3JavaLexer();

    try {
        lexer.setCharStream(new ANTLRReaderStream(in));
    } catch (IOException e) {
        e.printStackTrace();
        // return false;
    }

    final CommonTokenStream tokens = new CommonTokenStream();
    tokens.setTokenSource(lexer);

    Antlr3JavaParser parser = new Antlr3JavaParser(tokens); 
    System.out.println(tokens + "and" + "\n"); //First Print
    System.out.println(tokens.getTokens); // Second Print
幸运的是,我得到如下输出:

因此,问题是: 如何从代币中获取ID?。例如,
公共类hello
public
=87,
=70,
hello
is identifier=164。 所以,也许输出是这样的

8770164 

谢谢你的帮助

将对象附加到
StringBuilder
(或
StringBuffer
,您可能不应该使用该对象)时,它会调用对象上的
ToString()
,并附加结果文本。如果要以另一种方式设置列表的格式,则需要迭代元素并以所需格式追加文本

在本例中,所需的格式似乎是
Token.getType()


巴特·基尔斯先生,有什么想法吗?我不知道如何修改类中的getTokenshelp@FadlyMassere
CommonTokenStream
不是令牌。为什么它要实现
Token.getType()
方法?这个问题真的不清楚你在找什么。280Z28先生,令牌不能转换为对象。因此,循环是不可能的。有什么建议吗?你是救命恩人。@fadlymasse一切都可以在Java中转换为对象。如果您需要进一步的帮助,您将不得不发布一个完整的工作项目供我们编译和运行。没有人理解你的问题,因为他们目前写的。你有一封电子邮件@Mr.280Z28,我会给你发送我的项目
boolean first = true;
for (Token token : tokens.getTokens()) {
  if (first) {
    first = false;
  } else {
    sb.append(", ");
  }

  sb.append(token.getType());
}