|
| 1 | +Module. Module ::= [Declaration] ; |
| 2 | + |
| 3 | +EnumDecl. Declaration ::= "enum" PosIdent "=" [EnumId] ; |
| 4 | +ElementDecl. Declaration ::= Element ; |
| 5 | + |
| 6 | +Clafer. Clafer ::= Abstract GCard PosIdent Super Reference Card Init Elements ; |
| 7 | +Constraint. Constraint ::= "[" Exp "]" ; |
| 8 | + |
| 9 | +AbstractEmpty. Abstract ::= ; |
| 10 | +Abstract. Abstract ::= "abstract" ; |
| 11 | + |
| 12 | +ElementsEmpty. Elements ::= ; |
| 13 | +ElementsList. Elements ::= "{" [Element] "}" ; |
| 14 | + |
| 15 | +Subclafer. Element ::= Clafer ; |
| 16 | +Subconstraint. Element ::= Constraint ; |
| 17 | + |
| 18 | +SuperEmpty. Super ::= ; |
| 19 | +SuperSome. Super ::= ":" Exp8 ; |
| 20 | + |
| 21 | +ReferenceEmpty. Reference ::= ; |
| 22 | +ReferenceSet. Reference ::= "->" Exp6 ; |
| 23 | + |
| 24 | +InitEmpty. Init ::= ; |
| 25 | +InitConstant. Init ::= "=" Exp ; |
| 26 | + |
| 27 | +GCardEmpty. GCard ::= ; |
| 28 | +GCardXor. GCard ::= "xor" ; |
| 29 | +GCardOr. GCard ::= "or" ; |
| 30 | +GCardMux. GCard ::= "mux" ; |
| 31 | +GCardOpt. GCard ::= "opt" ; |
| 32 | +GCardInterval. GCard ::= NCard ; |
| 33 | + |
| 34 | +CardEmpty. Card ::= ; |
| 35 | +CardLone. Card ::= "?" ; |
| 36 | +CardSome. Card ::= "+" ; |
| 37 | +CardAny. Card ::= "*" ; |
| 38 | +CardNum. Card ::= PosInteger ; |
| 39 | +CardInterval. Card ::= NCard ; |
| 40 | + |
| 41 | +NCard. NCard ::= PosInteger ".." ExInteger ; |
| 42 | +ExIntegerAst. ExInteger ::= "*" ; |
| 43 | +ExIntegerNum. ExInteger ::= PosInteger ; |
| 44 | + |
| 45 | +-- Boolean & Relational Expressions (Precedence modeled via Exp levels) |
| 46 | +EIff. Exp ::= Exp "<=>" Exp1 ; |
| 47 | +EImplies. Exp1 ::= Exp1 "=>" Exp2 ; |
| 48 | +EOr. Exp2 ::= Exp2 "||" Exp3 ; |
| 49 | +EXor. Exp3 ::= Exp3 "xor" Exp4 ; |
| 50 | +EAnd. Exp4 ::= Exp4 "&&" Exp5 ; |
| 51 | +ENeg. Exp5 ::= "!" Exp5 ; |
| 52 | +ELt. Exp6 ::= Exp6 "<" Exp7 ; |
| 53 | +EGt. Exp6 ::= Exp6 ">" Exp7 ; |
| 54 | +EEq. Exp6 ::= Exp6 "=" Exp7 ; |
| 55 | +ELte. Exp6 ::= Exp6 "<=" Exp7 ; |
| 56 | +EGte. Exp6 ::= Exp6 ">=" Exp7 ; |
| 57 | +ENeq. Exp6 ::= Exp6 "!=" Exp7 ; |
| 58 | +EIn. Exp6 ::= Exp6 "in" Exp7 ; |
| 59 | +ENin. Exp6 ::= Exp6 "not" "in" Exp7 ; |
| 60 | +EAdd. Exp7 ::= Exp7 "+" Exp8 ; |
| 61 | +ESub. Exp7 ::= Exp7 "-" Exp8 ; |
| 62 | +EJoin. Exp8 ::= Exp8 "." Exp9 ; |
| 63 | + |
| 64 | +EQuantExp. Exp9 ::= Quant Exp10 ; |
| 65 | +ClaferId. Exp10 ::= PosIdent ; |
| 66 | +EInt. Exp10 ::= PosInteger ; |
| 67 | +EStr. Exp10 ::= PosString ; |
| 68 | +EParens. Exp10 ::= "(" Exp ")" ; |
| 69 | + |
| 70 | +QuantNo. Quant ::= "no" ; |
| 71 | +QuantNot. Quant ::= "not" ; |
| 72 | +QuantLone. Quant ::= "lone" ; |
| 73 | +QuantOne. Quant ::= "one" ; |
| 74 | +QuantSome. Quant ::= "some" ; |
| 75 | +QuantAll. Quant ::= "all" ; |
0 commit comments