Search in sources :

Example 1 with ProgramBuilder

use of jkind.lustre.builders.ProgramBuilder in project AGREE by loonwerks.

the class InlineNodeCalls method transform.

public static SimulationProgram transform(final SimulationProgram program) {
    final Program lustreProgram = program.getLustreProgram();
    final InlineNodeCalls inliner = new InlineNodeCalls(Util.getNodeTable(lustreProgram.nodes));
    Node main = lustreProgram.getMainNode();
    // Build a single node that contains the result of inlining of all node calls
    final NodeBuilder nodeBuilder = new NodeBuilder(main);
    nodeBuilder.clearAssertions();
    nodeBuilder.addAssertions(inliner.visitExprs(main.assertions));
    nodeBuilder.clearEquations();
    nodeBuilder.addEquations(inliner.visitEquationsQueue(main.equations));
    nodeBuilder.addLocals(inliner.newLocals);
    nodeBuilder.addProperties(inliner.newProperties);
    // Build a new program
    final ProgramBuilder programBuilder = new ProgramBuilder(lustreProgram);
    programBuilder.clearNodes();
    programBuilder.addNode(nodeBuilder.build());
    // Build the simulation program
    final SimulationProgramBuilder simulationProgramBuilder = new SimulationProgramBuilder(program);
    simulationProgramBuilder.setLustreProgram(programBuilder.build());
    return simulationProgramBuilder.build();
}
Also used : Program(jkind.lustre.Program) SimulationProgram(edu.uah.rsesc.aadlsimulator.agree.SimulationProgram) ProgramBuilder(jkind.lustre.builders.ProgramBuilder) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) Node(jkind.lustre.Node) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) NodeBuilder(jkind.lustre.builders.NodeBuilder)

Example 2 with ProgramBuilder

use of jkind.lustre.builders.ProgramBuilder in project AGREE by loonwerks.

the class RemoveProperties method transform.

public static SimulationProgram transform(final SimulationProgram program) {
    final Program lustreProgram = program.getLustreProgram();
    if (lustreProgram.nodes.size() != 1) {
        throw new IllegalArgumentException("Only lustre programs with exactly one node are supported");
    }
    final SimulationProgramBuilder simulationProgramBuilder = new SimulationProgramBuilder(program);
    final ProgramBuilder lustreProgramBuilder = new ProgramBuilder(lustreProgram);
    lustreProgramBuilder.clearNodes();
    final Node node = lustreProgram.getMainNode();
    final NodeBuilder nodeBuilder = new NodeBuilder(node);
    nodeBuilder.clearProperties();
    // Add the new node to the new lustre program
    lustreProgramBuilder.addNode(nodeBuilder.build());
    simulationProgramBuilder.setLustreProgram(lustreProgramBuilder.build());
    return simulationProgramBuilder.build();
}
Also used : SimulationProgram(edu.uah.rsesc.aadlsimulator.agree.SimulationProgram) Program(jkind.lustre.Program) ProgramBuilder(jkind.lustre.builders.ProgramBuilder) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) Node(jkind.lustre.Node) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) NodeBuilder(jkind.lustre.builders.NodeBuilder)

Example 3 with ProgramBuilder

use of jkind.lustre.builders.ProgramBuilder in project AGREE by loonwerks.

the class RemovePropertySatisficationRequirements method transform.

// private final static String assumeBaseId = "__ASSUME";
public static SimulationProgram transform(final SimulationProgram program) {
    final SimulationProgramBuilder simulationProgramBuilder = new SimulationProgramBuilder(program);
    final ProgramBuilder lustreProgramBuilder = new ProgramBuilder(program.getLustreProgram());
    lustreProgramBuilder.clearNodes();
    for (final Node node : program.getLustreProgram().nodes) {
        final NodeBuilder nodeBuilder = new NodeBuilder(new AstMapVisitor() {

            @Override
            public Node visit(final Node n) {
                return super.visit(n);
            }

            @Override
            public Equation visit(final Equation e) {
                // Force the assumption conjunction to be true
                if (e.lhs.size() == 1 && e.lhs.get(0).id.equals(assumptionConjunctionId)) {
                    return new Equation(new IdExpr(assumptionConjunctionId), new BoolExpr(true));
                }
                final Equation result = super.visit(e);
                return result;
            }
        }.visit(node));
        lustreProgramBuilder.addNode(nodeBuilder.build());
    }
    simulationProgramBuilder.setLustreProgram(lustreProgramBuilder.build());
    return simulationProgramBuilder.build();
}
Also used : BoolExpr(jkind.lustre.BoolExpr) AstMapVisitor(jkind.lustre.visitors.AstMapVisitor) IdExpr(jkind.lustre.IdExpr) ProgramBuilder(jkind.lustre.builders.ProgramBuilder) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) Node(jkind.lustre.Node) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) Equation(jkind.lustre.Equation) NodeBuilder(jkind.lustre.builders.NodeBuilder)

Example 4 with ProgramBuilder

use of jkind.lustre.builders.ProgramBuilder in project AGREE by loonwerks.

the class ReplaceFollowedByOperator method transform.

public static SimulationProgram transform(final SimulationProgram program) {
    final Program lustreProgram = program.getLustreProgram();
    if (lustreProgram.nodes.size() != 1) {
        throw new IllegalArgumentException("Only lustre programs with exactly one node are supported");
    }
    final ReplaceFollowedByOperator visitor = new ReplaceFollowedByOperator();
    final NodeBuilder nodeBuilder = new NodeBuilder(visitor.visit(lustreProgram.getMainNode()));
    // Create variable for the step number
    nodeBuilder.addInput(new VarDecl(stepVariableId, NamedType.INT));
    // Add an output for the next step number
    nodeBuilder.addOutput(new VarDecl(nextStepVariableId, NamedType.INT));
    nodeBuilder.addEquation(new Equation(new IdExpr(nextStepVariableId), new BinaryExpr(new IdExpr(stepVariableId), BinaryOp.PLUS, new IntExpr(1))));
    // Create the new lustre program using the new node
    final ProgramBuilder lustreProgramBuilder = new ProgramBuilder(lustreProgram);
    lustreProgramBuilder.clearNodes();
    lustreProgramBuilder.addNode(nodeBuilder.build());
    // Create the simulation program
    final SimulationProgramBuilder simulationProgramBuilder = new SimulationProgramBuilder(program);
    final Expr stepVariableExpr = new IdExpr(stepVariableId);
    // Ensure that the initial step is greater than the first step when simulating inductive counterexamples
    final int initialStepValue = program.getType().isInductive() ? firstStepValue + 1 : firstStepValue;
    simulationProgramBuilder.addInitialConstraint(new BinaryExpr(stepVariableExpr, BinaryOp.EQUAL, new IntExpr(initialStepValue)));
    simulationProgramBuilder.addCarryVariable(new CarryVariable(stepVariableExpr, new IdExpr(nextStepVariableId)));
    simulationProgramBuilder.setLustreProgram(lustreProgramBuilder.build());
    return simulationProgramBuilder.build();
}
Also used : Program(jkind.lustre.Program) SimulationProgram(edu.uah.rsesc.aadlsimulator.agree.SimulationProgram) IdExpr(jkind.lustre.IdExpr) ProgramBuilder(jkind.lustre.builders.ProgramBuilder) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) BinaryExpr(jkind.lustre.BinaryExpr) Equation(jkind.lustre.Equation) CarryVariable(edu.uah.rsesc.aadlsimulator.agree.CarryVariable) NodeBuilder(jkind.lustre.builders.NodeBuilder) BinaryExpr(jkind.lustre.BinaryExpr) Expr(jkind.lustre.Expr) IfThenElseExpr(jkind.lustre.IfThenElseExpr) IntExpr(jkind.lustre.IntExpr) IdExpr(jkind.lustre.IdExpr) VarDecl(jkind.lustre.VarDecl) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) IntExpr(jkind.lustre.IntExpr)

Example 5 with ProgramBuilder

use of jkind.lustre.builders.ProgramBuilder in project AGREE by loonwerks.

the class ReplacePreOperator method transform.

public static SimulationProgram transform(final SimulationProgram program) {
    final Program lustreProgram = program.getLustreProgram();
    if (lustreProgram.nodes.size() != 1) {
        throw new IllegalArgumentException("Only lustre programs with exactly one node are supported");
    }
    final SimulationProgramBuilder simulationProgramBuilder = new SimulationProgramBuilder(program);
    final ProgramBuilder lustreProgramBuilder = new ProgramBuilder(lustreProgram);
    lustreProgramBuilder.clearNodes();
    final ReplacePreOperator visitor = new ReplacePreOperator();
    final NodeBuilder nodeBuilder = new NodeBuilder(visitor.visit(lustreProgram).getMainNode());
    // Add additional inputs, returns, expressions, etc
    nodeBuilder.addInputs(visitor.newInputs);
    nodeBuilder.addOutputs(visitor.newOutputs);
    nodeBuilder.addEquations(visitor.newEquations);
    lustreProgramBuilder.addNode(nodeBuilder.build());
    simulationProgramBuilder.setLustreProgram(lustreProgramBuilder.build());
    simulationProgramBuilder.addCarryVariables(visitor.newCarryVariables);
    return simulationProgramBuilder.build();
}
Also used : Program(jkind.lustre.Program) SimulationProgram(edu.uah.rsesc.aadlsimulator.agree.SimulationProgram) ProgramBuilder(jkind.lustre.builders.ProgramBuilder) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) SimulationProgramBuilder(edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder) NodeBuilder(jkind.lustre.builders.NodeBuilder)

Aggregations

ProgramBuilder (jkind.lustre.builders.ProgramBuilder)13 Program (jkind.lustre.Program)12 Node (jkind.lustre.Node)10 NodeBuilder (jkind.lustre.builders.NodeBuilder)10 IdExpr (jkind.lustre.IdExpr)8 SimulationProgram (edu.uah.rsesc.aadlsimulator.agree.SimulationProgram)7 SimulationProgramBuilder (edu.uah.rsesc.aadlsimulator.agree.SimulationProgramBuilder)7 BinaryExpr (jkind.lustre.BinaryExpr)7 Equation (jkind.lustre.Equation)7 Expr (jkind.lustre.Expr)7 AgreeNode (com.rockwellcollins.atc.agree.analysis.ast.AgreeNode)6 BoolExpr (jkind.lustre.BoolExpr)6 VarDecl (jkind.lustre.VarDecl)6 AgreeProgram (com.rockwellcollins.atc.agree.analysis.ast.AgreeProgram)5 ArrayList (java.util.ArrayList)5 TypeDef (jkind.lustre.TypeDef)5 UnaryExpr (jkind.lustre.UnaryExpr)5 AgreeStatement (com.rockwellcollins.atc.agree.analysis.ast.AgreeStatement)4 AgreeVar (com.rockwellcollins.atc.agree.analysis.ast.AgreeVar)4 IntExpr (jkind.lustre.IntExpr)4