aboutsummaryrefslogtreecommitdiff
path: root/rego-proofs
diff options
context:
space:
mode:
authorJakob L. Kreuze2023-10-17 16:30:18 -0400
committerJakob L. Kreuze2023-10-17 16:30:18 -0400
commitbec23791c04b0c8b6a8e75fed036a653617c08ac (patch)
treee46df08a2757c9035ff291385c5ec63fced11fb4 /rego-proofs
parent9e23c1dd3fed5dd3561b402c6d7e8b1331db45f3 (diff)
Complete parsing of rule_head_rhs
Diffstat (limited to 'rego-proofs')
-rw-r--r--rego-proofs/compiler-rewrite/bin/main.ml21
1 files changed, 14 insertions, 7 deletions
diff --git a/rego-proofs/compiler-rewrite/bin/main.ml b/rego-proofs/compiler-rewrite/bin/main.ml
index 14a1ff7..11ecc44 100644
--- a/rego-proofs/compiler-rewrite/bin/main.ml
+++ b/rego-proofs/compiler-rewrite/bin/main.ml
@@ -48,9 +48,8 @@ type assign_operator = Assign | Unify
type rule_head_lhs = reference
[@@deriving show]
type rule_head_rhs = Assignment of assign_operator * term
- | Object of term * assign_operator * term
- | Function of (term list) * assign_operator * term
- | Set of term
+ | Function of assign_operator * (string list) * term
+ | Set of string * term
[@@deriving show]
type rule_head = rule_head_lhs * rule_head_rhs
[@@deriving show]
@@ -189,12 +188,20 @@ let parse_head tree =
Printf.printf "%s: %s\n" "parse_head" (Yojson.Basic.to_string tree);
(* Variables are desugared to empty references. *)
let lhs = tree |> member "ref" |> to_list |> parse_ref in
+ let assign_operator = if tree |> member "assign" |> to_bool_or_false then
+ Assign
+ else
+ Unify in
let rhs =
- if tree |> member "assign" |> to_bool_or_false then
- Assignment (Assign, (tree |> member "value" |> parse_term))
- (* TODO: Rest cases? *)
+ if not (tree |> member "key" |> is_null) then
+ Set (tree |> member "key" |> to_string,
+ (tree |> member "value" |> parse_term))
+ else if tree |> member "args" |> to_bool_or_false then
+ Function (assign_operator,
+ (tree |> member "args" |> to_list |> List.map ~f:(fun x -> (x |> member "value" |> to_string))),
+ (tree |> member "value" |> parse_term))
else
- Assignment (Unify, (tree |> member "value" |> parse_term))
+ Assignment (assign_operator, (tree |> member "value" |> parse_term))
in (lhs, rhs)
let rec parse_rule tree =

© 2015 - 2026 Jakob L. Kreuze