commit 3642f1d0bec1614bc4fa1e9d6a146e3e784e2c05
parent 97aa184a7861ea69fbda3496105b39df8f9f39d3
Author: Robert Russell <robertrussell.72001@gmail.com>
Date: Thu, 14 Dec 2023 18:45:00 -0800
WIP elaboration
Diffstat:
| M | abstract.ml | | | 14 | +++++++------- |
| M | common.ml | | | 2 | ++ |
| M | concrete.ml | | | 2 | +- |
| M | conctoabs.ml | | | 16 | ++++++++++------ |
| M | core.ml | | | 19 | ++++++++++++++----- |
| A | elab2.ml | | | 140 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | eval.ml | | | 48 | ++++++++++++++++++++++++++++++++++++++++++++++++ |
| D | lexer.ml | | | 1167 | ------------------------------------------------------------------------------- |
| M | lexer.mll | | | 2 | +- |
| D | parser.ml | | | 777 | ------------------------------------------------------------------------------- |
| M | parser.mly | | | 4 | ++-- |
| M | value.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