Search in sources :

Example 1 with Expr

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

the class InlineNodeCalls method createAssignmentEquations.

private void createAssignmentEquations(final String prefix, List<Equation> equations, Map<String, IdExpr> translation) {
    SubstitutionVisitor substitution = new SubstitutionVisitor(translation) {

        @Override
        public Expr visit(NodeCallExpr e) {
            return new NodeCallExpr(e.location, prefix + e.node, visitExprs(e.args));
        }
    };
    for (Equation eq : equations) {
        List<IdExpr> lhs = new ArrayList<>();
        for (IdExpr idExpr : eq.lhs) {
            lhs.add(translation.get(idExpr.id));
        }
        Expr expr = eq.expr.accept(substitution);
        queue.add(new Equation(eq.location, lhs, expr));
    }
}
Also used : SubstitutionVisitor(jkind.translation.SubstitutionVisitor) IdExpr(jkind.lustre.IdExpr) TupleExpr(jkind.lustre.TupleExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) Expr(jkind.lustre.Expr) IdExpr(jkind.lustre.IdExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) ArrayList(java.util.ArrayList) Equation(jkind.lustre.Equation)

Example 2 with Expr

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

the class InlineNodeCalls method visit.

@Override
public Expr visit(NodeCallExpr e) {
    // Detect duplicate node calls to reduce code size
    String key = getKey(e);
    if (inlinedCalls.containsKey(key)) {
        return inlinedCalls.get(key);
    } else {
        Expr result = TupleExpr.compress(visitNodeCallExpr(e));
        inlinedCalls.put(key, result);
        return result;
    }
}
Also used : TupleExpr(jkind.lustre.TupleExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) Expr(jkind.lustre.Expr) IdExpr(jkind.lustre.IdExpr)

Example 3 with Expr

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

the class InlineNodeCalls method createInputEquations.

private void createInputEquations(List<VarDecl> inputs, List<Expr> args, Map<String, IdExpr> translation) {
    for (int i = 0; i < inputs.size(); i++) {
        IdExpr idExpr = translation.get(inputs.get(i).id);
        Expr arg = args.get(i);
        queue.add(new Equation(idExpr, arg));
    }
}
Also used : IdExpr(jkind.lustre.IdExpr) TupleExpr(jkind.lustre.TupleExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) Expr(jkind.lustre.Expr) IdExpr(jkind.lustre.IdExpr) Equation(jkind.lustre.Equation)

Example 4 with Expr

use of jkind.lustre.Expr 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 5 with Expr

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

Expr (jkind.lustre.Expr)156 IdExpr (jkind.lustre.IdExpr)150 BinaryExpr (jkind.lustre.BinaryExpr)140 NodeCallExpr (jkind.lustre.NodeCallExpr)132 BoolExpr (jkind.lustre.BoolExpr)129 UnaryExpr (jkind.lustre.UnaryExpr)119 IfThenElseExpr (jkind.lustre.IfThenElseExpr)106 IntExpr (jkind.lustre.IntExpr)95 RecordAccessExpr (jkind.lustre.RecordAccessExpr)79 ArrayAccessExpr (jkind.lustre.ArrayAccessExpr)67 RealExpr (jkind.lustre.RealExpr)67 TupleExpr (jkind.lustre.TupleExpr)64 ArrayList (java.util.ArrayList)61 ArrayExpr (jkind.lustre.ArrayExpr)50 AgreeStatement (com.rockwellcollins.atc.agree.analysis.ast.AgreeStatement)49 AgreeVar (com.rockwellcollins.atc.agree.analysis.ast.AgreeVar)45 CastExpr (jkind.lustre.CastExpr)45 Equation (jkind.lustre.Equation)45 FunctionCallExpr (jkind.lustre.FunctionCallExpr)44 VarDecl (jkind.lustre.VarDecl)36