Spaces:
Runtime error
Runtime error
File size: 2,787 Bytes
0c77d6e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
======= no-body ======= predicate foo(); mod::Type foo(int arg, Foo arg); --- (ql (moduleMember (classlessPredicate (predicate) (predicateName) (empty))) (moduleMember (classlessPredicate (typeExpr (moduleExpr (simpleId)) (className)) (predicateName) (varDecl (typeExpr (primitiveType)) (varName (simpleId))) (varDecl (typeExpr (className)) (varName (simpleId))) (empty)))) ================ simple predicate ================ predicate foo(F f){ f = f } int predicateWithResult(){ result = 43 } --- (ql (moduleMember (classlessPredicate (predicate) (predicateName) (varDecl (typeExpr (className)) (varName (simpleId))) (body (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))))) (moduleMember (classlessPredicate (typeExpr (primitiveType)) (predicateName) (body (comp_term (variable (result)) (compop) (literal (integer))))))) ===================== higher-order relation ===================== int foo(X x, Y y) = name(pred1/1, pred2/3)(x.x(), result) --- (ql (moduleMember (classlessPredicate (typeExpr (primitiveType)) (predicateName) (varDecl (typeExpr (className)) (varName (simpleId))) (varDecl (typeExpr (className)) (varName (simpleId))) (higherOrderTerm (literalId) (predicateExpr (aritylessPredicateExpr (literalId)) (integer)) (predicateExpr (aritylessPredicateExpr (literalId)) (integer)) (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))) (variable (result)))))) =============== predicate alias =============== predicate foo = somePredicate/12; --- (ql (moduleMember (classlessPredicate (predicate) (predicateName) (predicateAliasBody (predicateExpr (aritylessPredicateExpr (literalId)) (integer)))))) ========== type union ========== newtype T = T1() or T2(int x) { x = 1 or x = 2 } or T3(int x) { x = 3 or x = 4 or x = 5 } class T2orT3 = T2 or T3; --- (ql (moduleMember (datatype (className) (datatypeBranches (datatypeBranch (className)) (datatypeBranch (className) (varDecl (typeExpr (primitiveType)) (varName (simpleId))) (body (disjunction (comp_term (variable (varName (simpleId))) (compop) (literal (integer))) (comp_term (variable (varName (simpleId))) (compop) (literal (integer)))))) (datatypeBranch (className) (varDecl (typeExpr (primitiveType)) (varName (simpleId))) (body (disjunction (disjunction (comp_term (variable (varName (simpleId))) (compop) (literal (integer))) (comp_term (variable (varName (simpleId))) (compop) (literal (integer)))) (comp_term (variable (varName (simpleId))) (compop) (literal (integer))))))))) (moduleMember (dataclass (className) (typeUnionBody (typeExpr (className)) (typeExpr (className)))))) |