ANTLR框架的新增內容。我正在解析一個Java文件。使用ANTLR我正在生成JavaLexer, JavaParser, JavaListener, JavaBaseListener
uning org.antlr.v4.Tool 這裏我有一個問題。我創建一個類,它覆蓋的JavaBaseListener
在ANTLR中訪問子節點中的父節點4.4
所需的方法下面是代碼:
JavaMetaDataReader.java
public class JavaMetaDataReader extends JavaBaseListener{
@Override
public void enterAnnotation(AnnotationContext ctx)
{
System.out.println(ctx.getText());
}
@Override
public void enterAnnotationName(AnnotationNameContext ctx)
{
System.out.println(ctx.getText());
}
@Override
public void enterElementValuePairs(ElementValuePairsContext ctx)
{
System.out.println(ctx.getText());
System.out.println("Parent: "+ctx.getParent().getText());
}
}
JavaReader.Java //包含的主要方法。
public class JavaReader {
public static void main(String[] args) {
File fileTobeRead = new File("./src/main/java/sample/HelloWord.java");
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(fileTobeRead);
ANTLRInputStream input = new ANTLRInputStream(fileInputStream);
JavaLexer lexer = new JavaLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
JavaParser parser = new JavaParser(tokens);
ParseTree tree = parser.compilationUnit(); // parse
ParseTreeWalker walker = new ParseTreeWalker(); // create standard walker
JavaMetaDataReader javaMetaDataReader = new JavaMetaDataReader();
walker.walk(javaMetaDataReader, tree); // initiate walk of tree with listener
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
HelloWorld.java
public class HelloWord {
@SuppressWarnings(value = "Helloo")
private void helloWorld() {
// TODO Auto-generated method stub
}
}
這裏HelloWorld.java是一個需要解析的文件。 在這裏試圖訪問註釋。
的enterAnnotation
打印:@SuppressWarnings(value="Helloo")
的enterAnnotationName
打印:SuppressWarnings
在enterElementValuePair
打印第一條語句:value="Helloo"
在enterElementValuePair
打印第二個聲明:Parent: @SuppressWarnings(value="Helloo")
但我需要它打印SuppressWarnings
(valur e打印enterAnnotationName
我不知道我出錯的地方。我需要訪問enterElementValuePairs中的annotationName。 我該怎麼辦?
請幫助我,因爲我是一個初學者。
使用'ParseTreeWalker沃克= ParseTreeWalker.DEFAULT'。 – 2015-03-20 18:37:05