All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.scce.addlib.codegenerator.JavaGenerator Maven / Gradle / Ivy

Go to download

The Java Library for Algebraic Decision Diagrams, Code Generation, and Layouting

There is a newer version: 3.1.0
Show newest version
/* This file was generated with the ADD-Lib Gen Tools
 * http://add-lib.scce.info/ */

package info.scce.addlib.codegenerator;

import info.scce.addlib.dd.LabelledRegularDD;
import info.scce.addlib.dd.RegularDD;
import info.scce.addlib.traverser.PreorderTraverser;

import java.io.PrintStream;
import java.util.List;

public class JavaGenerator> extends CodeGenerator {

    private String paramPackage;
    private String paramImport;
    private String paramParamType = "Predicates";
    private String paramClassName = "ADDLibDecisionService";
    private boolean enableableParamStaticMethods;

    public JavaGenerator withPackage(String pac) {
        this.paramPackage = pac;
        return this;
    }

    public JavaGenerator withImport(String imp) {
        this.paramImport = imp;
        return this;
    }

    public JavaGenerator withParamType(String par) {
        this.paramParamType = par;
        return this;
    }

    public JavaGenerator withClassName(String cla) {
        this.paramClassName = cla;
        return this;
    }

    public JavaGenerator withStaticMethodsEnabled(boolean sta) {
        this.enableableParamStaticMethods = sta;
        return this;
    }

    public JavaGenerator withStaticMethodsEnabled() {
        return withStaticMethodsEnabled(true);
    }

    public JavaGenerator withStaticMethodsDisabled() {
        return withStaticMethodsEnabled(false);
    }

    @Override
    public void generate(PrintStream out, List> roots) {
        out.println("/* This file was generated with the ADD-Lib");
        out.println(" * http://add-lib.scce.info/ */");
        if (this.paramPackage != null) {
            out.println("");
            out.print("package ");
            if (this.paramPackage != null)
                out.print(this.paramPackage);
            out.println(";");
        }
        if (this.paramImport != null) {
            out.println("");
            out.print("import ");
            if (this.paramImport != null)
                out.print(this.paramImport);
            out.println(";");
        }
        out.println("");
        out.print("public class ");
        if (this.paramClassName != null)
            out.print(this.paramClassName);
        out.println(" {");
        for (LabelledRegularDD x0 : roots) {
            out.println("");
            out.print("    public ");
            if (this.enableableParamStaticMethods) {
                out.print("static ");
            }
            returnType(out);
            out.print(" ");
            out.print(x0.label());
            out.print("(");
            paramList(out);
            out.println(") {");
            out.print("        return eval");
            out.print(x0.dd().ptr());
            out.println("(predicates);");
            out.println("    }");
        }
        for (D x1 : new PreorderTraverser(unlabelledRoots(roots))) {
            if (!x1.isConstant()) {
                out.println("");
                out.print("    private ");
                if (this.enableableParamStaticMethods) {
                    out.print("static ");
                }
                returnType(out);
                out.print(" eval");
                out.print(x1.ptr());
                out.print("(");
                paramList(out);
                out.println(") {");
                out.print("        if (");
                varCondition(out, x1);
                out.println(")");
                out.print("            return eval");
                out.print(x1.t().ptr());
                out.println("(predicates);");
                out.println("        else");
                out.print("            return eval");
                out.print(x1.e().ptr());
                out.println("(predicates);");
                out.println("    }");
            }
        }
        for (D x2 : new PreorderTraverser(unlabelledRoots(roots))) {
            if (x2.isConstant()) {
                out.println("");
                out.print("    private ");
                if (this.enableableParamStaticMethods) {
                    out.print("static ");
                }
                returnType(out);
                out.print(" eval");
                out.print(x2.ptr());
                out.print("(");
                paramList(out);
                out.println(") {");
                out.print("        return ");
                resultInstatiation(out, x2);
                out.println(";");
                out.println("    }");
            }
        }
        out.println("}");
    }

    protected void paramList(PrintStream out) {
        if (this.paramParamType != null)
            out.print(this.paramParamType);
        out.print(" predicates");
    }

    protected void returnType(PrintStream out) {
        out.print("String");
    }

    protected void resultInstatiation(PrintStream out, D x2) {
        out.print("\"");
        out.print(x2.toString());
        out.print("\"");
    }

    protected void varCondition(PrintStream out, D x1) {
        out.print("predicates.");
        out.print(x1.readName());
        out.print("()");
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy