diff options
Diffstat (limited to 'rego-proofs/compiler/lib/ast.mli')
| -rw-r--r-- | rego-proofs/compiler/lib/ast.mli | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/rego-proofs/compiler/lib/ast.mli b/rego-proofs/compiler/lib/ast.mli new file mode 100644 index 0000000..514d5da --- /dev/null +++ b/rego-proofs/compiler/lib/ast.mli @@ -0,0 +1,108 @@ +type expr = Term of term | Every of string option * string * term * query + +and literal = + | Exists of expr list * with_modifier option + | Expr of expr * with_modifier option + | Negate of expr * with_modifier option + +and query = literal list + +and term = + | Scalar of scalar + | Var of string + | Ref of reference + | Array of term list + | Object of (object_key * term) list + | Set of term list + | ArrayComprehension of term * query + | ObjectComprehension of (object_key * term) * query + | SetComprehension of term * query + | Call of reference * term list + +and scalar = String of string | Number of float | Bool of bool | Null +and reference = ref_target * term list + +and ref_target = + | Var of string + | Array of term list + | Object of (object_key * term) list + | Set of term list + | ArrayComprehension of term * query + | ObjectComprehension of (object_key * term) * query + | SetComprehension of term * query + | Call of reference * term list + +and object_key = Scalar of scalar | Ref of reference | Var of string +and with_modifier = (term * term) list + +type assign_operator = Assign | Unify +type rule_head_lhs = reference + +type rule_head_rhs = + | Assignment of assign_operator * term + | Function of assign_operator * term list * term + | Set of term + +type rule_head = rule_head_lhs * rule_head_rhs + +type rule = { + default : bool; + head : rule_head; + body : query; + otherwise : rule option; +} + +type import = { alias : string option; path : reference } +type package = { path : reference; imports : import list; policy : rule list } + +val ast_of_string : string -> package +val show_package : package -> string + +val equal_assign_operator : assign_operator -> assign_operator -> bool +val equal_expr : expr -> expr -> bool +val equal_import : import -> import -> bool +val equal_literal : literal -> literal -> bool +val equal_object_key : object_key -> object_key -> bool +val equal_package : package -> package -> bool +val equal_query : query -> query -> bool +val equal_ref_target : ref_target -> ref_target -> bool +val equal_reference : reference -> reference -> bool +val equal_rule : rule -> rule -> bool +val equal_rule_head : rule_head -> rule_head -> bool +val equal_rule_head_lhs : rule_head_lhs -> rule_head_lhs -> bool +val equal_rule_head_rhs : rule_head_rhs -> rule_head_rhs -> bool +val equal_scalar : scalar -> scalar -> bool +val equal_term : term -> term -> bool +val equal_with_modifier : with_modifier -> with_modifier -> bool +val pp_assign_operator : Format.formatter -> assign_operator -> unit +val pp_expr : Format.formatter -> expr -> unit +val pp_import : Format.formatter -> import -> unit +val pp_literal : Format.formatter -> literal -> unit +val pp_object_key : Format.formatter -> object_key -> unit +val pp_package : Format.formatter -> package -> unit +val pp_query : Format.formatter -> query -> unit +val pp_ref_target : Format.formatter -> ref_target -> unit +val pp_reference : Format.formatter -> reference -> unit +val pp_rule : Format.formatter -> rule -> unit +val pp_rule_head : Format.formatter -> rule_head -> unit +val pp_rule_head_lhs : Format.formatter -> rule_head_lhs -> unit +val pp_rule_head_rhs : Format.formatter -> rule_head_rhs -> unit +val pp_scalar : Format.formatter -> scalar -> unit +val pp_term : Format.formatter -> term -> unit +val pp_with_modifier : Format.formatter -> with_modifier -> unit +val show_assign_operator : assign_operator -> string +val show_expr : expr -> string +val show_import : import -> string +val show_literal : literal -> string +val show_object_key : object_key -> string +val show_package : package -> string +val show_query : query -> string +val show_ref_target : ref_target -> string +val show_reference : reference -> string +val show_rule : rule -> string +val show_rule_head : rule_head -> string +val show_rule_head_lhs : rule_head_lhs -> string +val show_rule_head_rhs : rule_head_rhs -> string +val show_scalar : scalar -> string +val show_term : term -> string +val show_with_modifier : with_modifier -> string |