Browse Source

A jltl2ba bug fix from Joachim Klein - fixes various previously reported LTL->DRA crashes.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@9109 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 12 years ago
parent
commit
78d3755e4e
  1. 31
      prism/src/jltl2ba/Alternating.java
  2. 6
      prism/src/jltl2ba/Generalized.java

31
prism/src/jltl2ba/Alternating.java

@ -66,21 +66,22 @@ public class Alternating {
rv.nxt = nxt; rv.nxt = nxt;
return rv; return rv;
} }
}
public static ATrans do_merge_atrans(ATrans first, ATrans second) {
if (first == null || second == null)
return null;
public ATrans merge(ATrans other) {
if (other == null)
return null;
ATrans rv = this.clone();
ATrans rv = first.clone();
rv.nxt = null;
rv.to.or(other.to);
rv.pos.or(other.pos);
rv.neg.or(other.neg);
rv.to.or(second.to);
rv.pos.or(second.pos);
rv.neg.or(second.neg);
if (rv.pos.intersects(rv.neg))
rv = null;
return rv;
}
if (rv.pos.intersects(rv.neg))
rv = null;
return rv;
} }
public static class AProd { public static class AProd {
@ -133,7 +134,7 @@ public class Alternating {
rgt = _boolean(p.right); rgt = _boolean(p.right);
for (t1 = lft; t1 != null; t1 = t1.nxt) { for (t1 = lft; t1 != null; t1 = t1.nxt) {
for (t2 = rgt; t2 != null; t2 = t2.nxt) { for (t2 = rgt; t2 != null; t2 = t2.nxt) {
ATrans tmp = t1.merge(t2);
ATrans tmp = do_merge_atrans(t1, t2);
if (tmp != null) { if (tmp != null) {
tmp.nxt = result; tmp.nxt = result;
result = tmp; result = tmp;
@ -217,7 +218,7 @@ public class Alternating {
ATrans tmp; ATrans tmp;
for (t2 = buildAlternating(p.left); t2 != null; t2 = t2.nxt) { for (t2 = buildAlternating(p.left); t2 != null; t2 = t2.nxt) {
tmp = t1.merge(t2); /* p && q */
tmp = do_merge_atrans(t1, t2); /* p && q */
if (tmp != null) { if (tmp != null) {
tmp.nxt = t; tmp.nxt = t;
t = tmp; t = tmp;
@ -234,7 +235,7 @@ public class Alternating {
case AND: case AND:
for (t1 = buildAlternating(p.left); t1 != null; t1 = t1.nxt) { for (t1 = buildAlternating(p.left); t1 != null; t1 = t1.nxt) {
for (t2 = buildAlternating(p.right); t2 != null; t2 = t2.nxt) { for (t2 = buildAlternating(p.right); t2 != null; t2 = t2.nxt) {
ATrans tmp = t1.merge(t2);
ATrans tmp = do_merge_atrans(t1, t2);
if (tmp != null) { if (tmp != null) {
tmp.nxt = t; tmp.nxt = t;
t = tmp; t = tmp;

6
prism/src/jltl2ba/Generalized.java

@ -336,7 +336,7 @@ public class Generalized {
p.trans = a.transition.get(list.get(i)); p.trans = a.transition.get(list.get(i));
if (p.trans == null) if (p.trans == null)
trans_exist = 0; trans_exist = 0;
p.prod = prod.nxt.prod.merge(p.trans);
p.prod = Alternating.do_merge_atrans(prod.nxt.prod, p.trans);
p.nxt = prod.nxt; p.nxt = prod.nxt;
p.prv = prod; p.prv = prod;
p.nxt.prv = p; p.nxt.prv = p;
@ -393,11 +393,11 @@ public class Generalized {
if (p == prod) if (p == prod)
break; break;
p.trans = p.trans.nxt; p.trans = p.trans.nxt;
p.prod = p.nxt.prod.merge(p.trans);
p.prod = Alternating.do_merge_atrans(p.nxt.prod, p.trans);
p = p.prv; p = p.prv;
while (p != prod) { while (p != prod) {
p.trans = a.transition.get(p.astate); p.trans = a.transition.get(p.astate);
p.prod = p.nxt.prod.merge(p.trans);
p.prod = Alternating.do_merge_atrans(p.nxt.prod, p.trans);
p = p.prv; p = p.prv;
} }
} }

Loading…
Cancel
Save