Example #1
0
    def VisitEqnSet(self, o, **kwargs):
        self.ast = o

        deps = VisitorFindDirectSymbolDependance()
        deps.visit(o)
        self.assignee_to_assigment = {}
        for a in o.assignments:
            self.assignee_to_assigment[a.lhs] = a

        assignment_deps = deps.dependancies
        resolved = set()

        def resolve(assignment):
            if assignment in resolved:
                return

            if type(assignment) != ast.AssignedVariable:
                return
            for dep in assignment_deps[assignment]:
                resolve(dep)
            self.visit(self.assignee_to_assigment[assignment])
            resolved.add(assignment)

        for a in o.assignments:
            resolve(a.lhs)

        for a in o.assignments:
            self.visit(a)

        for a in o.timederivatives:
            self.visit(a)
Example #2
0
    def VisitNineMLComponent(self, o, **kwargs):
        self.ast = o

        deps = VisitorFindDirectSymbolDependance()
        deps.visit(o)
        self.assignee_to_assigment = {}
        for a in o.assignments:
            self.assignee_to_assigment[a.lhs] = a

        assignment_deps = deps.dependancies
        resolved = set()



        #print
        #print 'Assignments:'
        #for ass in o.assignments:
            #print ass.lhs.symbol, ass.lhs



        def resolve(assignment):
            if assignment in resolved:
                return

            if type(assignment) != ast.AssignedVariable:
                return
            for dep in assignment_deps[assignment]:
                resolve(dep)
            self.visit(self.assignee_to_assigment[assignment])
            resolved.add(assignment)

        for a in o.assignments:
            resolve(a.lhs)

        for a in o.assignments:
            self.visit(a)

        for a in o.timederivatives:
            #print 'Time Derivative:', a, a.lhs.symbol
            self.visit(a)

        # Build a dictionary of predicates which detect whether a
        # trigger is valid
        self.transition_triggers_evals = {}
        self.transitions_actions = {}
        self.transition_event_forwarding = defaultdict(list)
        self.transition_port_handlers = defaultdict(list)

        for conn in o._event_port_connections:
            self.visit(conn)

        for tr in o.transitions:
            self.visit(tr)