
(* This generated code requires the following version of MenhirLib: *)

let () =
  MenhirLib.StaticVersion.require_20230608

module MenhirBasics = struct
  
  exception Error
  
  let _eRR =
    fun _s ->
      raise Error
  
  type token = 
    | WHILE
    | VOID
    | VECTOR
    | UPPER
    | UNREACHABLE
    | UNITVECTOR
    | TUPLE
    | TRUNCATE
    | TRANSPOSE
    | TRANSFORMEDPARAMETERSBLOCK
    | TRANSFORMEDDATABLOCK
    | TIMESASSIGN
    | TIMES
    | TILDE
    | TARGET
    | STRINGLITERAL of (
# 96 "src/frontend/parser.mly"
       (string)
# 35 "src/frontend/parser.ml"
  )
    | SIMPLEX
    | SEMICOLON
    | RPAREN
    | ROWVECTOR
    | RETURN
    | REJECT
    | REALNUMERAL of (
# 94 "src/frontend/parser.mly"
       (string)
# 46 "src/frontend/parser.ml"
  )
    | REAL
    | RBRACK
    | RBRACE
    | RABRACK
    | QMARK
    | PROFILE
    | PRINT
    | POSITIVEORDERED
    | PLUSASSIGN
    | PLUS
    | PARAMETERSBLOCK
    | ORDERED
    | OR
    | OFFSET
    | NEQUALS
    | MULTIPLIER
    | MODULO
    | MODELBLOCK
    | MINUSASSIGN
    | MINUS
    | MATRIX
    | LPAREN
    | LOWER
    | LEQ
    | LDIVIDE
    | LBRACK
    | LBRACE
    | LABRACK
    | INTNUMERAL of (
# 93 "src/frontend/parser.mly"
       (string)
# 79 "src/frontend/parser.ml"
  )
    | INT
    | INCREMENTLOGPROB
    | IN
    | IMAGNUMERAL of (
# 95 "src/frontend/parser.mly"
       (string)
# 87 "src/frontend/parser.ml"
  )
    | IF
    | IDIVIDE
    | IDENTIFIER of (
# 97 "src/frontend/parser.mly"
       (string)
# 94 "src/frontend/parser.ml"
  )
    | HAT
    | GETLP
    | GEQ
    | GENERATEDQUANTITIESBLOCK
    | FUNCTIONBLOCK
    | FOR
    | EQUALS
    | EOF
    | ELTTIMESASSIGN
    | ELTTIMES
    | ELTPOW
    | ELTDIVIDEASSIGN
    | ELTDIVIDE
    | ELSE
    | DOTNUMERAL of (
# 94 "src/frontend/parser.mly"
       (string)
# 113 "src/frontend/parser.ml"
  )
    | DIVIDEASSIGN
    | DIVIDE
    | DATABLOCK
    | COVMATRIX
    | CORRMATRIX
    | CONTINUE
    | COMPLEXVECTOR
    | COMPLEXROWVECTOR
    | COMPLEXMATRIX
    | COMPLEX
    | COMMA
    | COLON
    | CHOLESKYFACTORCOV
    | CHOLESKYFACTORCORR
    | BREAK
    | BAR
    | BANG
    | ASSIGN
    | ARROWASSIGN
    | ARRAY
    | AND
  
end

include MenhirBasics

# 3 "src/frontend/parser.mly"
  
open Core
open Middle
open Ast
open Debugging
open Preprocessor

(* Takes a sized_basic_type and a list of sizes and repeatedly applies then
   SArray constructor, taking sizes off the list *)
let reducearray (sbt, l) =
  List.fold_right l ~f:(fun z y -> SizedType.SArray (y, z)) ~init:sbt

let build_id id loc =
  grammar_logger ("identifier " ^ id) ;
  {name= id; id_loc= location_span_of_positions loc}

let reserved (name, loc, _) =
  raise
    (Errors.SyntaxError
       (Errors.Parsing
          ( "Expected a new identifier but found reserved keyword '" ^ name
            ^ "'.\n"
          , location_span_of_positions loc ) ) )

let reserved_decl (name, loc, is_type) =
  if is_type then
    raise
      (Errors.SyntaxError
         (Errors.Parsing
            ( "Found a type ('" ^ name
              ^ "') where an identifier was expected.\n\
                 All variables declared in a comma-separated list must be of \
                 the same type.\n"
            , location_span_of_positions loc ) ) )
  else reserved (name, loc, is_type)

let build_expr expr loc = {expr; emeta= {loc= location_span_of_positions loc}}
let rec iterate_n f x = function 0 -> x | n -> iterate_n f (f x) (n - 1)

let parse_tuple_slot ix_str loc =
  match int_of_string_opt (String.drop_prefix ix_str 1) with
  | None ->
      raise
        (Errors.SyntaxError
           (Errors.Parsing
              ( "Failed to parse integer from string '" ^ ix_str
                ^ "' in tuple index. \nThe index is likely too large.\n"
              , location_span_of_positions loc ) ) )
  | Some ix -> ix

(** Given a parsed expression, try to convert it to
    a valid assignable lvalue. Raises a syntax error on failure *)
let try_convert_to_lvalue expr loc =
  match Ast.lvalue_of_expr_opt expr with
  | Some l -> l
  | None ->
    raise
        (Errors.SyntaxError
           (Errors.Parsing
              ( "Expected an assignable value but found a general expression.\n"
              , location_span_of_positions loc ) ) )

let nest_unsized_array basic_type n =
  iterate_n (fun t -> UnsizedType.UArray t) basic_type n

let note_deprecated_array ?(unsized = false) (pos1, pos2) =
  let loc_span = location_span_of_positions (pos1, pos2) in
  Deprecation_removals.old_array_usages :=
    (loc_span, unsized) :: !Deprecation_removals.old_array_usages

# 212 "src/frontend/parser.ml"

module Tables = struct
  
  include MenhirBasics
  
  let token2terminal : token -> int =
    fun _tok ->
      match _tok with
      | AND ->
          95
      | ARRAY ->
          94
      | ARROWASSIGN ->
          93
      | ASSIGN ->
          92
      | BANG ->
          91
      | BAR ->
          90
      | BREAK ->
          89
      | CHOLESKYFACTORCORR ->
          88
      | CHOLESKYFACTORCOV ->
          87
      | COLON ->
          86
      | COMMA ->
          85
      | COMPLEX ->
          84
      | COMPLEXMATRIX ->
          83
      | COMPLEXROWVECTOR ->
          82
      | COMPLEXVECTOR ->
          81
      | CONTINUE ->
          80
      | CORRMATRIX ->
          79
      | COVMATRIX ->
          78
      | DATABLOCK ->
          77
      | DIVIDE ->
          76
      | DIVIDEASSIGN ->
          75
      | DOTNUMERAL _ ->
          74
      | ELSE ->
          73
      | ELTDIVIDE ->
          72
      | ELTDIVIDEASSIGN ->
          71
      | ELTPOW ->
          70
      | ELTTIMES ->
          69
      | ELTTIMESASSIGN ->
          68
      | EOF ->
          67
      | EQUALS ->
          66
      | FOR ->
          65
      | FUNCTIONBLOCK ->
          64
      | GENERATEDQUANTITIESBLOCK ->
          63
      | GEQ ->
          62
      | GETLP ->
          61
      | HAT ->
          60
      | IDENTIFIER _ ->
          59
      | IDIVIDE ->
          58
      | IF ->
          57
      | IMAGNUMERAL _ ->
          56
      | IN ->
          55
      | INCREMENTLOGPROB ->
          54
      | INT ->
          53
      | INTNUMERAL _ ->
          52
      | LABRACK ->
          51
      | LBRACE ->
          50
      | LBRACK ->
          49
      | LDIVIDE ->
          48
      | LEQ ->
          47
      | LOWER ->
          46
      | LPAREN ->
          45
      | MATRIX ->
          44
      | MINUS ->
          43
      | MINUSASSIGN ->
          42
      | MODELBLOCK ->
          41
      | MODULO ->
          40
      | MULTIPLIER ->
          39
      | NEQUALS ->
          38
      | OFFSET ->
          37
      | OR ->
          36
      | ORDERED ->
          35
      | PARAMETERSBLOCK ->
          34
      | PLUS ->
          33
      | PLUSASSIGN ->
          32
      | POSITIVEORDERED ->
          31
      | PRINT ->
          30
      | PROFILE ->
          29
      | QMARK ->
          28
      | RABRACK ->
          27
      | RBRACE ->
          26
      | RBRACK ->
          25
      | REAL ->
          24
      | REALNUMERAL _ ->
          23
      | REJECT ->
          22
      | RETURN ->
          21
      | ROWVECTOR ->
          20
      | RPAREN ->
          19
      | SEMICOLON ->
          18
      | SIMPLEX ->
          17
      | STRINGLITERAL _ ->
          16
      | TARGET ->
          15
      | TILDE ->
          14
      | TIMES ->
          13
      | TIMESASSIGN ->
          12
      | TRANSFORMEDDATABLOCK ->
          11
      | TRANSFORMEDPARAMETERSBLOCK ->
          10
      | TRANSPOSE ->
          9
      | TRUNCATE ->
          8
      | TUPLE ->
          7
      | UNITVECTOR ->
          6
      | UNREACHABLE ->
          5
      | UPPER ->
          4
      | VECTOR ->
          3
      | VOID ->
          2
      | WHILE ->
          1
  
  and error_terminal =
    0
  
  and token2value : token -> Obj.t =
    fun _tok ->
      match _tok with
      | AND ->
          Obj.repr ()
      | ARRAY ->
          Obj.repr ()
      | ARROWASSIGN ->
          Obj.repr ()
      | ASSIGN ->
          Obj.repr ()
      | BANG ->
          Obj.repr ()
      | BAR ->
          Obj.repr ()
      | BREAK ->
          Obj.repr ()
      | CHOLESKYFACTORCORR ->
          Obj.repr ()
      | CHOLESKYFACTORCOV ->
          Obj.repr ()
      | COLON ->
          Obj.repr ()
      | COMMA ->
          Obj.repr ()
      | COMPLEX ->
          Obj.repr ()
      | COMPLEXMATRIX ->
          Obj.repr ()
      | COMPLEXROWVECTOR ->
          Obj.repr ()
      | COMPLEXVECTOR ->
          Obj.repr ()
      | CONTINUE ->
          Obj.repr ()
      | CORRMATRIX ->
          Obj.repr ()
      | COVMATRIX ->
          Obj.repr ()
      | DATABLOCK ->
          Obj.repr ()
      | DIVIDE ->
          Obj.repr ()
      | DIVIDEASSIGN ->
          Obj.repr ()
      | DOTNUMERAL _v ->
          Obj.repr _v
      | ELSE ->
          Obj.repr ()
      | ELTDIVIDE ->
          Obj.repr ()
      | ELTDIVIDEASSIGN ->
          Obj.repr ()
      | ELTPOW ->
          Obj.repr ()
      | ELTTIMES ->
          Obj.repr ()
      | ELTTIMESASSIGN ->
          Obj.repr ()
      | EOF ->
          Obj.repr ()
      | EQUALS ->
          Obj.repr ()
      | FOR ->
          Obj.repr ()
      | FUNCTIONBLOCK ->
          Obj.repr ()
      | GENERATEDQUANTITIESBLOCK ->
          Obj.repr ()
      | GEQ ->
          Obj.repr ()
      | GETLP ->
          Obj.repr ()
      | HAT ->
          Obj.repr ()
      | IDENTIFIER _v ->
          Obj.repr _v
      | IDIVIDE ->
          Obj.repr ()
      | IF ->
          Obj.repr ()
      | IMAGNUMERAL _v ->
          Obj.repr _v
      | IN ->
          Obj.repr ()
      | INCREMENTLOGPROB ->
          Obj.repr ()
      | INT ->
          Obj.repr ()
      | INTNUMERAL _v ->
          Obj.repr _v
      | LABRACK ->
          Obj.repr ()
      | LBRACE ->
          Obj.repr ()
      | LBRACK ->
          Obj.repr ()
      | LDIVIDE ->
          Obj.repr ()
      | LEQ ->
          Obj.repr ()
      | LOWER ->
          Obj.repr ()
      | LPAREN ->
          Obj.repr ()
      | MATRIX ->
          Obj.repr ()
      | MINUS ->
          Obj.repr ()
      | MINUSASSIGN ->
          Obj.repr ()
      | MODELBLOCK ->
          Obj.repr ()
      | MODULO ->
          Obj.repr ()
      | MULTIPLIER ->
          Obj.repr ()
      | NEQUALS ->
          Obj.repr ()
      | OFFSET ->
          Obj.repr ()
      | OR ->
          Obj.repr ()
      | ORDERED ->
          Obj.repr ()
      | PARAMETERSBLOCK ->
          Obj.repr ()
      | PLUS ->
          Obj.repr ()
      | PLUSASSIGN ->
          Obj.repr ()
      | POSITIVEORDERED ->
          Obj.repr ()
      | PRINT ->
          Obj.repr ()
      | PROFILE ->
          Obj.repr ()
      | QMARK ->
          Obj.repr ()
      | RABRACK ->
          Obj.repr ()
      | RBRACE ->
          Obj.repr ()
      | RBRACK ->
          Obj.repr ()
      | REAL ->
          Obj.repr ()
      | REALNUMERAL _v ->
          Obj.repr _v
      | REJECT ->
          Obj.repr ()
      | RETURN ->
          Obj.repr ()
      | ROWVECTOR ->
          Obj.repr ()
      | RPAREN ->
          Obj.repr ()
      | SEMICOLON ->
          Obj.repr ()
      | SIMPLEX ->
          Obj.repr ()
      | STRINGLITERAL _v ->
          Obj.repr _v
      | TARGET ->
          Obj.repr ()
      | TILDE ->
          Obj.repr ()
      | TIMES ->
          Obj.repr ()
      | TIMESASSIGN ->
          Obj.repr ()
      | TRANSFORMEDDATABLOCK ->
          Obj.repr ()
      | TRANSFORMEDPARAMETERSBLOCK ->
          Obj.repr ()
      | TRANSPOSE ->
          Obj.repr ()
      | TRUNCATE ->
          Obj.repr ()
      | TUPLE ->
          Obj.repr ()
      | UNITVECTOR ->
          Obj.repr ()
      | UNREACHABLE ->
          Obj.repr ()
      | UPPER ->
          Obj.repr ()
      | VECTOR ->
          Obj.repr ()
      | VOID ->
          Obj.repr ()
      | WHILE ->
          Obj.repr ()
  
  and default_reduction =
    (16, "\000\000\000\243\000\031\000\000\000\000\000 \000\029\000!\000\028\000\"\000#\000$\000\030\000\000\000\000\000\000\000\129\000\000\0018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\000\000\000\186\001;\000\000\001:\0019\000\000\000\000\000\000\001<\000\244\000\000\000\209\000\214\000\218\000\241\000\227\000\237\000x\000\234\000\226\000\219\000\206\000\233\000\216\000\236\000\232\000\225\000\204\000\224\000\238\000\239\000\205\000\220\000\240\000\215\000\211\000\207\000w\000\235\000\202\000\210\000\208\000\203\000\231\000\230\000\213\000\221\000\222\000\223\000\217\000\229\000\228\000\212\000\242\000R\000Q\000\000\000\000\000\156\000\139\000\000\000\000\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\141\000\000\000,\000\000\000m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\248\000\000\000\000\000\000\000/\000\000\000\000\000*\000\000\000+\000\000\0003\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\014\000\000\000\000\000\000\000\000\000\000\001\015\001\012\000\000\000\000\000\000\000\000\000\000\001\016\001\011\000\000\000\000\000\000\001\017\000\000\000\000\000\000\001\018\000\000\000\000\000\000\000\000\000\000\001\019\001\r\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\254\000\000\000\000\000\252\000\000\000\006\000\005\000\253\000\000\0011\000\000\000\000\000\000\0012\000\000\000\000\000\000\0010\000\000\000\000\000\000\000\020\000\027\000\000\000\026\000\000\000\025\000\000\000\000\001\022\000\191\000\000\000\000\000\024\000\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\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\000\021\000\147\001?\000\000\000\000\000\000\000\200\000T\000S\000\000\000\000\001\006\000\000\000\000\000\000\000t\000\187\000\176\000\000\000G\000\000\000s\001>\000\000\000\000\000\000\000H\000\000\000\000\000\000\000U\000\000\000\000\000E\001\021\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001/\000\000\000\184\000\000\000\019\001=\000\000\000\000\000\000\000\r\000\000\000\000\000\011\000\000\000\000\000\012\000\000\000\000\000\015\000\000\000\000\000\016\000\000\000\000\000\014\000\000\000\000\000\t\000\000\000\000\000\n\001\020\000\000\000\000\000\000\000F\000\000\000\000\000\000\000\146\000\000\000\000\000\143\000\000\000\137\000\000\000\149\000\000\000\000\000\148\000\145\000p\000\000\000\000\000\246\000\000\000q\000\001\000\000\000\131\000\000\000\000\000\000\000\000\000o\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\199\000\000\0017\000\000\000\000\000\000\001\029\0016\000\000\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\000\000\001\030\000\000\001\027\000\000\000\000\000\000\001$\000\000\000\000\000\000\001#\000\000\000\000\000\000\000\000\000\000\000\000\001\031\000\000\000\000\001\026\000\000\000\000\000\000\001*\000\000\000\000\000\000\001)\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\001\"\000\000\001\028\000\000\000\000\000\000\000\000\000\000\000\000\001(\000\000\000\000\000\000\001'\000\000\000\000\000\000\000\000\000\000\000\000\001\004\000\000\000\000\001\002\000\000\000\b\000\007\001\003\000\000\0014\000\000\000\000\000\000\0015\000\000\000\000\000\000\0013\001\025\000\000\000\000\000\000\000\201\000\000\000\000\001\b\000\000\000\000\000\150\000\170\000v\000\188\000\178\000\000\000O\000\000\000u\000\000\000\000\000\000\000P\000\000\000\000\000\000\000M\000\000\000\133\001\024\000\000\000\000\000\000\000N\000\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\000K\000\000\000\000\000\000\000\000\000L\000\000\000\000\000\000\000I\001,\001+\000\135\001\023\000\000\000\000\000\000\000J\000\000\001-\000\180\000\000\000\000\000\000\000\000\000\189\000\174\000\000\000\000\000\000\000\000\001.\000\182\000\000\000\000\000\000\000\000\000\142\000\000\000\000\000\000\000\000\000r\000\000\000\193\000\164\000\166\000\158\000\162")
  
  and error =
    (96, "1\000\b\128\000\b\004\000\016\000x\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\004\000\000\000\000@\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\b\128\000\b\004\000\000\000x\000\000\000\000\000\000\004\000\000\000\000\000\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\000\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\016\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\000\000\000\000\000\000\000\000\000\000{\129^\1355JET\192G\253\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\129N\1355J\005T\192G\249\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\017\000\024\128\000\b\004\000\000\004x\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\b\128\000\b\004\000\000\000x\002{\129N\1355J\005T\192G\249\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000@\129'\006@\020j\212@ \128P\000\000\000\000\000\004\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000\000\000\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000\129\001\000@\020h\148\000 \000\016\000\129\001\000@\020h\148\000 \000\016\000\129\001@@\020h\148\000 \000\016\000\129\001\000@\020h\148\000 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000F0xJ\149\208*&\168\006!\000\129\017\000@\020h\148\000 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\016\024J\145\144*&\136\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000F0xJ\145\208*&\168\006!\000\129\001@@\020h\148\000 \006\016\000\129\001@@\020h\148\000 \004\016\000D\000XJ\145\144*&\136\004\001\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000D\000\024J\145\144*&\136\002\001\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\129\001\000@\020h\148\000 \000\016\000F0xJ\145\144*&\136\006!\000\000\000@\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001@@\020h\148\000 \006\016\000\000\000@\000\000\000\000\000\000\004\000\000D\000XJ\145\144*&\136\006\001\000\129\001@@\020h\148\000 \004\016\000D\000XJ\145\144*&\136\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000D\016xJ\145\144*&\136\004\001\000\129\017\000@\020h\148\000 \000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F0xJ\145\144*&\136\006!\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\016\024J\145\144*&\136\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F0xJ\145\144*&\136\006!\000F0xJ\145\144*&\136\006!\000D\016\024J\145\144*&\136\000\001Q\129/\134@\028n\212@ \248R\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000\024J\145\144*&\136\004\001\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000\024J\145\144*&\136\004\001\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\016\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\016\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\000\000\000\000\000\000\000\000\000\000\017\000\b\128\000\b\004\000\000\000x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\000x\002\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129!\000@\020h\148\000 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\129\129\000@\020h\148\000 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\129\000@\020h\148\000 \000\016\000\000\016\000\000\000\000\000\000\000\004\000\000D\016\024J\145\144*&\136\004\001\000\000\000\000\000\004\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000Q\129/\166@\028n\212@ \248R\000\000\000\000\000\004\000\000\000\000\000\000\000\129\129\000@\020h\148\000 \000\016\000\000\016\000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Q\129/\166@\028n\212@ \248R\000\000\000\000\000\004\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\016\024J\145\144*&\136\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\016\024J\145\144*&\136\000\001Q\129/\134@\028n\212@ \248R\000\000\000\000\000\004\000\000\000\000\000\000\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\016\024J\145\144*&\136\002\001Q\129/\134@\028n\212@ \248R\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\129N\1355J\005T\192G\249\194\000\000 \000\000\000\000\000\000\000\004\000{\129N\1355J\005T\192G\249\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\004\000{\129N\1355J\005T\192G\249\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\004\b\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\004\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\129N\1355J\005T\192G\249\194\000\000 \000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000@\000\000\000\004\b\000\129\001\000@\020h\148\000 \000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\0008\202\181\208*/\184\004\r\000\129\017\000@\020h\148\000 \000\016\000\000\016\000\000\000\000\000\000\000\000\000\000N 8\202\177\208*/\184\004\r\000\000\000\000\000\000\000\000\000\000\000\000\000F\000\024J\145\144*&\136\000\001\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\129\017\000@\020h\148\000 \000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\128 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \004\016\000\000\000\000\000\000\000\000\000\000\004\000\000\129\001@@\020h\148\000 \000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000XJ\145\144*&\136\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\0008\202\177\208*/\184\004\r\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D \024J\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\129N\1355J\005T\192G\249\194\000\000 \000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\016\024J\145\144*&\136\000\001Q\129/\134@\028n\212@ \248R\000\000\000\000\000\000\000\000\000\000\000\000s\129o\167P\028n\212Pc\249\210Q\129/\134@\028n\212@ \248R\000\000\000\000\000\000\000\000\000\000\000\000Q\129/\166@\028n\212@ \248R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F\0008J\145\144*&\136\004\001\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\004\000\017\000\b\128\000\b\004\000\000\004x\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\b\160\000\b\004\000\016\000x\002\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000 @\000\001\144\004\000\000\000\000\000\000\000\000 \000\000\000\000\0001\000\b\160\000\b\004\000\000\000x\002\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000 @\000\001\016\004\000\000\000\000\000\000\000\000 \000\000\000\000\000\019\000h\161\016\b\004\000\000\003y\130\000\000\000\000\000\000P\000\000\000\000\000\b\000\000\000\005\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\129\001\000@\020h\148\000 \000\016\000\129\001\000@\020h\148\000 \000\016\000\129\001\000@\020h\148\000 \000\016\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000D\000\016@\144\192(\006\168\004\000\000D\000\016@\144\128(\006\136\004\000\000D\000\016@\144\128(\006\136\004\000\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\004\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\129\001\000@\020h\148\000 \000\016\000D\000\016@\144\128(\006\136\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\019\000H\129\016\b\004\000\000\003y\130\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000{\129^\1355J\021T\192G\253\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000\024J\145\144*&\136\004\001\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000{\129^\1355J\021T\192G\253\194\b\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000\024J\145\144*&\136\004\001\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000{\129^\1355J\021T\192G\253\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\004\001\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\129\001\000@\020h\148\000 \000\016\000D\000XJ\145\144*&\136\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\019\000H\129\016\b\004\000\000\003y\130\000\000\016\000\000\000\000\000\000\000\004\000\019\000H\129\016\b\004\000\000\003y\130\000\000\016\000\000\000\000\000\000\000\004\000\019\000H\129\016\b\004\000\000\003y\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\004\000\019\000H\129\016\b\004\000\000\003y\130\000\000\000\000\000\000\000\000\000\000\000\000\019\000H\129\016\b\004\000\000\003y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\019\000H\129\016\b\004\000\000\003y\130\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\019\000H\129\016\b\004\000\000\003y\130\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\129N\1355J\005T\192G\249\194\000\000 \000\000\000\000\000\000\000\004\000{\129N\1355J\005T\192G\249\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\004\000{\129N\1355J\005T\192G\249\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\004\b\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\004\b\000\000\000\000\000\000\000\000\000\000\000\000{\129N\1355J\005T\192G\249\194\000\000 \000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000@\000\000\000\004\b\000\000 \000\000\000\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000h\161\016\b\004\000\000\003y\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\129N\1355J\005T\192G\249\194\000\000 \000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000 @\000\001\016\000\000\000\000\000\000\000\000\000 \000\000\000\000\000S\129o\167P\028n\212@#\249\210{\129N\1355J\005T\192G\249\194\000\000 \000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000S\129o\167P\028n\212@#\249\210{\129N\1355J\005T\192G\249\194\000\000 \000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000@\000\000\000\004\b\000\000 \000\000\000\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\129N\1355J\005T\192G\249\194\000\000 \000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000 @\000\001\016\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\019\000h\161\016\b\004\000\000\003y\130\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000@\000\001\016\000\000\000\000\000\000\000\000\000 \000\000\000\000\000S\129o\167P\028n\212@#\249\210\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\001\016\000\000\000\000\000\000\000\000\000 \000\000\000\000\000Q\129/\166@\028n\212@ \248R\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000 \000\000\000\000\000S\129o\167P\028n\212@#\249\210\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")
  
  and start =
    2
  
  and action =
    ((16, "\029t\000\000\000\000\000C\029t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000E\000!\000!\000\000\000\004\000\000\003J\000\011\029t\000M\029t\000\023\029t\000\000\000\186\000\000\000\000\000`\000\000\000\000\000\019\029t\000\144\000\000\000\000\002\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000t$P\000\000\000\000\029t\002\236\000\000\000\180\0020\000\142\029\226\000'\000\198\000\000\000\000\029\226\029\226\029\226\031>\029\226\000\000\000\000\000\148\000\232\000\000\000\000\029\226\006\006\029\226\000\000\000\250\000\000\020f\000\000\029\226\007.\029\226\007\194\029\226\bV\029\226\b\234\006\154\029\226\030<\021.\029\226\t~\029\226\n\018\029\226\n\166\029\226\011:\029\226\011\206\029\226\012b\029\226\012\246\029\226\r\138\029\226\002\236\029\226\014\030\029\226\014\178\029\226\015F\029\226\015\218\029\226\016n\029\226\017\002\029\226\017\150\029\226\018*\000\031\000\000\029\226\000\029\020\194\030\146\021\138\000\000\029\226\000\000\002\236\029\226\001\018\000\000\018\190\001\n\000\000\001\028\000\000\021\230\000\000\029\226\001b\000\000\019R\019\230\020\194\003\158\001.\029\226\020f\000\000\001@\003\158\001^\029\226\021\230\000\000\000\000\001l\029\226\023\194\029\226\022B\000\000\000\000\001v\029\226\022\158\000\000\001z\029\226\023\194\000\000\001~\029\226\024\030\029\226\024\030\000\000\000\000\001\144\029\226\001\200\000\000\001R\003\158\000P\003\158\000X\003\158\000\000\000\140\003\158\000\000\003\158\000\000\000\000\000\000\001\222\000\000\001\128\003\158\002\014\000\000\001\152\003\158\002\"\000\000\000'\029\226\002\236\000\000\000\000\029\226\000\000\020f\000\000\001\240\029\226\000\000\000\000\000\248\002(\000\000\029\226\001\028\022B\001\252\002B\002@\002\004\003\158\002\022\029\226\001*\002T\000\000\003\158\002\"\029\226\021.\002Z\000\000\002&\029\226\021\138\003\158\002*\0002\002\030\029\226\022\158\003\158\002j\000\000\002l\000\000\000\000\000\000\002\236\000H\002\236\000\000\000\000\000\000\000\244\002\236\000\000\000\000\029\226\022\158\000\000\000\000\000\000\002r\000\000\000\000\000\000\000\000\002\236\000H\002z\000\000\000\026\029\226\002r\000\000\000\000\002\132\000\000\000\000\004D\029\226\002\134\004\208\000\000\002\236\0002\002Z\029\226\002\146\000r\002X\031>\002\018\031h\002\140\000\000\023\n\000\000\002\156\000\000\000\000\005\\\029\226\020\194\000\000\029\226\021\138\000\000\029\226\021\230\000\000\029\226\022B\000\000\029\226\023f\000\000\029\226\023\194\000\000\029\226\024\030\000\000\029\226\024z\000\000\000\000\002\236\000H\002\158\000\000\029\226\023\n\003\158\000\000\000\003\003\158\000\000\003\158\000\000\002\146\000\000\002\236\002\148\000\000\000\000\000\000\001@$P\000\000\002T\000\000\000\000\031\172\000\000\0020\002x\031\172\002\176\000\000\000\000\003\230\002\132\029\132\000\021\000\003\0022 \002 \002 \002 \002 H\000\000 \002 n \002 \148\030\222 \240!\022!< \002!\152 \002!\190 \002!\228 \002\"@ \002\"f \002\"\140 \002\"\232 \002#\014 \002#4\002\154\002H \002\000\186\002J \002#\144\002\182\002T \002$8\002b \002#\182\002\226\002\136 \002$\136\002\142 \002#\220\003F\002\156 \002$\212\003&\000\000\0034\000\000\003\018\029\226\024z\000\000\000\000\003\030\029\226\024\214\000\000\003(\0020\003D\029\226\0252\000\000\000\021\003N\029\226\025\142\000\000\001l\000\000\003P\029\226\025\234\000\000\003T\029\226\026F\000\000\000\021\003V\029\226\024z\029\226\026\162\000\000\001~\000\003\000\000\003X\029\226\026\254\000\000\003\\\029\226\027Z\000\000\000\021\003^\029\226\027\182\000\000\000\021\003b\029\226\028\018\000\000\000\021\003n\029\226\024\214\029\226\028n\000\000\001l\000\000\003r\029\226\023f\029\226\028\202\003\164\000\000\003z\029\226\029&\000\000\0034\0020\001X\0020\001\142\0020\000\000\001\208\0020\000\000\0020\000\000\000\000\000\000\003\188\000\000\003:\0020\003\192\000\000\003>\0020\003\196\000\000\000\000\002\236\001\002\002\236\000\000\001\166\002\236\000\000\000&\003\244\000\000\000\000\000\000\000\000\000\000\003\224\000\000\000&\000\000\002\236\001\002\003\232\000\000\000&\000&\003\238\000\000\029\132\000\000\000\000\002\236\001\002\003\242\000\000\003\230\000\000\004\174\003\184\0020\002\236\000H\003\250\000\000\0020\002\236\000H\003\254\000\000\000\026\000\000\004\000\000\000\000\000\000\000\000\000\000\000\002\236\000H\004\002\000\000\003\244\000\000\000\000\000\194\003\200\029\132\003\250\000\000\000\000\000\r\003\204\0020\004\000\000\000\000\000\000#\003\210\003\158\004\006\000\000\000\164\003\216\0020\004\020\000\000\003\196\000\000\000\000\000\000\000\000\000\000"), (16, "\002=\002=\002=\006\158\nF\002=\002=\002=\004!\001\253\002\150\001\249\000\018\003\250\002=\000:\002=\002=\002\153\002=\002=\002=\002=\002=\n^\002=\001\130\000J\002=\002=\002=\002\153\002=\000\182\002=\002\209\0072\002\161\007N\003\021\000V\006\154\002=\002=\002=\007j\002\145\000^\002=\002=\002\145\002=\002=\002=\002\185\002=\002=\002\209\002=\003\229\002=\002\209\005&\003\233\002=\005n\002=\000~\005&\000>\002\154\002\154\006&\002=\000f\002\217\000\138\002=\002=\002=\002=\002=\002=\002=\001\006\002\153\002=\002=\002=\003\225\002=\000\146\004\234\002=\002\225\002\225\002\225\002\225\002\153\002\225\002\225\002\225\006\182\001V\002\161\004\234\006\218\002\177\002\225\001r\002\225\tR\002\225\002\225\002\225\002\225\001z\002\225\001\134\001\174\003\t\004\202\002\225\002\225\002\225\003\162\006\242\002\225\002\225\003\170\002\225\n.\002\225\006\250\002\225\001\178\007\026\002\225\002\177\002\225\004\017\006\226\000:\004.\001\206\nr\002\225\002\193\002\225\002\137\002\225\006\234\002\225\006\186\002\225\003\182\002\198\002\225\002\225\002\210\002\177\002\253\007\002\006\194\002\177\007\n\002\225\002\218\004b\007\018\002\225\002\225\002\225\002\225\002\225\002\225\002\225\002\225\002\225\003\209\002\225\002\225\002\225\003\021\003\021\003\021\003\021\002\225\003\021\003\021\003\021\003\253\003\021\003\021\003\021\003\021\002\238\003\021\003\021\003\021\003\006\003\021\003\021\003\021\003\021\003\022\003\021\004\222\003\021\0046\003\021\003\021\003\021\003\021\t:\003\021\003\021\003\021\004\001\003\021\003\021\003\021\003\021\003\021\003\030\003\021\003\021\0046\003\021\004\025\003\021\0032\003\021\006\154\0046\003\021\003N\003\021\003^\003\021\003n\003\021\b.\003\021\003\021\006V\003\021\003\021\003\021\003\138\003\021\003\249\003\021\003\146\003\154\003\021\003\021\b\218\003\210\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\218\003\021\003\021\003\021\001v\003\226\006\150\b\226\003\021\007\170\007\186\000\182\003\234\002\129\002\129\003\242\004\030\0042\003\246\tF\007\194\004\006\004F\007\210\004\n\004\026\001\138\007\230\004\"\002\021\004N\004R\004B\004V\007\238\004Z\001\142\002\129\007\254\004f\b\238\004r\004~\004\134\002\129\004\150\001\146\b\014\001\150\004\158\004\174\004\182\001\154\004j\005\002\001\162\b*\004n\005\030\001\166\004\130\005.\001\006\005:\001\170\005N\002\129\006v\004\146\005b\002\129\005j\005r\005z\005\130\005\146\006\014\001\182\006:\006F\002\129\b6\bF\004\170\bV\bj\b~\b\154\006c\006z\b\162\b\190\004\178\006\130\001\186\006\146\006\162\003\134\000\158\000\162\000\166\000\170\007&\000\174\000\178\000\182\001\214\007*\0076\007B\001\218\005Z\000\186\007F\000\190\004\002\003\217\000\194\000\198\000\202\007R\000\206\003\217\003\217\002\n\002J\000\210\000\214\000\218\007^\002\018\000\222\000\226\002R\000\230\002Z\000\234\002\026\000\238\007b\002B\000\242\007n\000\246\002b\001\226\007z\000\n\002j\007~\000\250\000R\000\254\007\138\001\002\002\"\001\006\001\234\001\n\002r\007\146\001\014\001\018\002z\000\022\007\154\002*\001\242\000\026\0022\001\022\007\174\007\190\002:\001\026\001\030\001\"\001&\001*\001.\0012\0016\002\178\002\138\001:\001>\001B\001v\000\030\003\002\007\198\001F\002\130\003\018\000\182\007\218\007\242\000\"\b\002\b\022\b:\003\246\bJ\b^\004\006\br\003\026\004\n\004\026\001\138\003*\b\134\002\029\b\166\b\186\004B\004V\b\194\b\210\001\142\t\n\t\018\t\026\t\"\t*\000&\000*\000.\0002\001\146\003.\001\150\002q\002q\tV\001\154\004j\tn\001\162\003F\004n\t\134\001\166\004\130\t\150\001\006\t\178\001\170\t\186\t\198\t\214\004\146\t\234\t\250\n\026\n\"\002q\n2\n:\nJ\001\182\nR\nb\002q\nj\nv\004\170\003J\003Z\003j\003\130\n~\n\135\000\000\000\000\004\178\000\000\001\186\000\145\000\000\003\134\000\145\000\145\000\145\000\000\002q\000\000\000\000\000\000\002q\000\000\000\000\000\000\000\000\000\000\000\145\000\145\000\145\000\000\006\142\000\000\000\145\000\145\000\000\000\000\000\145\000\000\000\145\000\000\000\145\000\000\000\145\000\145\000\000\005F\000\000\000\145\000\145\000\145\000\000\000\145\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\145\000\000\000\145\002\201\t\194\000\000\000\145\000\000\000\145\000\145\000\145\000\145\000\145\000\000\000\145\000\145\000\145\000\000\000\000\000\173\000\000\000\000\000\173\000\173\000\173\000\145\000\000\002\201\005R\000\000\000\000\000\000\000\145\000\145\002\201\000\145\000\173\000\173\000\173\000\000\000\000\000\000\000\173\000\173\000\000\000\000\000\173\000\000\000\173\000\000\000\173\000\000\000\173\000\173\000\000\000\000\002\201\000\173\000\173\000\173\002\201\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\000\000\173\000\000\000\173\000\000\000\000\000\000\000\173\000\000\000\173\000\173\000\173\000\173\000\173\000\000\000\173\000\173\000\173\000\000\000\000\001\181\000\000\000\000\005\158\001\181\001\181\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\173\000\000\000\173\001\181\001\181\001\181\000\000\000\000\000\000\005\170\001\181\000\000\000\000\001\181\000\000\001\181\000\000\001\181\000\000\005\182\001\181\000\000\000\000\000\000\001\181\001\181\001\254\000\000\001\181\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\001\181\000\000\001\181\000\000\000\000\000\000\001\181\000\000\005\194\001\181\001\181\005\206\001\181\000\000\002\174\005\218\001\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\000\000\000\000\000\000\000\000\005\230\005\242\000\145\001\181\000\000\000\000\000\145\000\145\000\000\000\000\000\000\000\145\000\145\000\000\000\000\000\000\000\000\000\000\000\145\000\145\000\145\000\145\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\000\000\145\000\000\000\145\000\000\000\000\000\145\000\000\001\194\000\000\000\145\000\145\000\145\000\000\000\145\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\145\000\000\000\145\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\145\000\000\000\145\000\000\000\145\000\000\000\145\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\145\000\145\001\181\001\181\000\000\000\145\000\000\001\181\001\181\000\000\000\145\000\000\000\000\000\000\001\181\001\181\001\181\001\181\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001\181\000\000\001\181\000\000\001\181\000\000\000\000\001\181\000\000\000\000\000\000\001\181\001\181\001\254\000\000\001\181\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\001\181\000\000\001\181\000\000\000\000\000\000\001\181\000\000\000\000\001\181\001\181\000\000\001\181\000\000\002\174\000\000\001\181\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\181\001\181\001a\001a\000\000\001\181\000\000\001a\001a\000\000\001\181\000\000\000\000\000\000\001a\001a\001a\001a\000\000\000\000\000\000\000\000\001a\000\000\000\000\001a\000\000\001a\000\000\001a\000\000\000\000\001a\000\000\000\000\000\000\001a\001\226\000\000\000\000\001a\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001a\000\000\000\000\000\000\001a\000\000\000\000\001a\001\242\000\000\001a\000\000\000\000\000\000\001a\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001a\001a\001q\001q\000\000\001a\000\000\001q\001q\000\000\001a\000\000\000\000\000\000\001q\001q\001q\001q\000\000\000\000\000\000\000\000\001q\000\000\000\000\001q\000\000\001q\000\000\001q\000\000\000\000\001q\000\000\000\000\000\000\001q\001q\000\000\000\000\001q\000\000\000\000\000\000\000\000\000\000\000\000\001q\000\000\001\234\000\000\001q\000\000\000\000\000\000\001q\000\000\000\000\001q\001\242\000\000\001q\000\000\000\000\000\000\001q\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001q\001q\001}\001}\000\000\001q\000\000\001}\001}\000\000\001q\000\000\000\000\000\000\001}\001}\001}\001}\000\000\000\000\000\000\000\000\001}\000\000\000\000\001}\000\000\001}\000\000\001}\000\000\000\000\001}\000\000\000\000\000\000\001}\001}\000\000\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\001}\000\000\001\234\000\000\001}\000\000\000\000\000\000\001}\000\000\000\000\001}\001\242\000\000\001}\000\000\000\000\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001}\001}\001\129\001\129\000\000\001}\000\000\001\129\001\129\000\000\001}\000\000\000\000\000\000\001\129\001\129\001\129\001\129\000\000\000\000\000\000\000\000\001\129\000\000\000\000\001\129\000\000\001\129\000\000\001\129\000\000\000\000\001\129\000\000\000\000\000\000\001\129\001\129\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000\000\001\234\000\000\001\129\000\000\000\000\000\000\001\129\000\000\000\000\001\129\001\242\000\000\001\129\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\129\001\129\001\218\001\157\000\000\001\129\000\000\001\157\001\157\000\000\001\129\000\000\000\000\000\000\001\157\001\157\001\157\001\157\000\000\000\000\000\000\000\000\002\018\000\000\000\000\001\157\000\000\001\157\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\001\157\001\226\000\000\000\000\001\157\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001\157\000\000\000\000\000\000\001\157\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\157\001\157\001\218\001Y\000\000\001\157\000\000\001Y\001Y\000\000\001\157\000\000\000\000\000\000\001Y\001Y\001Y\001Y\000\000\000\000\000\000\000\000\001Y\000\000\000\000\001Y\000\000\001Y\000\000\002\026\000\000\000\000\001Y\000\000\000\000\000\000\001Y\001\226\000\000\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001Y\000\000\000\000\000\000\001Y\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001Y\001Y\001m\001m\000\000\001Y\000\000\001m\001m\000\000\001Y\000\000\000\000\000\000\001m\001m\001m\001m\000\000\000\000\000\000\000\000\001m\000\000\000\000\001m\000\000\001m\000\000\001m\000\000\000\000\001m\000\000\000\000\000\000\001m\001\226\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001m\000\000\000\000\000\000\001m\000\000\000\000\001m\001\242\000\000\001m\000\000\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001m\001m\001i\001i\000\000\001m\000\000\001i\001i\000\000\001m\000\000\000\000\000\000\001i\001i\001i\001i\000\000\000\000\000\000\000\000\001i\000\000\000\000\001i\000\000\001i\000\000\001i\000\000\000\000\001i\000\000\000\000\000\000\001i\001i\000\000\000\000\001i\000\000\000\000\000\000\000\000\000\000\000\000\001i\000\000\001\234\000\000\001i\000\000\000\000\000\000\001i\000\000\000\000\001i\001\242\000\000\001i\000\000\000\000\000\000\001i\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001i\001i\001u\001u\000\000\001i\000\000\001u\001u\000\000\001i\000\000\000\000\000\000\001u\001u\001u\001u\000\000\000\000\000\000\000\000\001u\000\000\000\000\001u\000\000\001u\000\000\001u\000\000\000\000\001u\000\000\000\000\000\000\001u\001\226\000\000\000\000\001u\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001u\000\000\000\000\000\000\001u\000\000\000\000\001u\001\242\000\000\001u\000\000\000\000\000\000\001u\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001u\001u\001y\001y\000\000\001u\000\000\001y\001y\000\000\001u\000\000\000\000\000\000\001y\001y\001y\001y\000\000\000\000\000\000\000\000\001y\000\000\000\000\001y\000\000\001y\000\000\001y\000\000\000\000\001y\000\000\000\000\000\000\001y\001\226\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001y\000\000\000\000\000\000\001y\000\000\000\000\001y\001\242\000\000\001y\000\000\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001y\001y\001e\001e\000\000\001y\000\000\001e\001e\000\000\001y\000\000\000\000\000\000\001e\001e\001e\001e\000\000\000\000\000\000\000\000\001e\000\000\000\000\001e\000\000\001e\000\000\001e\000\000\000\000\001e\000\000\000\000\000\000\001e\001\226\000\000\000\000\001e\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\001e\001\242\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001e\001e\001\218\001]\000\000\001e\000\000\001]\001]\000\000\001e\000\000\000\000\000\000\001]\001]\001]\001]\000\000\000\000\000\000\000\000\001]\000\000\000\000\001]\000\000\001]\000\000\002\026\000\000\000\000\001]\000\000\000\000\000\000\001]\001\226\000\000\000\000\001]\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001]\000\000\000\000\000\000\001]\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001]\001]\001\218\001\133\000\000\001]\000\000\001\133\001\133\000\000\001]\000\000\000\000\000\000\001\133\001\133\002\n\001\133\000\000\000\000\000\000\000\000\002\018\000\000\000\000\001\133\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\000\000\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\133\001\133\001\218\001\145\000\000\001\133\000\000\001\145\001\145\000\000\002\130\000\000\000\000\000\000\001\145\001\145\002\n\001\145\000\000\000\000\000\000\000\000\002\018\000\000\000\000\001\145\000\000\001\145\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\000\000\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\002r\000\000\000\000\000\000\001\145\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\145\001\145\001\218\001\153\000\000\001\145\000\000\001\153\001\153\000\000\001\145\000\000\000\000\000\000\001\153\001\153\001\153\001\153\000\000\000\000\000\000\000\000\002\018\000\000\000\000\001\153\000\000\001\153\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\001\153\001\226\000\000\000\000\001\153\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001\153\000\000\000\000\000\000\001\153\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\153\001\153\001\218\001\149\000\000\001\153\000\000\001\149\001\149\000\000\001\153\000\000\000\000\000\000\001\149\001\149\001\149\001\149\000\000\000\000\000\000\000\000\002\018\000\000\000\000\001\149\000\000\001\149\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\001\149\001\226\000\000\000\000\001\149\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001\149\000\000\000\000\000\000\001\149\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\149\001\149\001\218\001\161\000\000\001\149\000\000\001\161\001\161\000\000\001\149\000\000\000\000\000\000\001\161\001\161\001\161\001\161\000\000\000\000\000\000\000\000\002\018\000\000\000\000\001\161\000\000\001\161\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\001\161\001\226\000\000\000\000\001\161\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\001\161\000\000\000\000\000\000\001\161\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\161\001\161\001\218\001\141\000\000\001\161\000\000\001\141\001\141\000\000\001\161\000\000\000\000\000\000\001\141\001\141\002\n\001\141\000\000\000\000\000\000\000\000\002\018\000\000\000\000\001\141\000\000\001\141\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\000\000\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\002r\000\000\000\000\000\000\001\141\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\141\001\141\001\218\001\137\000\000\001\141\000\000\001\137\001\137\000\000\001\141\000\000\000\000\000\000\001\137\001\137\002\n\001\137\000\000\000\000\000\000\000\000\002\018\000\000\000\000\001\137\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\000\000\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\137\001\137\001\218\001U\000\000\001\137\000\000\001U\001U\000\000\001\137\000\000\000\000\000\000\001U\001U\002\n\002J\000\000\000\000\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\000\000\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\000\000\0022\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001U\001U\001\165\001\165\000\000\001U\000\000\001\165\001\165\000\000\002\130\000\000\000\000\000\000\001\165\001\165\001\165\001\165\000\000\000\000\000\000\000\000\001\165\000\000\000\000\001\165\000\000\001\165\000\000\001\165\000\000\000\000\001\165\000\000\000\000\000\000\001\165\001\165\000\000\000\000\001\165\000\000\000\000\000\000\000\000\000\000\000\000\001\165\000\000\001\234\000\000\001\165\000\000\000\000\000\000\001\165\000\000\000\000\001\165\001\242\000\000\001\165\000\000\000\000\000\000\001\165\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\165\001\165\001\169\001\169\000\000\001\165\000\000\001\169\001\169\000\000\001\165\000\000\000\000\000\000\001\169\001\169\001\169\001\169\000\000\000\000\000\000\000\000\001\169\000\000\000\000\001\169\000\000\001\169\000\000\001\169\000\000\000\000\001\169\000\000\000\000\000\000\001\169\001\169\000\000\000\000\001\169\000\000\000\000\000\000\000\000\000\000\000\000\001\169\000\000\001\234\000\000\001\169\000\000\000\000\000\000\001\169\000\000\000\000\001\169\001\242\000\000\001\169\000\000\000\000\000\000\001\169\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\169\001\169\001\173\001\173\000\000\001\169\000\000\001\173\001\173\000\000\001\169\000\000\000\000\000\000\001\173\001\173\001\173\001\173\000\000\000\000\000\000\000\000\001\173\000\000\000\000\001\173\000\000\001\173\000\000\001\173\000\000\000\000\001\173\000\000\000\000\000\000\001\173\001\173\000\000\000\000\001\173\000\000\000\000\000\000\000\000\000\000\000\000\001\173\000\000\001\234\000\000\001\173\000\000\000\000\000\000\001\173\000\000\000\000\001\173\001\242\000\000\001\173\001\214\000\000\000\000\001\173\001\218\000\000\000\000\000\000\000\000\004\022\003\217\000\000\001\173\001\173\000\000\000\000\003\014\001\173\002\n\002J\000\000\000\000\001\173\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\000\000\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\005\166\002\254\002z\000\000\000\000\002*\001\242\001\233\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\002\178\002\026\000\000\000\000\002B\002\190\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\002r\001\214\000\000\000\000\002z\001\218\000\000\002*\001\242\000\000\0022\004z\000\000\000\000\002:\000\000\000\000\001\241\000\000\002\n\002J\000\000\000\000\001\233\002\166\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\002\130\000\000\002B\000\000\000\000\000\000\002b\001\226\000\000\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\005\178\004\142\002z\000\000\000\000\002*\001\242\001\245\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\001\241\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\005\190\002\226\002z\000\000\000\000\002*\001\242\003&\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\001\245\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\005\202\002\245\002z\000\000\000\000\002*\001\242\003B\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\002\230\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\002\157\004\166\002z\000\000\000\000\002*\001\242\003V\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\002\245\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\001\234\000\000\002r\001\214\000\000\000\000\002z\001\218\000\000\002*\001\242\000\000\0022\006\026\000\000\000\000\002:\000\000\000\000\002}\000\000\002\n\002J\000\000\000\000\002\157\006\018\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\002\130\000\000\002B\000\000\000\000\000\000\002b\001\226\000\000\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\005\214\000\000\002z\000\000\000\000\002*\001\242\002\169\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\002}\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\005\226\000\000\002z\000\000\000\000\002*\001\242\003f\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\b\174\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\005\238\000\000\002z\000\000\000\000\002*\001\242\003~\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\003:\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\005\250\000\000\002z\000\000\000\000\002*\001\242\007\162\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\003v\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\007\182\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\b\030\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\007\206\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\b\142\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\007\226\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\007\250\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\b\n\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\b&\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\bB\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\bR\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\bf\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\bz\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\b\150\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\002\173\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\000\000\000\002B\000\000\000\000\000\000\002b\001\226\002\130\000\000\002j\000\000\000\000\000\000\001\214\000\000\000\000\002\"\001\218\001\234\000\000\002r\000\000\000\000\000\000\002z\000\000\000\000\002*\001\242\b\202\0022\002\n\002J\000\000\002:\000\000\000\000\002\018\000\000\000\000\002R\000\000\002Z\000\000\002\026\000\006\000\n\002B\000\000\000\000\000\014\002b\001\226\002\130\006\150\002j\000\000\007\170\007\186\000\000\000\000\000\000\002\"\000\022\001\234\000\000\002r\000\026\007\194\t.\002z\007\210\000\000\002*\001\242\007\230\0022\002\r\000\000\000\000\002:\000\000\007\238\000\000\000\000\000\000\007\254\000\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\014\000\"\000\000\000\000\002\130\000\000\000\000\000\000\000\000\b*\000\000\000\182\000\000\000\000\000\000\002\005\000\000\000\000\001~\004\"\000\000\004\014\002-\000\000\000\000\000\000\001\138\000\000\001\225\000&\000*\000.\0002\000\000\b6\bF\001\142\bV\bj\b~\b\154\000\000\0006\b\162\b\190\000\000\001\146\000\000\001\150\000\000\003\134\000\000\001\154\001\158\000\000\001\162\000\182\000\000\000\000\001\166\000\000\000\000\001\006\001~\001\170\000\000\000\000\000\000\000\000\000\000\000\000\001\138\000\000\001\229\000\000\000\000\000\000\001\182\000\000\000\000\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\001\225\002\002\000\000\001\146\000\000\001\150\001\186\000\000\000\000\001\154\001\158\000\182\001\162\000\000\000\000\000\000\001\166\000\000\001~\001\006\000\000\001\170\000\000\000\000\000\000\000\000\001\138\000\000\001\237\000\000\000\000\000\000\000\000\000\000\001\182\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\229\001\146\000\000\001\150\000\000\001\t\001\186\001\154\001\158\001\t\001\162\000\000\000\000\000\000\001\166\000\000\000\000\001\006\000\000\001\170\000\000\000\000\000\000\001\t\000\000\000\000\000\000\000\000\000\000\001\t\000\000\000\000\001\182\000\000\000\000\000\000\001\t\000\000\000\000\001\t\000\000\000\000\000\000\001\237\001\t\001\254\000\000\000\000\000\000\001\186\000\000\000\000\000\182\000\000\001\t\000\000\001\t\000\000\000\000\001~\000\000\000\000\000\000\000\000\000\000\001\t\001\t\001\138\001\t\002-\002\174\000\000\001\t\000\182\000\000\000\000\000\000\001\142\000\000\000\000\001~\001\t\000\000\000\000\000\000\000\000\000\000\001\146\001\138\001\150\002y\000\000\000\000\001\154\001\158\000\000\001\162\000\000\001\142\000\000\001\166\000\006\000\n\001\006\000\000\001\170\000\014\000\000\001\146\000\000\001\150\000\000\000\000\000\000\001\154\001\158\000\000\001\162\001\182\000\022\000\000\001\166\000\000\000\026\001\006\002\005\001\170\000\000\000\000\002y\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\001\182\000\000\000\000\000\000\000\030\000\000\000\000\000\000\000\000\000\000\000\000\000\182\000\000\000\"\000\000\000\000\000\000\001\186\001~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\002\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\166\000\000\000\000\000\000\000\000\000&\000*\000.\0002\000\000\006\170\006\182\001\150\000\000\000\000\000\249\001\154\001\158\0006\001\162\000\000\000\000\000\000\001\166\000\000\000\000\001\006\000\000\001\170\000\249\006\182\000\000\000\000\000\000\000\241\000\249\000\000\000\000\000\000\000\000\000\000\001\182\000\249\000\000\000\000\000\249\000\000\000\000\000\241\006\182\000\249\000\000\000\000\000\245\000\241\000\000\000\000\000\000\006\174\000\000\000\249\000\241\006\186\000\000\000\241\000\000\000\000\000\245\000\000\000\241\000\000\000\249\006\194\000\245\000\249\000\000\000\000\000\000\000\249\000\241\000\245\006\186\000\000\000\245\000\000\000\000\000\000\000\249\000\245\000\000\000\241\006\194\000\000\000\241\000\000\006\182\000\000\000\241\000\245\000\253\006\186\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\000\000\245\006\194\000\000\000\245\000\253\006\182\000\000\000\245\000\000\001\001\000\253\000\000\000\000\000\000\000\000\000\000\000\245\000\253\000\000\000\000\000\253\000\000\000\000\001\001\006\182\000\253\000\000\000\000\006\218\001\001\000\000\000\000\000\000\000\000\000\000\000\253\001\001\006\186\000\000\001\001\000\000\000\000\003\017\000\000\001\001\000\000\000\253\006\194\006\242\000\253\000\000\000\000\000\000\000\253\001\001\006\250\006\186\000\000\007\026\000\000\000\000\000\000\000\253\006\226\000\000\001\001\006\194\000\000\001\001\000\000\006\182\000\000\001\001\006\234\000\213\006\186\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\007\002\006\194\000\000\007\n\000\213\006\182\000\000\007\018\000\000\000\229\000\213\000\000\000\000\000\000\000\000\000\000\007\"\000\213\000\000\000\000\000\213\000\000\000\000\000\229\006\182\006\226\000\000\000\000\000\221\000\229\000\000\000\000\000\000\000\000\000\000\006\234\000\229\006\186\000\000\000\229\000\000\000\000\000\221\000\000\000\229\000\000\000\213\006\194\000\221\000\213\000\000\000\000\000\000\000\213\000\229\000\221\006\186\000\000\000\221\000\000\000\000\000\000\000\213\000\221\000\000\000\229\006\194\000\000\000\229\000\000\006\182\000\000\000\229\000\221\006\218\006\186\000\000\000\000\000\000\000\000\000\000\000\229\000\000\000\000\000\221\006\194\000\000\000\221\000\205\006\182\000\000\000\221\000\000\000\225\000\205\000\000\000\000\000\000\000\000\000\000\000\221\006\250\000\000\000\000\000\205\000\000\000\000\000\225\006\182\006\226\000\000\000\000\000\233\000\225\000\000\000\000\000\000\000\000\000\000\006\234\000\225\006\186\000\000\000\225\000\000\000\000\000\233\000\000\006\226\000\000\007\002\006\194\000\233\007\n\000\000\000\000\000\000\007\018\006\234\000\233\006\186\000\000\000\233\000\000\000\000\000\000\000\205\006\226\000\000\000\225\006\194\000\000\000\225\000\000\006\182\000\000\000\225\006\234\000\237\006\186\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\233\006\194\000\000\000\233\000\237\006\182\000\000\000\233\000\000\000\217\000\237\000\000\000\000\000\000\000\000\000\000\000\233\000\237\000\000\000\000\000\237\000\000\000\000\000\217\006\182\006\226\000\000\000\000\006\218\000\217\000\000\000\000\000\000\000\000\000\000\006\234\000\217\006\186\000\000\000\217\000\000\000\000\000\209\000\000\006\226\000\000\000\237\006\194\000\209\000\237\000\000\000\000\000\000\000\237\006\234\006\250\006\186\000\000\000\209\000\000\000\000\000\000\000\237\006\226\000\000\000\217\006\194\000\000\000\217\000\000\006\182\000\000\000\217\006\234\006\218\006\186\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\007\002\006\194\000\000\007\n\002a\006\182\000\000\007\018\000\000\006\218\006\242\000\000\000\000\000\000\000\000\000\000\000\209\006\250\000\000\000\000\007\026\000\000\000\000\002e\006\182\006\226\000\000\000\000\006\218\006\242\000\000\000\000\000\000\000\000\000\000\006\234\006\250\006\186\000\000\007\026\000\000\000\000\003\r\000\000\006\226\000\000\007\002\006\194\006\242\007\n\000\000\000\000\000\000\007\018\006\234\006\250\006\186\000\000\007\026\000\000\000\000\000\000\007>\006\226\000\000\007\002\006\194\000\000\007\n\000\000\006\182\000\000\007\018\006\234\006\218\006\186\002i\000\000\000\000\000\000\002i\007Z\000\000\000\000\007\002\006\194\000\000\007\n\002Y\000\000\000\000\007\018\002%\002i\006\242\000\000\000\000\002i\000\000\000\000\007v\006\250\000\000\000\000\007\026\000\000\000\000\000\000\000\000\006\226\006\182\000\000\000\000\000\000\006\218\000\000\000\000\002i\000\000\006\234\000\000\006\186\000\000\000\000\000\000\000\000\002i\000\000\002]\000\000\007\002\006\194\000\000\007\n\006\242\000\000\000\000\007\018\000\000\000\000\000\000\006\250\000\000\000\000\007\026\000\000\000\000\000\000\006\182\006\226\001Z\000\000\006\218\000\000\002i\002i\002i\002i\000\000\006\234\000\000\006\186\000\000\000\000\000\000\000\000\003\005\002i\000\000\000\000\007\002\006\194\006\242\007\n\000\000\000\000\000\000\007\018\000\000\006\250\000\000\000\000\007\026\000\000\000\000\000\000\000\000\006\226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\234\000\000\006\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\002\006\194\000\000\007\n\000\000\000\000\000\000\007\018"))
  
  and lhs =
    (8, "\001\000YXWWVVUUUUUUUUUUUUUUUUUUUTTTTTTTTTSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRQPPPPOOOONNNNMMLLKJJJJJJJJJJJJJJJJJJJJJJJJJIHGFEDCBAA@@@@@@@??>>==<<;;::9987777777655554433221100//..--,,++**))((''&&%%$#\"!!! \031\031\031\031\030\030\029\028\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\027\026\026\025\025\024\024\023\023\023\023\023\023\022\022\022\022\022\022\021\021\020\020\019\019\018\018\018\018\018\018\018\018\018\017\017\016\015\014\014\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\012\012\011\n\t\b\b\b\007\007\007\006\006\005\004\004\004\004\003\002\002")
  
  and goto =
    ((16, "\000\n\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\000'\000p\000\000\000\000\000\000\000T\000\000\000&\000\000\000\020\000\000\001<\000\000\000\252\000\000\000\000\000\000\000\000\000\000\000\000\001L\000\000\000\000\000\000\001\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\001\016\003\144\000\000\000\000\000\180\000\000\000\031\000\000\000\000\000\000\000\000\000\128\001\160\002x\000p\002\250\000\000\000\000\000\000\000\000\000\000\000\000\003z\000\000\002@\000\000\000\000\000\000\000\000\000\000\003\142\000\000\003\162\000\000\003\172\000\000\003\186\000\000\000\000\002\218\003\206\000\000\003\210\000\000\003\214\000\000\003\220\000\000\003\226\000\000\003\230\000\000\003\234\000\000\003\236\000\000\003\240\000\000\004\004\000\000\004\b\000\000\004\012\000\000\004\018\000\000\004\024\000\000\004\028\000\000\004 \000\000\004\"\000\000\004&\000\000\000\000\000\000\002\248\000\000\000\000\004:\000\000\000\000\003\022\000\000\000\000\002J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0034\000\000\000\000\000\000\000\000\000\000\001\190\000\000\004>\000\000\000\000\000\000\003\138\000\000\004B\000\000\000\000\000\000\000\000\004H\000\000\004N\000\000\000\000\000\000\000\000\004R\000\000\000\000\000\000\004V\000\000\000\000\000\000\004X\000\000\004\\\000\000\000\000\000\000\000\000\003<\000\000\000\000\000\000\0008\000\000\001l\000\000\002P\000\000\000\000\002\212\000\000\001\028\000\000\000\000\000\000\000\000\000\000\000\000\002\216\000\000\000\000\000\000\002\230\000\000\000\000\000\000\004p\000\000\000\000\000\000\004t\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\234\000\000\000\000\000\020\000\000\002\176\000\000\000\000\000\000\000\005\000\000\004x\000\000\000\000\000\000\000\000\004~\000\000\001\214\000\000\000\178\000\000\004\132\000\000\002\026\000\000\000\000\000\000\000\000\000\000\000\000\001f\000\246\000!\000\000\000\000\000\000\000\000\001\218\000\000\001^\004\136\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\003f\001\246\000\000\000\000\000\t\003r\000\000\000\000\002P\000\000\000\000\000\000\000\000\002\166\000\000\000\000\000\000\000\000\000\202\000\000\002\188\000\000\000\011\000\000\003.\000\000\003H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\140\000\000\000\000\004\142\000\000\000\000\004\146\000\000\000\000\004\166\000\000\000\000\004\170\000\000\000\000\004\174\000\000\000\000\004\180\000\000\000\000\004\186\000\000\000\000\000\000\003\130\002>\000\000\000\000\004\190\000\000\0022\000\000\000\000\002\134\000\000\000J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\000\000\002&\000\000\000\031\000\000\002\226\000\000\000\000\000\000\001\152\000\000\001Z\001D\0009\000\000\000G\004\194\004\200\004\212\000\000\000\000\004\218\000\000\004\224\000\000\000\000\000\000\000\000\000\000\004\232\000\000\004\238\000\000\004\242\000\000\004\250\000\000\005\000\000\000\005\006\000\000\005\014\000\000\005\024\000\000\005 \000\000\000\000\000\000\005&\000\000\000\000\005,\000\000\000\000\000\000\0054\000\000\000\000\0058\000\000\000\000\000\000\005>\000\000\000\000\005F\000\000\000\000\000\000\005L\000\000\000\000\000\000\000\000\000\000\000\000\005.\000\000\000\000\000\000\000\000\005T\000\000\000\000\000\000\001\016\000\000\005d\000\000\000\000\003\022\000\000\005l\000\000\000\000\0034\000\000\000\000\005r\000\000\000\000\000\000\005t\000\000\000\000\005:\000\000\005z\000\000\005|\000\000\000\000\001\026\0009\000\000\000\000\005\128\000\000\000\000\000\000\005\130\000\000\000\000\006.\000\000\005\138\000\000\000\000\0066\000\000\005\154\000\000\000\000\006>\000\000\005\162\000\000\005\168\000\000\000\000\006F\000\000\000\000\005\170\001\004\005\176\000\000\000\000\000\000\000\000\005\178\000\000\000\000\000\000\000\026\000\000\000\210\000\000\001\156\000\000\000\000\002\140\000\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000\0034\000\000\000\000\000\000\003:\000\000\000\000\000\000\003>\002l\002\230\000\000\000\000\003\"\000\000\003\206\0018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\024\000\000\003|\003>\000\000\000\000\005\242\006\014\000\000\000\000\001x\000\000\000\000\003\152\003\154\000\000\000\000\000\000\000\000\006D\000\000\000b\003\188\006\"\000\000\000\000\000\186\003\192\006$\000\000\000\000\001\144\006\024\000\000\000\000\000\000\000\000\000\000\000\000\003\194\006(\000\000\000\000\000\000\000\000\000\000\001Z\000\000\002t\000\000\000\000\000\000\006P\000\000\001\002\000\000\000\000\000\000\002@\000\000\001h\000\000\000\000\003~\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"), (16, "\001\140\0010\002?\001\226\001c\0014\0011\000\"\002@\000&\000X\0015\001\140\0010\000\025\001D\001E\001\162\0011\000\020\0026\001\n\000\180\000\023\001\n\001\228\0028\001D\001E\000\031\000p\000'\001C\001d\001\163\002B\000\232\000Y\001\011\001\140\0010\001\015\001>\000\\\000\018\0011\000\234\001\182\001\179\0016\000p\000\244\0017\001P\001D\001E\002s\001\142\002\166\000\191\001:\002w\002x\001Q\002\128\001P\002\129\001\152\000\127\001\145\000p\001M\001\144\000p\001\149\001Q\001\154\001\155\001f\001\016\000r\001g\001\016\001\128\001V\001\129\000\240\000\028\000\127\000\028\001f\000\127\001P\001g\000\028\001\128\001\141\001\129\000\240\002;\002s\002>\001Q\000\028\001P\002w\002x\001\148\002\128\002\136\002\129\001V\0026\000\182\001Q\000\237\000\240\001f\0028\000\017\001g\000p\001\128\001V\001\129\000\240\000!\002A\002\131\000p\000\175\000\029\001g\001\019\001\128\002\132\002s\002>\000\190\000\127\000Z\002w\002x\0024\002\128\001P\002\129\000\127\001P\002D\000\241\002s\001?\002\130\001'\001Q\002w\002x\001Q\002\128\000\242\002\129\000\025\000\030\001V\001@\001X\001V\001\230\001\151\000\025\002\r\002\131\001g\002.\001\128\001g\000\027\001\128\002\132\002M\002>\001\140\0010\001P\000$\002_\002g\0011\002\148\000\232\002;\001\234\002>\001Q\002M\000Y\001D\001E\001P\000\234\002_\002g\001V\002\159\000\243\000S\002\144\002\131\001Q\002W\001=\001g\0026\001\128\002\132\002\145\002>\001V\0028\000\028\001>\002H\002\131\002>\001\147\0010\001g\002:\001\128\002\132\0011\002>\001\149\002n\001P\001C\001\137\0010\002\154\001D\001E\000\028\0011\000T\001Q\001>\000\000\0012\002h\000\028\002i\001D\001E\001V\002p\001B\000S\0019\002j\001f\002>\000\000\001g\0015\001\128\002i\001\129\000\240\000\237\000\240\001/\0010\000p\002j\002}\002>\0011\001P\000&\001?\000\000\000\189\001\136\0010\002\165\001D\001E\001Q\0011\001P\000\127\002;\001G\002>\000T\000\000\001V\001D\001E\001Q\000'\0016\001f\000\232\0017\001g\000U\001\128\001V\001\129\000\240\000r\001:\000\234\001f\001?\000r\001g\000\236\001\128\002M\001\129\000\240\001P\001\139\0010\002_\002g\001\131\000\000\0011\001N\0026\001Q\002\156\001P\001\156\002Z\0028\001D\001E\001>\001V\002\164\000s\001Q\001\155\002=\001f\000\177\002[\001g\000p\001\128\001V\001\129\000\240\000p\000\028\001\n\001f\000u\000r\001g\000\000\001\128\000\175\001\129\000\240\000\232\000\127\000\232\000&\000r\002\142\000\127\001\024\001P\000\232\000\234\000p\000\234\000\237\000\240\000\239\000\000\000\248\001Q\000\234\000\184\002P\002i\000\000\000\252\000'\001S\001V\0015\000\127\002j\001\246\002>\001f\000p\000\180\001g\001Z\001\128\000p\001\129\000\240\002;\000u\002>\000p\001\251\0026\001\016\000\174\0026\002S\000\127\0028\000\175\001\234\0028\000\127\0015\000\165\000p\001\160\002F\000\127\000\187\002J\0016\002Q\000\228\000\169\001\234\001\155\000S\002Z\000\168\000p\000p\002T\000\127\000\237\000\240\000\237\000\240\000\028\000\169\000\175\002a\001^\000\237\000\240\000p\000\230\000S\000\127\000\127\001K\0016\002Q\000\000\000\175\001`\000\246\000p\000S\000\000\000p\000S\002T\000\127\000p\000T\001b\002N\000S\000\175\000p\000\000\000S\000\175\002Z\000\127\000\000\002]\000\127\001b\002\161\002;\000\127\002>\002;\000T\002>\002l\000\127\001F\000S\000p\000S\000S\000\000\000p\000T\001I\002`\000T\000\175\000\000\002\163\001\130\000\179\000p\000T\002X\002c\000\127\000T\001B\002k\000\127\000x\000p\000\000\002Y\000[\000\000\000p\000\000\002]\000\127\000z\000\250\000\240\000p\000T\000|\000T\000T\002t\000\127\002y\002\133\000~\000p\000\127\000p\001B\000p\002|\001B\000p\000\127\000\130\000p\000\132\000p\000\134\000p\000p\000\136\000p\000\127\000\138\000\127\000\140\000\127\000\142\000\144\000\127\000\146\000p\000\127\000p\000\127\000p\000\127\000\127\000p\000\127\000\148\000p\000\150\000p\000\152\000p\000p\000\154\000p\000\127\000\156\000\127\000\158\000\127\000\160\000\162\000\127\000\164\000p\000\127\000p\000\127\000p\000\127\000\127\000p\000\127\000\171\000p\000\195\000p\000\201\000p\000p\000\206\000p\000\127\000\208\000\127\000\213\000\127\000\217\000\221\000\127\000\223\000p\000\127\000p\000\127\000p\000\127\000\127\000p\000\127\001\000\000p\001\005\000p\001\030\000p\000p\001#\000p\000\127\001)\000\127\001<\000\127\001i\001l\000\127\001o\000p\000\127\000p\000\127\000p\000\127\000\127\000p\000\127\001r\000p\001u\000p\001x\000p\002\005\001{\000p\000\127\001~\000\127\001\134\000\127\000p\000\000\000\127\000p\002^\000\127\000p\000\127\001\181\001\179\000p\001\180\001\179\000p\002Y\000p\001\234\001\173\001\179\000p\001\176\001\179\000p\001\178\001\179\000p\000\000\001\184\001\179\000p\001\186\001\179\001\188\001\179\000p\000\000\001\190\001\179\000p\001\192\001\179\000p\001\194\001\179\000p\000p\001\196\001\179\000p\000\000\000p\001\198\001\179\000p\001\232\001\200\001\179\000p\001\204\001\179\000p\001\207\001\179\000\127\000p\001\211\001\179\001\214\001\179\000\000\001\218\001\179\000p\001\237\001\221\001\179\000p\001\225\001\179\000p\000p\001\243\000\127\000p\000p\001\248\000p\000p\001\254\002\002\000\127\000p\002\007\002\t\000\127\002\016\002\020\000\127\000\127\000p\002\025\000\127\000\127\000p\000\127\000\127\000p\000p\002\030\000\127\000p\000p\002#\002^\002\023\002%\002+\000\127\002\028\002-\0022\000\127\002!\002Y\000\127\000\127\002(\002e\000\127\000\127\002\138\001?\001?\002~\001?\002\150\000\000\002Y\001\234\000\000\000\000\000\000\001\234\001>\002u\002z\001\234\002\134\000\000\000\000\001\234\000\000\000\000\002d\000\000\000\000\000\000\000\000\000\000\002\139\000\000\000\000\000\000\000\000\002\151"))
  
  and semantic_action =
    [|
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = id;
          MenhirLib.EngineTypes.startp = _startpos_id_;
          MenhirLib.EngineTypes.endp = _endpos_id_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = ut;
            MenhirLib.EngineTypes.startp = _startpos_ut_;
            MenhirLib.EngineTypes.endp = _endpos_ut_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = od;
              MenhirLib.EngineTypes.startp = _startpos_od_;
              MenhirLib.EngineTypes.endp = _endpos_od_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let id : (Ast.identifier) = Obj.magic id in
        let ut : (Middle.UnsizedType.t) = Obj.magic ut in
        let od : (unit option) = Obj.magic od in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_od_ in
        let _endpos = _endpos_id_ in
        let _v : (Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier) = 
# 294 "src/frontend/parser.mly"
    (  grammar_logger "arg_decl" ;
       match od with None -> (UnsizedType.AutoDiffable, ut, id) | _ -> (DataOnly, ut, id)  )
# 660 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = l;
            MenhirLib.EngineTypes.startp = _startpos_l_;
            MenhirLib.EngineTypes.endp = _endpos_l_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let l : (Ast.untyped_expression list) = Obj.magic l in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression list) = 
# 576 "src/frontend/parser.mly"
                 ( grammar_logger "array dims" ; l  )
# 706 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = dims;
            MenhirLib.EngineTypes.startp = _startpos_dims_;
            MenhirLib.EngineTypes.endp = _endpos_dims_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let dims : (Ast.untyped_expression list) = Obj.magic dims in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_dims_ in
        let _endpos = _endpos_ty_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 440 "src/frontend/parser.mly"
  ( grammar_logger "array_type" ;
    let (type_, trans) = ty in
    ((reducearray (type_, dims)), trans)
  )
# 743 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = dims;
            MenhirLib.EngineTypes.startp = _startpos_dims_;
            MenhirLib.EngineTypes.endp = _endpos_dims_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let dims : (Ast.untyped_expression list) = Obj.magic dims in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_dims_ in
        let _endpos = _endpos_ty_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 440 "src/frontend/parser.mly"
  ( grammar_logger "array_type" ;
    let (type_, trans) = ty in
    ((reducearray (type_, dims)), trans)
  )
# 780 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = dims;
            MenhirLib.EngineTypes.startp = _startpos_dims_;
            MenhirLib.EngineTypes.endp = _endpos_dims_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let dims : (Ast.untyped_expression list) = Obj.magic dims in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_dims_ in
        let _endpos = _endpos_ty_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 440 "src/frontend/parser.mly"
  ( grammar_logger "array_type" ;
    let (type_, trans) = ty in
    ((reducearray (type_, dims)), trans)
  )
# 817 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = dims;
            MenhirLib.EngineTypes.startp = _startpos_dims_;
            MenhirLib.EngineTypes.endp = _endpos_dims_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let dims : (Ast.untyped_expression list) = Obj.magic dims in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_dims_ in
        let _endpos = _endpos_ty_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 440 "src/frontend/parser.mly"
  ( grammar_logger "array_type" ;
    let (type_, trans) = ty in
    ((reducearray (type_, dims)), trans)
  )
# 854 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = l;
                MenhirLib.EngineTypes.startp = _startpos_l_;
                MenhirLib.EngineTypes.endp = _endpos_l_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let l : (Ast.untyped_expression) = Obj.magic l in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_l_ in
        let _endpos = _endpos__4_ in
        let _v =
          let op = 
# 802 "src/frontend/parser.mly"
    (  grammar_logger "assign_plain" ; Assign )
# 901 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 769 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 912 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = l;
                MenhirLib.EngineTypes.startp = _startpos_l_;
                MenhirLib.EngineTypes.endp = _endpos_l_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let l : (Ast.untyped_expression) = Obj.magic l in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_l_ in
        let _endpos = _endpos__4_ in
        let _v =
          let op = 
# 804 "src/frontend/parser.mly"
    ( grammar_logger "assign_arrow" ; ArrowAssign  )
# 963 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 769 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 974 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = l;
                MenhirLib.EngineTypes.startp = _startpos_l_;
                MenhirLib.EngineTypes.endp = _endpos_l_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let l : (Ast.untyped_expression) = Obj.magic l in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_l_ in
        let _endpos = _endpos__4_ in
        let _v =
          let op = 
# 806 "src/frontend/parser.mly"
    ( grammar_logger "assign_plus" ; OperatorAssign Plus )
# 1025 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 769 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1036 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = l;
                MenhirLib.EngineTypes.startp = _startpos_l_;
                MenhirLib.EngineTypes.endp = _endpos_l_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let l : (Ast.untyped_expression) = Obj.magic l in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_l_ in
        let _endpos = _endpos__4_ in
        let _v =
          let op = 
# 808 "src/frontend/parser.mly"
    ( grammar_logger "assign_minus" ; OperatorAssign Minus )
# 1087 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 769 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1098 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = l;
                MenhirLib.EngineTypes.startp = _startpos_l_;
                MenhirLib.EngineTypes.endp = _endpos_l_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let l : (Ast.untyped_expression) = Obj.magic l in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_l_ in
        let _endpos = _endpos__4_ in
        let _v =
          let op = 
# 810 "src/frontend/parser.mly"
    ( grammar_logger "assign_times"  ; OperatorAssign Times )
# 1149 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 769 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1160 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = l;
                MenhirLib.EngineTypes.startp = _startpos_l_;
                MenhirLib.EngineTypes.endp = _endpos_l_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let l : (Ast.untyped_expression) = Obj.magic l in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_l_ in
        let _endpos = _endpos__4_ in
        let _v =
          let op = 
# 812 "src/frontend/parser.mly"
    ( grammar_logger "assign_divide" ; OperatorAssign Divide )
# 1211 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 769 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1222 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = l;
                MenhirLib.EngineTypes.startp = _startpos_l_;
                MenhirLib.EngineTypes.endp = _endpos_l_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let l : (Ast.untyped_expression) = Obj.magic l in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_l_ in
        let _endpos = _endpos__4_ in
        let _v =
          let op = 
# 814 "src/frontend/parser.mly"
    ( grammar_logger "assign_elttimes"  ; OperatorAssign EltTimes )
# 1273 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 769 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1284 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = l;
                MenhirLib.EngineTypes.startp = _startpos_l_;
                MenhirLib.EngineTypes.endp = _endpos_l_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let l : (Ast.untyped_expression) = Obj.magic l in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_l_ in
        let _endpos = _endpos__4_ in
        let _v =
          let op = 
# 816 "src/frontend/parser.mly"
    ( grammar_logger "assign_eltdivide" ; OperatorAssign EltDivide  )
# 1335 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 769 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1346 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _4;
            MenhirLib.EngineTypes.startp = _startpos__4_;
            MenhirLib.EngineTypes.endp = _endpos__4_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = xs;
              MenhirLib.EngineTypes.startp = _startpos_xs_;
              MenhirLib.EngineTypes.endp = _endpos_xs_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _2;
                MenhirLib.EngineTypes.startp = _startpos__2_;
                MenhirLib.EngineTypes.endp = _endpos__2_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = id;
                  MenhirLib.EngineTypes.startp = _startpos_id_;
                  MenhirLib.EngineTypes.endp = _endpos_id_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let _4 : unit = Obj.magic _4 in
        let xs : (Ast.untyped_expression list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let id : (Ast.identifier) = Obj.magic id in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_id_ in
        let _endpos = _endpos__5_ in
        let _v =
          let args = 
# 229 "<standard.mly>"
    ( xs )
# 1404 "src/frontend/parser.ml"
           in
          (
# 774 "src/frontend/parser.mly"
    (  grammar_logger "funapp_statement" ; NRFunApp ((),id, args)  )
# 1409 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _4;
            MenhirLib.EngineTypes.startp = _startpos__4_;
            MenhirLib.EngineTypes.endp = _endpos__4_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = e;
              MenhirLib.EngineTypes.startp = _startpos_e_;
              MenhirLib.EngineTypes.endp = _endpos_e_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _2;
                MenhirLib.EngineTypes.startp = _startpos__2_;
                MenhirLib.EngineTypes.endp = _endpos__2_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__5_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 776 "src/frontend/parser.mly"
    (   grammar_logger "incrementlogprob_statement" ; IncrementLogProb e )
# 1469 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _8;
          MenhirLib.EngineTypes.startp = _startpos__8_;
          MenhirLib.EngineTypes.endp = _endpos__8_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = ot;
            MenhirLib.EngineTypes.startp = _startpos_ot_;
            MenhirLib.EngineTypes.endp = _endpos_ot_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _6;
              MenhirLib.EngineTypes.startp = _startpos__6_;
              MenhirLib.EngineTypes.endp = _endpos__6_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = xs;
                MenhirLib.EngineTypes.startp = _startpos_xs_;
                MenhirLib.EngineTypes.endp = _endpos_xs_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _4;
                  MenhirLib.EngineTypes.startp = _startpos__4_;
                  MenhirLib.EngineTypes.endp = _endpos__4_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = id;
                    MenhirLib.EngineTypes.startp = _startpos_id_;
                    MenhirLib.EngineTypes.endp = _endpos_id_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _;
                      MenhirLib.EngineTypes.semv = _2;
                      MenhirLib.EngineTypes.startp = _startpos__2_;
                      MenhirLib.EngineTypes.endp = _endpos__2_;
                      MenhirLib.EngineTypes.next = {
                        MenhirLib.EngineTypes.state = _menhir_s;
                        MenhirLib.EngineTypes.semv = e;
                        MenhirLib.EngineTypes.startp = _startpos_e_;
                        MenhirLib.EngineTypes.endp = _endpos_e_;
                        MenhirLib.EngineTypes.next = _menhir_stack;
                      };
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _8 : unit = Obj.magic _8 in
        let ot : (Ast.untyped_expression Ast.truncation option) = Obj.magic ot in
        let _6 : unit = Obj.magic _6 in
        let xs : (Ast.untyped_expression list) = Obj.magic xs in
        let _4 : unit = Obj.magic _4 in
        let id : (Ast.identifier) = Obj.magic id in
        let _2 : unit = Obj.magic _2 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos__8_ in
        let _v =
          let es = 
# 229 "<standard.mly>"
    ( xs )
# 1544 "src/frontend/parser.ml"
           in
          (
# 779 "src/frontend/parser.mly"
    (  grammar_logger "tilde_statement" ;
       let t = match ot with Some tt -> tt | None -> NoTruncate in
       Tilde {arg= e; distribution= id; args= es; truncation= t  }
    )
# 1552 "src/frontend/parser.ml"
           : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 784 "src/frontend/parser.mly"
    (   grammar_logger "targetpe_statement" ; TargetPE e )
# 1605 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _2;
          MenhirLib.EngineTypes.startp = _startpos__2_;
          MenhirLib.EngineTypes.endp = _endpos__2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__2_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 786 "src/frontend/parser.mly"
    (  grammar_logger "break_statement" ; Break )
# 1640 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _2;
          MenhirLib.EngineTypes.startp = _startpos__2_;
          MenhirLib.EngineTypes.endp = _endpos__2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__2_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 788 "src/frontend/parser.mly"
    (  grammar_logger "continue_statement" ; Continue )
# 1675 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _4;
            MenhirLib.EngineTypes.startp = _startpos__4_;
            MenhirLib.EngineTypes.endp = _endpos__4_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = l;
              MenhirLib.EngineTypes.startp = _startpos_l_;
              MenhirLib.EngineTypes.endp = _endpos_l_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _2;
                MenhirLib.EngineTypes.startp = _startpos__2_;
                MenhirLib.EngineTypes.endp = _endpos__2_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let _4 : unit = Obj.magic _4 in
        let l : (Ast.untyped_expression Ast.printable list) = Obj.magic l in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__5_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 790 "src/frontend/parser.mly"
    (  grammar_logger "print_statement" ; Print l )
# 1731 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _4;
            MenhirLib.EngineTypes.startp = _startpos__4_;
            MenhirLib.EngineTypes.endp = _endpos__4_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = l;
              MenhirLib.EngineTypes.startp = _startpos_l_;
              MenhirLib.EngineTypes.endp = _endpos_l_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _2;
                MenhirLib.EngineTypes.startp = _startpos__2_;
                MenhirLib.EngineTypes.endp = _endpos__2_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let _4 : unit = Obj.magic _4 in
        let l : (Ast.untyped_expression Ast.printable list) = Obj.magic l in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__5_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 792 "src/frontend/parser.mly"
    (  grammar_logger "reject_statement" ; Reject l  )
# 1787 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 794 "src/frontend/parser.mly"
    (  grammar_logger "return_statement" ; Return e )
# 1829 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _2;
          MenhirLib.EngineTypes.startp = _startpos__2_;
          MenhirLib.EngineTypes.endp = _endpos__2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__2_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 796 "src/frontend/parser.mly"
    (  grammar_logger "return_nothing_statement" ; ReturnVoid )
# 1864 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 798 "src/frontend/parser.mly"
    (  grammar_logger "skip" ; Skip )
# 1892 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.t) = 
# 319 "src/frontend/parser.mly"
    (  grammar_logger "basic_type INT" ; UnsizedType.UInt  )
# 1917 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.t) = 
# 321 "src/frontend/parser.mly"
    (  grammar_logger "basic_type REAL"  ; UnsizedType.UReal )
# 1942 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.t) = 
# 323 "src/frontend/parser.mly"
    ( grammar_logger "basic_type COMPLEX" ; UnsizedType.UComplex )
# 1967 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.t) = 
# 325 "src/frontend/parser.mly"
    (  grammar_logger "basic_type VECTOR" ; UnsizedType.UVector )
# 1992 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.t) = 
# 327 "src/frontend/parser.mly"
    (  grammar_logger "basic_type ROWVECTOR" ; UnsizedType.URowVector )
# 2017 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.t) = 
# 329 "src/frontend/parser.mly"
    (  grammar_logger "basic_type MATRIX" ; UnsizedType.UMatrix )
# 2042 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.t) = 
# 331 "src/frontend/parser.mly"
    (  grammar_logger "basic_type COMPLEXVECTOR" ; UnsizedType.UComplexVector )
# 2067 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.t) = 
# 333 "src/frontend/parser.mly"
    (  grammar_logger "basic_type COMPLEXROWVECTOR" ; UnsizedType.UComplexRowVector )
# 2092 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.t) = 
# 335 "src/frontend/parser.mly"
    (  grammar_logger "basic_type COMPLEXMATRIX" ; UnsizedType.UComplexMatrix )
# 2117 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = id;
          MenhirLib.EngineTypes.startp = _startpos_id_;
          MenhirLib.EngineTypes.endp = _endpos_id_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let id : (Ast.identifier) = Obj.magic id in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_id_ in
        let _endpos = _endpos_id_ in
        let _v =
          let _endpos = _endpos_id_ in
          let _startpos = _startpos_id_ in
          let _loc = (_startpos, _endpos) in
          (
# 619 "src/frontend/parser.mly"
    ( grammar_logger "identifier_expr" ;
      build_expr (Variable id) _loc )
# 2147 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = i;
          MenhirLib.EngineTypes.startp = _startpos_i_;
          MenhirLib.EngineTypes.endp = _endpos_i_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let i : (
# 93 "src/frontend/parser.mly"
       (string)
# 2169 "src/frontend/parser.ml"
        ) = Obj.magic i in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_i_ in
        let _endpos = _endpos_i_ in
        let _v =
          let _endpos = _endpos_i_ in
          let _startpos = _startpos_i_ in
          let _loc = (_startpos, _endpos) in
          (
# 622 "src/frontend/parser.mly"
    ( grammar_logger ("intnumeral " ^ i) ;
      build_expr (IntNumeral i) _loc )
# 2182 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = r;
          MenhirLib.EngineTypes.startp = _startpos_r_;
          MenhirLib.EngineTypes.endp = _endpos_r_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let r : (
# 94 "src/frontend/parser.mly"
       (string)
# 2204 "src/frontend/parser.ml"
        ) = Obj.magic r in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_r_ in
        let _endpos = _endpos_r_ in
        let _v =
          let _endpos = _endpos_r_ in
          let _startpos = _startpos_r_ in
          let _loc = (_startpos, _endpos) in
          (
# 626 "src/frontend/parser.mly"
    ( grammar_logger ("realnumeral " ^ r) ;
      build_expr (RealNumeral r) _loc )
# 2217 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = r;
          MenhirLib.EngineTypes.startp = _startpos_r_;
          MenhirLib.EngineTypes.endp = _endpos_r_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let r : (
# 94 "src/frontend/parser.mly"
       (string)
# 2239 "src/frontend/parser.ml"
        ) = Obj.magic r in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_r_ in
        let _endpos = _endpos_r_ in
        let _v =
          let _endpos = _endpos_r_ in
          let _startpos = _startpos_r_ in
          let _loc = (_startpos, _endpos) in
          (
# 626 "src/frontend/parser.mly"
    ( grammar_logger ("realnumeral " ^ r) ;
      build_expr (RealNumeral r) _loc )
# 2252 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = z;
          MenhirLib.EngineTypes.startp = _startpos_z_;
          MenhirLib.EngineTypes.endp = _endpos_z_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let z : (
# 95 "src/frontend/parser.mly"
       (string)
# 2274 "src/frontend/parser.ml"
        ) = Obj.magic z in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_z_ in
        let _endpos = _endpos_z_ in
        let _v =
          let _endpos = _endpos_z_ in
          let _startpos = _startpos_z_ in
          let _loc = (_startpos, _endpos) in
          (
# 629 "src/frontend/parser.mly"
    ( grammar_logger ("imagnumeral " ^ z) ;
      build_expr (ImagNumeral (String.drop_suffix z 1)) _loc )
# 2287 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = xs;
            MenhirLib.EngineTypes.startp = _startpos_xs_;
            MenhirLib.EngineTypes.endp = _endpos_xs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let xs : (Ast.untyped_expression list) = Obj.magic xs in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v =
          let _endpos = _endpos__3_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 632 "src/frontend/parser.mly"
    ( grammar_logger "array_expression" ;
      build_expr (ArrayExpr xs) _loc )
# 2332 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = xs;
            MenhirLib.EngineTypes.startp = _startpos_xs_;
            MenhirLib.EngineTypes.endp = _endpos_xs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let xs : (Ast.untyped_expression list) = Obj.magic xs in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v =
          let xs = 
# 229 "<standard.mly>"
    ( xs )
# 2373 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__3_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 635 "src/frontend/parser.mly"
    ( grammar_logger "row_vector_expression" ;
      build_expr (RowVectorExpr xs) _loc )
# 2382 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = xs;
            MenhirLib.EngineTypes.startp = _startpos_xs_;
            MenhirLib.EngineTypes.endp = _endpos_xs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = id;
                MenhirLib.EngineTypes.startp = _startpos_id_;
                MenhirLib.EngineTypes.endp = _endpos_id_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let xs : (Ast.untyped_expression list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let id : (Ast.identifier) = Obj.magic id in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_id_ in
        let _endpos = _endpos__4_ in
        let _v =
          let args = 
# 229 "<standard.mly>"
    ( xs )
# 2430 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _startpos = _startpos_id_ in
          let _loc = (_startpos, _endpos) in
          (
# 638 "src/frontend/parser.mly"
    ( grammar_logger "fun_app" ;
      let app =
       if
         List.length args = 1
         && List.exists ~f:(fun x -> String.is_suffix ~suffix:x id.name) Utils.conditioning_suffices
       then CondDistApp ((), id, args)
       else FunApp ((), id, args)
       in build_expr app _loc )
# 2445 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v =
          let _endpos = _endpos__3_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 647 "src/frontend/parser.mly"
    ( grammar_logger "target_read" ;
      build_expr GetTarget _loc )
# 2490 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v =
          let _endpos = _endpos__3_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 650 "src/frontend/parser.mly"
    ( grammar_logger "get_lp" ;
      build_expr GetLP _loc )
# 2535 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = xs;
            MenhirLib.EngineTypes.startp = _startpos_xs_;
            MenhirLib.EngineTypes.endp = _endpos_xs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = e;
                MenhirLib.EngineTypes.startp = _startpos_e_;
                MenhirLib.EngineTypes.endp = _endpos_e_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = id;
                    MenhirLib.EngineTypes.startp = _startpos_id_;
                    MenhirLib.EngineTypes.endp = _endpos_id_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let xs : (Ast.untyped_expression list) = Obj.magic xs in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let id : (Ast.identifier) = Obj.magic id in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_id_ in
        let _endpos = _endpos__6_ in
        let _v =
          let args = 
# 229 "<standard.mly>"
    ( xs )
# 2597 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__6_ in
          let _startpos = _startpos_id_ in
          let _loc = (_startpos, _endpos) in
          (
# 654 "src/frontend/parser.mly"
    ( grammar_logger "conditional_dist_app" ;
      build_expr (CondDistApp ((), id, e :: args)) _loc )
# 2606 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = xs;
            MenhirLib.EngineTypes.startp = _startpos_xs_;
            MenhirLib.EngineTypes.endp = _endpos_xs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _3;
              MenhirLib.EngineTypes.startp = _startpos__3_;
              MenhirLib.EngineTypes.endp = _endpos__3_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = x_head;
                MenhirLib.EngineTypes.startp = _startpos_x_head_;
                MenhirLib.EngineTypes.endp = _endpos_x_head_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let xs : (Ast.untyped_expression list) = Obj.magic xs in
        let _3 : unit = Obj.magic _3 in
        let x_head : (Ast.untyped_expression) = Obj.magic x_head in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__5_ in
        let _v =
          let _endpos = _endpos__5_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 657 "src/frontend/parser.mly"
    ( grammar_logger "tuple_expression" ;
      build_expr (TupleExpr (x_head::xs)) _loc  )
# 2665 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = ix_str;
          MenhirLib.EngineTypes.startp = _startpos_ix_str_;
          MenhirLib.EngineTypes.endp = _endpos_ix_str_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let ix_str : (
# 94 "src/frontend/parser.mly"
       (string)
# 2693 "src/frontend/parser.ml"
        ) = Obj.magic ix_str in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos_ix_str_ in
        let _v =
          let _endpos = _endpos_ix_str_ in
          let _startpos = _startpos_e_ in
          let _loc = (_startpos, _endpos) in
          (
# 660 "src/frontend/parser.mly"
    ( grammar_logger "common_expression_tuple_index" ;
      build_expr (TupleProjection (e, parse_tuple_slot ix_str _loc)) _loc
    )
# 2708 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = indices;
            MenhirLib.EngineTypes.startp = _startpos_indices_;
            MenhirLib.EngineTypes.endp = _endpos_indices_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = e;
                MenhirLib.EngineTypes.startp = _startpos_e_;
                MenhirLib.EngineTypes.endp = _endpos_e_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let indices : (Ast.untyped_expression Ast.index list) = Obj.magic indices in
        let _2 : unit = Obj.magic _2 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos__4_ in
        let _v =
          let _endpos = _endpos__4_ in
          let _startpos = _startpos_e_ in
          let _loc = (_startpos, _endpos) in
          (
# 664 "src/frontend/parser.mly"
    ( grammar_logger "common_expression_indexed";
      build_expr (Indexed (e, indices)) _loc )
# 2760 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v =
          let _endpos = _endpos__3_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 667 "src/frontend/parser.mly"
    ( grammar_logger "extra_paren" ;
      build_expr (Paren e) _loc )
# 2805 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 690 "src/frontend/parser.mly"
    (  grammar_logger "infix_plus" ; Operator.Plus )
# 2846 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2857 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 692 "src/frontend/parser.mly"
    (   grammar_logger "infix_minus" ;Operator.Minus )
# 2898 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2909 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 694 "src/frontend/parser.mly"
    (  grammar_logger "infix_times" ; Operator.Times )
# 2950 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2961 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 696 "src/frontend/parser.mly"
    (  grammar_logger "infix_divide" ; Operator.Divide )
# 3002 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3013 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 698 "src/frontend/parser.mly"
    (  grammar_logger "infix_intdivide" ; Operator.IntDivide )
# 3054 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3065 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 700 "src/frontend/parser.mly"
    (  grammar_logger "infix_modulo" ; Operator.Modulo )
# 3106 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3117 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 702 "src/frontend/parser.mly"
    (  grammar_logger "infix_ldivide" ; Operator.LDivide )
# 3158 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3169 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 704 "src/frontend/parser.mly"
    (  grammar_logger "infix_elttimes" ; Operator.EltTimes )
# 3210 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3221 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 706 "src/frontend/parser.mly"
    (   grammar_logger "infix_eltdivide" ; Operator.EltDivide )
# 3262 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3273 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 708 "src/frontend/parser.mly"
    (  grammar_logger "infix_hat" ; Operator.Pow )
# 3314 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3325 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op = 
# 710 "src/frontend/parser.mly"
    (  grammar_logger "infix_eltpow" ; Operator.EltPow )
# 3366 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 599 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3377 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v =
          let op = 
# 672 "src/frontend/parser.mly"
    (   grammar_logger "prefix_bang" ; Operator.PNot )
# 3411 "src/frontend/parser.ml"
           in
          let _startpos_op_ = _startpos__1_ in
          let _endpos = _endpos_e_ in
          let _startpos = _startpos_op_ in
          let _loc = (_startpos, _endpos) in
          (
# 604 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_prefixOp" ;
      build_expr (PrefixOp (op, e)) _loc
    )
# 3423 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v =
          let op = 
# 674 "src/frontend/parser.mly"
    (  grammar_logger "prefix_minus" ; Operator.PMinus )
# 3457 "src/frontend/parser.ml"
           in
          let _startpos_op_ = _startpos__1_ in
          let _endpos = _endpos_e_ in
          let _startpos = _startpos_op_ in
          let _loc = (_startpos, _endpos) in
          (
# 604 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_prefixOp" ;
      build_expr (PrefixOp (op, e)) _loc
    )
# 3469 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v =
          let op = 
# 676 "src/frontend/parser.mly"
    (   grammar_logger "prefix_plus" ; Operator.PPlus )
# 3503 "src/frontend/parser.ml"
           in
          let _startpos_op_ = _startpos__1_ in
          let _endpos = _endpos_e_ in
          let _startpos = _startpos_op_ in
          let _loc = (_startpos, _endpos) in
          (
# 604 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_prefixOp" ;
      build_expr (PrefixOp (op, e)) _loc
    )
# 3515 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos__1_ in
        let _v =
          let op = 
# 680 "src/frontend/parser.mly"
    (  grammar_logger "postfix_transpose" ; Operator.Transpose )
# 3549 "src/frontend/parser.ml"
           in
          let _endpos_op_ = _endpos__1_ in
          let _endpos = _endpos_op_ in
          let _startpos = _startpos_e_ in
          let _loc = (_startpos, _endpos) in
          (
# 609 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_postfix" ;
      build_expr (PostfixOp (e, op)) _loc
    )
# 3561 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos_e_ in
        let _v : (Ast.untyped_expression) = 
# 614 "src/frontend/parser.mly"
    ( grammar_logger "constr_expression_common_expr" ; e )
# 3587 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = tvd;
            MenhirLib.EngineTypes.startp = _startpos_tvd_;
            MenhirLib.EngineTypes.endp = _endpos_tvd_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let tvd : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic tvd in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v =
          let _endpos = _endpos__4_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 188 "src/frontend/parser.mly"
    ( grammar_logger "data_block" ;
      {stmts= tvd; xloc= location_span_of_positions _loc} )
# 3639 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = rhs_opt;
            MenhirLib.EngineTypes.startp = _startpos_rhs_opt_;
            MenhirLib.EngineTypes.endp = _endpos_rhs_opt_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = dims;
              MenhirLib.EngineTypes.startp = _startpos_dims_;
              MenhirLib.EngineTypes.endp = _endpos_dims_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = id;
                MenhirLib.EngineTypes.startp = _startpos_id_;
                MenhirLib.EngineTypes.endp = _endpos_id_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = ty;
                  MenhirLib.EngineTypes.startp = _startpos_ty_;
                  MenhirLib.EngineTypes.endp = _endpos_ty_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let rhs_opt : (Ast.untyped_expression option) = Obj.magic rhs_opt in
        let dims : (Ast.untyped_expression list) = Obj.magic dims in
        let id : (Ast.identifier) = Obj.magic id in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__5_ in
        let _v =
          let _endpos = _endpos__5_ in
          let _startpos = _startpos_ty_ in
          let _loc = (_startpos, _endpos) in
          (
# 386 "src/frontend/parser.mly"
    ( note_deprecated_array _loc;
      (fun ~is_global ->
      { stmt=
          VarDecl {
              decl_type= (reducearray (fst ty, dims))
            ; transformation= snd ty
            ; variables= [ { identifier= id
                           ; initial_value= rhs_opt
                           } ]
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _loc
        }
    })
    )
# 3714 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vs;
            MenhirLib.EngineTypes.startp = _startpos_vs_;
            MenhirLib.EngineTypes.endp = _endpos_vs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = v;
              MenhirLib.EngineTypes.startp = _startpos_v_;
              MenhirLib.EngineTypes.endp = _endpos_v_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vs : (Ast.untyped_expression Ast.variable list option) = Obj.magic vs in
        let v : (Ast.untyped_expression Ast.variable) = Obj.magic v in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__4_ in
        let _v =
          let ty = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3767 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 411 "src/frontend/parser.mly"
    ( (fun ~is_global ->
      let vs = v :: Option.value vs ~default:[]
      in
      { stmt=
          VarDecl {
              decl_type= fst ty
            ; transformation= snd ty
            ; variables=vs
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _sloc
        }
      })
    )
# 3789 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vs;
            MenhirLib.EngineTypes.startp = _startpos_vs_;
            MenhirLib.EngineTypes.endp = _endpos_vs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = v;
              MenhirLib.EngineTypes.startp = _startpos_v_;
              MenhirLib.EngineTypes.endp = _endpos_v_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vs : (Ast.untyped_expression Ast.variable list option) = Obj.magic vs in
        let v : (Ast.untyped_expression Ast.variable) = Obj.magic v in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__4_ in
        let _v =
          let ty = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3842 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 411 "src/frontend/parser.mly"
    ( (fun ~is_global ->
      let vs = v :: Option.value vs ~default:[]
      in
      { stmt=
          VarDecl {
              decl_type= fst ty
            ; transformation= snd ty
            ; variables=vs
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _sloc
        }
      })
    )
# 3864 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vs;
            MenhirLib.EngineTypes.startp = _startpos_vs_;
            MenhirLib.EngineTypes.endp = _endpos_vs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = v;
              MenhirLib.EngineTypes.startp = _startpos_v_;
              MenhirLib.EngineTypes.endp = _endpos_v_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vs : (Ast.untyped_expression Ast.variable list option) = Obj.magic vs in
        let v : (Ast.untyped_expression Ast.variable) = Obj.magic v in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__4_ in
        let _v =
          let ty = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3917 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 411 "src/frontend/parser.mly"
    ( (fun ~is_global ->
      let vs = v :: Option.value vs ~default:[]
      in
      { stmt=
          VarDecl {
              decl_type= fst ty
            ; transformation= snd ty
            ; variables=vs
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _sloc
        }
      })
    )
# 3939 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = rhs_opt;
            MenhirLib.EngineTypes.startp = _startpos_rhs_opt_;
            MenhirLib.EngineTypes.endp = _endpos_rhs_opt_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = dims;
              MenhirLib.EngineTypes.startp = _startpos_dims_;
              MenhirLib.EngineTypes.endp = _endpos_dims_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = id;
                MenhirLib.EngineTypes.startp = _startpos_id_;
                MenhirLib.EngineTypes.endp = _endpos_id_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = ty;
                  MenhirLib.EngineTypes.startp = _startpos_ty_;
                  MenhirLib.EngineTypes.endp = _endpos_ty_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let rhs_opt : (Ast.untyped_expression option) = Obj.magic rhs_opt in
        let dims : (Ast.untyped_expression list) = Obj.magic dims in
        let id : (Ast.identifier) = Obj.magic id in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__5_ in
        let _v =
          let _endpos = _endpos__5_ in
          let _startpos = _startpos_ty_ in
          let _loc = (_startpos, _endpos) in
          (
# 386 "src/frontend/parser.mly"
    ( note_deprecated_array _loc;
      (fun ~is_global ->
      { stmt=
          VarDecl {
              decl_type= (reducearray (fst ty, dims))
            ; transformation= snd ty
            ; variables= [ { identifier= id
                           ; initial_value= rhs_opt
                           } ]
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _loc
        }
    })
    )
# 4015 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vs;
            MenhirLib.EngineTypes.startp = _startpos_vs_;
            MenhirLib.EngineTypes.endp = _endpos_vs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = v;
              MenhirLib.EngineTypes.startp = _startpos_v_;
              MenhirLib.EngineTypes.endp = _endpos_v_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vs : (Ast.untyped_expression Ast.variable list option) = Obj.magic vs in
        let v : (Ast.untyped_expression Ast.variable) = Obj.magic v in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__4_ in
        let _v =
          let ty = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 4068 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 411 "src/frontend/parser.mly"
    ( (fun ~is_global ->
      let vs = v :: Option.value vs ~default:[]
      in
      { stmt=
          VarDecl {
              decl_type= fst ty
            ; transformation= snd ty
            ; variables=vs
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _sloc
        }
      })
    )
# 4090 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vs;
            MenhirLib.EngineTypes.startp = _startpos_vs_;
            MenhirLib.EngineTypes.endp = _endpos_vs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = v;
              MenhirLib.EngineTypes.startp = _startpos_v_;
              MenhirLib.EngineTypes.endp = _endpos_v_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vs : (Ast.untyped_expression Ast.variable list option) = Obj.magic vs in
        let v : (Ast.untyped_expression Ast.variable) = Obj.magic v in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__4_ in
        let _v =
          let ty = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 4143 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 411 "src/frontend/parser.mly"
    ( (fun ~is_global ->
      let vs = v :: Option.value vs ~default:[]
      in
      { stmt=
          VarDecl {
              decl_type= fst ty
            ; transformation= snd ty
            ; variables=vs
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _sloc
        }
      })
    )
# 4165 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vs;
            MenhirLib.EngineTypes.startp = _startpos_vs_;
            MenhirLib.EngineTypes.endp = _endpos_vs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = v;
              MenhirLib.EngineTypes.startp = _startpos_v_;
              MenhirLib.EngineTypes.endp = _endpos_v_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vs : (Ast.untyped_expression Ast.variable list option) = Obj.magic vs in
        let v : (Ast.untyped_expression Ast.variable) = Obj.magic v in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__4_ in
        let _v =
          let ty = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 4218 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 411 "src/frontend/parser.mly"
    ( (fun ~is_global ->
      let vs = v :: Option.value vs ~default:[]
      in
      { stmt=
          VarDecl {
              decl_type= fst ty
            ; transformation= snd ty
            ; variables=vs
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _sloc
        }
      })
    )
# 4240 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = rhs_opt;
            MenhirLib.EngineTypes.startp = _startpos_rhs_opt_;
            MenhirLib.EngineTypes.endp = _endpos_rhs_opt_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = dims;
              MenhirLib.EngineTypes.startp = _startpos_dims_;
              MenhirLib.EngineTypes.endp = _endpos_dims_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = id;
                MenhirLib.EngineTypes.startp = _startpos_id_;
                MenhirLib.EngineTypes.endp = _endpos_id_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = ty;
                  MenhirLib.EngineTypes.startp = _startpos_ty_;
                  MenhirLib.EngineTypes.endp = _endpos_ty_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let rhs_opt : (Ast.untyped_expression option) = Obj.magic rhs_opt in
        let dims : (Ast.untyped_expression list) = Obj.magic dims in
        let id : (Ast.identifier) = Obj.magic id in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__5_ in
        let _v =
          let _endpos = _endpos__5_ in
          let _startpos = _startpos_ty_ in
          let _loc = (_startpos, _endpos) in
          (
# 386 "src/frontend/parser.mly"
    ( note_deprecated_array _loc;
      (fun ~is_global ->
      { stmt=
          VarDecl {
              decl_type= (reducearray (fst ty, dims))
            ; transformation= snd ty
            ; variables= [ { identifier= id
                           ; initial_value= rhs_opt
                           } ]
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _loc
        }
    })
    )
# 4316 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vs;
            MenhirLib.EngineTypes.startp = _startpos_vs_;
            MenhirLib.EngineTypes.endp = _endpos_vs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = v;
              MenhirLib.EngineTypes.startp = _startpos_v_;
              MenhirLib.EngineTypes.endp = _endpos_v_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vs : (Ast.untyped_expression Ast.variable list option) = Obj.magic vs in
        let v : (Ast.untyped_expression Ast.variable) = Obj.magic v in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__4_ in
        let _v =
          let ty = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 4369 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 411 "src/frontend/parser.mly"
    ( (fun ~is_global ->
      let vs = v :: Option.value vs ~default:[]
      in
      { stmt=
          VarDecl {
              decl_type= fst ty
            ; transformation= snd ty
            ; variables=vs
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _sloc
        }
      })
    )
# 4391 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vs;
            MenhirLib.EngineTypes.startp = _startpos_vs_;
            MenhirLib.EngineTypes.endp = _endpos_vs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = v;
              MenhirLib.EngineTypes.startp = _startpos_v_;
              MenhirLib.EngineTypes.endp = _endpos_v_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vs : (Ast.untyped_expression Ast.variable list option) = Obj.magic vs in
        let v : (Ast.untyped_expression Ast.variable) = Obj.magic v in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__4_ in
        let _v =
          let ty = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 4444 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 411 "src/frontend/parser.mly"
    ( (fun ~is_global ->
      let vs = v :: Option.value vs ~default:[]
      in
      { stmt=
          VarDecl {
              decl_type= fst ty
            ; transformation= snd ty
            ; variables=vs
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _sloc
        }
      })
    )
# 4466 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vs;
            MenhirLib.EngineTypes.startp = _startpos_vs_;
            MenhirLib.EngineTypes.endp = _endpos_vs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = v;
              MenhirLib.EngineTypes.startp = _startpos_v_;
              MenhirLib.EngineTypes.endp = _endpos_v_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vs : (Ast.untyped_expression Ast.variable list option) = Obj.magic vs in
        let v : (Ast.untyped_expression Ast.variable) = Obj.magic v in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos__4_ in
        let _v =
          let ty = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 4519 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 411 "src/frontend/parser.mly"
    ( (fun ~is_global ->
      let vs = v :: Option.value vs ~default:[]
      in
      { stmt=
          VarDecl {
              decl_type= fst ty
            ; transformation= snd ty
            ; variables=vs
            ; is_global
            }
      ; smeta= {
          loc= location_span_of_positions _sloc
        }
      })
    )
# 4541 "src/frontend/parser.ml"
           : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = id;
          MenhirLib.EngineTypes.startp = _startpos_id_;
          MenhirLib.EngineTypes.endp = _endpos_id_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let id : (Ast.identifier) = Obj.magic id in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_id_ in
        let _endpos = _endpos_id_ in
        let _v : (Ast.identifier) = 
# 223 "src/frontend/parser.mly"
                  ( id )
# 4569 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = err;
          MenhirLib.EngineTypes.startp = _startpos_err_;
          MenhirLib.EngineTypes.endp = _endpos_err_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let err : (string * (Lexing.position * Lexing.position) * bool) = Obj.magic err in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_err_ in
        let _endpos = _endpos_err_ in
        let _v : (Ast.identifier) = 
# 224 "src/frontend/parser.mly"
                      ( reserved err )
# 4594 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = id;
          MenhirLib.EngineTypes.startp = _startpos_id_;
          MenhirLib.EngineTypes.endp = _endpos_id_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let id : (Ast.identifier) = Obj.magic id in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_id_ in
        let _endpos = _endpos_id_ in
        let _v : (Ast.identifier) = 
# 227 "src/frontend/parser.mly"
                  ( id )
# 4619 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = err;
          MenhirLib.EngineTypes.startp = _startpos_err_;
          MenhirLib.EngineTypes.endp = _endpos_err_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let err : (string * (Lexing.position * Lexing.position) * bool) = Obj.magic err in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_err_ in
        let _endpos = _endpos_err_ in
        let _v : (Ast.identifier) = 
# 228 "src/frontend/parser.mly"
                      ( reserved_decl err )
# 4644 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = l;
            MenhirLib.EngineTypes.startp = _startpos_l_;
            MenhirLib.EngineTypes.endp = _endpos_l_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let l : (Ast.untyped_expression list) = Obj.magic l in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v : (Ast.untyped_expression list) = 
# 580 "src/frontend/parser.mly"
    ( grammar_logger "dims" ; l  )
# 4683 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e3;
          MenhirLib.EngineTypes.startp = _startpos_e3_;
          MenhirLib.EngineTypes.endp = _endpos_e3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _4;
            MenhirLib.EngineTypes.startp = _startpos__4_;
            MenhirLib.EngineTypes.endp = _endpos__4_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = e2;
              MenhirLib.EngineTypes.startp = _startpos_e2_;
              MenhirLib.EngineTypes.endp = _endpos_e2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _2;
                MenhirLib.EngineTypes.startp = _startpos__2_;
                MenhirLib.EngineTypes.endp = _endpos__2_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = e1;
                  MenhirLib.EngineTypes.startp = _startpos_e1_;
                  MenhirLib.EngineTypes.endp = _endpos_e1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let e3 : (Ast.untyped_expression) = Obj.magic e3 in
        let _4 : unit = Obj.magic _4 in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _2 : unit = Obj.magic _2 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e3_ in
        let _v =
          let _endpos = _endpos_e3_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 585 "src/frontend/parser.mly"
    ( grammar_logger "ifthenelse_expr" ; build_expr (TernaryIf (e1, e2, e3)) _loc )
# 4740 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 690 "src/frontend/parser.mly"
    (  grammar_logger "infix_plus" ; Operator.Plus )
# 4782 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4787 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4796 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 692 "src/frontend/parser.mly"
    (   grammar_logger "infix_minus" ;Operator.Minus )
# 4838 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4843 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4852 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 694 "src/frontend/parser.mly"
    (  grammar_logger "infix_times" ; Operator.Times )
# 4894 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4899 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4908 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 696 "src/frontend/parser.mly"
    (  grammar_logger "infix_divide" ; Operator.Divide )
# 4950 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4955 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4964 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 698 "src/frontend/parser.mly"
    (  grammar_logger "infix_intdivide" ; Operator.IntDivide )
# 5006 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 5011 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5020 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 700 "src/frontend/parser.mly"
    (  grammar_logger "infix_modulo" ; Operator.Modulo )
# 5062 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 5067 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5076 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 702 "src/frontend/parser.mly"
    (  grammar_logger "infix_ldivide" ; Operator.LDivide )
# 5118 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 5123 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5132 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 704 "src/frontend/parser.mly"
    (  grammar_logger "infix_elttimes" ; Operator.EltTimes )
# 5174 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 5179 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5188 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 706 "src/frontend/parser.mly"
    (   grammar_logger "infix_eltdivide" ; Operator.EltDivide )
# 5230 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 5235 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5244 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 708 "src/frontend/parser.mly"
    (  grammar_logger "infix_hat" ; Operator.Pow )
# 5286 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 5291 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5300 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let a = 
# 710 "src/frontend/parser.mly"
    (  grammar_logger "infix_eltpow" ; Operator.EltPow )
# 5342 "src/frontend/parser.ml"
             in
            
# 684 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 5347 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5356 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let l = 
# 714 "src/frontend/parser.mly"
    (   grammar_logger "infix_or" ; Operator.Or )
# 5398 "src/frontend/parser.ml"
             in
            
# 686 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5403 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5412 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let l = 
# 716 "src/frontend/parser.mly"
    (   grammar_logger "infix_and" ; Operator.And )
# 5454 "src/frontend/parser.ml"
             in
            
# 686 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5459 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5468 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let l = 
# 718 "src/frontend/parser.mly"
    (   grammar_logger "infix_equals" ; Operator.Equals )
# 5510 "src/frontend/parser.ml"
             in
            
# 686 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5515 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5524 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let l = 
# 720 "src/frontend/parser.mly"
    (   grammar_logger "infix_nequals" ; Operator.NEquals)
# 5566 "src/frontend/parser.ml"
             in
            
# 686 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5571 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5580 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let l = 
# 722 "src/frontend/parser.mly"
    (   grammar_logger "infix_less" ; Operator.Less )
# 5622 "src/frontend/parser.ml"
             in
            
# 686 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5627 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5636 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let l = 
# 724 "src/frontend/parser.mly"
    (   grammar_logger "infix_leq" ; Operator.Leq )
# 5678 "src/frontend/parser.ml"
             in
            
# 686 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5683 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5692 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let l = 
# 726 "src/frontend/parser.mly"
    (   grammar_logger "infix_greater" ; Operator.Greater )
# 5734 "src/frontend/parser.ml"
             in
            
# 686 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5739 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5748 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _1 : unit = Obj.magic _1 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v =
          let op =
            let l = 
# 728 "src/frontend/parser.mly"
    (   grammar_logger "infix_geq" ; Operator.Geq )
# 5790 "src/frontend/parser.ml"
             in
            
# 686 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5795 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 587 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5804 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v =
          let op = 
# 672 "src/frontend/parser.mly"
    (   grammar_logger "prefix_bang" ; Operator.PNot )
# 5838 "src/frontend/parser.ml"
           in
          let _startpos_op_ = _startpos__1_ in
          let _endpos = _endpos_e_ in
          let _startpos = _startpos_op_ in
          let _loc = (_startpos, _endpos) in
          (
# 589 "src/frontend/parser.mly"
    ( grammar_logger "prefix_expr" ; build_expr (PrefixOp (op, e)) _loc )
# 5847 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v =
          let op = 
# 674 "src/frontend/parser.mly"
    (  grammar_logger "prefix_minus" ; Operator.PMinus )
# 5881 "src/frontend/parser.ml"
           in
          let _startpos_op_ = _startpos__1_ in
          let _endpos = _endpos_e_ in
          let _startpos = _startpos_op_ in
          let _loc = (_startpos, _endpos) in
          (
# 589 "src/frontend/parser.mly"
    ( grammar_logger "prefix_expr" ; build_expr (PrefixOp (op, e)) _loc )
# 5890 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v =
          let op = 
# 676 "src/frontend/parser.mly"
    (   grammar_logger "prefix_plus" ; Operator.PPlus )
# 5924 "src/frontend/parser.ml"
           in
          let _startpos_op_ = _startpos__1_ in
          let _endpos = _endpos_e_ in
          let _startpos = _startpos_op_ in
          let _loc = (_startpos, _endpos) in
          (
# 589 "src/frontend/parser.mly"
    ( grammar_logger "prefix_expr" ; build_expr (PrefixOp (op, e)) _loc )
# 5933 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos__1_ in
        let _v =
          let op = 
# 680 "src/frontend/parser.mly"
    (  grammar_logger "postfix_transpose" ; Operator.Transpose )
# 5967 "src/frontend/parser.ml"
           in
          let _endpos_op_ = _endpos__1_ in
          let _endpos = _endpos_op_ in
          let _startpos = _startpos_e_ in
          let _loc = (_startpos, _endpos) in
          (
# 591 "src/frontend/parser.mly"
    ( grammar_logger "postfix_expr" ; build_expr (PostfixOp (e, op)) _loc)
# 5976 "src/frontend/parser.ml"
           : (Ast.untyped_expression))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos_e_ in
        let _v : (Ast.untyped_expression) = 
# 593 "src/frontend/parser.mly"
    ( grammar_logger "common_expr" ; e )
# 6002 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = fd;
            MenhirLib.EngineTypes.startp = _startpos_fd_;
            MenhirLib.EngineTypes.endp = _endpos_fd_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let fd : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic fd in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v =
          let _endpos = _endpos__4_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 183 "src/frontend/parser.mly"
    ( grammar_logger "function_block" ;
      {stmts= fd; xloc= location_span_of_positions _loc} )
# 6054 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = b;
          MenhirLib.EngineTypes.startp = _startpos_b_;
          MenhirLib.EngineTypes.endp = _endpos_b_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _5;
            MenhirLib.EngineTypes.startp = _startpos__5_;
            MenhirLib.EngineTypes.endp = _endpos__5_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = xs;
              MenhirLib.EngineTypes.startp = _startpos_xs_;
              MenhirLib.EngineTypes.endp = _endpos_xs_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _3;
                MenhirLib.EngineTypes.startp = _startpos__3_;
                MenhirLib.EngineTypes.endp = _endpos__3_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = name;
                  MenhirLib.EngineTypes.startp = _startpos_name_;
                  MenhirLib.EngineTypes.endp = _endpos_name_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = rt;
                    MenhirLib.EngineTypes.startp = _startpos_rt_;
                    MenhirLib.EngineTypes.endp = _endpos_rt_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let b : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic b in
        let _5 : unit = Obj.magic _5 in
        let xs : ((Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier)
  list) = Obj.magic xs in
        let _3 : unit = Obj.magic _3 in
        let name : (Ast.identifier) = Obj.magic name in
        let rt : (Middle.UnsizedType.returntype) = Obj.magic rt in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_rt_ in
        let _endpos = _endpos_b_ in
        let _v =
          let args = 
# 229 "<standard.mly>"
    ( xs )
# 6119 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_b_ in
          let _startpos = _startpos_rt_ in
          let _loc = (_startpos, _endpos) in
          (
# 278 "src/frontend/parser.mly"
    (
      grammar_logger "function_def" ;
      {stmt=FunDef {returntype = rt; funname = name;
                           arguments = args; body=b;};
       smeta={loc=location_span_of_positions _loc}
      }
    )
# 6133 "src/frontend/parser.ml"
           : (Ast.untyped_statement))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _2;
          MenhirLib.EngineTypes.startp = _startpos__2_;
          MenhirLib.EngineTypes.endp = _endpos__2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = fd;
            MenhirLib.EngineTypes.startp = _startpos_fd_;
            MenhirLib.EngineTypes.endp = _endpos_fd_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let _2 : unit = Obj.magic _2 in
        let fd : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic fd in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_fd_ in
        let _endpos = _endpos__2_ in
        let _v =
          let _endpos = _endpos__2_ in
          let _startpos = _startpos_fd_ in
          let _loc = (_startpos, _endpos) in
          (
# 169 "src/frontend/parser.mly"
    ( grammar_logger "functions_only";
      { functionblock= Some {stmts= fd; xloc= location_span_of_positions _loc}
      ; datablock= None
      ; transformeddatablock= None
      ; parametersblock= None
      ; transformedparametersblock= None
      ; modelblock= None
      ; generatedquantitiesblock= None
      ; comments= [] }
    )
# 6180 "src/frontend/parser.ml"
           : (Ast.untyped_statement Ast.program))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = tvds;
            MenhirLib.EngineTypes.startp = _startpos_tvds_;
            MenhirLib.EngineTypes.endp = _endpos_tvds_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let tvds : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic tvds in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v =
          let _endpos = _endpos__4_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 213 "src/frontend/parser.mly"
    ( grammar_logger "generated_quantities_block" ;
      {stmts= tvds; xloc= location_span_of_positions _loc} )
# 6233 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = initial_value;
          MenhirLib.EngineTypes.startp = _startpos_initial_value_;
          MenhirLib.EngineTypes.endp = _endpos_initial_value_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = identifier;
            MenhirLib.EngineTypes.startp = _startpos_identifier_;
            MenhirLib.EngineTypes.endp = _endpos_identifier_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let initial_value : (Ast.untyped_expression option) = Obj.magic initial_value in
        let identifier : (Ast.identifier) = Obj.magic identifier in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_identifier_ in
        let _endpos = _endpos_initial_value_ in
        let _v : (Ast.untyped_expression Ast.variable) = 
# 355 "src/frontend/parser.mly"
    ( Ast.{identifier; initial_value} )
# 6267 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = initial_value;
          MenhirLib.EngineTypes.startp = _startpos_initial_value_;
          MenhirLib.EngineTypes.endp = _endpos_initial_value_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = identifier;
            MenhirLib.EngineTypes.startp = _startpos_identifier_;
            MenhirLib.EngineTypes.endp = _endpos_identifier_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let initial_value : (Ast.untyped_expression option) = Obj.magic initial_value in
        let identifier : (Ast.identifier) = Obj.magic identifier in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_identifier_ in
        let _endpos = _endpos_initial_value_ in
        let _v : (Ast.untyped_expression Ast.variable) = 
# 355 "src/frontend/parser.mly"
    ( Ast.{identifier; initial_value} )
# 6299 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = initial_value;
          MenhirLib.EngineTypes.startp = _startpos_initial_value_;
          MenhirLib.EngineTypes.endp = _endpos_initial_value_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = identifier;
            MenhirLib.EngineTypes.startp = _startpos_identifier_;
            MenhirLib.EngineTypes.endp = _endpos_identifier_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let initial_value : (Ast.untyped_expression option) = Obj.magic initial_value in
        let identifier : (Ast.identifier) = Obj.magic identifier in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_identifier_ in
        let _endpos = _endpos_initial_value_ in
        let _v : (Ast.untyped_expression Ast.variable) = 
# 355 "src/frontend/parser.mly"
    ( Ast.{identifier; initial_value} )
# 6331 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = initial_value;
          MenhirLib.EngineTypes.startp = _startpos_initial_value_;
          MenhirLib.EngineTypes.endp = _endpos_initial_value_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = identifier;
            MenhirLib.EngineTypes.startp = _startpos_identifier_;
            MenhirLib.EngineTypes.endp = _endpos_identifier_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let initial_value : (Ast.untyped_expression option) = Obj.magic initial_value in
        let identifier : (Ast.identifier) = Obj.magic identifier in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_identifier_ in
        let _endpos = _endpos_initial_value_ in
        let _v : (Ast.untyped_expression Ast.variable) = 
# 355 "src/frontend/parser.mly"
    ( Ast.{identifier; initial_value} )
# 6363 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = id;
          MenhirLib.EngineTypes.startp = _startpos_id_;
          MenhirLib.EngineTypes.endp = _endpos_id_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let id : (
# 97 "src/frontend/parser.mly"
       (string)
# 6384 "src/frontend/parser.ml"
        ) = Obj.magic id in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_id_ in
        let _endpos = _endpos_id_ in
        let _v =
          let _endpos = _endpos_id_ in
          let _startpos = _startpos_id_ in
          let _loc = (_startpos, _endpos) in
          (
# 218 "src/frontend/parser.mly"
                  ( build_id id _loc )
# 6396 "src/frontend/parser.ml"
           : (Ast.identifier))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 219 "src/frontend/parser.mly"
             ( build_id "T" _loc)
# 6426 "src/frontend/parser.ml"
           : (Ast.identifier))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (Ast.untyped_expression Ast.index list) = 
# 732 "src/frontend/parser.mly"
    (   grammar_logger "index_nothing" ; [All] )
# 6445 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Ast.untyped_expression Ast.index list) = 
# 734 "src/frontend/parser.mly"
    (   grammar_logger "index_all" ; [All] )
# 6470 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos_e_ in
        let _v : (Ast.untyped_expression Ast.index list) = 
# 736 "src/frontend/parser.mly"
    (  grammar_logger "index_single" ; [Single e] )
# 6495 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _2;
          MenhirLib.EngineTypes.startp = _startpos__2_;
          MenhirLib.EngineTypes.endp = _endpos__2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let _2 : unit = Obj.magic _2 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos__2_ in
        let _v : (Ast.untyped_expression Ast.index list) = 
# 738 "src/frontend/parser.mly"
    (  grammar_logger "index_upper" ; [Upfrom e] )
# 6527 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v : (Ast.untyped_expression Ast.index list) = 
# 740 "src/frontend/parser.mly"
    (   grammar_logger "index_lower" ; [Downfrom e] )
# 6559 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _2 : unit = Obj.magic _2 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e1_ in
        let _endpos = _endpos_e2_ in
        let _v : (Ast.untyped_expression Ast.index list) = 
# 742 "src/frontend/parser.mly"
    (  grammar_logger "index_twosided" ; [Between (e1, e2)] )
# 6598 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = i2;
          MenhirLib.EngineTypes.startp = _startpos_i2_;
          MenhirLib.EngineTypes.endp = _endpos_i2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = i1;
              MenhirLib.EngineTypes.startp = _startpos_i1_;
              MenhirLib.EngineTypes.endp = _endpos_i1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let i2 : (Ast.untyped_expression Ast.index list) = Obj.magic i2 in
        let _2 : unit = Obj.magic _2 in
        let i1 : (Ast.untyped_expression Ast.index list) = Obj.magic i1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_i1_ in
        let _endpos = _endpos_i2_ in
        let _v : (Ast.untyped_expression Ast.index list) = 
# 744 "src/frontend/parser.mly"
    (  grammar_logger "indexes" ; i1 @ i2 )
# 6637 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (unit list) = 
# 208 "<standard.mly>"
    ( [] )
# 6655 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = x;
            MenhirLib.EngineTypes.startp = _startpos_x_;
            MenhirLib.EngineTypes.endp = _endpos_x_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let xs : (unit list) = Obj.magic xs in
        let x : unit = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : (unit list) = 
# 210 "<standard.mly>"
    ( x :: xs )
# 6687 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = 
# 208 "<standard.mly>"
    ( [] )
# 6706 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = x;
            MenhirLib.EngineTypes.startp = _startpos_x_;
            MenhirLib.EngineTypes.endp = _endpos_x_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic xs in
        let x : (Ast.untyped_statement) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = 
# 210 "<standard.mly>"
    ( x :: xs )
# 6740 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = 
# 208 "<standard.mly>"
    ( [] )
# 6759 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = x;
            MenhirLib.EngineTypes.startp = _startpos_x_;
            MenhirLib.EngineTypes.endp = _endpos_x_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic xs in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = 
# 210 "<standard.mly>"
    ( x :: xs )
# 6794 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = 
# 208 "<standard.mly>"
    ( [] )
# 6813 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = x;
            MenhirLib.EngineTypes.startp = _startpos_x_;
            MenhirLib.EngineTypes.endp = _endpos_x_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic xs in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = 
# 210 "<standard.mly>"
    ( x :: xs )
# 6848 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = 
# 208 "<standard.mly>"
    ( [] )
# 6867 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = x;
            MenhirLib.EngineTypes.startp = _startpos_x_;
            MenhirLib.EngineTypes.endp = _endpos_x_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic xs in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = 
# 210 "<standard.mly>"
    ( x :: xs )
# 6902 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier)
  list) = 
# 139 "<standard.mly>"
    ( [] )
# 6921 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : ((Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier)
  list) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : ((Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier)
  list) = 
# 141 "<standard.mly>"
    ( x )
# 6948 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (Ast.untyped_expression list) = 
# 139 "<standard.mly>"
    ( [] )
# 6966 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Ast.untyped_expression list) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (Ast.untyped_expression list) = 
# 141 "<standard.mly>"
    ( x )
# 6991 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = vds;
            MenhirLib.EngineTypes.startp = _startpos_vds_;
            MenhirLib.EngineTypes.endp = _endpos_vds_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let vds : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic vds in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v =
          let _endpos = _endpos__4_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 208 "src/frontend/parser.mly"
    ( grammar_logger "model_block" ;
      {stmts= vds; xloc= location_span_of_positions _loc} )
# 7043 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = s2;
          MenhirLib.EngineTypes.startp = _startpos_s2_;
          MenhirLib.EngineTypes.endp = _endpos_s2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _6;
            MenhirLib.EngineTypes.startp = _startpos__6_;
            MenhirLib.EngineTypes.endp = _endpos__6_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = s1;
              MenhirLib.EngineTypes.startp = _startpos_s1_;
              MenhirLib.EngineTypes.endp = _endpos_s1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _4;
                MenhirLib.EngineTypes.startp = _startpos__4_;
                MenhirLib.EngineTypes.endp = _endpos__4_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = e;
                  MenhirLib.EngineTypes.startp = _startpos_e_;
                  MenhirLib.EngineTypes.endp = _endpos_e_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = _2;
                    MenhirLib.EngineTypes.startp = _startpos__2_;
                    MenhirLib.EngineTypes.endp = _endpos__2_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _menhir_s;
                      MenhirLib.EngineTypes.semv = _1;
                      MenhirLib.EngineTypes.startp = _startpos__1_;
                      MenhirLib.EngineTypes.endp = _endpos__1_;
                      MenhirLib.EngineTypes.next = _menhir_stack;
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let s2 : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic s2 in
        let _6 : unit = Obj.magic _6 in
        let s1 : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic s1 in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_s2_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 834 "src/frontend/parser.mly"
    (  grammar_logger "ifelse_statement" ; IfThenElse (e, s1, Some s2) )
# 7117 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _4;
            MenhirLib.EngineTypes.startp = _startpos__4_;
            MenhirLib.EngineTypes.endp = _endpos__4_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = e;
              MenhirLib.EngineTypes.startp = _startpos_e_;
              MenhirLib.EngineTypes.endp = _endpos_e_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _2;
                MenhirLib.EngineTypes.startp = _startpos__2_;
                MenhirLib.EngineTypes.endp = _endpos__2_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let s : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic s in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_s_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 836 "src/frontend/parser.mly"
    (  grammar_logger "if_statement" ; IfThenElse (e, s, None) )
# 7174 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _4;
            MenhirLib.EngineTypes.startp = _startpos__4_;
            MenhirLib.EngineTypes.endp = _endpos__4_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = e;
              MenhirLib.EngineTypes.startp = _startpos_e_;
              MenhirLib.EngineTypes.endp = _endpos_e_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _2;
                MenhirLib.EngineTypes.startp = _startpos__2_;
                MenhirLib.EngineTypes.endp = _endpos__2_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let s : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic s in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_s_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 838 "src/frontend/parser.mly"
    (  grammar_logger "while_statement" ; While (e, s) )
# 7231 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _8;
            MenhirLib.EngineTypes.startp = _startpos__8_;
            MenhirLib.EngineTypes.endp = _endpos__8_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = e2;
              MenhirLib.EngineTypes.startp = _startpos_e2_;
              MenhirLib.EngineTypes.endp = _endpos_e2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _6;
                MenhirLib.EngineTypes.startp = _startpos__6_;
                MenhirLib.EngineTypes.endp = _endpos__6_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = e1;
                  MenhirLib.EngineTypes.startp = _startpos_e1_;
                  MenhirLib.EngineTypes.endp = _endpos_e1_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = _4;
                    MenhirLib.EngineTypes.startp = _startpos__4_;
                    MenhirLib.EngineTypes.endp = _endpos__4_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _;
                      MenhirLib.EngineTypes.semv = id;
                      MenhirLib.EngineTypes.startp = _startpos_id_;
                      MenhirLib.EngineTypes.endp = _endpos_id_;
                      MenhirLib.EngineTypes.next = {
                        MenhirLib.EngineTypes.state = _;
                        MenhirLib.EngineTypes.semv = _2;
                        MenhirLib.EngineTypes.startp = _startpos__2_;
                        MenhirLib.EngineTypes.endp = _endpos__2_;
                        MenhirLib.EngineTypes.next = {
                          MenhirLib.EngineTypes.state = _menhir_s;
                          MenhirLib.EngineTypes.semv = _1;
                          MenhirLib.EngineTypes.startp = _startpos__1_;
                          MenhirLib.EngineTypes.endp = _endpos__1_;
                          MenhirLib.EngineTypes.next = _menhir_stack;
                        };
                      };
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let s : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic s in
        let _8 : unit = Obj.magic _8 in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _6 : unit = Obj.magic _6 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _4 : unit = Obj.magic _4 in
        let id : (Ast.identifier) = Obj.magic id in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_s_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 841 "src/frontend/parser.mly"
    (
      grammar_logger "for_statement" ;
      For {loop_variable= id;
           lower_bound= e1;
           upper_bound= e2;
           loop_body= s;}
    )
# 7322 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _6;
            MenhirLib.EngineTypes.startp = _startpos__6_;
            MenhirLib.EngineTypes.endp = _endpos__6_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = e;
              MenhirLib.EngineTypes.startp = _startpos_e_;
              MenhirLib.EngineTypes.endp = _endpos_e_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _4;
                MenhirLib.EngineTypes.startp = _startpos__4_;
                MenhirLib.EngineTypes.endp = _endpos__4_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = id;
                  MenhirLib.EngineTypes.startp = _startpos_id_;
                  MenhirLib.EngineTypes.endp = _endpos_id_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = _2;
                    MenhirLib.EngineTypes.startp = _startpos__2_;
                    MenhirLib.EngineTypes.endp = _endpos__2_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _menhir_s;
                      MenhirLib.EngineTypes.semv = _1;
                      MenhirLib.EngineTypes.startp = _startpos__1_;
                      MenhirLib.EngineTypes.endp = _endpos__1_;
                      MenhirLib.EngineTypes.next = _menhir_stack;
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let s : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic s in
        let _6 : unit = Obj.magic _6 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _4 : unit = Obj.magic _4 in
        let id : (Ast.identifier) = Obj.magic id in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_s_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 849 "src/frontend/parser.mly"
    (  grammar_logger "foreach_statement" ; ForEach (id, e, s) )
# 7393 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _7;
          MenhirLib.EngineTypes.startp = _startpos__7_;
          MenhirLib.EngineTypes.endp = _endpos__7_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = l;
            MenhirLib.EngineTypes.startp = _startpos_l_;
            MenhirLib.EngineTypes.endp = _endpos_l_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _5;
              MenhirLib.EngineTypes.startp = _startpos__5_;
              MenhirLib.EngineTypes.endp = _endpos__5_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _4;
                MenhirLib.EngineTypes.startp = _startpos__4_;
                MenhirLib.EngineTypes.endp = _endpos__4_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = st;
                  MenhirLib.EngineTypes.startp = _startpos_st_;
                  MenhirLib.EngineTypes.endp = _endpos_st_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = _2;
                    MenhirLib.EngineTypes.startp = _startpos__2_;
                    MenhirLib.EngineTypes.endp = _endpos__2_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _menhir_s;
                      MenhirLib.EngineTypes.semv = _1;
                      MenhirLib.EngineTypes.startp = _startpos__1_;
                      MenhirLib.EngineTypes.endp = _endpos__1_;
                      MenhirLib.EngineTypes.next = _menhir_stack;
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _7 : unit = Obj.magic _7 in
        let l : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic l in
        let _5 : unit = Obj.magic _5 in
        let _4 : unit = Obj.magic _4 in
        let st : (string) = Obj.magic st in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__7_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 851 "src/frontend/parser.mly"
    (  grammar_logger "profile_statement" ; Profile (st, l) )
# 7464 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = l;
            MenhirLib.EngineTypes.startp = _startpos_l_;
            MenhirLib.EngineTypes.endp = _endpos_l_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let l : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic l in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = 
# 853 "src/frontend/parser.mly"
    (  grammar_logger "block_statement" ; Block l )
# 7507 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Ast.untyped_expression) = 
# 344 "src/frontend/parser.mly"
    ( (* This code will never be reached *)
       Common.FatalError.fatal_error_msg
          [%message "the UNREACHABLE token should never be produced"]
    )
# 7535 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _6;
            MenhirLib.EngineTypes.startp = _startpos__6_;
            MenhirLib.EngineTypes.endp = _endpos__6_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _5;
              MenhirLib.EngineTypes.startp = _startpos__5_;
              MenhirLib.EngineTypes.endp = _endpos__5_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _4;
                MenhirLib.EngineTypes.startp = _startpos__4_;
                MenhirLib.EngineTypes.endp = _endpos__4_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = e1;
                  MenhirLib.EngineTypes.startp = _startpos_e1_;
                  MenhirLib.EngineTypes.endp = _endpos_e1_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = _2;
                    MenhirLib.EngineTypes.startp = _startpos__2_;
                    MenhirLib.EngineTypes.endp = _endpos__2_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _menhir_s;
                      MenhirLib.EngineTypes.semv = _1;
                      MenhirLib.EngineTypes.startp = _startpos__1_;
                      MenhirLib.EngineTypes.endp = _endpos__1_;
                      MenhirLib.EngineTypes.next = _menhir_stack;
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _6 : unit = Obj.magic _6 in
        let _5 : unit = Obj.magic _5 in
        let _4 : unit = Obj.magic _4 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e2_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 568 "src/frontend/parser.mly"
    ( grammar_logger "offset_mult" ; Transformation.OffsetMultiplier (e1, e2) )
# 7602 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e1;
          MenhirLib.EngineTypes.startp = _startpos_e1_;
          MenhirLib.EngineTypes.endp = _endpos_e1_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _6;
            MenhirLib.EngineTypes.startp = _startpos__6_;
            MenhirLib.EngineTypes.endp = _endpos__6_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _5;
              MenhirLib.EngineTypes.startp = _startpos__5_;
              MenhirLib.EngineTypes.endp = _endpos__5_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _4;
                MenhirLib.EngineTypes.startp = _startpos__4_;
                MenhirLib.EngineTypes.endp = _endpos__4_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = e2;
                  MenhirLib.EngineTypes.startp = _startpos_e2_;
                  MenhirLib.EngineTypes.endp = _endpos_e2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = _2;
                    MenhirLib.EngineTypes.startp = _startpos__2_;
                    MenhirLib.EngineTypes.endp = _endpos__2_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _menhir_s;
                      MenhirLib.EngineTypes.semv = _1;
                      MenhirLib.EngineTypes.startp = _startpos__1_;
                      MenhirLib.EngineTypes.endp = _endpos__1_;
                      MenhirLib.EngineTypes.next = _menhir_stack;
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _6 : unit = Obj.magic _6 in
        let _5 : unit = Obj.magic _5 in
        let _4 : unit = Obj.magic _4 in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e1_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 568 "src/frontend/parser.mly"
    ( grammar_logger "offset_mult" ; Transformation.OffsetMultiplier (e1, e2) )
# 7669 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 570 "src/frontend/parser.mly"
    ( grammar_logger "offset" ; Offset e )
# 7708 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 572 "src/frontend/parser.mly"
    ( grammar_logger "multiplier" ; Multiplier e )
# 7747 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (unit option) = 
# 111 "<standard.mly>"
    ( None )
# 7765 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : unit = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (unit option) = 
# 113 "<standard.mly>"
    ( Some x )
# 7790 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 111 "<standard.mly>"
    ( None )
# 7809 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 113 "<standard.mly>"
    ( Some x )
# 7836 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (Ast.untyped_expression option) = 
# 111 "<standard.mly>"
    ( None )
# 7854 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Ast.untyped_expression) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (Ast.untyped_expression option) = 
# 113 "<standard.mly>"
    ( Some x )
# 7879 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 111 "<standard.mly>"
    ( None )
# 7898 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 113 "<standard.mly>"
    ( Some x )
# 7925 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 111 "<standard.mly>"
    ( None )
# 7944 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 113 "<standard.mly>"
    ( Some x )
# 7971 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 111 "<standard.mly>"
    ( None )
# 7990 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 113 "<standard.mly>"
    ( Some x )
# 8017 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((unit * Ast.untyped_expression) option) = 
# 111 "<standard.mly>"
    ( None )
# 8035 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = y;
          MenhirLib.EngineTypes.startp = _startpos_y_;
          MenhirLib.EngineTypes.endp = _endpos_y_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = x;
            MenhirLib.EngineTypes.startp = _startpos_x_;
            MenhirLib.EngineTypes.endp = _endpos_x_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let y : (Ast.untyped_expression) = Obj.magic y in
        let x : unit = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_y_ in
        let _v =
          let x = 
# 164 "<standard.mly>"
    ( (x, y) )
# 8068 "src/frontend/parser.ml"
           in
          (
# 113 "<standard.mly>"
    ( Some x )
# 8073 "src/frontend/parser.ml"
           : ((unit * Ast.untyped_expression) option))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((unit * Ast.untyped_expression) option) = 
# 111 "<standard.mly>"
    ( None )
# 8092 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = y;
          MenhirLib.EngineTypes.startp = _startpos_y_;
          MenhirLib.EngineTypes.endp = _endpos_y_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = x;
            MenhirLib.EngineTypes.startp = _startpos_x_;
            MenhirLib.EngineTypes.endp = _endpos_x_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let y : (Ast.untyped_expression) = Obj.magic y in
        let x : unit = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_y_ in
        let _v =
          let x = 
# 164 "<standard.mly>"
    ( (x, y) )
# 8125 "src/frontend/parser.ml"
           in
          (
# 113 "<standard.mly>"
    ( Some x )
# 8130 "src/frontend/parser.ml"
           : ((unit * Ast.untyped_expression) option))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((unit * Ast.untyped_expression) option) = 
# 111 "<standard.mly>"
    ( None )
# 8149 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = y;
          MenhirLib.EngineTypes.startp = _startpos_y_;
          MenhirLib.EngineTypes.endp = _endpos_y_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = x;
            MenhirLib.EngineTypes.startp = _startpos_x_;
            MenhirLib.EngineTypes.endp = _endpos_x_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let y : (Ast.untyped_expression) = Obj.magic y in
        let x : unit = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_y_ in
        let _v =
          let x = 
# 164 "<standard.mly>"
    ( (x, y) )
# 8182 "src/frontend/parser.ml"
           in
          (
# 113 "<standard.mly>"
    ( Some x )
# 8187 "src/frontend/parser.ml"
           : ((unit * Ast.untyped_expression) option))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 111 "<standard.mly>"
    ( None )
# 8207 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 113 "<standard.mly>"
    ( Some x )
# 8234 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (Ast.untyped_expression Ast.variable list option) = 
# 111 "<standard.mly>"
    ( None )
# 8252 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Ast.untyped_expression Ast.variable list) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (Ast.untyped_expression Ast.variable list option) = 
# 113 "<standard.mly>"
    ( Some x )
# 8277 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (Ast.untyped_expression Ast.variable list option) = 
# 111 "<standard.mly>"
    ( None )
# 8295 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Ast.untyped_expression Ast.variable list) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (Ast.untyped_expression Ast.variable list option) = 
# 113 "<standard.mly>"
    ( Some x )
# 8320 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 111 "<standard.mly>"
    ( None )
# 8339 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 113 "<standard.mly>"
    ( Some x )
# 8366 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 111 "<standard.mly>"
    ( None )
# 8385 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = 
# 113 "<standard.mly>"
    ( Some x )
# 8412 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (Ast.untyped_expression Ast.truncation option) = 
# 111 "<standard.mly>"
    ( None )
# 8430 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Ast.untyped_expression Ast.truncation) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (Ast.untyped_expression Ast.truncation option) = 
# 113 "<standard.mly>"
    ( Some x )
# 8455 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (int option) = 
# 111 "<standard.mly>"
    ( None )
# 8473 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (int) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (int option) = 
# 113 "<standard.mly>"
    ( Some x )
# 8498 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = rhs_opt;
          MenhirLib.EngineTypes.startp = _startpos_rhs_opt_;
          MenhirLib.EngineTypes.endp = _endpos_rhs_opt_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let rhs_opt : ((unit * Ast.untyped_expression) option) = Obj.magic rhs_opt in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_rhs_opt_ in
        let _endpos = _endpos_rhs_opt_ in
        let _v : (Ast.untyped_expression option) = 
# 351 "src/frontend/parser.mly"
    ( Option.map ~f:snd rhs_opt )
# 8523 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = rhs_opt;
          MenhirLib.EngineTypes.startp = _startpos_rhs_opt_;
          MenhirLib.EngineTypes.endp = _endpos_rhs_opt_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let rhs_opt : ((unit * Ast.untyped_expression) option) = Obj.magic rhs_opt in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_rhs_opt_ in
        let _endpos = _endpos_rhs_opt_ in
        let _v : (Ast.untyped_expression option) = 
# 351 "src/frontend/parser.mly"
    ( Option.map ~f:snd rhs_opt )
# 8548 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = tvd;
            MenhirLib.EngineTypes.startp = _startpos_tvd_;
            MenhirLib.EngineTypes.endp = _endpos_tvd_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let tvd : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic tvd in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v =
          let _endpos = _endpos__4_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 198 "src/frontend/parser.mly"
    ( grammar_logger "parameters_block" ;
      {stmts= tvd; xloc= location_span_of_positions _loc} )
# 8600 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_e_ in
        let _endpos = _endpos_e_ in
        let _v : (Ast.untyped_expression Ast.printable list) = 
# 748 "src/frontend/parser.mly"
    (  grammar_logger "printable expression" ; [PExpr e] )
# 8627 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let s : (string) = Obj.magic s in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_s_ in
        let _endpos = _endpos_s_ in
        let _v : (Ast.untyped_expression Ast.printable list) = 
# 750 "src/frontend/parser.mly"
    (  grammar_logger "printable string" ; [PString s] )
# 8652 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = p2;
          MenhirLib.EngineTypes.startp = _startpos_p2_;
          MenhirLib.EngineTypes.endp = _endpos_p2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = p1;
              MenhirLib.EngineTypes.startp = _startpos_p1_;
              MenhirLib.EngineTypes.endp = _endpos_p1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let p2 : (Ast.untyped_expression Ast.printable list) = Obj.magic p2 in
        let _2 : unit = Obj.magic _2 in
        let p1 : (Ast.untyped_expression Ast.printable list) = Obj.magic p1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_p1_ in
        let _endpos = _endpos_p2_ in
        let _v : (Ast.untyped_expression Ast.printable list) = 
# 752 "src/frontend/parser.mly"
    ( grammar_logger "printables" ; p1 @ p2 )
# 8691 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _8;
          MenhirLib.EngineTypes.startp = _startpos__8_;
          MenhirLib.EngineTypes.endp = _endpos__8_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = ogb;
            MenhirLib.EngineTypes.startp = _startpos_ogb_;
            MenhirLib.EngineTypes.endp = _endpos_ogb_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = omb;
              MenhirLib.EngineTypes.startp = _startpos_omb_;
              MenhirLib.EngineTypes.endp = _endpos_omb_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = otpb;
                MenhirLib.EngineTypes.startp = _startpos_otpb_;
                MenhirLib.EngineTypes.endp = _endpos_otpb_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = opb;
                  MenhirLib.EngineTypes.startp = _startpos_opb_;
                  MenhirLib.EngineTypes.endp = _endpos_opb_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = otdb;
                    MenhirLib.EngineTypes.startp = _startpos_otdb_;
                    MenhirLib.EngineTypes.endp = _endpos_otdb_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _;
                      MenhirLib.EngineTypes.semv = odb;
                      MenhirLib.EngineTypes.startp = _startpos_odb_;
                      MenhirLib.EngineTypes.endp = _endpos_odb_;
                      MenhirLib.EngineTypes.next = {
                        MenhirLib.EngineTypes.state = _menhir_s;
                        MenhirLib.EngineTypes.semv = ofb;
                        MenhirLib.EngineTypes.startp = _startpos_ofb_;
                        MenhirLib.EngineTypes.endp = _endpos_ofb_;
                        MenhirLib.EngineTypes.next = _menhir_stack;
                      };
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _8 : unit = Obj.magic _8 in
        let ogb : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = Obj.magic ogb in
        let omb : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = Obj.magic omb in
        let otpb : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = Obj.magic otpb in
        let opb : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = Obj.magic opb in
        let otdb : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = Obj.magic otdb in
        let odb : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = Obj.magic odb in
        let ofb : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block option) = Obj.magic ofb in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ofb_ in
        let _endpos = _endpos__8_ in
        let _v =
          let _startpos = _startpos_ofb_ in
          (
# 148 "src/frontend/parser.mly"
    (
      grammar_logger "program" ;
      (* check for empty programs*)
      let () =
        match (ofb, odb, otdb, opb, otpb, omb, ogb) with
        | None, None, None, None, None, None, None ->
            Input_warnings.empty (location_of_position _startpos).filename
        | _ -> ()
      in
      { functionblock= ofb
      ; datablock= odb
      ; transformeddatablock= otdb
      ; parametersblock= opb
      ; transformedparametersblock= otpb
      ; modelblock= omb
      ; generatedquantitiesblock= ogb
      ; comments= [] }
    )
# 8791 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.program))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e2;
          MenhirLib.EngineTypes.startp = _startpos_e2_;
          MenhirLib.EngineTypes.endp = _endpos_e2_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _6;
            MenhirLib.EngineTypes.startp = _startpos__6_;
            MenhirLib.EngineTypes.endp = _endpos__6_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _5;
              MenhirLib.EngineTypes.startp = _startpos__5_;
              MenhirLib.EngineTypes.endp = _endpos__5_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _4;
                MenhirLib.EngineTypes.startp = _startpos__4_;
                MenhirLib.EngineTypes.endp = _endpos__4_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = e1;
                  MenhirLib.EngineTypes.startp = _startpos_e1_;
                  MenhirLib.EngineTypes.endp = _endpos_e1_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = _2;
                    MenhirLib.EngineTypes.startp = _startpos__2_;
                    MenhirLib.EngineTypes.endp = _endpos__2_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _menhir_s;
                      MenhirLib.EngineTypes.semv = _1;
                      MenhirLib.EngineTypes.startp = _startpos__1_;
                      MenhirLib.EngineTypes.endp = _endpos__1_;
                      MenhirLib.EngineTypes.next = _menhir_stack;
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _6 : unit = Obj.magic _6 in
        let _5 : unit = Obj.magic _5 in
        let _4 : unit = Obj.magic _4 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e2_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 559 "src/frontend/parser.mly"
    ( grammar_logger "lower_upper_range" ; Transformation.LowerUpper (e1, e2) )
# 8860 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e1;
          MenhirLib.EngineTypes.startp = _startpos_e1_;
          MenhirLib.EngineTypes.endp = _endpos_e1_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _6;
            MenhirLib.EngineTypes.startp = _startpos__6_;
            MenhirLib.EngineTypes.endp = _endpos__6_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _5;
              MenhirLib.EngineTypes.startp = _startpos__5_;
              MenhirLib.EngineTypes.endp = _endpos__5_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _4;
                MenhirLib.EngineTypes.startp = _startpos__4_;
                MenhirLib.EngineTypes.endp = _endpos__4_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = e2;
                  MenhirLib.EngineTypes.startp = _startpos_e2_;
                  MenhirLib.EngineTypes.endp = _endpos_e2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = _2;
                    MenhirLib.EngineTypes.startp = _startpos__2_;
                    MenhirLib.EngineTypes.endp = _endpos__2_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _menhir_s;
                      MenhirLib.EngineTypes.semv = _1;
                      MenhirLib.EngineTypes.startp = _startpos__1_;
                      MenhirLib.EngineTypes.endp = _endpos__1_;
                      MenhirLib.EngineTypes.next = _menhir_stack;
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _6 : unit = Obj.magic _6 in
        let _5 : unit = Obj.magic _5 in
        let _4 : unit = Obj.magic _4 in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e1_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 559 "src/frontend/parser.mly"
    ( grammar_logger "lower_upper_range" ; Transformation.LowerUpper (e1, e2) )
# 8927 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 561 "src/frontend/parser.mly"
    (  grammar_logger "lower_range" ; Lower e )
# 8966 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = e;
          MenhirLib.EngineTypes.startp = _startpos_e_;
          MenhirLib.EngineTypes.endp = _endpos_e_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_e_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 563 "src/frontend/parser.mly"
    ( grammar_logger "upper_range" ; Upper e )
# 9005 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _endpos = _startpos in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 552 "src/frontend/parser.mly"
    ( grammar_logger "empty_constraint" ; Transformation.Identity )
# 9023 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = r;
            MenhirLib.EngineTypes.startp = _startpos_r_;
            MenhirLib.EngineTypes.endp = _endpos_r_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let r : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic r in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 554 "src/frontend/parser.mly"
    (  grammar_logger "range_constraint" ; r )
# 9062 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = decls;
          MenhirLib.EngineTypes.startp = _startpos_decls_;
          MenhirLib.EngineTypes.endp = _endpos_decls_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let decls : (Ast.untyped_expression Ast.variable list) = Obj.magic decls in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_decls_ in
        let _v : (Ast.untyped_expression Ast.variable list) = 
# 359 "src/frontend/parser.mly"
    ( decls )
# 9094 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = decls;
          MenhirLib.EngineTypes.startp = _startpos_decls_;
          MenhirLib.EngineTypes.endp = _endpos_decls_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let decls : (Ast.untyped_expression Ast.variable list) = Obj.magic decls in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_decls_ in
        let _v : (Ast.untyped_expression Ast.variable list) = 
# 359 "src/frontend/parser.mly"
    ( decls )
# 9126 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 233 "src/frontend/parser.mly"
                  ( "functions", _loc, false )
# 9155 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 234 "src/frontend/parser.mly"
              ( "data", _loc, false )
# 9185 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 235 "src/frontend/parser.mly"
                    ( "parameters", _loc, false )
# 9215 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 236 "src/frontend/parser.mly"
               ( "model", _loc, false )
# 9245 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 237 "src/frontend/parser.mly"
           ( "return", _loc, false )
# 9275 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 238 "src/frontend/parser.mly"
       ( "if", _loc, false )
# 9305 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 239 "src/frontend/parser.mly"
         ( "else", _loc, false )
# 9335 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 240 "src/frontend/parser.mly"
          ( "while", _loc, false )
# 9365 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 241 "src/frontend/parser.mly"
        ( "for", _loc, false )
# 9395 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 242 "src/frontend/parser.mly"
       ( "in", _loc, false )
# 9425 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 243 "src/frontend/parser.mly"
          ( "break", _loc, false )
# 9455 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 244 "src/frontend/parser.mly"
             ( "continue", _loc, false )
# 9485 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 245 "src/frontend/parser.mly"
         ( "void", _loc, false )
# 9515 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 246 "src/frontend/parser.mly"
        ( "int", _loc, true )
# 9545 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 247 "src/frontend/parser.mly"
         ( "real", _loc, true )
# 9575 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 248 "src/frontend/parser.mly"
            ( "complex", _loc, true )
# 9605 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 249 "src/frontend/parser.mly"
           ( "vector", _loc, true )
# 9635 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 250 "src/frontend/parser.mly"
              ( "row_vector", _loc, true )
# 9665 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 251 "src/frontend/parser.mly"
           ( "matrix", _loc, true )
# 9695 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 252 "src/frontend/parser.mly"
                  ( "complex_vector", _loc, true )
# 9725 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 253 "src/frontend/parser.mly"
                     ( "complex_row_vector", _loc, true )
# 9755 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 254 "src/frontend/parser.mly"
                  ( "complex_matrix", _loc, true )
# 9785 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 255 "src/frontend/parser.mly"
            ( "ordered", _loc, true )
# 9815 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 256 "src/frontend/parser.mly"
                    ( "positive_ordered", _loc, true )
# 9845 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 257 "src/frontend/parser.mly"
            ( "simplex", _loc, true )
# 9875 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 258 "src/frontend/parser.mly"
               ( "unit_vector", _loc, true )
# 9905 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 259 "src/frontend/parser.mly"
                       ( "cholesky_factor_corr", _loc, true )
# 9935 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 260 "src/frontend/parser.mly"
                      ( "cholesky_factor_cov", _loc, true )
# 9965 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 261 "src/frontend/parser.mly"
               ( "corr_matrix", _loc, true )
# 9995 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 262 "src/frontend/parser.mly"
              ( "cov_matrix", _loc, true  )
# 10025 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 263 "src/frontend/parser.mly"
          ( "print", _loc, false )
# 10055 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 264 "src/frontend/parser.mly"
           ( "reject", _loc, false )
# 10085 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 265 "src/frontend/parser.mly"
           ( "target", _loc, false )
# 10115 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 266 "src/frontend/parser.mly"
          ( "get_lp", _loc, false )
# 10145 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 267 "src/frontend/parser.mly"
            ( "profile", _loc, false )
# 10175 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 268 "src/frontend/parser.mly"
          ( "tuple", _loc, true )
# 10205 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 269 "src/frontend/parser.mly"
           ( "offset", _loc, false )
# 10235 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 270 "src/frontend/parser.mly"
               ( "multiplier", _loc, false )
# 10265 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 271 "src/frontend/parser.mly"
          ( "lower", _loc, false )
# 10295 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 272 "src/frontend/parser.mly"
          ( "upper", _loc, false )
# 10325 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 273 "src/frontend/parser.mly"
          ( "array", _loc, true )
# 10355 "src/frontend/parser.ml"
           : (string * (Lexing.position * Lexing.position) * bool))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Middle.UnsizedType.returntype) = 
# 288 "src/frontend/parser.mly"
    ( grammar_logger "return_type VOID" ; Void )
# 10381 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = ut;
          MenhirLib.EngineTypes.startp = _startpos_ut_;
          MenhirLib.EngineTypes.endp = _endpos_ut_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let ut : (Middle.UnsizedType.t) = Obj.magic ut in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ut_ in
        let _endpos = _endpos_ut_ in
        let _v : (Middle.UnsizedType.returntype) = 
# 290 "src/frontend/parser.mly"
    (  grammar_logger "return_type unsized_type" ; UnsizedType.ReturnType ut )
# 10406 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : ((Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier)
  list) = 
# 238 "<standard.mly>"
    ( [ x ] )
# 10432 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = x;
              MenhirLib.EngineTypes.startp = _startpos_x_;
              MenhirLib.EngineTypes.endp = _endpos_x_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : ((Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier)
  list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let x : (Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : ((Middle.UnsizedType.autodifftype * Middle.UnsizedType.t * Ast.identifier)
  list) = 
# 240 "<standard.mly>"
    ( x :: xs )
# 10473 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Ast.untyped_expression) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (Ast.untyped_expression list) = 
# 238 "<standard.mly>"
    ( [ x ] )
# 10498 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = x;
              MenhirLib.EngineTypes.startp = _startpos_x_;
              MenhirLib.EngineTypes.endp = _endpos_x_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : (Ast.untyped_expression list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let x : (Ast.untyped_expression) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : (Ast.untyped_expression list) = 
# 240 "<standard.mly>"
    ( x :: xs )
# 10537 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_ty_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10566 "src/frontend/parser.ml"
           in
          (
# 238 "<standard.mly>"
    ( [ x ] )
# 10571 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_ty_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10603 "src/frontend/parser.ml"
           in
          (
# 238 "<standard.mly>"
    ( [ x ] )
# 10608 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_ty_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10640 "src/frontend/parser.ml"
           in
          (
# 238 "<standard.mly>"
    ( [ x ] )
# 10645 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = ty;
              MenhirLib.EngineTypes.startp = _startpos_ty_;
              MenhirLib.EngineTypes.endp = _endpos_ty_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_xs_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10693 "src/frontend/parser.ml"
           in
          (
# 240 "<standard.mly>"
    ( x :: xs )
# 10698 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = ty;
              MenhirLib.EngineTypes.startp = _startpos_ty_;
              MenhirLib.EngineTypes.endp = _endpos_ty_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_xs_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10746 "src/frontend/parser.ml"
           in
          (
# 240 "<standard.mly>"
    ( x :: xs )
# 10751 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = ty;
              MenhirLib.EngineTypes.startp = _startpos_ty_;
              MenhirLib.EngineTypes.endp = _endpos_ty_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_xs_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10799 "src/frontend/parser.ml"
           in
          (
# 240 "<standard.mly>"
    ( x :: xs )
# 10804 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_ty_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10836 "src/frontend/parser.ml"
           in
          (
# 238 "<standard.mly>"
    ( [ x ] )
# 10841 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_ty_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10873 "src/frontend/parser.ml"
           in
          (
# 238 "<standard.mly>"
    ( [ x ] )
# 10878 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = ty;
          MenhirLib.EngineTypes.startp = _startpos_ty_;
          MenhirLib.EngineTypes.endp = _endpos_ty_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_ty_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10910 "src/frontend/parser.ml"
           in
          (
# 238 "<standard.mly>"
    ( [ x ] )
# 10915 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = ty;
              MenhirLib.EngineTypes.startp = _startpos_ty_;
              MenhirLib.EngineTypes.endp = _endpos_ty_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_xs_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10963 "src/frontend/parser.ml"
           in
          (
# 240 "<standard.mly>"
    ( x :: xs )
# 10968 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = ty;
              MenhirLib.EngineTypes.startp = _startpos_ty_;
              MenhirLib.EngineTypes.endp = _endpos_ty_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_xs_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 11016 "src/frontend/parser.ml"
           in
          (
# 240 "<standard.mly>"
    ( x :: xs )
# 11021 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = ty;
              MenhirLib.EngineTypes.startp = _startpos_ty_;
              MenhirLib.EngineTypes.endp = _endpos_ty_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_ty_ in
        let _endpos = _endpos_xs_ in
        let _v =
          let x = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 11069 "src/frontend/parser.ml"
           in
          (
# 240 "<standard.mly>"
    ( x :: xs )
# 11074 "src/frontend/parser.ml"
           : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Ast.untyped_expression Ast.variable) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (Ast.untyped_expression Ast.variable list) = 
# 238 "<standard.mly>"
    ( [ x ] )
# 11102 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = x;
              MenhirLib.EngineTypes.startp = _startpos_x_;
              MenhirLib.EngineTypes.endp = _endpos_x_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : (Ast.untyped_expression Ast.variable list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let x : (Ast.untyped_expression Ast.variable) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : (Ast.untyped_expression Ast.variable list) = 
# 240 "<standard.mly>"
    ( x :: xs )
# 11141 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Ast.untyped_expression Ast.variable) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (Ast.untyped_expression Ast.variable list) = 
# 238 "<standard.mly>"
    ( [ x ] )
# 11166 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = x;
              MenhirLib.EngineTypes.startp = _startpos_x_;
              MenhirLib.EngineTypes.endp = _endpos_x_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : (Ast.untyped_expression Ast.variable list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let x : (Ast.untyped_expression Ast.variable) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : (Ast.untyped_expression Ast.variable list) = 
# 240 "<standard.mly>"
    ( x :: xs )
# 11205 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = x;
          MenhirLib.EngineTypes.startp = _startpos_x_;
          MenhirLib.EngineTypes.endp = _endpos_x_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let x : (Middle.UnsizedType.t) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_x_ in
        let _v : (Middle.UnsizedType.t list) = 
# 238 "<standard.mly>"
    ( [ x ] )
# 11230 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = xs;
          MenhirLib.EngineTypes.startp = _startpos_xs_;
          MenhirLib.EngineTypes.endp = _endpos_xs_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = _2;
            MenhirLib.EngineTypes.startp = _startpos__2_;
            MenhirLib.EngineTypes.endp = _endpos__2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = x;
              MenhirLib.EngineTypes.startp = _startpos_x_;
              MenhirLib.EngineTypes.endp = _endpos_x_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let xs : (Middle.UnsizedType.t list) = Obj.magic xs in
        let _2 : unit = Obj.magic _2 in
        let x : (Middle.UnsizedType.t) = Obj.magic x in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_x_ in
        let _endpos = _endpos_xs_ in
        let _v : (Middle.UnsizedType.t list) = 
# 240 "<standard.mly>"
    ( x :: xs )
# 11269 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 479 "src/frontend/parser.mly"
    ( grammar_logger "INT_var_type" ; (SizedType.SInt, Identity) )
# 11295 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 481 "src/frontend/parser.mly"
    ( grammar_logger "REAL_var_type" ; (SizedType.SReal, Identity) )
# 11321 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 483 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEX_var_type" ; (SizedType.SComplex, Identity) )
# 11347 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 485 "src/frontend/parser.mly"
    ( grammar_logger "VECTOR_var_type" ; (SizedType.SVector (Mem_pattern.AoS, e), Identity) )
# 11394 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 487 "src/frontend/parser.mly"
    ( grammar_logger "ROWVECTOR_var_type" ; (SizedType.SRowVector (AoS, e) , Identity) )
# 11441 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e2;
            MenhirLib.EngineTypes.startp = _startpos_e2_;
            MenhirLib.EngineTypes.endp = _endpos_e2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = e1;
                MenhirLib.EngineTypes.startp = _startpos_e1_;
                MenhirLib.EngineTypes.endp = _endpos_e1_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _4 : unit = Obj.magic _4 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 489 "src/frontend/parser.mly"
    ( grammar_logger "MATRIX_var_type" ; (SizedType.SMatrix (AoS, e1, e2), Identity) )
# 11502 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 491 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXVECTOR_var_type" ; (SizedType.SComplexVector e, Identity) )
# 11549 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 493 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXROWVECTOR_var_type" ; (SizedType.SComplexRowVector e , Identity) )
# 11596 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e2;
            MenhirLib.EngineTypes.startp = _startpos_e2_;
            MenhirLib.EngineTypes.endp = _endpos_e2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = e1;
                MenhirLib.EngineTypes.startp = _startpos_e1_;
                MenhirLib.EngineTypes.endp = _endpos_e1_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _4 : unit = Obj.magic _4 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 495 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXMATRIX_var_type" ; (SizedType.SComplexMatrix (e1, e2), Transformation.Identity) )
# 11657 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let s : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = Obj.magic s in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_s_ in
        let _endpos = _endpos_s_ in
        let _v =
          let _endpos = _endpos_s_ in
          let _symbolstartpos = _startpos_s_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 757 "src/frontend/parser.mly"
    (  grammar_logger "atomic_statement" ;
       {stmt= s;
        smeta= { loc=location_span_of_positions _sloc} }
    )
# 11692 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let s : ((Ast.untyped_expression,
   (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
   Ast.statement_with, Ast.untyped_lval, unit)
  Ast.statement) = Obj.magic s in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_s_ in
        let _endpos = _endpos_s_ in
        let _v =
          let _endpos = _endpos_s_ in
          let _symbolstartpos = _startpos_s_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 762 "src/frontend/parser.mly"
    (  grammar_logger "nested_statement" ;
       {stmt= s;
        smeta={loc = location_span_of_positions _sloc} }
    )
# 11729 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let s : (
# 96 "src/frontend/parser.mly"
       (string)
# 11752 "src/frontend/parser.ml"
        ) = Obj.magic s in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_s_ in
        let _endpos = _endpos_s_ in
        let _v : (string) = 
# 820 "src/frontend/parser.mly"
    (  grammar_logger ("string_literal " ^ s) ; s )
# 11760 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = d_fn;
          MenhirLib.EngineTypes.startp = _startpos_d_fn_;
          MenhirLib.EngineTypes.endp = _endpos_d_fn_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let d_fn : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic d_fn in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_d_fn_ in
        let _endpos = _endpos_d_fn_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = 
# 461 "src/frontend/parser.mly"
    ( grammar_logger "top_var_decl" ;
      d_fn ~is_global:true
    )
# 11790 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = d_fn;
          MenhirLib.EngineTypes.startp = _startpos_d_fn_;
          MenhirLib.EngineTypes.endp = _endpos_d_fn_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let d_fn : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic d_fn in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_d_fn_ in
        let _endpos = _endpos_d_fn_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = 
# 467 "src/frontend/parser.mly"
    ( grammar_logger "top_var_decl_no_assign" ;
      d_fn ~is_global:true
    )
# 11820 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = _1;
          MenhirLib.EngineTypes.startp = _startpos__1_;
          MenhirLib.EngineTypes.endp = _endpos__1_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__1_ in
        let _v =
          let _endpos = _endpos__1_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 471 "src/frontend/parser.mly"
    ( grammar_logger "top_var_decl_no_assign_skip";
      { stmt= Skip
      ; smeta= { loc= location_span_of_positions _loc }
      }
    )
# 11853 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = r;
          MenhirLib.EngineTypes.startp = _startpos_r_;
          MenhirLib.EngineTypes.endp = _endpos_r_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let r : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic r in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_r_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 499 "src/frontend/parser.mly"
    ( grammar_logger "INT_top_var_type" ; (SInt, r) )
# 11888 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = c;
          MenhirLib.EngineTypes.startp = _startpos_c_;
          MenhirLib.EngineTypes.endp = _endpos_c_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let c : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic c in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_c_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 501 "src/frontend/parser.mly"
    ( grammar_logger "REAL_top_var_type" ; (SReal, c) )
# 11921 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = c;
          MenhirLib.EngineTypes.startp = _startpos_c_;
          MenhirLib.EngineTypes.endp = _endpos_c_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = _1;
            MenhirLib.EngineTypes.startp = _startpos__1_;
            MenhirLib.EngineTypes.endp = _endpos__1_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let c : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic c in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_c_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 503 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEX_var_type" ; (SComplex, c) )
# 11954 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _3;
              MenhirLib.EngineTypes.startp = _startpos__3_;
              MenhirLib.EngineTypes.endp = _endpos__3_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = c;
                MenhirLib.EngineTypes.startp = _startpos_c_;
                MenhirLib.EngineTypes.endp = _endpos_c_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _3 : unit = Obj.magic _3 in
        let c : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic c in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__5_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 505 "src/frontend/parser.mly"
    ( grammar_logger "VECTOR_top_var_type" ; (SVector (AoS, e), c) )
# 12008 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _3;
              MenhirLib.EngineTypes.startp = _startpos__3_;
              MenhirLib.EngineTypes.endp = _endpos__3_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = c;
                MenhirLib.EngineTypes.startp = _startpos_c_;
                MenhirLib.EngineTypes.endp = _endpos_c_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _3 : unit = Obj.magic _3 in
        let c : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic c in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__5_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 507 "src/frontend/parser.mly"
    ( grammar_logger "ROWVECTOR_top_var_type" ; (SRowVector (AoS, e), c) )
# 12062 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _7;
          MenhirLib.EngineTypes.startp = _startpos__7_;
          MenhirLib.EngineTypes.endp = _endpos__7_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e2;
            MenhirLib.EngineTypes.startp = _startpos_e2_;
            MenhirLib.EngineTypes.endp = _endpos_e2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _5;
              MenhirLib.EngineTypes.startp = _startpos__5_;
              MenhirLib.EngineTypes.endp = _endpos__5_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = e1;
                MenhirLib.EngineTypes.startp = _startpos_e1_;
                MenhirLib.EngineTypes.endp = _endpos_e1_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _3;
                  MenhirLib.EngineTypes.startp = _startpos__3_;
                  MenhirLib.EngineTypes.endp = _endpos__3_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = c;
                    MenhirLib.EngineTypes.startp = _startpos_c_;
                    MenhirLib.EngineTypes.endp = _endpos_c_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _menhir_s;
                      MenhirLib.EngineTypes.semv = _1;
                      MenhirLib.EngineTypes.startp = _startpos__1_;
                      MenhirLib.EngineTypes.endp = _endpos__1_;
                      MenhirLib.EngineTypes.next = _menhir_stack;
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _7 : unit = Obj.magic _7 in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _5 : unit = Obj.magic _5 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _3 : unit = Obj.magic _3 in
        let c : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic c in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__7_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 509 "src/frontend/parser.mly"
    ( grammar_logger "MATRIX_top_var_type" ; (SMatrix (AoS, e1, e2), c) )
# 12130 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _3;
              MenhirLib.EngineTypes.startp = _startpos__3_;
              MenhirLib.EngineTypes.endp = _endpos__3_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = c;
                MenhirLib.EngineTypes.startp = _startpos_c_;
                MenhirLib.EngineTypes.endp = _endpos_c_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _3 : unit = Obj.magic _3 in
        let c : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic c in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__5_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 511 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXVECTOR_top_var_type" ; (SComplexVector e, c) )
# 12184 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _3;
              MenhirLib.EngineTypes.startp = _startpos__3_;
              MenhirLib.EngineTypes.endp = _endpos__3_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = c;
                MenhirLib.EngineTypes.startp = _startpos_c_;
                MenhirLib.EngineTypes.endp = _endpos_c_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _3 : unit = Obj.magic _3 in
        let c : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic c in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__5_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 513 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXROWVECTOR_top_var_type" ; (SComplexRowVector e, c) )
# 12238 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _7;
          MenhirLib.EngineTypes.startp = _startpos__7_;
          MenhirLib.EngineTypes.endp = _endpos__7_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e2;
            MenhirLib.EngineTypes.startp = _startpos_e2_;
            MenhirLib.EngineTypes.endp = _endpos_e2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _5;
              MenhirLib.EngineTypes.startp = _startpos__5_;
              MenhirLib.EngineTypes.endp = _endpos__5_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = e1;
                MenhirLib.EngineTypes.startp = _startpos_e1_;
                MenhirLib.EngineTypes.endp = _endpos_e1_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _3;
                  MenhirLib.EngineTypes.startp = _startpos__3_;
                  MenhirLib.EngineTypes.endp = _endpos__3_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = c;
                    MenhirLib.EngineTypes.startp = _startpos_c_;
                    MenhirLib.EngineTypes.endp = _endpos_c_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _menhir_s;
                      MenhirLib.EngineTypes.semv = _1;
                      MenhirLib.EngineTypes.startp = _startpos__1_;
                      MenhirLib.EngineTypes.endp = _endpos__1_;
                      MenhirLib.EngineTypes.next = _menhir_stack;
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _7 : unit = Obj.magic _7 in
        let e2 : (Ast.untyped_expression) = Obj.magic e2 in
        let _5 : unit = Obj.magic _5 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _3 : unit = Obj.magic _3 in
        let c : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic c in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__7_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 515 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXMATRIX_top_var_type" ; (SComplexMatrix (e1, e2), c) )
# 12306 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 517 "src/frontend/parser.mly"
    ( grammar_logger "ORDERED_top_var_type" ; (SVector (AoS, e), Ordered) )
# 12353 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 519 "src/frontend/parser.mly"
    (
      grammar_logger "POSITIVEORDERED_top_var_type" ;
      (SVector (AoS, e), PositiveOrdered)
    )
# 12403 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 524 "src/frontend/parser.mly"
    ( grammar_logger "SIMPLEX_top_var_type" ; (SVector (AoS, e), Simplex) )
# 12450 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 526 "src/frontend/parser.mly"
    ( grammar_logger "UNITVECTOR_top_var_type" ; (SVector (AoS, e), UnitVector) )
# 12497 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 528 "src/frontend/parser.mly"
    (
      grammar_logger "CHOLESKYFACTORCORR_top_var_type" ;
      (SMatrix (AoS, e, e), CholeskyCorr)
    )
# 12547 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _5;
          MenhirLib.EngineTypes.startp = _startpos__5_;
          MenhirLib.EngineTypes.endp = _endpos__5_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = oe2;
            MenhirLib.EngineTypes.startp = _startpos_oe2_;
            MenhirLib.EngineTypes.endp = _endpos_oe2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = e1;
              MenhirLib.EngineTypes.startp = _startpos_e1_;
              MenhirLib.EngineTypes.endp = _endpos_e1_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = _2;
                MenhirLib.EngineTypes.startp = _startpos__2_;
                MenhirLib.EngineTypes.endp = _endpos__2_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _menhir_s;
                  MenhirLib.EngineTypes.semv = _1;
                  MenhirLib.EngineTypes.startp = _startpos__1_;
                  MenhirLib.EngineTypes.endp = _endpos__1_;
                  MenhirLib.EngineTypes.next = _menhir_stack;
                };
              };
            };
          };
        } = _menhir_stack in
        let _5 : unit = Obj.magic _5 in
        let oe2 : ((unit * Ast.untyped_expression) option) = Obj.magic oe2 in
        let e1 : (Ast.untyped_expression) = Obj.magic e1 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__5_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 534 "src/frontend/parser.mly"
    (
      grammar_logger "CHOLESKYFACTORCOV_top_var_type" ;
      match oe2 with Some (_,e2) -> ( SMatrix (AoS, e1, e2), CholeskyCov)
                   | _           ->  (SMatrix (AoS, e1, e1),  CholeskyCov)
    )
# 12605 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 540 "src/frontend/parser.mly"
    ( grammar_logger "CORRMATRIX_top_var_type" ; (SMatrix (AoS, e, e), Correlation) )
# 12652 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e;
            MenhirLib.EngineTypes.startp = _startpos_e_;
            MenhirLib.EngineTypes.endp = _endpos_e_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let e : (Ast.untyped_expression) = Obj.magic e in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = 
# 542 "src/frontend/parser.mly"
    ( grammar_logger "COVMATRIX_top_var_type" ; (SizedType.SMatrix (AoS, e, e), Transformation.Covariance) )
# 12699 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let s : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic s in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_s_ in
        let _endpos = _endpos_s_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = 
# 864 "src/frontend/parser.mly"
    ( grammar_logger "top_vardecl_or_statement_statement" ; s )
# 12726 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = v;
          MenhirLib.EngineTypes.startp = _startpos_v_;
          MenhirLib.EngineTypes.endp = _endpos_v_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic v in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_v_ in
        let _endpos = _endpos_v_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = 
# 866 "src/frontend/parser.mly"
    ( grammar_logger "top_vardecl_or_statement_top_vardecl" ; v )
# 12753 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = tvds;
            MenhirLib.EngineTypes.startp = _startpos_tvds_;
            MenhirLib.EngineTypes.endp = _endpos_tvds_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let tvds : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic tvds in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v =
          let _endpos = _endpos__4_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 193 "src/frontend/parser.mly"
    ( grammar_logger "transformed_data_block" ;
      {stmts= tvds; xloc= location_span_of_positions _loc} )
# 12805 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _4;
          MenhirLib.EngineTypes.startp = _startpos__4_;
          MenhirLib.EngineTypes.endp = _endpos__4_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = tvds;
            MenhirLib.EngineTypes.startp = _startpos_tvds_;
            MenhirLib.EngineTypes.endp = _endpos_tvds_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _2;
              MenhirLib.EngineTypes.startp = _startpos__2_;
              MenhirLib.EngineTypes.endp = _endpos__2_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _menhir_s;
                MenhirLib.EngineTypes.semv = _1;
                MenhirLib.EngineTypes.startp = _startpos__1_;
                MenhirLib.EngineTypes.endp = _endpos__1_;
                MenhirLib.EngineTypes.next = _menhir_stack;
              };
            };
          };
        } = _menhir_stack in
        let _4 : unit = Obj.magic _4 in
        let tvds : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with list) = Obj.magic tvds in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__4_ in
        let _v =
          let _endpos = _endpos__4_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 203 "src/frontend/parser.mly"
    ( grammar_logger "transformed_parameters_block" ;
      {stmts= tvds; xloc= location_span_of_positions _loc} )
# 12859 "src/frontend/parser.ml"
           : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.block))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = e2;
            MenhirLib.EngineTypes.startp = _startpos_e2_;
            MenhirLib.EngineTypes.endp = _endpos_e2_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = e1;
                MenhirLib.EngineTypes.startp = _startpos_e1_;
                MenhirLib.EngineTypes.endp = _endpos_e1_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let e2 : (Ast.untyped_expression option) = Obj.magic e2 in
        let _4 : unit = Obj.magic _4 in
        let e1 : (Ast.untyped_expression option) = Obj.magic e1 in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v : (Ast.untyped_expression Ast.truncation) = 
# 825 "src/frontend/parser.mly"
    (  grammar_logger "truncation" ;
       match (e1, e2) with
       | Some tt1, Some tt2 -> TruncateBetween (tt1, tt2)
       | Some tt1, None -> TruncateUpFrom tt1
       | None, Some tt2 -> TruncateDownFrom tt2
       | None, None -> NoTruncate  )
# 12926 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = rest;
            MenhirLib.EngineTypes.startp = _startpos_rest_;
            MenhirLib.EngineTypes.endp = _endpos_rest_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let rest : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic rest in
        let _4 : unit = Obj.magic _4 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v =
          let head = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 12992 "src/frontend/parser.ml"
           in
          (
# 447 "src/frontend/parser.mly"
  ( grammar_logger "tuple_type" ;
    let ts = head::rest in
    let types, trans = List.unzip ts in
    (SizedType.STuple types, Transformation.TupleTransformation trans)
  )
# 13001 "src/frontend/parser.ml"
           : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = rest;
            MenhirLib.EngineTypes.startp = _startpos_rest_;
            MenhirLib.EngineTypes.endp = _endpos_rest_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let rest : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic rest in
        let _4 : unit = Obj.magic _4 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v =
          let head = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 13069 "src/frontend/parser.ml"
           in
          (
# 447 "src/frontend/parser.mly"
  ( grammar_logger "tuple_type" ;
    let ts = head::rest in
    let types, trans = List.unzip ts in
    (SizedType.STuple types, Transformation.TupleTransformation trans)
  )
# 13078 "src/frontend/parser.ml"
           : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = rest;
            MenhirLib.EngineTypes.startp = _startpos_rest_;
            MenhirLib.EngineTypes.endp = _endpos_rest_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let rest : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic rest in
        let _4 : unit = Obj.magic _4 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v =
          let head = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 13146 "src/frontend/parser.ml"
           in
          (
# 447 "src/frontend/parser.mly"
  ( grammar_logger "tuple_type" ;
    let ts = head::rest in
    let types, trans = List.unzip ts in
    (SizedType.STuple types, Transformation.TupleTransformation trans)
  )
# 13155 "src/frontend/parser.ml"
           : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = rest;
            MenhirLib.EngineTypes.startp = _startpos_rest_;
            MenhirLib.EngineTypes.endp = _endpos_rest_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let rest : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic rest in
        let _4 : unit = Obj.magic _4 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v =
          let head = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 13223 "src/frontend/parser.ml"
           in
          (
# 447 "src/frontend/parser.mly"
  ( grammar_logger "tuple_type" ;
    let ts = head::rest in
    let types, trans = List.unzip ts in
    (SizedType.STuple types, Transformation.TupleTransformation trans)
  )
# 13232 "src/frontend/parser.ml"
           : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = rest;
            MenhirLib.EngineTypes.startp = _startpos_rest_;
            MenhirLib.EngineTypes.endp = _endpos_rest_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let rest : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic rest in
        let _4 : unit = Obj.magic _4 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v =
          let head = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 13300 "src/frontend/parser.ml"
           in
          (
# 447 "src/frontend/parser.mly"
  ( grammar_logger "tuple_type" ;
    let ts = head::rest in
    let types, trans = List.unzip ts in
    (SizedType.STuple types, Transformation.TupleTransformation trans)
  )
# 13309 "src/frontend/parser.ml"
           : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = rest;
            MenhirLib.EngineTypes.startp = _startpos_rest_;
            MenhirLib.EngineTypes.endp = _endpos_rest_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = ty;
                MenhirLib.EngineTypes.startp = _startpos_ty_;
                MenhirLib.EngineTypes.endp = _endpos_ty_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let rest : ((Ast.untyped_expression Middle.SizedType.t *
   Ast.untyped_expression Middle.Transformation.t)
  list) = Obj.magic rest in
        let _4 : unit = Obj.magic _4 in
        let ty : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t) = Obj.magic ty in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v =
          let head = 
# 433 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 13377 "src/frontend/parser.ml"
           in
          (
# 447 "src/frontend/parser.mly"
  ( grammar_logger "tuple_type" ;
    let ts = head::rest in
    let types, trans = List.unzip ts in
    (SizedType.STuple types, Transformation.TupleTransformation trans)
  )
# 13386 "src/frontend/parser.ml"
           : (Ast.untyped_expression Middle.SizedType.t *
  Ast.untyped_expression Middle.Transformation.t))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = r;
          MenhirLib.EngineTypes.startp = _startpos_r_;
          MenhirLib.EngineTypes.endp = _endpos_r_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let r : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic r in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_r_ in
        let _endpos = _endpos_r_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 546 "src/frontend/parser.mly"
    (  grammar_logger "type_constraint_range" ; r )
# 13413 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = l;
            MenhirLib.EngineTypes.startp = _startpos_l_;
            MenhirLib.EngineTypes.endp = _endpos_l_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let l : (Ast.untyped_expression Middle.Transformation.t) = Obj.magic l in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v : (Ast.untyped_expression Middle.Transformation.t) = 
# 548 "src/frontend/parser.mly"
    (  grammar_logger "type_constraint_offset_mult" ; l )
# 13452 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _3;
          MenhirLib.EngineTypes.startp = _startpos__3_;
          MenhirLib.EngineTypes.endp = _endpos__3_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = cs;
            MenhirLib.EngineTypes.startp = _startpos_cs_;
            MenhirLib.EngineTypes.endp = _endpos_cs_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let _3 : unit = Obj.magic _3 in
        let cs : (unit list) = Obj.magic cs in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__3_ in
        let _v : (int) = 
# 339 "src/frontend/parser.mly"
    ( grammar_logger "unsized_dims" ; List.length(cs) + 1 )
# 13491 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = t;
          MenhirLib.EngineTypes.startp = _startpos_t_;
          MenhirLib.EngineTypes.endp = _endpos_t_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = n;
            MenhirLib.EngineTypes.startp = _startpos_n_;
            MenhirLib.EngineTypes.endp = _endpos_n_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _menhir_s;
              MenhirLib.EngineTypes.semv = _1;
              MenhirLib.EngineTypes.startp = _startpos__1_;
              MenhirLib.EngineTypes.endp = _endpos__1_;
              MenhirLib.EngineTypes.next = _menhir_stack;
            };
          };
        } = _menhir_stack in
        let t : (Middle.UnsizedType.t) = Obj.magic t in
        let n : (int) = Obj.magic n in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos_t_ in
        let _v : (Middle.UnsizedType.t) = 
# 300 "src/frontend/parser.mly"
    (  grammar_logger "unsized_type";
        nest_unsized_array t n
    )
# 13532 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = ts;
            MenhirLib.EngineTypes.startp = _startpos_ts_;
            MenhirLib.EngineTypes.endp = _endpos_ts_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = hd;
                MenhirLib.EngineTypes.startp = _startpos_hd_;
                MenhirLib.EngineTypes.endp = _endpos_hd_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _;
                    MenhirLib.EngineTypes.semv = _1_inlined1;
                    MenhirLib.EngineTypes.startp = _startpos__1_inlined1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_inlined1_;
                    MenhirLib.EngineTypes.next = {
                      MenhirLib.EngineTypes.state = _;
                      MenhirLib.EngineTypes.semv = n;
                      MenhirLib.EngineTypes.startp = _startpos_n_;
                      MenhirLib.EngineTypes.endp = _endpos_n_;
                      MenhirLib.EngineTypes.next = {
                        MenhirLib.EngineTypes.state = _menhir_s;
                        MenhirLib.EngineTypes.semv = _1;
                        MenhirLib.EngineTypes.startp = _startpos__1_;
                        MenhirLib.EngineTypes.endp = _endpos__1_;
                        MenhirLib.EngineTypes.next = _menhir_stack;
                      };
                    };
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let ts : (Middle.UnsizedType.t list) = Obj.magic ts in
        let _4 : unit = Obj.magic _4 in
        let hd : (Middle.UnsizedType.t) = Obj.magic hd in
        let _2 : unit = Obj.magic _2 in
        let _1_inlined1 : unit = Obj.magic _1_inlined1 in
        let n : (int) = Obj.magic n in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v =
          let t = 
# 314 "src/frontend/parser.mly"
    (  UnsizedType.UTuple (hd::ts)
    )
# 13608 "src/frontend/parser.ml"
           in
          (
# 300 "src/frontend/parser.mly"
    (  grammar_logger "unsized_type";
        nest_unsized_array t n
    )
# 13615 "src/frontend/parser.ml"
           : (Middle.UnsizedType.t))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = n_opt;
          MenhirLib.EngineTypes.startp = _startpos_n_opt_;
          MenhirLib.EngineTypes.endp = _endpos_n_opt_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _menhir_s;
            MenhirLib.EngineTypes.semv = bt;
            MenhirLib.EngineTypes.startp = _startpos_bt_;
            MenhirLib.EngineTypes.endp = _endpos_bt_;
            MenhirLib.EngineTypes.next = _menhir_stack;
          };
        } = _menhir_stack in
        let n_opt : (int option) = Obj.magic n_opt in
        let bt : (Middle.UnsizedType.t) = Obj.magic bt in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_bt_ in
        let _endpos = _endpos_n_opt_ in
        let _v =
          let _endpos = _endpos_n_opt_ in
          let _startpos = _startpos_bt_ in
          let _loc = (_startpos, _endpos) in
          (
# 304 "src/frontend/parser.mly"
    (  grammar_logger "unsized_type";
       if Option.is_some n_opt then
         note_deprecated_array ~unsized:true _loc;
       nest_unsized_array bt (Option.value n_opt ~default:0)
    )
# 13656 "src/frontend/parser.ml"
           : (Middle.UnsizedType.t))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _;
          MenhirLib.EngineTypes.semv = _6;
          MenhirLib.EngineTypes.startp = _startpos__6_;
          MenhirLib.EngineTypes.endp = _endpos__6_;
          MenhirLib.EngineTypes.next = {
            MenhirLib.EngineTypes.state = _;
            MenhirLib.EngineTypes.semv = ts;
            MenhirLib.EngineTypes.startp = _startpos_ts_;
            MenhirLib.EngineTypes.endp = _endpos_ts_;
            MenhirLib.EngineTypes.next = {
              MenhirLib.EngineTypes.state = _;
              MenhirLib.EngineTypes.semv = _4;
              MenhirLib.EngineTypes.startp = _startpos__4_;
              MenhirLib.EngineTypes.endp = _endpos__4_;
              MenhirLib.EngineTypes.next = {
                MenhirLib.EngineTypes.state = _;
                MenhirLib.EngineTypes.semv = hd;
                MenhirLib.EngineTypes.startp = _startpos_hd_;
                MenhirLib.EngineTypes.endp = _endpos_hd_;
                MenhirLib.EngineTypes.next = {
                  MenhirLib.EngineTypes.state = _;
                  MenhirLib.EngineTypes.semv = _2;
                  MenhirLib.EngineTypes.startp = _startpos__2_;
                  MenhirLib.EngineTypes.endp = _endpos__2_;
                  MenhirLib.EngineTypes.next = {
                    MenhirLib.EngineTypes.state = _menhir_s;
                    MenhirLib.EngineTypes.semv = _1;
                    MenhirLib.EngineTypes.startp = _startpos__1_;
                    MenhirLib.EngineTypes.endp = _endpos__1_;
                    MenhirLib.EngineTypes.next = _menhir_stack;
                  };
                };
              };
            };
          };
        } = _menhir_stack in
        let _6 : unit = Obj.magic _6 in
        let ts : (Middle.UnsizedType.t list) = Obj.magic ts in
        let _4 : unit = Obj.magic _4 in
        let hd : (Middle.UnsizedType.t) = Obj.magic hd in
        let _2 : unit = Obj.magic _2 in
        let _1 : unit = Obj.magic _1 in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos__1_ in
        let _endpos = _endpos__6_ in
        let _v =
          let t = 
# 314 "src/frontend/parser.mly"
    (  UnsizedType.UTuple (hd::ts)
    )
# 13719 "src/frontend/parser.ml"
           in
          (
# 310 "src/frontend/parser.mly"
    ( t )
# 13724 "src/frontend/parser.ml"
           : (Middle.UnsizedType.t))
        in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = d_fn;
          MenhirLib.EngineTypes.startp = _startpos_d_fn_;
          MenhirLib.EngineTypes.endp = _endpos_d_fn_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let d_fn : (is_global:bool ->
  (Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic d_fn in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_d_fn_ in
        let _endpos = _endpos_d_fn_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = 
# 455 "src/frontend/parser.mly"
    ( grammar_logger "var_decl" ;
      d_fn ~is_global:false
    )
# 13755 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = s;
          MenhirLib.EngineTypes.startp = _startpos_s_;
          MenhirLib.EngineTypes.endp = _endpos_s_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let s : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic s in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_s_ in
        let _endpos = _endpos_s_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = 
# 858 "src/frontend/parser.mly"
    ( grammar_logger "vardecl_or_statement_statement" ; s )
# 13782 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
      (fun _menhir_env ->
        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
        let {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = v;
          MenhirLib.EngineTypes.startp = _startpos_v_;
          MenhirLib.EngineTypes.endp = _endpos_v_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack in
        let v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = Obj.magic v in
        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
        let _startpos = _startpos_v_ in
        let _endpos = _endpos_v_ in
        let _v : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with) = 
# 860 "src/frontend/parser.mly"
    ( grammar_logger "vardecl_or_statement_vardecl" ; v )
# 13809 "src/frontend/parser.ml"
         in
        {
          MenhirLib.EngineTypes.state = _menhir_s;
          MenhirLib.EngineTypes.semv = Obj.repr _v;
          MenhirLib.EngineTypes.startp = _startpos;
          MenhirLib.EngineTypes.endp = _endpos;
          MenhirLib.EngineTypes.next = _menhir_stack;
        });
    |]
  
  and trace =
    None
  
end

module MenhirInterpreter = struct
  
  module ET = MenhirLib.TableInterpreter.MakeEngineTable (Tables)
  
  module TI = MenhirLib.Engine.Make (ET)
  
  include TI
  
end

let program =
  fun lexer lexbuf ->
    (Obj.magic (MenhirInterpreter.entry `Legacy 412 lexer lexbuf) : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.program))

and functions_only =
  fun lexer lexbuf ->
    (Obj.magic (MenhirInterpreter.entry `Legacy 0 lexer lexbuf) : (Ast.untyped_statement Ast.program))

module Incremental = struct
  
  let program =
    fun initial_position ->
      (Obj.magic (MenhirInterpreter.start 412 initial_position) : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.program) MenhirInterpreter.checkpoint)
  
  and functions_only =
    fun initial_position ->
      (Obj.magic (MenhirInterpreter.start 0 initial_position) : (Ast.untyped_statement Ast.program) MenhirInterpreter.checkpoint)
  
end
