Search in sources :

Example 1 with SourcePrinter

use of org.codehaus.groovy.antlr.treewalker.SourcePrinter in project groovy by apache.

the class AntlrParserPlugin method outputASTInVariousFormsIfNeeded.

private void outputASTInVariousFormsIfNeeded(SourceUnit sourceUnit, SourceBuffer sourceBuffer) {
    // straight xstream output of AST
    // uppercase to hide from jarjar
    String formatProp = System.getProperty("ANTLR.AST".toLowerCase());
    if ("xml".equals(formatProp)) {
        saveAsXML(sourceUnit.getName(), ast);
    }
    // 'pretty printer' output of AST
    if ("groovy".equals(formatProp)) {
        try {
            PrintStream out = new PrintStream(new FileOutputStream(sourceUnit.getName() + ".pretty.groovy"));
            Visitor visitor = new SourcePrinter(out, tokenNames);
            AntlrASTProcessor treewalker = new SourceCodeTraversal(visitor);
            treewalker.process(ast);
        } catch (FileNotFoundException e) {
            System.out.println("Cannot create " + sourceUnit.getName() + ".pretty.groovy");
        }
    }
    // which is a really nice way of seeing the AST, folding nodes etc
    if ("mindmap".equals(formatProp)) {
        try {
            PrintStream out = new PrintStream(new FileOutputStream(sourceUnit.getName() + ".mm"));
            Visitor visitor = new MindMapPrinter(out, tokenNames);
            AntlrASTProcessor treewalker = new PreOrderTraversal(visitor);
            treewalker.process(ast);
        } catch (FileNotFoundException e) {
            System.out.println("Cannot create " + sourceUnit.getName() + ".mm");
        }
    }
    // include original line/col info and source code on the mindmap output
    if ("extendedMindmap".equals(formatProp)) {
        try {
            PrintStream out = new PrintStream(new FileOutputStream(sourceUnit.getName() + ".mm"));
            Visitor visitor = new MindMapPrinter(out, tokenNames, sourceBuffer);
            AntlrASTProcessor treewalker = new PreOrderTraversal(visitor);
            treewalker.process(ast);
        } catch (FileNotFoundException e) {
            System.out.println("Cannot create " + sourceUnit.getName() + ".mm");
        }
    }
    // html output of AST
    if ("html".equals(formatProp)) {
        try {
            PrintStream out = new PrintStream(new FileOutputStream(sourceUnit.getName() + ".html"));
            List<VisitorAdapter> v = new ArrayList<VisitorAdapter>();
            v.add(new NodeAsHTMLPrinter(out, tokenNames));
            v.add(new SourcePrinter(out, tokenNames));
            Visitor visitors = new CompositeVisitor(v);
            AntlrASTProcessor treewalker = new SourceCodeTraversal(visitors);
            treewalker.process(ast);
        } catch (FileNotFoundException e) {
            System.out.println("Cannot create " + sourceUnit.getName() + ".html");
        }
    }
}
Also used : SourcePrinter(org.codehaus.groovy.antlr.treewalker.SourcePrinter) PrintStream(java.io.PrintStream) NodeAsHTMLPrinter(org.codehaus.groovy.antlr.treewalker.NodeAsHTMLPrinter) PreOrderTraversal(org.codehaus.groovy.antlr.treewalker.PreOrderTraversal) CompositeVisitor(org.codehaus.groovy.antlr.treewalker.CompositeVisitor) Visitor(org.codehaus.groovy.antlr.treewalker.Visitor) FileNotFoundException(java.io.FileNotFoundException) ArrayList(java.util.ArrayList) MindMapPrinter(org.codehaus.groovy.antlr.treewalker.MindMapPrinter) FileOutputStream(java.io.FileOutputStream) VisitorAdapter(org.codehaus.groovy.antlr.treewalker.VisitorAdapter) SourceCodeTraversal(org.codehaus.groovy.antlr.treewalker.SourceCodeTraversal) CompositeVisitor(org.codehaus.groovy.antlr.treewalker.CompositeVisitor)

Example 2 with SourcePrinter

use of org.codehaus.groovy.antlr.treewalker.SourcePrinter in project groovy by apache.

the class Java2GroovyProcessor method convert.

public static String convert(String filename, String input, boolean withHeader, boolean withNewLines) throws Exception {
    JavaRecognizer parser = getJavaParser(input);
    String[] tokenNames = parser.getTokenNames();
    parser.compilationUnit();
    AST ast = parser.getAST();
    // which is a really nice way of seeing the AST, folding nodes etc
    if ("mindmap".equals(System.getProperty("ANTLR.AST".toLowerCase()))) {
        // uppercase to hide from jarjar
        try {
            PrintStream out = new PrintStream(new FileOutputStream(filename + ".mm"));
            Visitor visitor = new MindMapPrinter(out, tokenNames);
            AntlrASTProcessor treewalker = new PreOrderTraversal(visitor);
            treewalker.process(ast);
        } catch (FileNotFoundException e) {
            System.out.println("Cannot create " + filename + ".mm");
        }
    }
    // modify the Java AST into a Groovy AST
    modifyJavaASTintoGroovyAST(tokenNames, ast);
    String[] groovyTokenNames = getGroovyTokenNames(input);
    // groovify the fat Java-Like Groovy AST
    groovifyFatJavaLikeGroovyAST(ast, groovyTokenNames);
    // now output
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Visitor visitor = new SourcePrinter(new PrintStream(baos), groovyTokenNames, withNewLines);
    AntlrASTProcessor traverser = new SourceCodeTraversal(visitor);
    traverser.process(ast);
    String header = "";
    if (withHeader) {
        header = "/*\n" + "  Automatically Converted from Java Source \n" + "  \n" + "  by java2groovy v0.0.1   Copyright Jeremy Rayner 2007\n" + "  \n" + "  !! NOT FIT FOR ANY PURPOSE !! \n" + "  'java2groovy' cannot be used to convert one working program into another" + "  */\n\n";
    }
    return header + new String(baos.toByteArray());
}
Also used : SourcePrinter(org.codehaus.groovy.antlr.treewalker.SourcePrinter) PrintStream(java.io.PrintStream) AST(antlr.collections.AST) PreOrderTraversal(org.codehaus.groovy.antlr.treewalker.PreOrderTraversal) Visitor(org.codehaus.groovy.antlr.treewalker.Visitor) FileNotFoundException(java.io.FileNotFoundException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) MindMapPrinter(org.codehaus.groovy.antlr.treewalker.MindMapPrinter) AntlrASTProcessor(org.codehaus.groovy.antlr.AntlrASTProcessor) FileOutputStream(java.io.FileOutputStream) SourceCodeTraversal(org.codehaus.groovy.antlr.treewalker.SourceCodeTraversal)

Example 3 with SourcePrinter

use of org.codehaus.groovy.antlr.treewalker.SourcePrinter in project groovy-core by groovy.

the class Java2GroovyProcessor method convert.

public static String convert(String filename, String input, boolean withHeader, boolean withNewLines) throws Exception {
    JavaRecognizer parser = getJavaParser(input);
    String[] tokenNames = parser.getTokenNames();
    parser.compilationUnit();
    AST ast = parser.getAST();
    // which is a really nice way of seeing the AST, folding nodes etc
    if ("mindmap".equals(System.getProperty("ANTLR.AST".toLowerCase()))) {
        // uppercase to hide from jarjar
        try {
            PrintStream out = new PrintStream(new FileOutputStream(filename + ".mm"));
            Visitor visitor = new MindMapPrinter(out, tokenNames);
            AntlrASTProcessor treewalker = new PreOrderTraversal(visitor);
            treewalker.process(ast);
        } catch (FileNotFoundException e) {
            System.out.println("Cannot create " + filename + ".mm");
        }
    }
    // modify the Java AST into a Groovy AST
    modifyJavaASTintoGroovyAST(tokenNames, ast);
    String[] groovyTokenNames = getGroovyTokenNames(input);
    // groovify the fat Java-Like Groovy AST
    groovifyFatJavaLikeGroovyAST(ast, groovyTokenNames);
    // now output
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Visitor visitor = new SourcePrinter(new PrintStream(baos), groovyTokenNames, withNewLines);
    AntlrASTProcessor traverser = new SourceCodeTraversal(visitor);
    traverser.process(ast);
    String header = "";
    if (withHeader) {
        header = "/*\n" + "  Automatically Converted from Java Source \n" + "  \n" + "  by java2groovy v0.0.1   Copyright Jeremy Rayner 2007\n" + "  \n" + "  !! NOT FIT FOR ANY PURPOSE !! \n" + "  'java2groovy' cannot be used to convert one working program into another" + "  */\n\n";
    }
    return header + new String(baos.toByteArray());
}
Also used : SourcePrinter(org.codehaus.groovy.antlr.treewalker.SourcePrinter) PrintStream(java.io.PrintStream) AST(antlr.collections.AST) PreOrderTraversal(org.codehaus.groovy.antlr.treewalker.PreOrderTraversal) Visitor(org.codehaus.groovy.antlr.treewalker.Visitor) FileNotFoundException(java.io.FileNotFoundException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) MindMapPrinter(org.codehaus.groovy.antlr.treewalker.MindMapPrinter) AntlrASTProcessor(org.codehaus.groovy.antlr.AntlrASTProcessor) FileOutputStream(java.io.FileOutputStream) SourceCodeTraversal(org.codehaus.groovy.antlr.treewalker.SourceCodeTraversal)

Aggregations

FileNotFoundException (java.io.FileNotFoundException)3 FileOutputStream (java.io.FileOutputStream)3 PrintStream (java.io.PrintStream)3 MindMapPrinter (org.codehaus.groovy.antlr.treewalker.MindMapPrinter)3 PreOrderTraversal (org.codehaus.groovy.antlr.treewalker.PreOrderTraversal)3 SourceCodeTraversal (org.codehaus.groovy.antlr.treewalker.SourceCodeTraversal)3 SourcePrinter (org.codehaus.groovy.antlr.treewalker.SourcePrinter)3 Visitor (org.codehaus.groovy.antlr.treewalker.Visitor)3 AST (antlr.collections.AST)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 AntlrASTProcessor (org.codehaus.groovy.antlr.AntlrASTProcessor)2 ArrayList (java.util.ArrayList)1 CompositeVisitor (org.codehaus.groovy.antlr.treewalker.CompositeVisitor)1 NodeAsHTMLPrinter (org.codehaus.groovy.antlr.treewalker.NodeAsHTMLPrinter)1 VisitorAdapter (org.codehaus.groovy.antlr.treewalker.VisitorAdapter)1