簡體   English   中英

Java 用於 ANTLR 的樹解析器 output

[英]Java Tree parser output for ANTLR

我在 ANTLR 網站上找到了一個示例模板,它是 Javatreeparser.g,該網站說它可以生成我需要的 AST,但由於我是 ANTLR 的新手,我該如何讓它顯示? 到目前為止,我所做的是將語法文件與我現有的 java 語法放在一起。 但我不知道如何使用和 output 文件中我需要的 AST。 我該怎么做?

我在 ANTLR 網站上找到了一個示例模板,它是 Javatreeparser.g,該網站說它可以生成我需要的 AST,

不,來自 ANTLR wiki的組合語法Java.g為 Java 源文件生成詞法分析器和解析器。 然后解析器構造這個源的 AST,然后JavaTreeParser.g可以使用這個 AST 來遍歷它。 樹語法JavaTreeParser.g用於創建 AST。 這是由從Java.g創建的解析器完成的。

到目前為止,我所做的是將語法文件與我現有的 java 語法放在一起。

那是不正確的。 樹語法JavaTreeParser.g期望 AST 作為解析器從Java.g生成的輸入。 您不能只插入另一個解析器(或其他樹語法)。

但我不知道如何使用和 output 文件中我需要的 AST。 我該怎么做?

請參閱之前的問答: Visualizing an AST created with ANTLR (in a.Net environment)

編輯

我不想立即發布這個,因為我想讓你先自己試一試(是的,我的意思是;);)

這是一個快速演示:

  1. Java.g復制到一個目錄中,並從中刪除@header{...}@lexer:::header{...}聲明;
  2. antlr-3.3.jar復制到同一目錄;
  3. 在此目錄中創建文件Main.javaTest.java (見下文)。

測試.java

public class Test {

    int i = 1 + 2;
    String s;

    Test(String s) {
        this.s = s;
    }
}

主要.java

import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import org.antlr.stringtemplate.*;

public class Main {
    public static void main(String[] args) throws Exception {
        JavaLexer lexer = new JavaLexer(new ANTLRFileStream("Test.java"));
        JavaParser parser = new JavaParser(new CommonTokenStream(lexer));
        CommonTree tree = (CommonTree)parser.javaSource().getTree();
        DOTTreeGenerator gen = new DOTTreeGenerator();
        StringTemplate st = gen.toDOT(tree);
        System.out.println(st);
    }
}

現在生成詞法分析器和解析器:

java -cp antlr-3.3.jar org.antlr.Tool Java.g 

然后編譯所有.java源文件:

javac -cp antlr-3.3.jar *.java 

最后運行Main class 和 pipe output 到一個名為ast.dot的文件。

java -cp .:antlr-3.3.jar Main > ast.dot

(在 Windows 上,執行: java -cp.;antlr-3.3.jar Main > ast.dot

如果您現在打開文件ast.dot ,您會看到解析器生成的 AST 的DOT表示。 您可以通過在此處復制粘貼 DOT 源來可視化此 AST: http://graphviz-dev.appspot.com ,結果如下圖:

在此處輸入圖像描述

我真的推薦你使用 antlr4。

首先,設置您的 CLASSPATH(包括 antlr-4.5.3-complete.jar)和 JAVA_HOME。

其次,從語法 Java.g4 生成詞法分析器和解析器:

java -cp antlr-4.5.2-complete.jar Java.g4

三、編譯生成的所有Java*.java:

javac Java*.java

最后,運行 TestRig:

java org.antlr.v4.runtime.misc.TestRig Java compilationUnit -gui Test.java

您將直觀地看到 AST,如下所示:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM