Mutext DRS generator
This commit is contained in:
@@ -155,7 +155,7 @@ std::string FormRSCTLK::toStr(void) const
|
|||||||
return "NK[" + getSingleAgent() + "](" + arg[0]->toStr() + ")";
|
return "NK[" + getSingleAgent() + "](" + arg[0]->toStr() + ")";
|
||||||
}
|
}
|
||||||
else if (oper == RSCTLK_UK) {
|
else if (oper == RSCTLK_UK) {
|
||||||
return "UK[" + getSingleAgent() + "](" + arg[0]->toStr() + ")";
|
return "K[" + getSingleAgent() + "](" + arg[0]->toStr() + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
|||||||
82
in/gen_drs_mutex.py
Executable file
82
in/gen_drs_mutex.py
Executable file
@@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from sys import argv,exit
|
||||||
|
|
||||||
|
OPTIONS_STR = """
|
||||||
|
options { use-context-automaton; }
|
||||||
|
"""
|
||||||
|
CONTROLLER_STR = """
|
||||||
|
ct {
|
||||||
|
{{lock},{release} -> {lock}};
|
||||||
|
{{req},{} -> {lock}};
|
||||||
|
};
|
||||||
|
"""
|
||||||
|
|
||||||
|
PROC_STR = """
|
||||||
|
proc{:d} {{
|
||||||
|
{{{{out, busy}}, {{}} -> {{req}}}};
|
||||||
|
{{{{out}}, {{}} -> {{req}}}};
|
||||||
|
{{{{req}}, {{lock}} -> {{in}}}};
|
||||||
|
{{{{in}}, {{busy}} -> {{out, release}}}};
|
||||||
|
{{{{in, busy}}, {{}} -> {{in}}}};
|
||||||
|
{{{{in, lock}}, {{}} -> {{req}}}};
|
||||||
|
}};
|
||||||
|
"""
|
||||||
|
|
||||||
|
CA_STR = """
|
||||||
|
context-automaton {{
|
||||||
|
states {{ s0, s1 }}
|
||||||
|
init-state {{ s0 }}
|
||||||
|
transitions {{
|
||||||
|
{:s}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
"""
|
||||||
|
|
||||||
|
PROPERTY_STR = """
|
||||||
|
rsctlk-property { AG(proc0.in IMPLIES K[proc0](~proc1.in) ) }
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
#################################################################
|
||||||
|
|
||||||
|
if len(argv) < 2:
|
||||||
|
print("Usage: {:s} <number of modules>".format(argv[0]))
|
||||||
|
exit(100)
|
||||||
|
|
||||||
|
n = int(argv[1])
|
||||||
|
|
||||||
|
out = ""
|
||||||
|
|
||||||
|
out += OPTIONS_STR
|
||||||
|
out += "reactions {\n"
|
||||||
|
out += CONTROLLER_STR
|
||||||
|
for i in range(n):
|
||||||
|
out += PROC_STR.format(i)
|
||||||
|
out += "}\n"
|
||||||
|
|
||||||
|
transitions = ""
|
||||||
|
|
||||||
|
init_trans = 8*" " + "{ ct={} "
|
||||||
|
for i in range(n):
|
||||||
|
init_trans += "proc{:d}={{out}} ".format(i)
|
||||||
|
|
||||||
|
init_trans += "}: s0 -> s1;\n"
|
||||||
|
|
||||||
|
transitions += init_trans
|
||||||
|
|
||||||
|
for i in range(n):
|
||||||
|
transitions += "{:s}{{ ct={{}} proc{:d}={{}} }}: s1 -> s1;\n".format(8*" ", i)
|
||||||
|
|
||||||
|
out += CA_STR.format(transitions)
|
||||||
|
|
||||||
|
out += PROPERTY_STR
|
||||||
|
|
||||||
|
print(out)
|
||||||
|
|
||||||
|
# { ct={} proc1={out} }: s0 -> s1;
|
||||||
|
# { ct={} proc2={out} }: s0 -> s1;
|
||||||
|
|
||||||
|
# { ct={} proc1={} }: s1 -> s1;
|
||||||
|
# { ct={} proc2={} }: s1 -> s1;
|
||||||
|
|
||||||
Reference in New Issue
Block a user