Пример #1
0
def add_deact_block(t, inv, vert, proc, sm, ta):
    s = t.src.parent
    l = Location(t.src.name + "_" + t.dst.name + "_deact")
    l.iscommit = True
    proc.addLocation(l)
    tree = make_deact_tree(t.src, sm, ta)
    newt = add_tr(ta, proc, proc.locations[s.name + "_active"],
                  proc.locations[t.src.name + "_" + t.dst.name + "_deact"],
                  t.guard, t.trigger, None)
    newt.addGuard(trig(t.src, tree, sm))

    c = Channel(t.src.name + "_bdeact", "b", False)
    ta.addChannel(c)
    tr = Transition(proc.locations[t.src.name + "_" + t.dst.name + "_deact"],
                    vert,
                    sync=c.name + "!")
    add_assign(tr, t.effect, ta)
    proc.addTransition(tr)

    procset = make_deact_set(t.src, sm, ta)
    for pair in procset:
        p = (q for q in ta.processes if q.name == pair[0].parent.name).next()
        upstate = up(pair[0])
        if upstate.parent.isAnd():
            upstate = upstate.parent
            p = (q for q in ta.processes
                 if q.name == upstate.parent.name).next()
        tr = Transition(p.locations[upstate.name + "_active"],
                        p.locations["idle"],
                        sync=c.name + "?")
        p.addTransition(tr)
Пример #2
0
def add_act_block(e, s, proc, sm, ta):
    l = Location(e.name + "_act")
    l.iscommit = True
    proc.addLocation(l)
    c = Channel(e.name + "_bact", "b", False)
    ta.addChannel(c)
    tr = Transition(l, proc.locations[s.name + "_active"], sync=c.name + "!")
    proc.addTransition(tr)
    #TODO: add invariant to l

    procset = make_act_set(e, sm, ta)
    for pair in procset:
        p = (q for q in ta.processes if q.name == pair[1].parent.name).next()
        upstate = up(pair[1])
        tr = Transition(p.locations["idle"],
                        p.locations[upstate.name + "_active"],
                        sync=c.name + "?")
        p.addTransition(tr)