Search in sources :

Example 1 with Node

use of jkind.lustre.Node 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 Node

use of jkind.lustre.Node in project AGREE by loonwerks.

the class InlineNodeCalls method visitNodeCallExpr.

public List<IdExpr> visitNodeCallExpr(NodeCallExpr e) {
    String prefix = newPrefix(e.node);
    Node node = nodeTable.get(getOriginalName(e));
    Map<String, IdExpr> translation = getTranslation(prefix, node);
    createInputEquations(node.inputs, e.args, translation);
    createAssignmentEquations(prefix, node.equations, translation);
    accumulateProperties(node.properties, translation);
    List<IdExpr> result = new ArrayList<>();
    for (VarDecl decl : node.outputs) {
        result.add(translation.get(decl.id));
    }
    return result;
}
Also used : IdExpr(jkind.lustre.IdExpr) VarDecl(jkind.lustre.VarDecl) Node(jkind.lustre.Node) ArrayList(java.util.ArrayList)

Example 3 with Node

use of jkind.lustre.Node in project AGREE by loonwerks.

the class RemoveCondacts method clockNodeCalls.

private Node clockNodeCalls(Node node, final IdExpr clock) {
    return (Node) node.accept(new AstMapVisitor() {

        @Override
        public Expr visit(NodeCallExpr e) {
            List<Expr> args = new ArrayList<>();
            args.add(clock);
            args.addAll(visitExprs(e.args));
            Node clocked = createClockedNode(e.node);
            return new NodeCallExpr(clocked.id, args);
        }

        @Override
        public Expr visit(CondactExpr e) {
            NodeCallExpr call = (NodeCallExpr) super.visit(e.call);
            List<Expr> args = new ArrayList<>();
            args.add(new BinaryExpr(e.clock.accept(this), BinaryOp.AND, clock));
            args.addAll(e.call.args);
            args.addAll(visitExprs(e.args));
            Node condact = createCondactNode(call.node);
            return new NodeCallExpr(condact.id, args);
        }
    });
}
Also used : AstMapVisitor(jkind.lustre.visitors.AstMapVisitor) BoolExpr(jkind.lustre.BoolExpr) BinaryExpr(jkind.lustre.BinaryExpr) UnaryExpr(jkind.lustre.UnaryExpr) CondactExpr(jkind.lustre.CondactExpr) Expr(jkind.lustre.Expr) IdExpr(jkind.lustre.IdExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) IfThenElseExpr(jkind.lustre.IfThenElseExpr) CondactExpr(jkind.lustre.CondactExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) Node(jkind.lustre.Node) BinaryExpr(jkind.lustre.BinaryExpr) ArrayList(java.util.ArrayList)

Example 4 with Node

use of jkind.lustre.Node in project AGREE by loonwerks.

the class RemoveCondacts method createClockedNode.

private Node createClockedNode(String id) {
    String condactId = id + namePrefix + "clocked";
    if (nodeTable.containsKey(condactId)) {
        return nodeTable.get(condactId);
    }
    Node node = nodeTable.get(id);
    typeReconstructor.setNodeContext(node);
    IdExpr clock = new IdExpr(namePrefix + "clock");
    node = addClock(node, clock);
    node = clockArrowsAndPres(node, clock);
    // Because this is for a node call within a condact, we do not need to
    // clock the outputs. The outer condact will ignore outputs when the
    // clock is false.
    node = clockNodeCalls(node, clock);
    node = clockProperties(node, clock);
    node = renameNode(node, condactId);
    nodeTable.put(node.id, node);
    resultNodes.add(node);
    return node;
}
Also used : IdExpr(jkind.lustre.IdExpr) Node(jkind.lustre.Node)

Example 5 with Node

use of jkind.lustre.Node in project AGREE by loonwerks.

the class RemoveCondacts method removeCondacts.

private Node removeCondacts(Node node) {
    return (Node) node.accept(new AstMapVisitor() {

        @Override
        public Expr visit(CondactExpr e) {
            NodeCallExpr call = (NodeCallExpr) e.call.accept(this);
            List<Expr> args = new ArrayList<>();
            args.add(e.clock.accept(this));
            args.addAll(e.call.args);
            args.addAll(visitExprs(e.args));
            Node condact = createCondactNode(call.node);
            return new NodeCallExpr(condact.id, args);
        }
    });
}
Also used : AstMapVisitor(jkind.lustre.visitors.AstMapVisitor) BoolExpr(jkind.lustre.BoolExpr) BinaryExpr(jkind.lustre.BinaryExpr) UnaryExpr(jkind.lustre.UnaryExpr) CondactExpr(jkind.lustre.CondactExpr) Expr(jkind.lustre.Expr) IdExpr(jkind.lustre.IdExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) IfThenElseExpr(jkind.lustre.IfThenElseExpr) CondactExpr(jkind.lustre.CondactExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) Node(jkind.lustre.Node) ArrayList(java.util.ArrayList)

Aggregations

Node (jkind.lustre.Node)46 ArrayList (java.util.ArrayList)28 IdExpr (jkind.lustre.IdExpr)24 UnaryExpr (jkind.lustre.UnaryExpr)20 BinaryExpr (jkind.lustre.BinaryExpr)19 Expr (jkind.lustre.Expr)19 AgreeNode (com.rockwellcollins.atc.agree.analysis.ast.AgreeNode)18 NodeCallExpr (jkind.lustre.NodeCallExpr)17 BoolExpr (jkind.lustre.BoolExpr)16 AgreeException (com.rockwellcollins.atc.agree.analysis.AgreeException)12 Equation (jkind.lustre.Equation)12 Program (jkind.lustre.Program)12 VarDecl (jkind.lustre.VarDecl)12 NodeBuilder (jkind.lustre.builders.NodeBuilder)12 AgreeProgram (com.rockwellcollins.atc.agree.analysis.ast.AgreeProgram)11 ProgramBuilder (jkind.lustre.builders.ProgramBuilder)11 IfThenElseExpr (jkind.lustre.IfThenElseExpr)10 IntExpr (jkind.lustre.IntExpr)10 AgreeStatement (com.rockwellcollins.atc.agree.analysis.ast.AgreeStatement)9 AgreeVar (com.rockwellcollins.atc.agree.analysis.ast.AgreeVar)8