【发布时间】:2014-06-14 11:30:58
【问题描述】:
我有一个词法分析器类来确定令牌 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 生成。代码是这样的
public class hello{
public static void main(String args[]){
System.out.print("Hello World");}
}
现在,是时候让我创建的 ANTLR 词法分析器中弹了..
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
幸运的是,我得到这样的输出: https://www.dropbox.com/s/tsogz10eouo9f9h/ID%20Token.bmp
所以,问题是:
如何从令牌中获取 ID?例如public class hello 是
public = 87,
class = 70,
hello 是标识符 = 164。
所以,也许是这样的输出
8770164
感谢 4 的帮助...
【问题讨论】:
-
先生。巴特·基尔斯,有什么想法吗?
-
不知道如何修改CommonTokenStream类中的getTokens,请帮忙