1 2(*****************************************************************************) 3(* Data.sml -- the abstract syntax datatype for PSL/Sugar *) 4(*****************************************************************************) 5 6 7(****************************************************************************** 8* Boolean expressions 9******************************************************************************) 10datatype bexp = 11 B_PROP of string (* atomic proposition *) 12 | B_NOT of bexp (* negation *) 13 | B_AND of bexp * bexp (* conjunction *) 14(*========= Following are defined operators (i.e. syntactic sugar) =========*) 15 | B_OR of bexp * bexp (* disjunction *) 16 | B_IMP of bexp * bexp (* implication *) 17 | B_IFF of bexp * bexp (* logical equivalence *) 18 | B_TRUE (* T *) 19 | B_FALSE (* F *) 20; 21 22(****************************************************************************** 23* Specification of an iteration number or range (Count of LRM A.3.6) 24******************************************************************************) 25type range = int * int option; 26 27(****************************************************************************** 28* Sequential Extended Regular Expressions (SEREs) 29******************************************************************************) 30datatype sere = 31 S_BOOL of bexp (* boolean expression *) 32 | S_CAT of sere * sere (* r1 ; r2 *) 33 | S_FUSION of sere * sere (* r1 : r2 *) 34 | S_OR of sere * sere (* r1 | r2 *) 35 | S_AND of sere * sere (* r1 && r2 *) 36 | S_REPEAT of sere (* r[*] *) 37 | S_CLOCK of sere * bexp (* r@clk *) 38(*========= Following are defined operators (i.e. syntactic sugar) =========*) 39 | S_FLEX_AND of sere * sere (* r1 & r2 *) 40 | S_RANGE_REPEAT of sere * range (* r[* i] *) 41 | S_NON_ZERO_REPEAT of sere (* r[+] *) 42 | S_RANGE_EQ_REPEAT of bexp * range (* r[= i] *) 43 | S_RANGE_GOTO_REPEAT of bexp * range (* r[-> i] *) 44; 45 46(****************************************************************************** 47* Formulas of the Foundation Language (FL) 48******************************************************************************) 49datatype fl = 50 F_BOOL of bexp (* boolean expression *) 51 | F_NOT of fl (* \neg f *) 52 | F_AND of fl * fl (* f1 \wedge f2 *) 53 | F_STRONG_X of fl (* X! f *) 54 | F_U of fl * fl (* [f1 U f2] *) 55 | F_SUFFIX_IMP of sere * fl (* {r}(f) *) 56 | F_STRONG_IMP of sere * sere (* {r1} |-> {r2}! *) 57 | F_WEAK_IMP of sere * sere (* {r1} |-> {r2} *) 58 | F_ABORT of fl * bexp (* f abort b *) 59 | F_STRONG_CLOCK of fl * bexp (* f@clk! *) 60(*========= Following are defined operators (i.e. syntactic sugar) =========*) 61 | F_WEAK_CLOCK of fl * bexp (* f@clk *) 62 | F_OR of fl * fl (* f1 \vee f2 *) 63 | F_IMP of fl * fl (* f1 \rightarrow f2 *) 64 | F_IFF of fl * fl (* f1 \leftrightarrow f2 *) 65 | F_WEAK_X of fl (* X f *) 66 | F_F of fl (* F f *) 67 | F_G of fl (* G f *) 68 | F_W of fl * fl (* [f1 W f2] *) 69 | F_ALWAYS of fl (* always f *) 70 | F_NEVER of fl (* never f *) 71 | F_WEAK_NEXT of fl (* next f *) 72 | F_STRONG_NEXT of fl (* next! f *) 73 | F_STRONG_EVENTUALLY of fl (* next! f *) 74 | F_STRONG_UNTIL of fl * fl (* [f1 until! f2] *) 75 | F_WEAK_UNTIL of fl * fl (* [f1 until f2] *) 76 | F_STRONG_UNTIL_INC of fl * fl (* [f1 until!_ f2] *) 77 | F_WEAK_UNTIL_INC of fl * fl (* [f1 until_ f2] *) 78 | F_STRONG_BEFORE of fl * fl (* [f1 before! f2] *) 79 | F_WEAK_BEFORE of fl * fl (* [f1 before f2] *) 80 | F_STRONG_BEFORE_INC of fl * fl (* [f1 before!_ f2] *) 81 | F_WEAK_BEFORE_INC of fl * fl (* [f1 before_ f2] *) 82 | F_NUM_WEAK_X of int * fl (* X[n](f) *) 83 | F_NUM_STRONG_X of int * fl (* X![n](f) *) 84 | F_NUM_WEAK_NEXT of int * fl (* next[n](f) *) 85 | F_NUM_STRONG_NEXT of int * fl (* next![n](f) *) 86 | F_NUM_WEAK_NEXT_A of range * fl (* next_a[n](f) *) 87 | F_NUM_STRONG_NEXT_A of range * fl (* next_a![n](f) *) 88 | F_NUM_WEAK_NEXT_E of range * fl (* next_e[n](f) *) 89 | F_NUM_STRONG_NEXT_E of range * fl (* next_e![n](f) *) 90 | F_STRONG_NEXT_EVENT of bexp * fl (* next_event!(b)(f) *) 91 | F_WEAK_NEXT_EVENT of bexp * fl (* next_event(b)(f) *) 92 | F_NUM_STRONG_NEXT_EVENT 93 of bexp * int * fl (* next_event!(b)[i](f) *) 94 | F_NUM_WEAK_NEXT_EVENT 95 of bexp * int * fl (* next_event(b)[i](f) *) 96 | F_NUM_STRONG_NEXT_EVENT_A 97 of bexp * range * fl (* next_event_a!(b)[i](f) *) 98 | F_NUM_WEAK_NEXT_EVENT_A 99 of bexp * range * fl (* next_event_a(b)[i](f) *) 100 | F_NUM_STRONG_NEXT_EVENT_E 101 of bexp * range * fl (* next_event_e!(b)[i](f) *) 102 | F_NUM_WEAK_NEXT_EVENT_E 103 of bexp * range * fl (* next_event_e(b)[i](f) *) 104 | F_SKIP_STRONG_IMP of sere * sere (* {r1} |=> {r2}! *) 105 | F_SKIP_WEAK_IMP of sere * sere (* {r1} |=> {r2} *) 106 | F_SERE_ALWAYS of sere (* always r *) 107 | F_SERE_NEVER of sere (* never r *) 108 | F_SERE_STRONG_EVENTUALLY 109 of sere (* eventually! r *) 110 | F_STRONG_WITHIN of sere * bexp * sere (* within!(r1,b)r2 *) 111 | F_WEAK_WITHIN of sere * bexp * sere (* within(r1,b)r2 *) 112 | F_STRONG_WITHIN_INC of sere * bexp * sere (* within!_(r1,b)r2 *) 113 | F_WEAK_WITHIN_INC of sere * bexp * sere (* within_(r1,b)r2 *) 114 | F_STRONG_WHILENOT of bexp * sere (* whilenot!(b)r *) 115 | F_WEAK_WHILENOT of bexp * sere (* whilenot(b)r *) 116 | F_STRONG_WHILENOT_INC 117 of bexp * sere (* whilenot!_(b)r *) 118 | F_WEAK_WHILENOT_INC of bexp * sere (* whilenot_(b)r *) 119; 120 121 122(****************************************************************************** 123* Formulas of the Optional Branching Extension (OBE) 124******************************************************************************) 125datatype obe = 126 O_BOOL of bexp (* boolean expression *) 127 | O_NOT of obe (* \neg f *) 128 | O_AND of obe * obe (* f1 \wedge f2 *) 129 | O_EX of obe (* EX f *) 130 | O_EU of obe * obe (* E[f1 U f2] *) 131 | O_EG of obe (* EG f *) 132; 133 134 135