dtlc

dependently-typed lambda calculus toy
git clone git://git.rr3.xyz/dtlc
Log | Files | Refs | README | LICENSE

commit 3642f1d0bec1614bc4fa1e9d6a146e3e784e2c05
parent 97aa184a7861ea69fbda3496105b39df8f9f39d3
Author: Robert Russell <robertrussell.72001@gmail.com>
Date:   Thu, 14 Dec 2023 18:45:00 -0800

WIP elaboration

Diffstat:
Mabstract.ml | 14+++++++-------
Mcommon.ml | 2++
Mconcrete.ml | 2+-
Mconctoabs.ml | 16++++++++++------
Mcore.ml | 19++++++++++++++-----
Aelab2.ml | 140+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Meval.ml | 48++++++++++++++++++++++++++++++++++++++++++++++++
Dlexer.ml | 1167-------------------------------------------------------------------------------
Mlexer.mll | 2+-
Dparser.ml | 777-------------------------------------------------------------------------------
Mparser.mly | 4++--
Mvalue.ml | 23++++++++++++++++-------
12 files changed, 241 insertions(+), 1973 deletions(-)

diff --git a/abstract.ml b/abstract.ml @@ -1,26 +1,26 @@ open Common type term = -| Let of patt * term * term | Match of term * case list -| Check of term * term +| Annot of term * term | App of term * term list | Access of term * ident | Index of term * term | Deref of term | Fn of patt list * term | FnType of annot list * term -| Data of ident * (ident * term) list +| Data of ident * (ident * term) list (* TODO: constructor tag should be path eventually *) | DataType of (ident * annot list) list -| Int of Z.t -| Hole +| Nat of Z.t | Ident of ident and patt = | PWild | PBind of ident -| PAnnot of annot | PAssign of term +| PAnnot of annot | PData of ident * (ident * patt) list -| PInt of Z.t +| PNat of Z.t +| PAnd of patt * patt +| POr of patt * patt and annot = Annot of patt * term and case = Case of {patt: patt; guard: term option; body: term} diff --git a/common.ml b/common.ml @@ -4,3 +4,5 @@ type level = int (* Readable helper function for creating closures. *) let capture env body = (env, body) + +let all = List.fold_left (&&) true diff --git a/concrete.ml b/concrete.ml @@ -22,7 +22,7 @@ type expr = | Record of (ident * expr) list | RecordType of (ident * expr) list | Unit -| Int of Z.t +| Nat of Z.t | Underscore | Ident of ident and case = Case of {patt: expr; guard: expr option; body: expr} diff --git a/conctoabs.ml b/conctoabs.ml @@ -15,8 +15,12 @@ let rec map_named f = function | (x, e) :: xes -> (x, f e) :: map_named f xes let rec term = function -| C.Let (p, a, b) -> A.Let (patt p, term a, term b) -| C.Seq (a, b) -> A.Let (A.PWild, term a, term b) +| C.Let (p, a, b) -> A.Match (term a, [ + A.Case {patt = patt p; guard = None; body = term b} + ]) +| C.Seq (a, b) -> A.Match (term a, [ + A.Case {patt = A.PWild; guard = None; body = term b} + ]) | C.Match (a, cs) -> A.Match (term a, List.map case cs) | C.If (a, b, c) -> A.Match (term a, [ A.Case {patt = A.PData ("true", []); guard = None; body = term b}; @@ -26,7 +30,7 @@ let rec term = function A.Case {patt = A.PData ("true", []); guard = None; body = term b}; A.Case {patt = A.PWild; guard = None; body = A.Data ("", [])}; ]) -| C.Annot (a, b) -> A.Check (term a, term b) +| C.Annot (a, b) -> A.Annot (term a, term b) | C.Add (a, b) -> A.App (A.Ident "`+", [term a; term b]) | C.Mul (a, b) -> A.App (A.Ident "`*", [term a; term b]) | C.App (a, bs) -> A.App (term a, List.map term bs) @@ -44,8 +48,8 @@ let rec term = function let fd_to_ann (x, e) = A.Annot (A.PBind x, term e) in A.DataType [("", List.map fd_to_ann fds)] | C.Unit -> A.Data ("", []) -| C.Int n -> A.Int n -| C.Underscore -> A.Hole +| C.Nat n -> A.Nat n +| C.Underscore -> failwith "no impl: holes" | C.Ident x -> A.Ident x and patt = function @@ -70,7 +74,7 @@ and patt = function | C.Record xes -> A.PData ("", map_named patt xes) | C.RecordType _ -> raise InvalidPattern | C.Unit -> A.PData ("", []) -| C.Int n -> A.PInt n +| C.Nat n -> A.PNat n | C.Underscore -> A.PWild | C.Ident x -> A.PBind x diff --git a/core.ml b/core.ml @@ -1,12 +1,21 @@ open Common type term = -| Let of ident * term * term -| Fn of ident * term -| Pi of ident * term * term -| App of term * term +| Let of term * term +| Case of term * case list +| App of term * term list +| Fn of fn +| FnType of fn_type +| Nat of Z.t | Var of index -| Int of Z.t +and fn = int * term +and fn_type = int * term list * term +and case = patt * term +and patt = patt_discriminant list +and patt_discriminant = +| PattDiscTrue +| PattDiscFalse +| PattDiscData of ident * int (* TODO: diff --git a/elab2.ml b/elab2.ml @@ -0,0 +1,140 @@ +open Common +module A = Abstract +module C = Core +module V = Value + +type context = { + len: int; + names: ident list; + values: V.value list; + types: V.value list; +} + +let bind_def ctx x v t = { + len = 1 + ctx.len; + names = x :: ctx.names; + values = v :: ctx.values; + types = t :: ctx.types; +} + +let bind_arb ctx x t = bind_def ctx x (V.Arb ctx.len) t + +let rec bind_arb_telescope ctx xs ts = match xs, ts with +| x :: xs, t :: ts -> bind_arb_telescope (bind_arb ctx x t) xs ts +| [], [] -> ctx +| _, _ -> failwith "impossible" + +let rec quote_telescope l = function +| t :: ts -> quote l t :: quote_telescope (l + 1) ts +| [] -> [] + +let rec check ctx t u = match t, u with +(* TODO: Match, Fn, Data *) +| t, u -> + let (ct, v) = infer ctx t in + if conv ctx.len u v then ct else failwith "type error" + +and infer ctx = function +| A.Match _ -> failwith "no impl: match" +| A.Annot (a, b) -> + let cb = check ctx b V.Type in + let vb = eval ctx.values cb in + let ca = check ctx a vb in + (ca, vb) +| A.App (f, args) -> + let (cf, tf) = infer ctx f in + begin match tf with + | V.FnType (env, (arity, doms, cod)) -> + if List.length args <> arity then failwith "arity mismatch" else + let (cargs, vcod) = check_app ctx args env doms cod in + (C.App (cf, cargs), vcod) + | _ -> failwith "expected function type in application" + end +| A.Access _ -> failwith "no impl: access" +| A.Index _ -> failwith "no impl: index" +| A.Deref _ -> failwith "no impl: deref" +| A.Fn (ps, body) -> + let (xs, ts) = infer_patt_telescope ctx ps in + let arity = List.length xs in + let (cbody, u) = infer (bind_arb_telescope ctx xs ts) body in + let f = C.Fn (arity, cbody) in + let ft = V.FnType (ctx.values, (arity, quote_telescope ctx.len ts)) in + (f, ft) +| A.FnType (doms, cod) -> + let arity = List.length doms in + let (xs, cdoms, vdoms) = check_annots ctx doms in + let ccod = check (bind_arb_telescope ctx xs vdoms) cod V.Type in + (C.FnType (arity, cdoms, ccod), V.Type) +| A.Data _ -> failwith "no impl: data" +| A.DataType _ -> failwith "no impl: data type" +| A.Nat n -> (C.Nat n, V.Nat) +| A.Ident x -> + let rec go ys vs ts = match ys, vs, ts with + | y :: ys, v :: vs, t :: ts -> if x = y then (v, t) else go ys vs ts + | [], [], [] -> failwith ("unbound identifier: " ^ x) + | _, _, _ -> failwith "impossible" in + go ctx.names ctx.values ctx.types + +and check_app ctx args env doms cod = match args, doms with +| arg :: args, dom :: doms -> + let vdom = eval env dom in + let carg = check ctx arg vdom in + let varg = eval ctx.values carg in + let (cargs, vcod) = check_app ctx args (varg :: env) doms cod in + (carg :: cargs, vcod) +| [], [] -> ([], eval env cod) +| _, _ -> failwith "impossible" + +and infer_patt ctx = function +| A.PWild -> failwith "can not infer type for wild pattern" +| A.PBind _ -> failwith "can not infer type for bind pattern" +| A.PAssign _ -> failwith "no impl: assign pattern" +| A.PAnnot (A.Annot (p, t)) -> + let ct = check ctx t V.Type in + let vt = eval ctx.values ct in + let x = check_patt ctx p vt in + (x, vt) +| A.PData _ -> failwith "no impl: data pattern" +| A.PNat _ -> failwith "no impl: nat pattern" +| A.PAnd _ -> failwith "no impl: and pattern" +| A.POr _ -> failwith "no impl: or pattern" + +and infer_patt_telescope ctx = function +| p :: ps -> + let (x, t) = infer_patt ctx p in + let (xs, ts) = infer_patt_telescope (bind_arb ctx x t) ps in + (x :: xs, t :: ts) +| [] -> ([], []) + +and check_patt ctx p t = match p with +| A.PWild -> None +| A.PBind x -> Some x +| A.PAssign _ -> failwith "no impl: assign pattern" +| A.PAnnot (A.Annot (p, u)) -> + let cu = check ctx u V.Type in + let vu = eval ctx.values cu in + if conv ctx.len vu t then + check_patt ctx p t + else + failwith "pattern does not unify with inferred type" +| A.PData _ -> failwith "no impl: data pattern" +| A.PNat _ -> failwith "no impl: nat pattern" +| A.PAnd _ -> failwith "no impl: and pattern" +| A.POr _ -> failwith "no impl: or pattern" + +and check_patt_telescope ctx ps ts = match ps, ts with +| p :: ps, t :: ts -> + let x = check_patt ctx p t in + let xs = check_patt_telescope (bind_arb ctx x t) ps ts in + x :: xs +| [], [] -> [] +| _, _ -> failwith "impossible" + +and check_annots ctx = function +| Annot (p, t) :: anns -> + let ct = check ctx t V.Type in + let vt = eval ctx.values ct in + let x = check_patt ctx p vt in + let (xs, cts, vts) = check_annots (bind_arb ctx x vt) anns in + (x :: xs, ct :: cts, vt :: vts) +| [] -> ([], [], []) diff --git a/eval.ml b/eval.ml @@ -3,6 +3,54 @@ module C = Core module V = Value let rec eval env = function +| C.Let (_, t, u) -> eval (eval env t :: env) u +| C.App (f, args) -> + let vargs = List.map (eval env) args in + begin match eval env f with + | V.Clo (cap, C.Fn (_, body)) -> eval (vargs @ cap) body + | V.Add -> + begin match vargs with + | [V.Nat m; V.Nat n] -> V.Nat (Z.add m n) + | _ -> failwith "impossible" + end + | vf -> V.App (vf, vargs) + end +| C.Fn _ as t -> V.Clo (env, t) +| C.FnType _ as t -> V.Clo (env, t) +| C.Nat n -> V.Nat n +| C.Var i -> List.nth env i + +let rec quote l = function +| V.App (f, args) -> C.App (quote l f, List.map (quote l) args) +| V.Clo (env, C.Fn (xs, body)) -> C.Fn +| V.Nat of Z.t +| V.Var of level +| V.Type +| V.Nat +| V.Add + +let rec conv l a b = match a, b with +| V.App (af, aargs), V.App (bf, bargs) -> + conv l af bf && all (List.map2 (conv l) aargs bargs) +| V.Clo (e) +| V.Nat n, V.Nat m -> Z.equal n m +| V.Arb i, V.Arb j -> i = j +| V.Type, V.Type -> true +| V.Nat, V.Nat -> true +| V.Add, V.Add -> true +| _, _ -> false + +let rec conv l a b = match a, b with +(* no η for fn *) +| V.Fn (_, aclo), V.Fn(_, bclo) -> conv (l + 1) (apply aclo (V.Var l)) (apply bclo (V.Var l)) +| V.Pi (_, dom0, cod0), V.Pi (_, dom1, cod1) -> conv l dom0 dom1 + && conv (l + 1) (apply cod0 (V.Var l)) (apply cod1 (V.Var l)) +| V.App (a0, a1), V.App (b0, b1) -> conv l a0 b0 && conv l a1 b1 +| V.Var x, V.Var y -> x = y +| V.Int n, V.Int m -> Z.equal n m +| _, _ -> false + +let rec eval env = function | C.Let (_, a, b) -> eval (eval env a :: env) b | C.Fn (x, body) -> V.Fn (x, capture env body) | C.Pi (x, dom, cod) -> V.Pi (x, eval env dom, capture env cod) diff --git a/lexer.ml b/lexer.ml @@ -1,1167 +0,0 @@ -# 1 "lexer.mll" - -open Parser -exception LexerError of Lexing.position * string - -# 7 "lexer.ml" -let __ocaml_lex_tables = { - Lexing.lex_base = - "\000\000\113\000\226\000\083\001\108\000\059\001\226\001\083\002\ - \196\002\053\003\166\003\023\004\233\255\234\255\235\255\236\255\ - \238\255\239\255\241\255\242\255\052\000\000\000\001\000\247\255\ - \248\255\249\255\250\255\033\000\252\255\253\255\254\255\255\255\ - \246\255\245\255\244\255\237\255\240\255\243\255\221\000\255\003\ - \166\004\023\005\136\005\249\005\106\006\219\006\076\007\189\007\ - \046\008\159\008\016\009\129\009\242\009\099\010\224\255\221\001\ - \075\010\158\002\078\000\086\000\242\010\099\011\212\011\069\012\ - \182\012\039\013\152\013"; - Lexing.lex_backtrk = - "\255\255\032\000\032\000\030\000\255\255\255\255\030\000\030\000\ - \030\000\030\000\030\000\030\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\004\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \030\000\030\000\030\000\023\000\024\000\027\000\030\000\030\000\ - \025\000\030\000\030\000\026\000\028\000\029\000\255\255\255\255\ - \255\255\031\000\031\000\031\000\031\000\032\000\031\000\032\000\ - \031\000\032\000\031\000"; - Lexing.lex_default = - "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\255\255\255\255\255\255\000\000\ - \000\000\000\000\000\000\255\255\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\000\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255"; - Lexing.lex_trans = - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\031\000\030\000\000\000\000\000\031\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \031\000\024\000\000\000\020\000\000\000\000\000\000\000\000\000\ - \019\000\018\000\012\000\013\000\026\000\022\000\025\000\000\000\ - \002\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ - \001\000\001\000\027\000\028\000\000\000\021\000\034\000\033\000\ - \023\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\017\000\037\000\016\000\032\000\003\000\ - \000\000\003\000\003\000\003\000\007\000\008\000\006\000\003\000\ - \003\000\010\000\003\000\003\000\003\000\011\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\009\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\015\000\000\000\014\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\061\000\061\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\036\000\ - \000\000\000\000\000\000\054\000\000\000\000\000\000\000\000\000\ - \054\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\000\000\000\000\000\000\000\000\035\000\ - \000\000\000\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\000\000\000\000\005\000\004\000\ - \060\000\000\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\ - \029\000\003\000\003\000\000\000\054\000\000\000\000\000\000\000\ - \000\000\054\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\003\000\003\000\000\000\000\000\ - \000\000\003\000\000\000\054\000\059\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\058\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\057\000\054\000\054\000\000\000\000\000\056\000\ - \055\000\060\000\000\000\054\000\059\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\058\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\057\000\054\000\054\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\ - \000\000\000\000\003\000\003\000\000\000\003\000\000\000\000\000\ - \000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\000\000\ - \000\000\000\000\003\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\ - \056\000\055\000\003\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \000\000\000\000\000\000\003\000\000\000\000\000\003\000\000\000\ - \000\000\003\000\000\000\003\000\000\000\000\000\003\000\000\000\ - \000\000\003\000\000\000\003\000\003\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\ - \000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\000\000\000\000\000\000\000\000\ - \000\000\039\000\038\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\000\000\000\000\000\000\ - \000\000\003\000\000\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \053\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\054\000\000\000\ - \000\000\000\000\054\000\054\000\000\000\003\000\000\000\000\000\ - \000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\054\000\054\000\000\000\ - \000\000\000\000\054\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\ - \039\000\038\000\003\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\052\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\000\000\003\000\000\000\ - \000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\000\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\000\000\ - \000\000\039\000\038\000\003\000\000\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \049\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\ - \000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \000\000\000\000\039\000\038\000\003\000\000\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\046\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \003\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\000\000\000\000\039\000\038\000\003\000\000\000\003\000\ - \003\000\003\000\003\000\003\000\044\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\003\000\000\000\000\000\000\000\000\000\003\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\000\000\000\000\039\000\038\000\003\000\000\000\ - \040\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\000\000\000\000\000\000\003\000\ - \000\000\000\000\003\000\000\000\000\000\003\000\000\000\003\000\ - \000\000\000\000\003\000\000\000\000\000\003\000\000\000\003\000\ - \003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \003\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \000\000\000\000\000\000\000\000\000\000\039\000\038\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\000\000\000\000\000\000\000\000\003\000\000\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\041\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\003\000\000\000\000\000\000\000\000\000\003\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\000\000\000\000\039\000\038\000\003\000\000\000\ - \003\000\003\000\042\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\003\000\000\000\000\000\000\000\000\000\003\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\000\000\000\000\039\000\038\000\003\000\ - \000\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \043\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\ - \003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\000\000\000\000\039\000\038\000\ - \003\000\000\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\ - \000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\000\000\000\000\039\000\ - \038\000\003\000\000\000\003\000\003\000\003\000\003\000\003\000\ - \045\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\ - \000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\ - \039\000\038\000\003\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\ - \000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\000\000\ - \000\000\039\000\038\000\003\000\000\000\003\000\003\000\003\000\ - \003\000\047\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\ - \000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \000\000\000\000\039\000\038\000\003\000\000\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\048\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \003\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\000\000\000\000\039\000\038\000\003\000\000\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\003\000\000\000\000\000\000\000\000\000\003\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\000\000\000\000\039\000\038\000\003\000\000\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\050\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\003\000\000\000\000\000\000\000\000\000\003\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\000\000\000\000\039\000\038\000\003\000\ - \000\000\003\000\003\000\003\000\003\000\051\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\ - \003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\000\000\000\000\039\000\038\000\ - \003\000\000\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\ - \000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\000\000\000\000\039\000\ - \038\000\003\000\000\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\ - \000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\ - \039\000\038\000\003\000\000\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\054\000\054\000\ - \000\000\000\000\000\000\054\000\000\000\000\000\054\000\000\000\ - \000\000\054\000\000\000\054\000\000\000\000\000\054\000\000\000\ - \000\000\054\000\000\000\054\000\054\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\054\000\000\000\000\000\000\000\ - \000\000\054\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\000\000\000\000\000\000\000\000\ - \000\000\039\000\038\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\000\000\000\000\000\000\ - \000\000\060\000\000\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\054\000\000\000\000\000\ - \000\000\000\000\054\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\062\000\062\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\000\000\000\000\ - \056\000\055\000\062\000\000\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\054\000\000\000\ - \000\000\000\000\000\000\054\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\062\000\062\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\000\000\ - \000\000\056\000\055\000\062\000\000\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\054\000\ - \000\000\000\000\000\000\000\000\054\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\054\000\054\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \000\000\000\000\056\000\055\000\064\000\000\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \054\000\000\000\000\000\000\000\000\000\054\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\054\000\054\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\000\000\000\000\056\000\055\000\064\000\000\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\054\000\000\000\000\000\000\000\000\000\054\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\066\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\000\000\000\000\056\000\055\000\066\000\000\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\054\000\000\000\000\000\000\000\000\000\054\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\066\000\066\000\066\000\066\000\066\000\066\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\000\000\000\000\056\000\055\000\066\000\ - \000\000\066\000\066\000\066\000\066\000\066\000\066\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\056\000\055\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000"; - Lexing.lex_check = - "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\000\000\000\000\255\255\255\255\000\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \000\000\000\000\255\255\000\000\255\255\255\255\255\255\255\255\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\255\255\000\000\021\000\022\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\020\000\000\000\027\000\000\000\ - \255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\255\255\000\000\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\059\000\059\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\020\000\ - \255\255\255\255\255\255\001\000\255\255\255\255\255\255\255\255\ - \001\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ - \001\000\001\000\001\000\255\255\255\255\255\255\255\255\020\000\ - \255\255\255\255\001\000\001\000\001\000\001\000\001\000\001\000\ - \001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ - \001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ - \001\000\001\000\001\000\001\000\255\255\255\255\000\000\000\000\ - \001\000\255\255\001\000\001\000\001\000\001\000\001\000\001\000\ - \001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ - \001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ - \001\000\001\000\001\000\001\000\004\000\004\000\004\000\004\000\ - \004\000\004\000\004\000\004\000\004\000\004\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\004\000\255\255\255\255\ - \000\000\004\000\004\000\255\255\002\000\255\255\255\255\255\255\ - \255\255\002\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\002\000\002\000\002\000\002\000\002\000\002\000\ - \002\000\002\000\002\000\002\000\004\000\004\000\255\255\255\255\ - \255\255\004\000\255\255\002\000\002\000\002\000\002\000\002\000\ - \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ - \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ - \002\000\002\000\002\000\002\000\002\000\255\255\255\255\001\000\ - \001\000\002\000\255\255\002\000\002\000\002\000\002\000\002\000\ - \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ - \002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ - \002\000\002\000\002\000\002\000\002\000\038\000\038\000\038\000\ - \038\000\038\000\038\000\038\000\038\000\038\000\038\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\038\000\255\255\ - \255\255\255\255\038\000\038\000\255\255\003\000\255\255\255\255\ - \255\255\255\255\003\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\038\000\038\000\255\255\ - \255\255\255\255\038\000\255\255\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\255\255\255\255\ - \002\000\002\000\003\000\255\255\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\003\000\003\000\003\000\003\000\005\000\005\000\ - \255\255\255\255\255\255\005\000\255\255\255\255\005\000\255\255\ - \255\255\005\000\255\255\005\000\255\255\255\255\005\000\255\255\ - \255\255\005\000\255\255\005\000\005\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\005\000\005\000\005\000\005\000\ - \005\000\005\000\005\000\005\000\005\000\005\000\005\000\005\000\ - \005\000\005\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\006\000\255\255\255\255\255\255\ - \255\255\006\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\006\000\006\000\006\000\006\000\006\000\006\000\ - \006\000\006\000\006\000\006\000\255\255\255\255\255\255\255\255\ - \255\255\003\000\003\000\006\000\006\000\006\000\006\000\006\000\ - \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\ - \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\ - \006\000\006\000\006\000\006\000\006\000\255\255\255\255\255\255\ - \255\255\006\000\255\255\006\000\006\000\006\000\006\000\006\000\ - \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\ - \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\ - \006\000\006\000\006\000\006\000\006\000\055\000\055\000\055\000\ - \055\000\055\000\055\000\055\000\055\000\055\000\055\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\055\000\255\255\ - \255\255\255\255\055\000\055\000\255\255\007\000\255\255\255\255\ - \255\255\255\255\007\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\007\000\007\000\007\000\007\000\007\000\ - \007\000\007\000\007\000\007\000\007\000\055\000\055\000\255\255\ - \255\255\255\255\055\000\255\255\007\000\007\000\007\000\007\000\ - \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\ - \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\ - \007\000\007\000\007\000\007\000\007\000\007\000\255\255\255\255\ - \006\000\006\000\007\000\255\255\007\000\007\000\007\000\007\000\ - \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\ - \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\ - \007\000\007\000\007\000\007\000\007\000\007\000\057\000\057\000\ - \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\057\000\ - \057\000\057\000\057\000\057\000\057\000\255\255\008\000\255\255\ - \255\255\255\255\255\255\008\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\008\000\008\000\008\000\008\000\ - \008\000\008\000\008\000\008\000\008\000\008\000\255\255\057\000\ - \057\000\057\000\057\000\057\000\057\000\008\000\008\000\008\000\ - \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\ - \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\ - \008\000\008\000\008\000\008\000\008\000\008\000\008\000\255\255\ - \255\255\007\000\007\000\008\000\255\255\008\000\008\000\008\000\ - \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\ - \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\ - \008\000\008\000\008\000\008\000\008\000\008\000\008\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\009\000\ - \255\255\255\255\255\255\255\255\009\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\009\000\009\000\009\000\ - \009\000\009\000\009\000\009\000\009\000\009\000\009\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\009\000\009\000\ - \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ - \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ - \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ - \255\255\255\255\008\000\008\000\009\000\255\255\009\000\009\000\ - \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ - \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ - \009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \010\000\255\255\255\255\255\255\255\255\010\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\010\000\010\000\ - \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\010\000\ - \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ - \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ - \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ - \010\000\255\255\255\255\009\000\009\000\010\000\255\255\010\000\ - \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ - \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ - \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ - \010\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\011\000\255\255\255\255\255\255\255\255\011\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\011\000\ - \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ - \011\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ - \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ - \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ - \011\000\011\000\255\255\255\255\010\000\010\000\011\000\255\255\ - \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ - \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ - \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ - \011\000\011\000\039\000\039\000\255\255\255\255\255\255\039\000\ - \255\255\255\255\039\000\255\255\255\255\039\000\255\255\039\000\ - \255\255\255\255\039\000\255\255\255\255\039\000\255\255\039\000\ - \039\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ - \039\000\039\000\039\000\039\000\039\000\039\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \040\000\255\255\255\255\255\255\255\255\040\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\040\000\040\000\ - \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \255\255\255\255\255\255\255\255\255\255\011\000\011\000\040\000\ - \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \040\000\255\255\255\255\255\255\255\255\040\000\255\255\040\000\ - \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \040\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\041\000\255\255\255\255\255\255\255\255\041\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\041\000\ - \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ - \041\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ - \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ - \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ - \041\000\041\000\255\255\255\255\040\000\040\000\041\000\255\255\ - \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ - \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ - \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ - \041\000\041\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\042\000\255\255\255\255\255\255\255\255\042\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ - \042\000\042\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ - \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ - \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ - \042\000\042\000\042\000\255\255\255\255\041\000\041\000\042\000\ - \255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ - \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ - \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ - \042\000\042\000\042\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\043\000\255\255\255\255\255\255\255\255\ - \043\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\043\000\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\043\000\255\255\255\255\042\000\042\000\ - \043\000\255\255\043\000\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\043\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\044\000\255\255\255\255\255\255\ - \255\255\044\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\044\000\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\044\000\255\255\255\255\043\000\ - \043\000\044\000\255\255\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\044\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\045\000\255\255\255\255\ - \255\255\255\255\045\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\255\255\255\255\ - \044\000\044\000\045\000\255\255\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\046\000\255\255\ - \255\255\255\255\255\255\046\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\046\000\046\000\046\000\046\000\ - \046\000\046\000\046\000\046\000\046\000\046\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\046\000\046\000\046\000\ - \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ - \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ - \046\000\046\000\046\000\046\000\046\000\046\000\046\000\255\255\ - \255\255\045\000\045\000\046\000\255\255\046\000\046\000\046\000\ - \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ - \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ - \046\000\046\000\046\000\046\000\046\000\046\000\046\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\047\000\ - \255\255\255\255\255\255\255\255\047\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \255\255\255\255\046\000\046\000\047\000\255\255\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \048\000\255\255\255\255\255\255\255\255\048\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\048\000\048\000\ - \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\048\000\ - \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \048\000\255\255\255\255\047\000\047\000\048\000\255\255\048\000\ - \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \048\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\049\000\255\255\255\255\255\255\255\255\049\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\255\255\255\255\048\000\048\000\049\000\255\255\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\050\000\255\255\255\255\255\255\255\255\050\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\255\255\255\255\049\000\049\000\050\000\ - \255\255\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\051\000\255\255\255\255\255\255\255\255\ - \051\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\255\255\255\255\050\000\050\000\ - \051\000\255\255\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\052\000\255\255\255\255\255\255\ - \255\255\052\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\255\255\255\255\051\000\ - \051\000\052\000\255\255\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\053\000\255\255\255\255\ - \255\255\255\255\053\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\053\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\053\000\053\000\255\255\255\255\ - \052\000\052\000\053\000\255\255\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\053\000\053\000\056\000\056\000\ - \255\255\255\255\255\255\056\000\255\255\255\255\056\000\255\255\ - \255\255\056\000\255\255\056\000\255\255\255\255\056\000\255\255\ - \255\255\056\000\255\255\056\000\056\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\056\000\056\000\056\000\056\000\ - \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \056\000\056\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\060\000\255\255\255\255\255\255\ - \255\255\060\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\255\255\255\255\255\255\255\255\ - \255\255\053\000\053\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\060\000\255\255\255\255\255\255\ - \255\255\060\000\255\255\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\060\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\061\000\255\255\255\255\ - \255\255\255\255\061\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\255\255\255\255\ - \060\000\060\000\061\000\255\255\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\062\000\255\255\ - \255\255\255\255\255\255\062\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\255\255\ - \255\255\061\000\061\000\062\000\255\255\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\063\000\ - \255\255\255\255\255\255\255\255\063\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \255\255\255\255\062\000\062\000\063\000\255\255\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \064\000\255\255\255\255\255\255\255\255\064\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\255\255\255\255\063\000\063\000\064\000\255\255\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\065\000\255\255\255\255\255\255\255\255\065\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\255\255\255\255\064\000\064\000\065\000\255\255\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\066\000\255\255\255\255\255\255\255\255\066\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\066\000\255\255\255\255\065\000\065\000\066\000\ - \255\255\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\066\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\066\000\066\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255"; - Lexing.lex_base_code = - ""; - Lexing.lex_backtrk_code = - ""; - Lexing.lex_default_code = - ""; - Lexing.lex_trans_code = - ""; - Lexing.lex_check_code = - ""; - Lexing.lex_code = - ""; -} - -let rec token lexbuf = - __ocaml_lex_token_rec lexbuf 0 -and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = - match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with - | 0 -> -# 37 "lexer.mll" - ( token lexbuf ) -# 998 "lexer.ml" - - | 1 -> -# 38 "lexer.mll" - ( Lexing.new_line lexbuf; token lexbuf ) -# 1003 "lexer.ml" - - | 2 -> -# 39 "lexer.mll" - ( EOF ) -# 1008 "lexer.ml" - - | 3 -> -# 41 "lexer.mll" - ( SEMICOLON ) -# 1013 "lexer.ml" - - | 4 -> -# 42 "lexer.mll" - ( COLON ) -# 1018 "lexer.ml" - - | 5 -> -# 43 "lexer.mll" - ( COMMA ) -# 1023 "lexer.ml" - - | 6 -> -# 44 "lexer.mll" - ( DOT ) -# 1028 "lexer.ml" - - | 7 -> -# 45 "lexer.mll" - ( EXCLAM ) -# 1033 "lexer.ml" - - | 8 -> -# 46 "lexer.mll" - ( AT ) -# 1038 "lexer.ml" - - | 9 -> -# 47 "lexer.mll" - ( COLON_EQ ) -# 1043 "lexer.ml" - - | 10 -> -# 48 "lexer.mll" - ( SINGLE_ARROW ) -# 1048 "lexer.ml" - - | 11 -> -# 49 "lexer.mll" - ( DOUBLE_ARROW ) -# 1053 "lexer.ml" - - | 12 -> -# 51 "lexer.mll" - ( HASH_LPAREN ) -# 1058 "lexer.ml" - - | 13 -> -# 52 "lexer.mll" - ( LPAREN ) -# 1063 "lexer.ml" - - | 14 -> -# 53 "lexer.mll" - ( RPAREN ) -# 1068 "lexer.ml" - - | 15 -> -# 55 "lexer.mll" - ( HASH_LBRACK ) -# 1073 "lexer.ml" - - | 16 -> -# 56 "lexer.mll" - ( LBRACK ) -# 1078 "lexer.ml" - - | 17 -> -# 57 "lexer.mll" - ( RBRACK ) -# 1083 "lexer.ml" - - | 18 -> -# 59 "lexer.mll" - ( HASH_LBRACE ) -# 1088 "lexer.ml" - - | 19 -> -# 60 "lexer.mll" - ( LBRACE ) -# 1093 "lexer.ml" - - | 20 -> -# 61 "lexer.mll" - ( RBRACE ) -# 1098 "lexer.ml" - - | 21 -> -# 63 "lexer.mll" - ( PLUS ) -# 1103 "lexer.ml" - - | 22 -> -# 64 "lexer.mll" - ( ASTERISK ) -# 1108 "lexer.ml" - - | 23 -> -# 66 "lexer.mll" - ( MATCH ) -# 1113 "lexer.ml" - - | 24 -> -# 68 "lexer.mll" - ( IF ) -# 1118 "lexer.ml" - - | 25 -> -# 69 "lexer.mll" - ( THEN ) -# 1123 "lexer.ml" - - | 26 -> -# 70 "lexer.mll" - ( ELSE ) -# 1128 "lexer.ml" - - | 27 -> -# 72 "lexer.mll" - ( IFF ) -# 1133 "lexer.ml" - - | 28 -> -# 73 "lexer.mll" - ( DO ) -# 1138 "lexer.ml" - - | 29 -> -# 75 "lexer.mll" - ( FN ) -# 1143 "lexer.ml" - - | 30 -> -# 77 "lexer.mll" - ( IDENT (Lexing.lexeme lexbuf) ) -# 1148 "lexer.ml" - - | 31 -> -# 79 "lexer.mll" - ( raise (LexerError (Lexing.lexeme_start_p lexbuf, "invalid terminator after integer literal")) ) -# 1153 "lexer.ml" - - | 32 -> -# 80 "lexer.mll" - ( INT (Z.of_string (Lexing.lexeme lexbuf)) ) -# 1158 "lexer.ml" - - | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; - __ocaml_lex_token_rec lexbuf __ocaml_lex_state - -;; - -# 102 "lexer.mll" - - -# 1168 "lexer.ml" diff --git a/lexer.mll b/lexer.mll @@ -77,7 +77,7 @@ rule token = parse | ident_start ident_cont* { IDENT (Lexing.lexeme lexbuf) } | number invalid_number_terminator { raise (LexerError (Lexing.lexeme_start_p lexbuf, "invalid terminator after integer literal")) } -| number { INT (Z.of_string (Lexing.lexeme lexbuf)) } +| number { NAT (Z.of_string (Lexing.lexeme lexbuf)) } (* | "<" { LT } diff --git a/parser.ml b/parser.ml @@ -1,777 +0,0 @@ -type token = - | EOF - | SEMICOLON - | COLON - | COMMA - | DOT - | EXCLAM - | AT - | COLON_EQ - | SINGLE_ARROW - | DOUBLE_ARROW - | HASH_LPAREN - | LPAREN - | RPAREN - | HASH_LBRACK - | LBRACK - | RBRACK - | HASH_LBRACE - | LBRACE - | RBRACE - | PLUS - | ASTERISK - | MATCH - | IF - | THEN - | ELSE - | IFF - | DO - | FN - | IDENT of ( -# 16 "parser.mly" - Common.ident -# 34 "parser.ml" -) - | INT of ( -# 17 "parser.mly" - Z.t -# 39 "parser.ml" -) - -open Parsing -let _ = parse_error;; -# 2 "parser.mly" -open Concrete -# 46 "parser.ml" -let yytransl_const = [| - 0 (* EOF *); - 257 (* SEMICOLON *); - 258 (* COLON *); - 259 (* COMMA *); - 260 (* DOT *); - 261 (* EXCLAM *); - 262 (* AT *); - 263 (* COLON_EQ *); - 264 (* SINGLE_ARROW *); - 265 (* DOUBLE_ARROW *); - 266 (* HASH_LPAREN *); - 267 (* LPAREN *); - 268 (* RPAREN *); - 269 (* HASH_LBRACK *); - 270 (* LBRACK *); - 271 (* RBRACK *); - 272 (* HASH_LBRACE *); - 273 (* LBRACE *); - 274 (* RBRACE *); - 275 (* PLUS *); - 276 (* ASTERISK *); - 277 (* MATCH *); - 278 (* IF *); - 279 (* THEN *); - 280 (* ELSE *); - 281 (* IFF *); - 282 (* DO *); - 283 (* FN *); - 0|] - -let yytransl_block = [| - 284 (* IDENT *); - 285 (* INT *); - 0|] - -let yylhs = "\255\255\ -\001\000\001\000\001\000\002\000\002\000\002\000\002\000\002\000\ -\003\000\003\000\006\000\006\000\006\000\007\000\007\000\009\000\ -\009\000\010\000\010\000\010\000\011\000\011\000\011\000\011\000\ -\013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ -\013\000\004\000\004\000\004\000\017\000\017\000\005\000\005\000\ -\005\000\012\000\012\000\014\000\014\000\014\000\018\000\015\000\ -\015\000\015\000\019\000\008\000\020\000\020\000\020\000\016\000\ -\016\000\016\000\021\000\000\000" - -let yylen = "\002\000\ -\005\000\003\000\001\000\005\000\006\000\004\000\004\000\001\000\ -\003\000\001\000\003\000\003\000\001\000\003\000\001\000\003\000\ -\001\000\003\000\003\000\001\000\003\000\005\000\002\000\001\000\ -\001\000\001\000\003\000\003\000\003\000\001\000\003\000\002\000\ -\003\000\003\000\001\000\000\000\005\000\003\000\003\000\001\000\ -\000\000\002\000\000\000\003\000\001\000\000\000\003\000\003\000\ -\001\000\000\000\003\000\005\000\003\000\001\000\000\000\003\000\ -\001\000\000\000\003\000\002\000" - -let yydefred = "\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\025\000\026\000\060\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\017\000\000\000\024\000\000\000\ -\000\000\000\000\032\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\023\000\030\000\000\000\000\000\019\000\000\000\ -\028\000\033\000\000\000\000\000\027\000\000\000\000\000\029\000\ -\000\000\000\000\031\000\000\000\000\000\000\000\000\000\002\000\ -\000\000\000\000\009\000\011\000\000\000\012\000\016\000\000\000\ -\021\000\018\000\042\000\039\000\000\000\000\000\047\000\044\000\ -\051\000\048\000\059\000\056\000\000\000\006\000\007\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\052\000\000\000\001\000\ -\000\000\000\000\004\000\000\000\022\000\053\000\005\000\038\000\ -\000\000\034\000\000\000\037\000" - -let yydgoto = "\002\000\ -\014\000\015\000\016\000\098\000\026\000\017\000\018\000\019\000\ -\020\000\021\000\022\000\055\000\023\000\031\000\034\000\037\000\ -\099\000\032\000\035\000\086\000\038\000" - -let yysindex = "\015\000\ -\125\255\000\000\247\254\150\255\101\255\023\255\013\255\017\255\ -\125\255\125\255\150\255\000\000\000\000\000\000\024\255\029\255\ -\046\255\018\255\052\255\038\255\000\000\074\255\000\000\158\255\ -\059\255\056\255\000\000\057\255\050\255\043\255\058\255\071\255\ -\072\255\062\255\073\255\068\255\065\255\083\255\066\255\069\255\ -\080\255\125\255\125\255\075\255\150\255\150\255\150\255\150\255\ -\150\255\251\254\000\000\000\000\074\255\074\255\000\000\150\255\ -\000\000\000\000\125\255\150\255\000\000\023\255\150\255\000\000\ -\013\255\125\255\000\000\017\255\125\255\125\255\125\255\000\000\ -\093\255\150\255\000\000\000\000\038\255\000\000\000\000\125\255\ -\000\000\000\000\000\000\000\000\094\255\087\255\000\000\000\000\ -\000\000\000\000\000\000\000\000\081\255\000\000\000\000\125\255\ -\027\255\086\255\105\255\097\255\125\255\000\000\125\255\000\000\ -\125\255\125\255\000\000\150\255\000\000\000\000\000\000\000\000\ -\107\255\000\000\125\255\000\000" - -let yyrindex = "\000\000\ -\000\000\000\000\000\000\108\255\000\000\104\255\103\255\106\255\ -\000\000\000\000\114\255\000\000\000\000\000\000\003\000\165\000\ -\132\000\158\000\001\000\082\000\000\000\030\000\000\000\056\000\ -\012\255\000\000\000\000\000\000\113\255\000\000\000\000\112\255\ -\000\000\000\000\115\255\000\000\000\000\116\255\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\056\000\056\000\000\000\020\255\ -\000\000\000\000\127\255\007\255\000\000\104\255\000\000\000\000\ -\103\255\000\000\000\000\106\255\000\000\000\000\000\000\000\000\ -\000\000\119\255\000\000\000\000\108\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\128\255\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\126\255\000\000\127\255\000\000\000\000\000\000\ -\000\000\000\000\000\000\119\255\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000" - -let yygindex = "\000\000\ -\253\255\251\255\007\000\035\000\255\255\217\255\000\000\249\255\ -\098\000\097\000\246\255\236\255\000\000\086\000\084\000\083\000\ -\000\000\000\000\000\000\054\000\000\000" - -let yytablesize = 447 -let yytable = "\029\000\ -\030\000\028\000\003\000\039\000\040\000\080\000\076\000\041\000\ -\078\000\041\000\025\000\053\000\040\000\054\000\052\000\001\000\ -\052\000\025\000\024\000\040\000\041\000\041\000\081\000\040\000\ -\042\000\046\000\040\000\041\000\030\000\020\000\043\000\041\000\ -\082\000\083\000\041\000\105\000\047\000\073\000\072\000\052\000\ -\033\000\052\000\054\000\054\000\036\000\052\000\052\000\045\000\ -\106\000\044\000\042\000\075\000\059\000\085\000\084\000\043\000\ -\043\000\049\000\087\000\048\000\091\000\056\000\025\000\093\000\ -\094\000\095\000\025\000\057\000\058\000\089\000\060\000\062\000\ -\061\000\063\000\066\000\065\000\100\000\050\000\051\000\064\000\ -\097\000\015\000\067\000\004\000\005\000\068\000\006\000\071\000\ -\069\000\007\000\008\000\074\000\104\000\096\000\070\000\085\000\ -\101\000\111\000\102\000\112\000\113\000\012\000\013\000\107\000\ -\103\000\108\000\003\000\014\000\109\000\116\000\004\000\005\000\ -\027\000\006\000\097\000\115\000\007\000\008\000\046\000\041\000\ -\050\000\041\000\009\000\058\000\003\000\010\000\045\000\011\000\ -\012\000\013\000\003\000\010\000\049\000\057\000\004\000\005\000\ -\036\000\006\000\055\000\054\000\007\000\008\000\114\000\035\000\ -\077\000\079\000\009\000\088\000\090\000\010\000\092\000\011\000\ -\012\000\013\000\110\000\003\000\000\000\013\000\000\000\004\000\ -\005\000\000\000\006\000\000\000\008\000\007\000\008\000\004\000\ -\005\000\000\000\006\000\000\000\000\000\007\000\008\000\000\000\ -\000\000\012\000\013\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\012\000\013\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\030\000\030\000\030\000\030\000\030\000\000\000\030\000\ -\000\000\030\000\030\000\030\000\030\000\030\000\003\000\030\000\ -\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ -\030\000\000\000\030\000\000\000\030\000\030\000\020\000\020\000\ -\020\000\000\000\000\000\000\000\020\000\020\000\020\000\000\000\ -\000\000\020\000\000\000\000\000\020\000\000\000\000\000\020\000\ -\020\000\020\000\020\000\020\000\020\000\020\000\000\000\020\000\ -\043\000\043\000\043\000\000\000\000\000\000\000\043\000\043\000\ -\043\000\000\000\000\000\043\000\000\000\000\000\043\000\000\000\ -\000\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ -\000\000\043\000\015\000\015\000\015\000\000\000\000\000\000\000\ -\015\000\015\000\015\000\000\000\000\000\015\000\000\000\000\000\ -\015\000\000\000\000\000\015\000\015\000\000\000\015\000\015\000\ -\015\000\015\000\000\000\015\000\014\000\014\000\014\000\000\000\ -\000\000\000\000\014\000\014\000\014\000\000\000\000\000\014\000\ -\000\000\000\000\014\000\000\000\000\000\014\000\014\000\000\000\ -\014\000\014\000\014\000\014\000\010\000\014\000\010\000\000\000\ -\000\000\000\000\010\000\010\000\010\000\000\000\000\000\010\000\ -\000\000\000\000\010\000\000\000\000\000\010\000\000\000\000\000\ -\010\000\010\000\010\000\010\000\000\000\010\000\013\000\013\000\ -\013\000\000\000\000\000\000\000\013\000\008\000\013\000\008\000\ -\000\000\013\000\000\000\008\000\013\000\008\000\000\000\013\000\ -\008\000\000\000\013\000\013\000\013\000\013\000\008\000\013\000\ -\000\000\000\000\000\000\008\000\008\000\000\000\008\000" - -let yycheck = "\005\000\ -\000\000\005\000\000\000\009\000\010\000\011\001\046\000\001\001\ -\048\000\011\000\004\000\022\000\001\001\024\000\022\000\001\000\ -\024\000\011\000\028\001\008\001\001\001\015\001\028\001\012\001\ -\001\001\008\001\015\001\008\001\006\001\000\000\007\001\012\001\ -\053\000\054\000\015\001\009\001\019\001\043\000\042\000\047\000\ -\028\001\049\000\053\000\054\000\028\001\053\000\054\000\002\001\ -\022\001\021\001\001\001\045\000\003\001\059\000\056\000\000\000\ -\007\001\020\001\060\000\008\001\066\000\003\001\056\000\069\000\ -\070\000\071\000\060\000\012\001\012\001\063\000\028\001\001\001\ -\015\001\002\001\007\001\003\001\080\000\004\001\005\001\018\001\ -\074\000\000\000\018\001\010\001\011\001\003\001\013\001\008\001\ -\023\001\016\001\017\001\017\001\096\000\001\001\026\001\101\000\ -\003\001\103\000\012\001\105\000\106\000\028\001\029\001\018\001\ -\024\001\001\001\006\001\000\000\012\001\115\000\010\001\011\001\ -\012\001\013\001\108\000\009\001\016\001\017\001\015\001\012\001\ -\018\001\008\001\022\001\018\001\012\001\025\001\015\001\027\001\ -\028\001\029\001\006\001\000\000\018\001\018\001\010\001\011\001\ -\018\001\013\001\012\001\012\001\016\001\017\001\108\000\018\001\ -\047\000\049\000\022\001\062\000\065\000\025\001\068\000\027\001\ -\028\001\029\001\101\000\006\001\255\255\000\000\255\255\010\001\ -\011\001\255\255\013\001\255\255\000\000\016\001\017\001\010\001\ -\011\001\255\255\013\001\255\255\255\255\016\001\017\001\255\255\ -\255\255\028\001\029\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\028\001\029\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\001\001\002\001\003\001\004\001\005\001\255\255\007\001\ -\255\255\009\001\010\001\011\001\012\001\013\001\012\001\015\001\ -\016\001\017\001\018\001\019\001\020\001\021\001\022\001\023\001\ -\024\001\255\255\026\001\255\255\028\001\029\001\001\001\002\001\ -\003\001\255\255\255\255\255\255\007\001\008\001\009\001\255\255\ -\255\255\012\001\255\255\255\255\015\001\255\255\255\255\018\001\ -\019\001\020\001\021\001\022\001\023\001\024\001\255\255\026\001\ -\001\001\002\001\003\001\255\255\255\255\255\255\007\001\008\001\ -\009\001\255\255\255\255\012\001\255\255\255\255\015\001\255\255\ -\255\255\018\001\019\001\020\001\021\001\022\001\023\001\024\001\ -\255\255\026\001\001\001\002\001\003\001\255\255\255\255\255\255\ -\007\001\008\001\009\001\255\255\255\255\012\001\255\255\255\255\ -\015\001\255\255\255\255\018\001\019\001\255\255\021\001\022\001\ -\023\001\024\001\255\255\026\001\001\001\002\001\003\001\255\255\ -\255\255\255\255\007\001\008\001\009\001\255\255\255\255\012\001\ -\255\255\255\255\015\001\255\255\255\255\018\001\019\001\255\255\ -\021\001\022\001\023\001\024\001\001\001\026\001\003\001\255\255\ -\255\255\255\255\007\001\008\001\009\001\255\255\255\255\012\001\ -\255\255\255\255\015\001\255\255\255\255\018\001\255\255\255\255\ -\021\001\022\001\023\001\024\001\255\255\026\001\001\001\002\001\ -\003\001\255\255\255\255\255\255\007\001\001\001\009\001\003\001\ -\255\255\012\001\255\255\007\001\015\001\009\001\255\255\018\001\ -\012\001\255\255\021\001\022\001\023\001\024\001\018\001\026\001\ -\255\255\255\255\255\255\023\001\024\001\255\255\026\001" - -let yynames_const = "\ - EOF\000\ - SEMICOLON\000\ - COLON\000\ - COMMA\000\ - DOT\000\ - EXCLAM\000\ - AT\000\ - COLON_EQ\000\ - SINGLE_ARROW\000\ - DOUBLE_ARROW\000\ - HASH_LPAREN\000\ - LPAREN\000\ - RPAREN\000\ - HASH_LBRACK\000\ - LBRACK\000\ - RBRACK\000\ - HASH_LBRACE\000\ - LBRACE\000\ - RBRACE\000\ - PLUS\000\ - ASTERISK\000\ - MATCH\000\ - IF\000\ - THEN\000\ - ELSE\000\ - IFF\000\ - DO\000\ - FN\000\ - " - -let yynames_block = "\ - IDENT\000\ - INT\000\ - " - -let yyact = [| - (fun _ -> failwith "parser") -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'expr1) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'expr1) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : Concrete.expr) in - Obj.repr( -# 29 "parser.mly" - ( Let (_1, _3, _5) ) -# 326 "parser.ml" - : Concrete.expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr1) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : Concrete.expr) in - Obj.repr( -# 30 "parser.mly" - ( Seq (_1, _3) ) -# 334 "parser.ml" - : Concrete.expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr1) in - Obj.repr( -# 31 "parser.mly" - ( _1 ) -# 341 "parser.ml" - : Concrete.expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'expr2) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'cases) in - Obj.repr( -# 33 "parser.mly" - ( Match(_1, _4) ) -# 349 "parser.ml" - : 'expr1)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'expr1) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'expr1) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'expr1) in - Obj.repr( -# 34 "parser.mly" - ( If (_2, _4, _6) ) -# 358 "parser.ml" - : 'expr1)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'expr1) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'expr1) in - Obj.repr( -# 35 "parser.mly" - ( Iff (_2, _4) ) -# 366 "parser.ml" - : 'expr1)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'annot_list) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'expr1) in - Obj.repr( -# 36 "parser.mly" - ( Fn (_2, _4) ) -# 374 "parser.ml" - : 'expr1)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr2) in - Obj.repr( -# 37 "parser.mly" - ( _1 ) -# 381 "parser.ml" - : 'expr1)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr3) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr2) in - Obj.repr( -# 39 "parser.mly" - ( Annot(_1, _3) ) -# 389 "parser.ml" - : 'expr2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr3) in - Obj.repr( -# 40 "parser.mly" - ( _1 ) -# 396 "parser.ml" - : 'expr2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr4) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr3) in - Obj.repr( -# 42 "parser.mly" - ( FnType ([_1], _3) ) -# 404 "parser.ml" - : 'expr3)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tuple) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr3) in - Obj.repr( -# 43 "parser.mly" - ( FnType (_1, _3) ) -# 412 "parser.ml" - : 'expr3)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr4) in - Obj.repr( -# 44 "parser.mly" - ( _1 ) -# 419 "parser.ml" - : 'expr3)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr4) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr5) in - Obj.repr( -# 46 "parser.mly" - ( Add (_1, _3) ) -# 427 "parser.ml" - : 'expr4)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr5) in - Obj.repr( -# 47 "parser.mly" - ( _1 ) -# 434 "parser.ml" - : 'expr4)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr5) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr6) in - Obj.repr( -# 49 "parser.mly" - ( Mul (_1, _3) ) -# 442 "parser.ml" - : 'expr5)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr6) in - Obj.repr( -# 50 "parser.mly" - ( _1 ) -# 449 "parser.ml" - : 'expr5)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr7) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'expr7) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr7_apposition) in - Obj.repr( -# 52 "parser.mly" - ( App (_1, _2 :: _3) ) -# 458 "parser.ml" - : 'expr6)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : Common.ident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr7_apposition) in - Obj.repr( -# 53 "parser.mly" - ( Variant (_2, _3) ) -# 466 "parser.ml" - : 'expr6)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr7) in - Obj.repr( -# 54 "parser.mly" - ( _1 ) -# 473 "parser.ml" - : 'expr6)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr7) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : Common.ident) in - Obj.repr( -# 56 "parser.mly" - ( Access (_1, _3) ) -# 481 "parser.ml" - : 'expr7)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'expr7) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : Concrete.expr) in - Obj.repr( -# 57 "parser.mly" - ( Index (_1, _4) ) -# 489 "parser.ml" - : 'expr7)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'expr7) in - Obj.repr( -# 58 "parser.mly" - ( Deref _1 ) -# 496 "parser.ml" - : 'expr7)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr8) in - Obj.repr( -# 59 "parser.mly" - ( _1 ) -# 503 "parser.ml" - : 'expr7)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : Common.ident) in - Obj.repr( -# 61 "parser.mly" - ( if _1 = "_" then Underscore else Ident _1 ) -# 510 "parser.ml" - : 'expr8)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : Z.t) in - Obj.repr( -# 62 "parser.mly" - ( Int _1 ) -# 517 "parser.ml" - : 'expr8)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'variant_def_list) in - Obj.repr( -# 63 "parser.mly" - ( VariantType _2 ) -# 524 "parser.ml" - : 'expr8)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'annot_list) in - Obj.repr( -# 64 "parser.mly" - ( TupleType _2 ) -# 531 "parser.ml" - : 'expr8)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'field_def_list) in - Obj.repr( -# 65 "parser.mly" - ( RecordType _2 ) -# 538 "parser.ml" - : 'expr8)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tuple) in - Obj.repr( -# 66 "parser.mly" - ( Tuple _1 ) -# 545 "parser.ml" - : 'expr8)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'field_list) in - Obj.repr( -# 67 "parser.mly" - ( Record _2 ) -# 552 "parser.ml" - : 'expr8)) -; (fun __caml_parser_env -> - Obj.repr( -# 68 "parser.mly" - ( Unit ) -# 558 "parser.ml" - : 'expr8)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : Concrete.expr) in - Obj.repr( -# 69 "parser.mly" - ( _2 ) -# 565 "parser.ml" - : 'expr8)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'case) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'cases) in - Obj.repr( -# 72 "parser.mly" - ( _1 :: _3 ) -# 573 "parser.ml" - : 'cases)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'case) in - Obj.repr( -# 73 "parser.mly" - ( [_1] ) -# 580 "parser.ml" - : 'cases)) -; (fun __caml_parser_env -> - Obj.repr( -# 74 "parser.mly" - ( [] ) -# 586 "parser.ml" - : 'cases)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'expr2) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'expr1) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'expr1) in - Obj.repr( -# 76 "parser.mly" - ( Case {patt = _1; guard = Some (_3); body = _5} ) -# 595 "parser.ml" - : 'case)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr2) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr1) in - Obj.repr( -# 77 "parser.mly" - ( Case {patt = _1; guard = None; body = _3} ) -# 603 "parser.ml" - : 'case)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr2) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'annot_list) in - Obj.repr( -# 80 "parser.mly" - ( _1 :: _3 ) -# 611 "parser.ml" - : 'annot_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr2) in - Obj.repr( -# 81 "parser.mly" - ( [_1] ) -# 618 "parser.ml" - : 'annot_list)) -; (fun __caml_parser_env -> - Obj.repr( -# 82 "parser.mly" - ( [] ) -# 624 "parser.ml" - : 'annot_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'expr7) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'expr7_apposition) in - Obj.repr( -# 85 "parser.mly" - ( _1 :: _2 ) -# 632 "parser.ml" - : 'expr7_apposition)) -; (fun __caml_parser_env -> - Obj.repr( -# 86 "parser.mly" - ( [] ) -# 638 "parser.ml" - : 'expr7_apposition)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'variant_def) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'variant_def_list) in - Obj.repr( -# 89 "parser.mly" - ( _1 :: _3 ) -# 646 "parser.ml" - : 'variant_def_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'variant_def) in - Obj.repr( -# 90 "parser.mly" - ( [_1] ) -# 653 "parser.ml" - : 'variant_def_list)) -; (fun __caml_parser_env -> - Obj.repr( -# 91 "parser.mly" - ( [] ) -# 659 "parser.ml" - : 'variant_def_list)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : Common.ident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'annot_list) in - Obj.repr( -# 93 "parser.mly" - ( (_2, _3) ) -# 667 "parser.ml" - : 'variant_def)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'field_def) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'field_def_list) in - Obj.repr( -# 96 "parser.mly" - ( _1 :: _3 ) -# 675 "parser.ml" - : 'field_def_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'field_def) in - Obj.repr( -# 97 "parser.mly" - ( [_1] ) -# 682 "parser.ml" - : 'field_def_list)) -; (fun __caml_parser_env -> - Obj.repr( -# 98 "parser.mly" - ( [] ) -# 688 "parser.ml" - : 'field_def_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : Common.ident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr2) in - Obj.repr( -# 100 "parser.mly" - ( (_1, _3) ) -# 696 "parser.ml" - : 'field_def)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'expr1) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr1_list) in - Obj.repr( -# 103 "parser.mly" - ( _2 :: _4 ) -# 704 "parser.ml" - : 'tuple)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr1) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr1_list) in - Obj.repr( -# 105 "parser.mly" - ( _1 :: _3 ) -# 712 "parser.ml" - : 'expr1_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr1) in - Obj.repr( -# 106 "parser.mly" - ( [_1] ) -# 719 "parser.ml" - : 'expr1_list)) -; (fun __caml_parser_env -> - Obj.repr( -# 107 "parser.mly" - ( [] ) -# 725 "parser.ml" - : 'expr1_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'field) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'field_list) in - Obj.repr( -# 110 "parser.mly" - ( _1 :: _3 ) -# 733 "parser.ml" - : 'field_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'field) in - Obj.repr( -# 111 "parser.mly" - ( [_1] ) -# 740 "parser.ml" - : 'field_list)) -; (fun __caml_parser_env -> - Obj.repr( -# 112 "parser.mly" - ( [] ) -# 746 "parser.ml" - : 'field_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : Common.ident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr1) in - Obj.repr( -# 114 "parser.mly" - ( (_1, _3) ) -# 754 "parser.ml" - : 'field)) -(* Entry expr0 *) -; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) -|] -let yytables = - { Parsing.actions=yyact; - Parsing.transl_const=yytransl_const; - Parsing.transl_block=yytransl_block; - Parsing.lhs=yylhs; - Parsing.len=yylen; - Parsing.defred=yydefred; - Parsing.dgoto=yydgoto; - Parsing.sindex=yysindex; - Parsing.rindex=yyrindex; - Parsing.gindex=yygindex; - Parsing.tablesize=yytablesize; - Parsing.table=yytable; - Parsing.check=yycheck; - Parsing.error_function=parse_error; - Parsing.names_const=yynames_const; - Parsing.names_block=yynames_block } -let expr0 (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = - (Parsing.yyparse yytables 1 lexfun lexbuf : Concrete.expr) -;; diff --git a/parser.mly b/parser.mly @@ -14,7 +14,7 @@ open Concrete %token IFF DO %token FN %token <Common.ident> IDENT -%token <Z.t> INT +%token <Z.t> NAT %start expr0 %type <Concrete.expr> expr0 @@ -59,7 +59,7 @@ expr7: | expr8 { $1 } expr8: | IDENT { if $1 = "_" then Underscore else Ident $1 } - | INT { Int $1 } + | NAT { Nat $1 } | HASH_LBRACK variant_def_list RBRACK { VariantType $2 } | HASH_LPAREN annot_list RPAREN { TupleType $2 } | HASH_LBRACE field_def_list RBRACE { RecordType $2 } diff --git a/value.ml b/value.ml @@ -1,12 +1,21 @@ open Common +module C = Core type value = +| Case of value * environ * C.case list +| App of value * value list +| Fn of environ * C.fn +| FnType of environ * C.fn_type +| Nat of Z.t +| Arb of level | Type -| Fn of ident * closure -| Pi of ident * value * closure -| App of value * value -| Var of level (* TODO: rename this to "generic" or something? *) -| Nat -| Int of Z.t -and closure = environ * Core.term +| PtrType +| PtrOp of ptr_op +| NatType +| NatOp of nat_op and environ = value list +and ptr_op = +| PtrOpRead +| PtrOpWrite +and nat_op = +| NatOpAdd