mirror of
https://github.com/ProgramSnail/Lama.git
synced 2025-12-24 15:48:47 +00:00
Continue spec
This commit is contained in:
parent
c1e4d9f29c
commit
95e9603d50
2 changed files with 32 additions and 44 deletions
|
|
@ -64,44 +64,3 @@ public fun expr (ops, opnd) {
|
|||
inner (ops)
|
||||
}
|
||||
|
||||
(*
|
||||
Just some memo from OCaml's Ostap. Will be removed when done.
|
||||
|
||||
let left f c x a y = f (c x) a y
|
||||
let right f c x a y = c (f x a y)
|
||||
|
||||
fun expr (ops, opnd, atr) {
|
||||
}
|
||||
|
||||
|
||||
ops = [is_nona, (atrs, alt_parser at the level),
|
||||
...
|
||||
]
|
||||
let expr f ops opnd atr =
|
||||
let ops =
|
||||
Array.map
|
||||
(fun (assoc, (atrs, list)) ->
|
||||
let g = match assoc with `Lefta | `Nona -> left | `Righta -> right in
|
||||
assoc = `Nona, (atrs, altl (List.map (fun (oper, sema) -> ostap (!(oper) {g sema})) list))
|
||||
)
|
||||
ops
|
||||
in
|
||||
let atrr i atr = snd (fst (snd ops.(i)) atr) in
|
||||
let atrl i atr = fst (fst (snd ops.(i)) atr) in
|
||||
let n = Array.length ops in
|
||||
let op i = snd (snd ops.(i)) in
|
||||
let nona i = fst ops.(i) in
|
||||
let id x = x in
|
||||
let ostap (
|
||||
inner[l][c][atr]: f[ostap (
|
||||
{n = l } => x:opnd[atr] {c x}
|
||||
| {n > l && not (nona l)} => (-x:inner[l+1][id][atrl l atr] -o:op[l] y:inner[l][o c x atr][atrr l atr] |
|
||||
x:inner[l+1][id][atr] {c x})
|
||||
| {n > l && nona l} => (x:inner[l+1][id][atrl l atr] o:op[l] y:inner[l+1][id][atrr l atr] {c (o id x atr y)} |
|
||||
x:inner[l+1][id][atr] {c x})
|
||||
)]
|
||||
)
|
||||
in
|
||||
ostap (inner[0][id][atr])d
|
||||
|
||||
*)
|
||||
Loading…
Add table
Add a link
Reference in a new issue