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

let () =
  MenhirLib.StaticVersion.require_20231231

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 (
# 92 "src/frontend/parser.mly"
       (string)
# 35 "src/frontend/parser.ml"
  )
    | SIMPLEX
    | SEMICOLON
    | RPAREN
    | ROWVECTOR
    | RETURN
    | REJECT
    | REALNUMERAL of (
# 90 "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 (
# 89 "src/frontend/parser.mly"
       (string)
# 79 "src/frontend/parser.ml"
  )
    | INT
    | IN
    | IMAGNUMERAL of (
# 91 "src/frontend/parser.mly"
       (string)
# 86 "src/frontend/parser.ml"
  )
    | IF
    | IDIVIDE
    | IDENTIFIER of (
# 93 "src/frontend/parser.mly"
       (string)
# 93 "src/frontend/parser.ml"
  )
    | HAT
    | GEQ
    | GENERATEDQUANTITIESBLOCK
    | FUNCTIONBLOCK
    | FOR
    | EQUALS
    | EOF
    | ELTTIMESASSIGN
    | ELTTIMES
    | ELTPOW
    | ELTDIVIDEASSIGN
    | ELTDIVIDE
    | ELSE
    | DOTNUMERAL of (
# 90 "src/frontend/parser.mly"
       (string)
# 111 "src/frontend/parser.ml"
  )
    | DIVIDEASSIGN
    | DIVIDE
    | DATABLOCK
    | COVMATRIX
    | CORRMATRIX
    | CONTINUE
    | COMPLEXVECTOR
    | COMPLEXROWVECTOR
    | COMPLEXMATRIX
    | COMPLEX
    | COMMA
    | COLON
    | CHOLESKYFACTORCOV
    | CHOLESKYFACTORCORR
    | BREAK
    | BAR
    | BANG
    | ASSIGN
    | 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


# 205 "src/frontend/parser.ml"

module Tables = struct
  
  include MenhirBasics
  
  let token2terminal : token -> int =
    fun _tok ->
      match _tok with
      | AND ->
          92
      | ARRAY ->
          91
      | ASSIGN ->
          90
      | BANG ->
          89
      | BAR ->
          88
      | BREAK ->
          87
      | CHOLESKYFACTORCORR ->
          86
      | CHOLESKYFACTORCOV ->
          85
      | COLON ->
          84
      | COMMA ->
          83
      | COMPLEX ->
          82
      | COMPLEXMATRIX ->
          81
      | COMPLEXROWVECTOR ->
          80
      | COMPLEXVECTOR ->
          79
      | CONTINUE ->
          78
      | CORRMATRIX ->
          77
      | COVMATRIX ->
          76
      | DATABLOCK ->
          75
      | DIVIDE ->
          74
      | DIVIDEASSIGN ->
          73
      | DOTNUMERAL _ ->
          72
      | ELSE ->
          71
      | ELTDIVIDE ->
          70
      | ELTDIVIDEASSIGN ->
          69
      | ELTPOW ->
          68
      | ELTTIMES ->
          67
      | ELTTIMESASSIGN ->
          66
      | EOF ->
          65
      | EQUALS ->
          64
      | FOR ->
          63
      | FUNCTIONBLOCK ->
          62
      | GENERATEDQUANTITIESBLOCK ->
          61
      | GEQ ->
          60
      | HAT ->
          59
      | IDENTIFIER _ ->
          58
      | IDIVIDE ->
          57
      | IF ->
          56
      | IMAGNUMERAL _ ->
          55
      | IN ->
          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 ()
      | 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 ()
      | HAT ->
          Obj.repr ()
      | IDENTIFIER _v ->
          Obj.repr _v
      | IDIVIDE ->
          Obj.repr ()
      | IF ->
          Obj.repr ()
      | IMAGNUMERAL _v ->
          Obj.repr _v
      | IN ->
          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\233\000\029\000\000\000\000\000\030\000\027\000\031\000\026\000 \000!\000\"\000\028\000\000\000\000\000\000\000z\000\000\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\0011\000\000\0010\001/\000\000\000\000\000\000\0012\000\234\000\000\000\200\000\205\000\209\000\231\000\218\000\227\000q\000\225\000\217\000\210\000\197\000\224\000\207\000\226\000\223\000\216\000\195\000\215\000\228\000\229\000\196\000\211\000\230\000\206\000\202\000\198\000p\000\193\000\201\000\199\000\194\000\222\000\221\000\204\000\212\000\213\000\214\000\208\000\220\000\219\000\203\000\232\000L\000K\000\000\000\000\000\149\000\132\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\134\000\000\000*\000\000\000f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000/\000\000\000\000\000\000\000\000\000\000\000.\000\000\000\238\000\000\000\000\000\000\000,\000\000\000\000\000(\000\000\000)\000\000\0000\000\000\000\000\000-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\004\000\000\000\000\000\000\000\000\000\000\001\005\001\002\000\000\000\000\000\000\000\000\000\000\001\006\001\001\000\000\000\000\000\000\001\007\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\000\001\t\001\003\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\244\000\000\000\000\000\242\000\000\000\006\000\005\000\243\000\000\001'\000\000\000\000\000\000\001(\000\000\000\000\000\000\001&\000\000\000\000\000\000\000\018\000\025\000\000\000\024\000\000\000\023\000\000\000\000\001\012\000\182\000\000\000\000\000\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\019\000\140\0015\000\000\000\000\000\000\000\191\000N\000M\000\000\000\000\000\252\000\000\000\000\000\000\000m\000\178\000\169\000\000\000C\000\000\000l\0014\000\000\000\000\000\000\000D\001\011\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\001%\000\000\000\177\000\000\000\017\0013\000\000\000\000\000\000\000\012\000\000\000\000\000\n\000\000\000\000\000\011\000\000\000\000\000\014\000\000\000\000\000\015\000\000\000\000\000\r\000\000\000\000\000\t\001\n\000\000\000\000\000\000\000B\000\000\000\000\000\000\000\139\000\000\000\000\000\136\000\000\000\130\000\000\000\142\000\000\000\000\000\141\000\138\000i\000\000\000\000\000\236\000\000\000j\000\001\000\000\000|\000\000\000\000\000\000\000\000\000h\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\190\000\000\001-\000\000\000\000\000\000\001\019\001,\000\000\000\000\000\000\001\028\000\000\000\000\000\000\000\000\000\000\001\027\000\000\000\000\000\000\000\000\001\020\000\000\001\017\000\000\000\000\000\000\001\026\000\000\000\000\000\000\001\025\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\001\016\000\000\000\000\000\000\001 \000\000\000\000\000\000\001\031\000\000\000\000\000\000\000\000\001\022\000\000\000\000\000\000\000\000\001\023\000\000\000\000\000\000\000\000\000\000\000\000\001\024\000\000\001\018\000\000\000\000\000\000\000\000\000\000\000\000\001\030\000\000\000\000\000\000\001\029\000\000\000\000\000\000\000\000\000\000\000\000\000\250\000\000\000\000\000\248\000\000\000\b\000\007\000\249\000\000\001*\000\000\000\000\000\000\001+\000\000\000\000\000\000\001)\001\015\000\000\000\000\000\000\000\192\000\000\000\000\000\254\000\000\000\000\000\143\000\163\000o\000\179\000\171\000\000\000I\000\000\000n\000\000\000\000\000\000\000J\000\000\000~\001\014\000\000\000\000\000\000\000H\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000F\000\000\000\000\000\000\000\000\000G\001\"\001!\000\128\001\r\000\000\000\000\000\000\000E\000\000\001#\000\173\000\000\000\000\000\000\000\000\000\180\000\167\000\000\000\000\000\000\000\000\001$\000\175\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\000\000k\000\000\000\184\000\157\000\159\000\151\000\155")
  
  and error =
    (93, "1\000\b\128\000\b\004\000@\001\224\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\b\000\000\000\000\000\001\016\000\136\000\000\128@\000\000\030\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000@\000\000\000\b\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\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\017\000\000\016\b\000\000\003\192\000\000\000\000\000\000@\000\000\000\000\000\b\128\004@\000\004\002\000\000\000\240\b\000\000\000\000\000\000\000\000\000\000@\002 \001\016\000\001\000\128\000\000<\002\000\000\016\000\000\000\000\000\000\000\016\000\136\000D\000\000@ \000\000\015\000\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\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\002\000\017\000\b\128\000\b\004\000\000\001\224\016\000\000\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\007\184\020\232sT\160j0\017\254q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\006 \000\002\001\000\000\004x\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\004@\000\004\002\000\000\000\240\t\238\005:\028\213(\026\140\004\127\156@\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\002\004\t82\000\163M\b\004\016\n\000\000\000\000\000\001\000\000\000\000\000\000\001\002\002\000\128(\210@\001\000\000\128\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\129\001\000@\020i \000\128\000@\004\b\b\002\000\163I\000\004\000\002\000 @@\016\005\026H\000 \000\016\001\002\002\128\128(\210@\001\000\000\128\b\016\016\004\001F\146\000\b\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\129\001\000@\020i \000\128\000@\0021\131\194T\174\130\196\213\000\196@ D@\016\005\026H\000 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016@a*FAbh\128B \000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020i \000\128\000@\0021\131\194T\140\130\196\209\000\196@ @@\016\005\026H\000 \000\016\000\140`\240\149# \1774@1\016\b\016\016\004\001F\146\000\b\000\004\000#\024<%H\200,M\016\012D\002\004\004\001\000Q\164\128\002\000\001\000\b\198\015\tR2\011\019D\003\017\000F0xJ\145\208X\154\160\024\136\004\b\n\002\000\163I\000\004\000\194\000 @P\016\005\026H\000 \004\016\000\136\000\176\149# \1774@ \016\b\016\016\004\001F\146\000\b\000\004\000#\024<%H\200,M\016\012D\002\004\004\001\000Q\164\128\002\000\001\000\b\198\015\tR2\011\019D\003\017\000\129\001\000@\020i \000\128\000@\0021\131\194T\140\130\196\209\000\196@ @@\016\005\026H\000 \000\016\000\140`\240\149# \1774@1\016\b\016\016\004\001F\146\000\b\000\004\000#\024<%H\200,M\016\012D\002\004\004\001\000Q\164\128\002\000\001\000\b\198\015\tR2\011\019D\003\017\000\129\001\000@\020i \000\128\000@\0021\131\194T\140\130\196\209\000\196@ @@\016\005\026H\000 \000\016\000\140`\240\149# \1774@1\016\b\016\016\004\001F\146\000\b\000\004\000\"\000\012%H\200,M\016\004\004\002\004\004\001\000Q\164\128\002\000\001\000\b\198\015\tR2\011\019D\003\017\000\129\001\000@\020i \000\128\000@\0021\131\194T\140\130\196\209\000\196@ @@\016\005\026H\000 \000\016\000\140`\240\149# \1774@1\016\b\016\016\004\001F\146\000\b\000\004\000#\024<%H\200,M\016\012D\002\004\004\001\000Q\164\128\002\000\001\000\b\198\015\tR2\011\019D\003\017\000\129\001\000@\020i \000\128\000@\0021\131\194T\140\130\196\209\000\196@ @@\016\005\026H\000 \000\016\000\140`\240\149# \1774@1\016\b\016\016\004\001F\146\000\b\000\004\000#\024<%H\200,M\016\012D\000\000\001\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\129\001@@\020i \000\128\024@\000\000\002\000\000\000\000\000\000\000\128\000\017\000\022\018\164d\022&\136\006\002\001\002\002\128\128(\210@\001\000 \128\004@\005\132\169\025\005\137\162\001\000\128\000\000\000\000\000\000\000\000\000\000\000\002\004\004\001\000Q\164\128\002\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000D\016xJ\145\144X\154 \016\b\004\b\136\002\000\163I\000\004\000\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004c\007\132\169\025\005\137\162\001\136\128\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \128\194T\140\130\196\209\000\128@\000\000\000\000\000\000\000\000\000\000\000\001\002\002\000\128(\210@\001\000\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\024\193\225*FAbh\128b \b\198\015\tR2\011\019D\003\017\000D\016\024J\145\144X\154 \000\n\140\t|2\000\227m\b\004\031\n\128\000\000\000\000\000\016\000\000\000\000\000\001\002\002\000\128(\210@\001\000\000\128\004@\005\132\169\025\005\137\162\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\002 \001\016\000\001\000\128\000\000<\002\000\000\000\000\000\000@\000\000\000\000\000\004\b\b\002\000\163I\000\004\000\002\000\017\000\022\018\164d\022&\136\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\000\000\000\000\002\004\004\001\000Q\164\128\002\000\001\000\b\128\003\tR2\011\019D\002\001\000\129\001\000@\020i \000\128\000@\002 \002\194T\140\130\196\209\000\000@\000\000\000\000\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@\128\128 \n4\144\000@\000 \001\016\001a*FAbh\128\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\b\002\000\163I\000\004\000\002\000\017\000\022\018\164d\022&\136\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000@\128\128 \n4\144\000@\000 \001\016\000a*FAbh\128@ \016  \b\002\141$\000\016\000\b\000D\000XJ\145\144X\154 \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\128\000\000\000\000\000\b\016\016\004\001F\146\000\b\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\002\000\017\000\b\128\000\b\004\000\000\001\224\016\000\000\128\000\000\000\000\000\000\000\128\004@\002 \000\002\001\000\000\000x\004\000\000 \000\000\000\000\000\000\000 \001\016\000\136\000\000\128@\000\000\030\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000@\002 \001\016\000\001\000\128\000\000<\002\000\000\000\000\000\000\000\000\000\000\000\000\136\000D\000\000@ \000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\017\000\b\128\000\b\004\000\000\001\224\016\000\000\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 \001\016\000\136\000\000\128@\000\000\030\001\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\016\000\128\000\000\000\000\000\000\129\001\000@\020i \000\128\000@\002!\000\194T\140\130\196\209\000\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\018\016\004\001F\146\000\b\000\004\000\000\000\000\000\000\000\000\000\000\000\000\001\016\128a*FAbh\128\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\004\012\b\002\000\163I\000\004\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\001\000\000\000\000\000\000\000\001\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\0160 \b\002\141$\000\016\000\b\000\000\016\000\000\000\000\000\000\000\016\000\002 \128\194T\140\130\196\209\000\128@\000\000\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\001F\004\190\153\000q\182\132\002\015\133@\000\000\000\000\000\128\000\000\000\000\000\000\129\129\000@\020i \000\128\000@\000\000\128\000\000\000\000\000\000\000\128\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\024\018\250d\001\198\218\016\b>\021\000\000\000\000\000\002\000\000\000\000\000\000\002\004\004\001\000Q\164\128\002\000\001\000\b\130\003\tR2\011\019D\000\001Q\129/\134@\028m\161\000\131\225P\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\004\000\000\000\000\000\b\016\016\004\001F\146\000\b\000\004\000\"\b\012%H\200,M\016\004\005F\004\190\025\000q\182\132\002\015\133@\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\192\167C\154\165\003Q\128\143\243\136\000\000\128\000\000\000\000\000\000\000@\015p)\208\230\169@\212`#\252\226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000 \007\184\020\232sT\160j0\017\254q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\128\016  \b\002\141$\000\016\000\b\000D \024J\145\144X\154 \016\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\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\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\000\003\220\nt9\170P5\024\b\2558\128\000\b\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\0018\000\227*\215Ab\251\128@\160\016\" \b\002\141$\000\016\000\b\000\000\016\000\000\000\000\000\000\000\000\000\002q\001\198U\142\130\197\247\000\129@\000\000\000\000\000\000\000\000\000\000\000\000\140\0000\149# \1774@\000\016\b\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002\004D\001\000Q\164\128\002\000\001\000\000\002\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\002\000\000\000\000\000\000 @@\016\005\026H\000 \004\016\000\000\000\000\000\000\000\000\000\000 \000\b\016\020\004\001F\146\000\b\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\b\128\011\tR2\011\019D\002\001\000\000\000\000\000\000\000\000\000\000\000\000\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\004\224\003\140\171\029\005\139\238\001\002\128@\128\128 \n4\144\000@\000 \001\016\128a*FAbh\128\000 \000\000\000\000\000\000\000\000\000\000\000\000\129\001\000@\020i \000\128\000@\002!\000\194T\140\130\196\209\000\000@\000\000\000\000\000\000\000\000\000\000\000\001\002\002\000\128(\210@\001\000\000\128\004B\001\132\169\025\005\137\162\000\000\128\000\000\000\000\000\000\000\000\000\000\000\002\004\004\001\000Q\164\128\002\000\001\000\b\132\003\tR2\011\019D\000\001\000\000\000\000\000\000\000\000\000\000\000\000\004\b\b\002\000\163I\000\004\000\002\000\017\b\006\018\164d\022&\136\000\002\000\000\000\000\000\000\000\000\000\000\000\000\b\016\016\004\001F\146\000\b\000\004\000\"\016\012%H\200,M\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\016  \b\002\141$\000\016\000\b\000D \024J\145\144X\154 \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\247\002\157\014j\148\rF\002?\206 \000\002\000\000\000\000\000\000\000\001\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\016  \b\002\141$\000\016\000\b\000D\016\024J\145\144X\154 \000\n\140\t|2\000\227m\b\004\031\n\128\000\000\000\000\000\000\000\000\000\000\000\231\002\223N\1608\219B\131\031\206\165\024\018\248d\001\198\218\016\b>\021\000\000\000\000\000\000\000\000\000\000\000\001F\004\190\153\000q\182\132\002\015\133@\000\000\000\000\000\000\000\000\000\000\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\128\014\018\164d\022&\136\004\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\002\000\000\000\000\000\000\000\002\000\017\000\b\128\000\b\004\000\000\017\224\016\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\024\128\004P\000\004\002\000 \000\240\b\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\004\b\000\000\200\002\000\000\000\000\000\000\000\000 \000\000\000\000\001\136\000E\000\000@ \000\000\015\000\128\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\024\000\000\016 \000\002 \b\000\000\000\000\000\000\000\000\128\000\000\000\000\002`\r\020\"\001\000\128\000\001\188\194\000\000\000\000\000\000P\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\b\001\002\002\000\128(\210@\001\000\000\128\b\016\016\004\001F\146\000\b\000\004\000@\128\128 \n4\144\000@\000 \002\004\004\001\000Q\164\128\002\000\001\000\b\128\002\b\018\016\n\003D\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\b\b\002\000\163I\000\004\000\002\000\017\000\004\016$ \020\006\136\004\000\001\002\002\000\128(\210@\001\000\000\128\004@\001\004\t\b\005\001\162\001\000\000\"\000\b H`(\rP\b\000\001\016\000A\002B\001@h\128@\000\b\128\002\b\018\016\n\003D\002\000\000D\000\016@\144\128P\026 \016\000\004\b\b\002\000\163I\000\004\000\002\000\017\000\004\016$ \020\006\136\004\000\001\002\002\000\128(\210@\001\000\000\128\004@\001\004\t\b\005\001\162\001\000\000@\128\128 \n4\144\000@\000 \001\016\000A\002B\001@h\128@\000\016  \b\002\141$\000\016\000\b\000D\000\016@\144\128P\026 \016\000\004\b\b\002\000\163I\000\004\000\002\000\017\000\004\016$ \020\006\136\004\000\001\002\002\000\128(\210@\001\000\000\128\004@\001\004\t\b\005\001\162\001\000\000@\128\128 \n4\144\000@\000 \001\016\000A\002B\001@h\128@\000\016  \b\002\141$\000\016\000\b\000D\000\016@\144\128P\026 \016\000\004\b\b\002\000\163I\000\004\000\002\000\017\000\004\016$ \020\006\136\004\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000@\128\128 \n4\144\000@\000 \001\016\000A\002B\001@h\128\000\000\000\000\000\000\000\000\000\000\000\000\004\000\129\001\000@\020i \000\128\000@\002 \000\130\004\132\002\128\209\000\128\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\b\016\016\004\001F\146\000\b\000\004\000\"\000\b H@(\r\016\000\000\000\000\000\000\000\000\000\000\000\000\000\128\016  \b\002\141$\000\016\000\b\000D\000\016@\144\128P\026 \016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\001\002\002\000\128(\210@\001\000\000\128\004@\001\004\t\b\005\001\162\000\000\000\000\000\000\000\000\000\000\000\000\000\016\002\004\004\001\000Q\164\128\002\000\001\000\b\128\002\b\018\016\n\003D\002\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000 @@\016\005\026H\000 \000\016\000\136\000 \129!\000\1604@\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\004\b\b\002\000\163I\000\004\000\002\000\017\000\022\018\164d\022&\136\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\000\000\000\000\002\004\004\001\000Q\164\128\002\000\001\000\b\128\011\tR2\011\019D\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\192\018 D\002\001\000\000\003y\132\000\000\000\000\000\000\128\000\000\000\000\000\b\016\016\004\001F\146\000\b\000\004\000\"\000,%H\200,M\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\004\b\b\002\000\163I\000\004\000\002\000\017\000\022\018\164d\022&\136\000\002\000\000\000\000\000\000\000\000\000\000\000\007\184\021\232sT\161j0\017\255q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\016  \b\002\141$\000\016\000\b\000D\000XJ\145\144X\154 \000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\001\002\002\000\128(\210@\001\000\000\128\004@\005\132\169\025\005\137\162\000\000\128\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\000\000\b\000\000\000\000\000\000\129\001\000@\020i \000\128\000@\002 \000\194T\140\130\196\209\000\128@ @@\016\005\026H\000 \000\016\000\136\000\176\149# \1774@\000\016\000\000\000\000\000\000\000\000\000\000\000=\192\175C\154\165\011Q\128\143\251\136 \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\004\b\b\002\000\163I\000\004\000\002\000\017\000\022\018\164d\022&\136\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000@\128\128 \n4\144\000@\000 \001\016\001a*FAbh\128\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\002\000\000\000\000\000\000 @@\016\005\026H\000 \000\016\000\136\000\176\149# \1774@\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\001\000\000\000\000\000\000\016  \b\002\141$\000\016\000\b\000D\000XJ\145\144X\154 \000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\b\016\016\004\001F\146\000\b\000\004\000\"\000\012%H\200,M\016\b\004\002\004\004\001\000Q\164\128\002\000\001\000\b\128\011\tR2\011\019D\000\001\000\000\000\000\000\000\000\000\000\000\000\003\220\n\2449\170P\181\024\b\255\184\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\b\016\016\004\001F\146\000\b\000\004\000\"\000,%H\200,M\016\b\004\002\004\004\001\000Q\164\128\002\000\001\000\b\128\011\tR2\011\019D\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\016\000\000\000\000\000\001\002\002\000\128(\210@\001\000\000\128\004@\005\132\169\025\005\137\162\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\002`\t\016\"\001\000\128\000\001\188\194\000\000\016\000\000\000\000\000\000\000\016\000\152\002D\b\128@ \000\000o0\128\000\004\000\000\000\000\000\000\000\004\000&\000\145\002 \016\b\000\000\027\204 \000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\b\000L\001\"\004@ \016\000\0007\152@\000\000\000\000\000\000\000\000\000\000\000\019\000H\129\016\b\004\000\000\r\230\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\002`\t\016\"\001\000\128\000\001\188\194\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\004\000&\000\145\002 \016\b\000\000\027\204 \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\015p)\208\230\169@\212`#\252\226\000\000 \000\000\000\000\000\000\000\016\003\220\nt9\170P5\024\b\2558\128\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000 \007\184\020\232sT\160j0\017\254q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\128\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\000\000\000\000\000\000\000\000\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\004\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\000\000\000\000\000\003\220\nt9\170P5\024\b\2558\128\000\b\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\t\1284P\136\004\002\000\000\006\243\b\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\006\163\001\031\231\016\000\001\000\000\000\000\000\000\000\000\128\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\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\000\129\000\000\017\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000S\129o\167P\028m\161\000\143\231S\220\nt9\170P5\024\b\2558\128\000\b\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)\192\183\211\168\0146\208\128G\243\169\238\005:\028\213(\026\140\004\127\156@\000\004\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\238\005:\028\213(\026\140\004\127\156@\000\004\000\000\000\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\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\016\000\000\016 \000\002 \000\000\000\000\000\000\000\000\000\128\000\000\000\000\002`\r\020\"\001\000\128\000\001\188\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\128\000\b\128\000\000\000\000\000\000\000\000\002\000\000\000\000\000)\192\183\211\168\0146\208\128G\243\168\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\"\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\163\002_L\1288\219B\001\007\194\160\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\017\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000S\129o\167P\028m\161\000\143\231P\000\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\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\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, "\030f\000\000\000\000\000C\030f\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#2\000\t\030f\000I\030f\000\019\030f\000\000\000\000\000>\000\000\000\000\000/\030f\000^\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\"F\000\000\000\000\030f\002\"\000\000\000\140\001l\000r\028\172\000'\000\168\000\000\000\000\028\172\028\172\028\172\029\208\028\172\000\000\000\000\000\000\028\172\005\006\028\172\000\000\000\198\000\000\0180\000\000\028\172\006\022\028\172\006\158\028\172\007&\028\172\007\174\005\142\028\172\029F\019\004\028\172\b6\028\172\b\190\028\172\tF\028\172\t\206\028\172\nV\028\172\n\222\028\172\011f\028\172\011\238\028\172\002\"\028\172\012v\028\172\012\254\028\172\r\134\028\172\014\014\028\172\014\150\028\172\015\030\028\172\015\166\028\172\016.\000\021\000\000\028\172\000\003\018\154\029\166\019n\000\000\028\172\000\000\002\"\028\172\000\238\000\000\016\182\000\226\000\000\000\250\000\000\019\216\000\000\028\172\001\022\000\000\017>\017\198\018\154\002\208\000\220\028\172\0180\000\000\000\230\002\208\001\004\028\172\019\216\000\000\000\000\001$\028\172\021\234\028\172\020B\000\000\000\000\001&\028\172\020\172\000\000\001<\028\172\021\234\000\000\001@\028\172\022T\028\172\022T\000\000\000\000\001B\028\172\001\154\000\000\001,\002\208\000$\002\208\000*\002\208\000\000\000D\002\208\000\000\002\208\000\000\000\000\000\000\001\178\000\000\0018\002\208\001\188\000\000\001>\002\208\001\198\000\000\000'\028\172\002\"\000\000\000\000\028\172\000\000\0180\000\000\001\156\029F\000\000\000\000\000\136\001\212\000\000\029F\000\194\020B\001\164\001\242\001\246\001\188\002\208\001\210\029F\001\016\002\018\000\000\002\208\001\222\028\172\019n\002\208\001\224\0002\001\246\028\172\019\004\002\208\002R\000\000\002X\000\000\000\000\000\000\002\"\000\029\002\"\000\000\000\000\000\000\000P\002\"\000\000\000d\028\172\020\172\000\000\000\000\000\000\002`\000\000\000d\000\000\000\000\002\"\000\029\002b\000\000\000\000\003r\028\172\002d\003\248\000\000\002\"\0002\0026\028\172\002v\000L\002B\029\208\002\000\0300\002z\000\000\021\022\000\000\002\176\000\000\000\000\004~\028\172\018\154\000\000\028\172\019\004\000\000\028\172\019n\000\000\028\172\019\216\000\000\028\172\020B\000\000\028\172\021\022\000\000\028\172\021\128\000\000\000\000\002\"\000\029\002\184\000\000\028\172\020\172\002\208\000\000\000\003\002\208\000\000\002\208\000\000\002\176\000\000\002\"\002\178\000\000\000\000\000\000\001\018\"F\000\000\002f\000\000\000\000\030f\000\000\001l\002\134\030f\002\184\000\000\000\000\0012\002\142\028\142\000b\000\003\002B\"b\"b\"b\"b\030f\000\000\"b\030\192\"b\031\b\029\n\031J\031b\031\164\"b\031\230\"b\031\254\"b @\"b \130\"b \154\"b \220\"b!\030\"b!6\"b!x\002\166\002R\"b\"\192\002T\"b!\186\002\192\002\\\"b\"\238\002`\"b!\210\002\204\002f\"b#(\002h\"b\"\020\003\022\002n\"b#V\002\238\000\000\002\246\000\000\002\204\028\172\022\190\000\000\000\000\002\206\028\172\023(\000\000\002\220\001l\002\218\028\172\023\146\000\000\000b\002\224\028\172\023\252\000\000\000\180\000\000\002\228\028\172\024f\000\000\002\230\028\172\024\208\000\000\000b\002\232\028\172\022\190\028\172\025:\000\000\000\182\000\003\000\000\002\234\028\172\025\164\000\000\002\238\028\172\026\014\000\000\000b\002\240\028\172\026x\000\000\000b\002\242\028\172\026\226\000\000\000b\002\244\028\172\023(\028\172\027L\000\000\000\180\000\000\002\246\028\172\021\128\028\172\027\182\003(\000\000\002\250\028\172\028 \000\000\002\184\001l\001\020\001l\001J\001l\000\000\001N\001l\000\000\001l\000\000\000\000\000\000\003<\000\000\002\190\001l\003@\000\000\002\194\001l\003D\000\000\000\000\002\"\001Z\002\"\000\000\001n\002\"\000\000\001\156\003l\000\000\000\000\000\000\000\000\000\000\003T\000\000\001\156\000\000\002\"\001Z\003V\000\000\028\142\000\000\000\000\002\"\001Z\003X\000\000\003L\000\000\002\158\003$\001l\002\"\000\029\003l\000\000\001l\002\"\000\029\003n\000\000\000\000\000\000\000\000\000\000\002\"\000\029\003p\000\000\003b\000\000\000\000\001x\0034\028\142\003f\000\000\000\000\000\005\0038\001l\003j\000\000\000\000\000=\003<\002\208\003n\000\000\000\000\003@\001l\003x\000\000\003,\000\000\000\000\000\000\000\000\000\000"), (16, "\002!\002!\002!\006J\002\157\002!\002!\002!\t\210\001\225\003\249\t\234\000\018\003\226\002!\002~\002!\002!\000:\002!\002!\002!\002!\002!\001\221\002!\001v\000J\002!\002!\002!\002u\002!\000\174\002!\002u\006\222\003\189\006\250\002\181\003\193\000V\002!\002!\002!\007\022\005&\000^\002!\002!\000v\002!\002!\003\185\002!\002!\002\189\002!\003\233\002\181\000\130\t\254\002!\002\181\002!\002m\000\138\000>\002}\004\158\005\210\002!\001J\002\130\000f\002!\002!\002!\002!\002!\002!\002!\002\130\000\254\002!\002!\002!\004\022\002!\001f\002!\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\006F\003\138\001n\001z\003\146\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\217\003\158\001\182\002\241\002\241\002\241\002\241\004\178\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002}\002\241\002\241\002\241\002\241\002\174\002\186\004\190\006F\007\218\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\194\004\030\002\241\002\241\002\241\004J\003\169\003\213\002\214\002\238\002\254\002\241\002\241\002U\002U\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\003\006\004\030\002\241\002\241\001j\003\217\006B\003\209\002U\007V\007f\000\174\002\165\002e\002e\002U\003\026\0036\003\222\002\149\007n\003\238\003\241\007~\003\242\004\002\001~\007\146\003F\001\249\003V\003r\004*\004>\007\154\002U\001\130\002e\007\170\002U\004\030\006\002\b\134\t\186\002e\002\133\001\134\007\186\001\138\006:\002\149\003z\001\142\004R\003\130\001\150\007\214\003\186\001\154\004V\003\194\000\254\003\202\003\210\002e\006\"\004f\003\218\002e\b\142\002\149\b\154\004\006\004\026\002\149\001\158\004.\b\230\002e\007\226\007\242\004~\b\002\b\022\b*\bF\004\n\b\242\bN\bj\004\134\0046\001\162\004:\003n\000\150\000\154\000\158\000\162\004B\000\166\000\170\000\174\001\190\004N\004Z\004j\001\194\005\018\000\178\002\133\000\182\003\234\003\177\000\186\000\190\000\194\b\254\000\198\003\177\003\177\001\242\0022\000\202\000\206\000\210\004r\001\250\000\214\000\218\002:\000\222\002B\000\226\002\002\000\230\004\130\002*\000\234\004\138\000\238\002J\001\202\004\214\004\242\002R\005\006\000\242\000\246\005\026\000\250\002\n\000\254\001\210\002Z\005\"\001\002\001\006\002b\005*\0052\002\018\001\218\005:\002\026\001\n\002\173\t^\002\"\001\014\001\018\001\022\001\026\001\030\001\"\001&\001*\002\154\002r\001.\0012\0016\001j\005J\002\234\001:\002j\005\186\002\250\000\174\002\173\005\230\005\242\006\015\006&\006.\003\222\002\173\006>\003\238\006N\003\002\003\242\004\002\001~\003\018\006\210\002\001\006\214\006\226\004*\004>\006\238\006\242\001\130\006\254\007\n\002\173\007\014\007\026\007&\002\173\007*\0076\001\134\003\022\001\138\007>\007F\007Z\001\142\004R\007j\001\150\003.\007r\001\154\004V\007\134\000\254\007\158\007\174\007\194\007\230\004f\007\246\b\n\b\030\b2\bR\bf\bn\b~\001\158\b\182\b\190\b\198\b\206\b\214\004~\0032\003B\003R\003j\t\002\t\026\t2\tN\004\134\tV\001\162\000\137\003n\tb\000\137\000\137\000\137\tr\t\134\t\166\t\174\t\190\t\198\t\214\t\222\t\238\t\246\n\002\000\137\000\137\000\137\n\n\n\019\000\000\000\137\000\137\000\000\000\000\000\137\000\000\000\137\000\000\000\137\000\000\000\137\000\137\000\000\004\254\000\000\000\137\000\137\000\137\000\000\000\137\000\000\000\000\000\000\000\000\000\000\000\137\000\000\000\137\000\137\000\000\000\000\000\000\000\137\000\000\000\137\000\137\000\137\000\137\000\137\000\000\000\137\000\137\000\137\000\000\000\165\000\000\000\000\000\165\000\165\000\165\000\000\000\137\000\000\005\n\000\000\000\000\000\000\000\000\000\137\000\000\000\137\000\165\000\165\000\165\000\000\000\000\000\000\000\165\000\165\000\000\000\000\000\165\000\000\000\165\000\000\000\165\000\000\000\165\000\165\000\000\000\000\000\000\000\165\000\165\000\165\000\000\000\165\000\000\000\000\000\000\000\000\000\000\000\165\000\000\000\165\000\165\000\000\000\000\000\000\000\165\000\000\000\165\000\165\000\165\000\165\000\165\000\000\000\165\000\165\000\165\000\000\001\153\000\000\000\000\005V\001\153\001\153\000\000\000\165\000\000\000\000\000\000\000\000\000\000\000\000\000\165\000\000\000\165\001\153\001\153\001\153\000\000\000\000\000\000\005b\001\153\000\000\000\000\001\153\000\000\001\153\000\000\001\153\000\000\005n\001\153\000\000\000\000\000\000\001\153\001\153\001\230\000\000\001\153\000\000\000\000\000\000\000\000\000\000\001\153\000\000\001\153\001\153\000\000\000\000\000\000\001\153\000\000\005z\001\153\001\153\005\134\001\153\000\000\002\150\005\146\001\153\000\000\000\000\000\137\000\000\000\000\000\000\000\137\000\137\001\153\000\000\000\000\000\137\000\137\000\000\000\000\005\158\000\000\001\153\000\137\000\137\000\137\000\137\000\000\000\000\000\000\000\000\000\137\000\000\000\000\000\137\000\000\000\137\000\000\000\137\000\000\000\000\000\137\000\000\001\170\000\000\000\137\000\137\000\137\000\000\000\137\000\000\000\000\000\000\000\000\000\000\000\137\000\000\000\137\000\137\000\000\000\000\000\000\000\137\000\000\000\000\000\137\000\137\000\000\000\137\000\000\000\137\000\000\000\137\000\000\000\000\001\153\000\000\000\000\000\000\001\153\001\153\000\137\000\137\000\000\001\153\001\153\000\137\000\000\000\000\000\000\000\137\001\153\001\153\001\153\001\153\000\000\000\000\000\000\000\000\001\153\000\000\000\000\001\153\000\000\001\153\000\000\001\153\000\000\000\000\001\153\000\000\000\000\000\000\001\153\001\153\001\230\000\000\001\153\000\000\000\000\000\000\000\000\000\000\001\153\000\000\001\153\001\153\000\000\000\000\000\000\001\153\000\000\000\000\001\153\001\153\000\000\001\153\000\000\002\150\000\000\001\153\000\000\000\000\001\190\000\000\000\000\000\000\001E\001E\001\153\001\153\000\000\001E\001E\001\153\000\000\000\000\000\000\001\153\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\202\000\000\000\000\001E\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001E\000\000\000\000\000\000\001E\000\000\000\000\001E\001\218\000\000\001E\000\000\000\000\000\000\001E\000\000\000\000\001\190\000\000\000\000\000\000\001U\001U\001E\001E\000\000\001U\001U\001E\000\000\000\000\000\000\001E\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\001U\000\000\000\000\001U\000\000\000\000\000\000\000\000\000\000\001U\000\000\001\210\001U\000\000\000\000\000\000\001U\000\000\000\000\001U\001\218\000\000\001U\000\000\000\000\000\000\001U\000\000\000\000\001\190\000\000\000\000\000\000\001a\001a\001U\001U\000\000\001a\001a\001U\000\000\000\000\000\000\001U\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\001a\000\000\000\000\001a\000\000\000\000\000\000\000\000\000\000\001a\000\000\001\210\001a\000\000\000\000\000\000\001a\000\000\000\000\001a\001\218\000\000\001a\000\000\000\000\000\000\001a\000\000\000\000\001\190\000\000\000\000\000\000\001e\001e\001a\001a\000\000\001e\001e\001a\000\000\000\000\000\000\001a\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\001e\000\000\000\000\001e\000\000\000\000\000\000\000\000\000\000\001e\000\000\001\210\001e\000\000\000\000\000\000\001e\000\000\000\000\001e\001\218\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001\129\001e\001e\000\000\001\129\001\129\001e\000\000\000\000\000\000\001e\001\129\001\129\001\129\001\129\000\000\000\000\000\000\000\000\001\250\000\000\000\000\001\129\000\000\001\129\000\000\002\002\000\000\000\000\002*\000\000\000\000\000\000\001\129\001\202\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001\129\000\000\000\000\000\000\001\129\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001=\001\129\001\129\000\000\001=\001=\001\129\000\000\000\000\000\000\001\129\001=\001=\001=\001=\000\000\000\000\000\000\000\000\001=\000\000\000\000\001=\000\000\001=\000\000\002\002\000\000\000\000\001=\000\000\000\000\000\000\001=\001\202\000\000\000\000\001=\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001=\000\000\000\000\000\000\001=\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001Q\001Q\001=\001=\000\000\001Q\001Q\001=\000\000\000\000\000\000\001=\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\001\202\000\000\000\000\001Q\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001Q\000\000\000\000\000\000\001Q\000\000\000\000\001Q\001\218\000\000\001Q\000\000\000\000\000\000\001Q\000\000\000\000\001\190\000\000\000\000\000\000\001M\001M\001Q\001Q\000\000\001M\001M\001Q\000\000\000\000\000\000\001Q\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\001M\000\000\000\000\001M\000\000\000\000\000\000\000\000\000\000\001M\000\000\001\210\001M\000\000\000\000\000\000\001M\000\000\000\000\001M\001\218\000\000\001M\000\000\000\000\000\000\001M\000\000\000\000\001\190\000\000\000\000\000\000\001Y\001Y\001M\001M\000\000\001Y\001Y\001M\000\000\000\000\000\000\001M\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\202\000\000\000\000\001Y\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001Y\000\000\000\000\000\000\001Y\000\000\000\000\001Y\001\218\000\000\001Y\000\000\000\000\000\000\001Y\000\000\000\000\001\190\000\000\000\000\000\000\001]\001]\001Y\001Y\000\000\001]\001]\001Y\000\000\000\000\000\000\001Y\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\202\000\000\000\000\001]\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001]\000\000\000\000\000\000\001]\000\000\000\000\001]\001\218\000\000\001]\000\000\000\000\000\000\001]\000\000\000\000\001\190\000\000\000\000\000\000\001I\001I\001]\001]\000\000\001I\001I\001]\000\000\000\000\000\000\001]\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\001\202\000\000\000\000\001I\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001I\000\000\000\000\000\000\001I\000\000\000\000\001I\001\218\000\000\001I\000\000\000\000\000\000\001I\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001A\001I\001I\000\000\001A\001A\001I\000\000\000\000\000\000\001I\001A\001A\001A\001A\000\000\000\000\000\000\000\000\001A\000\000\000\000\001A\000\000\001A\000\000\002\002\000\000\000\000\001A\000\000\000\000\000\000\001A\001\202\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001A\000\000\000\000\000\000\001A\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001i\001A\001A\000\000\001i\001i\001A\000\000\000\000\000\000\001A\001i\001i\001\242\001i\000\000\000\000\000\000\000\000\001\250\000\000\000\000\001i\000\000\002B\000\000\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\000\000\000\000\002b\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001u\001i\001i\000\000\001u\001u\001i\000\000\000\000\000\000\002j\001u\001u\001\242\001u\000\000\000\000\000\000\000\000\001\250\000\000\000\000\001u\000\000\001u\000\000\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\000\000\000\000\001u\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001}\001u\001u\000\000\001}\001}\001u\000\000\000\000\000\000\001u\001}\001}\001}\001}\000\000\000\000\000\000\000\000\001\250\000\000\000\000\001}\000\000\001}\000\000\002\002\000\000\000\000\002*\000\000\000\000\000\000\001}\001\202\000\000\000\000\001}\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001}\000\000\000\000\000\000\001}\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001y\001}\001}\000\000\001y\001y\001}\000\000\000\000\000\000\001}\001y\001y\001y\001y\000\000\000\000\000\000\000\000\001\250\000\000\000\000\001y\000\000\001y\000\000\002\002\000\000\000\000\002*\000\000\000\000\000\000\001y\001\202\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001y\000\000\000\000\000\000\001y\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001\133\001y\001y\000\000\001\133\001\133\001y\000\000\000\000\000\000\001y\001\133\001\133\001\133\001\133\000\000\000\000\000\000\000\000\001\250\000\000\000\000\001\133\000\000\001\133\000\000\002\002\000\000\000\000\002*\000\000\000\000\000\000\001\133\001\202\000\000\000\000\001\133\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\001\133\000\000\000\000\000\000\001\133\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001q\001\133\001\133\000\000\001q\001q\001\133\000\000\000\000\000\000\001\133\001q\001q\001\242\001q\000\000\000\000\000\000\000\000\001\250\000\000\000\000\001q\000\000\001q\000\000\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\000\000\000\000\001q\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\194\001m\001q\001q\000\000\001m\001m\001q\000\000\000\000\000\000\001q\001m\001m\001\242\001m\000\000\000\000\000\000\000\000\001\250\000\000\000\000\001m\000\000\002B\000\000\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\000\000\000\000\002b\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\194\0019\001m\001m\000\000\0019\0019\001m\000\000\000\000\000\000\001m\0019\0019\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\000\000\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\000\000\000\000\002b\000\000\000\000\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\001\190\000\000\000\000\000\000\001\137\001\137\0019\0019\000\000\001\137\001\137\0019\000\000\000\000\000\000\002j\001\137\001\137\001\137\001\137\000\000\000\000\000\000\000\000\001\137\000\000\000\000\001\137\000\000\001\137\000\000\001\137\000\000\000\000\001\137\000\000\000\000\000\000\001\137\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\001\137\000\000\001\210\001\137\000\000\000\000\000\000\001\137\000\000\000\000\001\137\001\218\000\000\001\137\000\000\000\000\000\000\001\137\000\000\000\000\001\190\000\000\000\000\000\000\001\141\001\141\001\137\001\137\000\000\001\141\001\141\001\137\000\000\000\000\000\000\001\137\001\141\001\141\001\141\001\141\000\000\000\000\000\000\000\000\001\141\000\000\000\000\001\141\000\000\001\141\000\000\001\141\000\000\000\000\001\141\000\000\000\000\000\000\001\141\001\141\000\000\000\000\001\141\000\000\000\000\000\000\000\000\000\000\001\141\000\000\001\210\001\141\000\000\000\000\000\000\001\141\000\000\000\000\001\141\001\218\000\000\001\141\000\000\000\000\000\000\001\141\000\000\000\000\001\190\000\000\000\000\000\000\001\145\001\145\001\141\001\141\000\000\001\145\001\145\001\141\000\000\000\000\000\000\001\141\001\145\001\145\001\145\001\145\000\000\000\000\000\000\000\000\001\145\000\000\000\000\001\145\000\000\001\145\000\000\001\145\000\000\000\000\001\145\000\000\000\000\000\000\001\145\001\145\000\000\000\000\001\145\000\000\000\000\000\000\000\000\000\000\001\145\000\000\001\210\001\145\000\000\001\190\000\000\001\145\000\000\001\194\001\145\001\218\000\000\001\145\003\254\003\177\000\000\001\145\000\000\000\000\000\000\002\246\000\000\001\242\0022\000\000\001\145\001\145\000\000\001\250\000\000\001\145\002:\000\000\002B\001\145\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\005^\002\230\000\000\002\"\000\000\000\000\000\000\001\205\000\000\001\242\0022\000\000\002\154\000\000\000\000\001\250\000\000\002\166\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\005j\004z\000\000\002\"\000\000\000\000\000\000\001\213\000\000\001\242\0022\000\000\001\205\002\142\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\005v\004b\000\000\002\"\000\000\000\000\000\000\001\217\000\000\001\242\0022\000\000\001\213\005\190\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\005\130\002\202\000\000\002\"\000\000\000\000\000\000\003\014\000\000\001\242\0022\000\000\001\217\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\005\142\002\209\000\000\002\"\000\000\000\000\000\000\003*\000\000\001\242\0022\000\000\002\206\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\002\129\005\198\000\000\002\"\000\000\000\000\000\000\003>\000\000\001\242\0022\000\000\002\209\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\005\154\000\000\000\000\002\"\000\000\000\000\000\000\002a\000\000\001\242\0022\000\000\002\129\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\005\166\000\000\000\000\002\"\000\000\000\000\000\000\002\141\000\000\001\242\0022\000\000\002a\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\003N\000\000\001\242\0022\000\000\bZ\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\003f\000\000\001\242\0022\000\000\003\"\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\007N\000\000\001\242\0022\000\000\003^\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\007b\000\000\001\242\0022\000\000\007\202\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\007z\000\000\001\242\0022\000\000\b:\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\007\142\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\007\166\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\007\182\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\007\210\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\007\238\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\007\254\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\b\018\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\b&\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\bB\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\002\145\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\000\000\001\210\002Z\000\000\001\190\000\000\002b\000\000\001\194\002\018\001\218\000\000\002\026\000\000\000\000\000\000\002\"\000\000\000\000\000\000\bv\000\000\001\242\0022\000\000\000\000\000\000\000\000\001\250\000\000\000\000\002:\000\000\002B\002j\002\002\000\000\000\000\002*\000\000\000\000\000\000\002J\001\202\000\000\000\000\002R\000\000\000\000\000\000\000\000\000\000\002\n\006B\001\210\002Z\007V\007f\000\000\002b\000\000\000\000\002\018\001\218\000\000\002\026\000\000\007n\b\218\002\"\007~\000\000\000\000\000\174\007\146\000\000\001\241\000\000\000\000\000\000\001r\007\154\000\000\003\246\002\017\007\170\000\000\002j\001~\000\000\001\197\000\000\000\000\000\000\007\186\000\000\000\000\000\000\001\130\000\000\000\000\000\000\000\000\007\214\000\000\000\000\000\000\000\000\001\134\000\000\001\138\000\000\000\000\000\000\001\142\001\146\000\000\001\150\000\000\000\000\001\154\000\253\000\000\000\254\000\000\000\253\007\226\007\242\000\000\b\002\b\022\b*\bF\000\000\000\000\bN\bj\001\158\000\000\000\253\000\000\003n\000\000\000\000\000\000\000\253\000\000\000\000\001\197\001\234\000\174\000\000\000\253\000\000\001\162\000\253\000\000\001r\004\n\000\000\000\253\001\230\000\000\000\000\000\000\001~\000\000\001\201\000\000\000\253\000\000\000\253\000\000\000\000\000\000\001\130\000\000\000\000\000\000\000\253\000\253\000\000\000\253\000\000\002\150\001\134\000\253\001\138\000\000\000\000\000\000\001\142\001\146\000\000\001\150\000\253\000\000\001\154\000\174\000\000\000\254\000\000\000\000\000\000\000\000\001r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001~\001\158\001\209\000\000\000\000\000\000\000\174\000\000\000\000\000\000\001\130\000\000\001\201\001r\000\000\000\000\000\000\000\000\001\162\000\000\001\134\001~\001\138\002\017\000\000\000\000\001\142\001\146\000\000\001\150\000\000\001\130\001\154\000\000\000\000\000\254\000\000\000\000\000\000\000\000\000\000\001\134\000\000\001\138\000\000\000\000\000\000\001\142\001\146\001\158\001\150\000\000\000\000\001\154\000\174\000\000\000\254\000\000\000\000\000\000\001\209\001r\000\000\000\000\000\000\000\000\001\162\000\000\000\000\001~\001\158\002]\000\000\000\000\000\000\000\006\000\n\000\000\000\000\001\130\000\014\002]\006b\000\000\000\000\000\000\000\237\001\162\000\000\001\134\000\000\001\138\000\000\000\022\000\000\001\142\001\146\000\026\001\150\001\233\000\237\001\154\000\000\000\000\000\254\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\237\000\030\001\158\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\"\006b\000\000\000\000\000\237\000\229\006f\000\000\000\000\001\162\000\000\000\000\001\233\000\000\000\237\006n\000\000\000\237\000\000\000\229\000\000\000\237\000\000\000\000\000\000\000\229\000&\000*\000.\0002\000\237\000\000\000\229\000\000\000\000\000\229\000\000\006b\0006\000\000\000\229\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\229\000\000\006f\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\229\006n\000\233\000\229\000\000\000\000\000\000\000\229\000\000\000\233\000\000\006b\000\233\000\000\000\000\000\241\000\229\000\233\000\000\000\000\000\000\000\000\000\000\006b\000\000\000\000\000\233\000\245\006f\000\241\000\000\000\000\000\000\000\000\000\000\000\241\000\233\006n\000\000\000\233\000\000\000\245\000\241\000\233\000\000\000\241\000\000\000\245\000\000\000\000\000\241\000\000\000\233\000\000\000\245\000\000\006b\000\245\000\000\000\241\006\134\006f\000\245\000\000\000\000\000\000\000\000\000\000\000\000\000\241\006n\000\245\000\241\006f\002\237\000\000\000\241\000\000\000\000\000\000\006\158\000\245\006n\000\000\000\245\000\241\000\000\006\166\000\245\006b\006\198\000\000\000\000\000\201\000\000\006\142\000\000\000\245\000\000\000\000\000\000\006b\000\000\000\000\006\150\000\217\006f\000\201\000\000\000\000\000\000\000\000\000\000\000\201\006\174\006n\000\000\006\182\000\000\000\217\000\201\006\190\000\000\000\201\000\000\000\217\000\000\000\000\006\142\000\000\006\206\000\000\000\217\000\000\006b\000\217\000\000\006\150\000\209\006f\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\201\006n\000\217\000\201\006f\000\209\000\000\000\201\000\000\000\000\000\000\000\209\000\217\006n\000\000\000\217\000\201\000\000\000\209\000\217\006b\000\209\000\000\000\000\006\134\000\000\000\209\000\000\000\217\000\000\000\000\000\000\006b\000\000\000\000\000\209\000\213\006f\000\193\000\000\000\000\000\000\000\000\000\000\000\193\000\209\006n\000\000\000\209\000\000\000\213\006\166\000\209\000\000\000\193\000\000\000\213\000\000\000\000\006\142\000\000\000\209\000\000\000\213\000\000\006b\000\213\000\000\006\150\000\221\006f\006\142\000\000\000\000\000\000\000\000\000\000\000\000\006\174\006n\006\150\006\182\006f\000\221\000\000\006\190\000\000\000\000\000\000\000\221\000\213\006n\000\000\000\213\000\193\000\000\000\221\000\213\006b\000\221\000\000\000\000\000\225\000\000\006\142\000\000\000\213\000\000\000\000\000\000\006b\000\000\000\000\006\150\000\205\006f\000\225\000\000\000\000\000\000\000\000\000\000\000\225\000\221\006n\000\000\000\221\000\000\000\205\000\225\000\221\000\000\000\225\000\000\000\205\000\000\000\000\006\142\000\000\000\221\000\000\000\205\000\000\006b\000\205\000\000\006\150\006\134\006f\006\142\000\000\000\000\000\000\000\000\000\000\000\000\000\225\006n\006\150\000\225\006f\000\197\000\000\000\225\000\000\000\000\000\000\000\197\000\205\006n\000\000\000\205\000\225\000\000\006\166\000\205\006b\000\197\000\000\000\000\006\134\000\000\006\142\000\000\000\205\000\000\000\000\000\000\006b\000\000\000\000\006\150\006\134\006f\002E\000\000\000\000\000\000\000\000\000\000\006\158\006\174\006n\000\000\006\182\000\000\002I\006\166\006\190\000\000\006\198\000\000\006\158\000\000\000\000\006\142\000\000\000\197\000\000\006\166\000\000\006b\006\198\000\000\006\150\006\134\006f\006\142\000\000\000\000\000\000\000\000\000\000\000\000\006\174\006n\006\150\006\182\006f\002\233\002M\006\190\000\000\000\000\002M\006\158\006\174\006n\000\000\006\182\006\234\000\000\006\166\006\190\000\000\006\198\002\t\002M\000\000\000\174\006\142\002M\007\006\000\000\000\000\000\000\001r\000\000\000\000\006\150\000\000\006f\000\000\000\000\001~\000\000\000\000\000\000\000\000\006\174\006n\002M\006\182\000\000\006R\000\000\006\190\000\000\000\000\000\000\002M\000\000\000\000\000\000\006V\007\"\001\138\000\000\000\000\000\000\001\142\001\146\000\000\001\150\000\000\000\000\001\154\006b\000\000\000\254\000\000\006\134\001N\000\000\000\000\000\000\002M\002M\002M\002M\000\000\000\000\000\000\001\158\000\000\002\229\000\000\000\000\002M\000\000\006b\006\158\000\000\000\000\006\134\000\000\000\000\000\000\006\166\000\000\006Z\006\198\000\000\000\000\000\000\000\000\006\142\000\000\002=\000\000\000\000\000\000\000\000\000\000\006\158\006\150\000\000\006f\000\n\006b\000\000\006\166\000R\006\134\006\198\006\174\006n\000\000\006\182\006\142\000\000\000\000\006\190\000\000\000\000\000\022\000\000\002A\006\150\000\026\006f\000\000\006b\006\158\000\000\000\000\006\134\000\000\006\174\006n\006\166\006\182\000\000\006\198\000\000\006\190\000\000\000\000\006\142\000\030\002\225\000\000\000\000\000\000\000\000\000\000\006\158\006\150\000\"\006f\000\000\000\000\000\000\006\166\000\000\000\000\006\198\006\174\006n\000\000\006\182\006\142\000\000\000\000\006\190\000\000\000\000\000\000\000\000\000\000\006\150\000\000\006f\000\000\000&\000*\000.\0002\000\000\000\000\006\174\006n\000\000\006\182\000\000\000\000\000\000\006\190"))
  
  and lhs =
    (8, "\001\000WVUUTTSSSSSSSSSSSSSSSSSRRRRRRRRRQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPONNNMMMLLLKKJJIIIIIIIIIIIIIIIIIIIIIIIIIHGFEDCBA@@???????>>==<<;;::9988766666665444433221100//..--,,++**))((''&&%%$#\"!!! \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\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, "\0008\000\000\000\000\000\000\000\148\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000o\000M\000\000\000\000\000\000\000s\000\000\001\006\000\000\000\254\000\000\0018\000\000\000\000\000\000\000\000\000\000\000\000\001B\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\b\003\218\000\000\000\000\000\031\000\000\000[\000\000\000\000\000\000\000\000\000!\002\\\002\242\000\178\001\160\000\000\000\000\000\000\0038\000\000\001\028\000\000\000\000\000\000\000\000\000\000\003\152\000\000\003\158\000\000\003\178\000\000\003\182\000\000\000\000\000y\003\210\000\000\003\236\000\000\003\242\000\000\003\248\000\000\003\250\000\000\004\000\000\000\004\006\000\000\004\030\000\000\004 \000\000\004$\000\000\004&\000\000\004*\000\000\004,\000\000\004D\000\000\004J\000\000\004P\000\000\004R\000\000\004X\000\000\000\000\000\000\000=\000\000\000\000\004^\000\000\000\000\003F\000\000\000\000\001\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003N\000\000\000\000\000\000\000\000\000\000\001\190\000\000\004v\000\000\000\000\000\000\000\200\000\000\004x\000\000\000\000\000\000\000\000\004|\000\000\004~\000\000\000\000\000\000\000\000\004\130\000\000\000\000\000\000\004\132\000\000\000\000\000\000\004\156\000\000\004\162\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\001\222\000\000\002\140\000\000\000\000\002\154\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\002\180\000\000\000\000\000\000\002\194\000\000\000\000\000\000\004\168\000\000\000\000\000\000\004\170\000\000\000\000\000\000\000\000\002\140\000\000\000\000\000\000\000\000\000\000\002\200\000\000\000\000\000\000\000\128\000\000\000\000\000\018\000\000\002\210\000\000\000\000\000\000\000\005\000\000\004\176\000\000\001\212\000\000\000t\000\000\004\182\000\000\002\012\000\000\000\000\000\000\000\000\000\000\000\000\003T\0016\000\210\000\000\000\000\000\000\000\000\001@\000\000\000\246\004\206\000\000\000\000\000\000\000\000\000\000\000\000\001$\000\000\000\000\003V\002\016\000\000\000\000\000\000\000\000\002d\000\000\000\000\000\000\000\000\000x\000\000\002\230\000\000\001\170\000\000\003f\000\000\003\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\208\000\000\000\000\004\212\000\000\000\000\004\214\000\000\000\000\004\218\000\000\000\000\004\220\000\000\000\000\004\244\000\000\000\000\004\250\000\000\000\000\000\000\003~\002H\000\000\000\000\005\000\000\000\0024\000\000\000\000\002\128\000\000\000T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d\000\000\000\000\000\000\000\000\001\002\000\000\000\n\000\000\001p\000\000\000\000\000\000\000S\000\000\0008\001\202\002X\000\000\000e\001\166\001\204\001\210\000\000\000\000\003\016\000\000\005\004\000\000\000\000\000\000\000\000\000\000\005\b\000\000\005\014\000\000\005\020\000\000\005\024\000\000\005\030\000\000\005,\000\000\0052\000\000\005<\000\000\005B\000\000\000\000\000\000\005F\000\000\000\000\005J\000\000\000\000\000\000\005P\000\000\000\000\005V\000\000\000\000\000\000\005Z\000\000\000\000\005`\000\000\000\000\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\005t\000\000\000\000\000\000\000\000\005\136\000\000\000\000\000\000\003x\000\000\005\138\000\000\000\000\002\134\000\000\005\140\000\000\000\000\002\190\000\000\000\000\005\146\000\000\000\000\000\000\005\148\000\000\000\000\002\236\000\000\005\160\000\000\005\168\000\000\000\000\000\198\001\n\000\000\000\000\005\188\000\000\000\000\000\000\005\190\000\000\000\000\002\248\000\000\005\192\000\000\000\000\003\004\000\000\005\196\000\000\000\000\004\026\000\000\005\198\000\000\005\200\000\000\000\000\004\"\000\000\000\000\005\220\001\\\005\228\000\000\000\000\000\000\000\000\005\240\000\000\000\000\000\000\002\238\000\000\002\244\000\000\003\022\000\000\000\000\003$\000\000\001x\000\000\000\000\000\000\000\000\000\000\000\000\003N\000\000\000\000\000\000\003b\000\000\000\000\000\000\003\184\003H\003\"\000\000\000\000\003,\000\000\0026\001\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\244\000\000\003\198\0042\000\000\000\000\000B\000\000\000\000\003\204\004^\000\000\000\000\000\000\000\000\004\190\000\000\000r\003\132\004\180\000\000\000\000\000\180\003\224\005\012\000\000\000\000\000\000\000\000\000\000\000\000\003\230\0050\000\000\000\000\000\000\000\000\000\000\005F\000\000\001 \000\000\000\000\000\000\004\198\000\000\001\014\000\000\000\000\000\000\002\224\000\000\001^\000\000\000\000\000\184\000\000\001|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"), (16, "\001w\001%\001\127\000\159\000j\000\020\001&\000\018\000\226\002W\000\235\001w\001%\000\163\000j\0019\001:\001&\000\228\000j\000\236\000y\000\174\000\238\000\017\000\031\0019\001:\000\185\000U\001\161\001\158\000$\000\162\000j\0028\000y\001\141\002\136\001>\0028\002J\002N\000\163\001w\001%\002J\002N\000j\001?\001&\000y\001>\001\142\000%\000V\001y\000\184\001D\0019\001:\000Y\001?\001>\002Z\000y\001U\001|\001k\002^\002_\001{\002c\001?\002d\001\130\001T\002\137\000 \001U\001\r\001k\001D\001l\000\234\000\231\000\234\001T\002U\001\131\001U\001\128\001k\002O\001l\000\234\001>\002Z\001\133\001\134\001x\000V\002^\002_\002P\002c\001?\002d\000\224\002P\000\028\001>\002Q\000l\002)\001D\002k\002Q\000\240\002)\001T\001?\001\028\001U\001F\001k\001)\001l\000\234\001\248\001D\000\025\001*\000$\002f\000\023\000W\001\128\001U\002\132\001k\002g\002Z\002)\001>\000\176\000\029\002^\002_\002e\002c\0028\002d\000j\001?\000%\000\028\002J\002N\0012\000\025\002\134\000\169\001D\001\205\000\025\000l\002f\0013\001+\000y\001U\001,\001k\002g\000\027\002)\001w\001%\001/\000\"\001.\0018\001&\0014\000\244\000\234\001*\000$\001>\001\135\0013\0019\001:\002w\002*\0015\002Z\000m\001?\001\134\002+\002^\002_\002q\002c\000j\002d\001D\000\028\000%\000\028\002f\000\028\000\028\000o\001U\002\025\001k\002g\002P\002)\001Q\000y\001+\001~\001%\001,\002Q\001>\002)\001&\000\174\002}\001/\001\209\001t\001%\000\028\001?\0019\001:\001&\000\028\001>\001\139\000l\000\226\001D\002\130\001R\0019\001:\001T\001?\001\134\001U\000\228\001k\001\213\001l\000\234\000\237\001D\001$\001%\000\028\002f\002B\000\000\001&\001U\000j\001k\002g\000j\002)\001>\000\171\0019\001:\000\169\000\000\000\000\001s\001%\000j\001?\001>\000y\001&\001\160\001\158\0014\000j\000\169\001D\000j\001?\0019\001:\001T\000P\000y\001U\001<\001k\001D\001l\000\234\001\159\001\158\001T\001\152\001\158\001U\001>\001k\002C\001l\000\234\0014\001v\001%\000\231\000\234\001?\002D\001&\001\225\000l\001\205\000\000\001n\000\226\001D\001>\0019\001:\000Q\001T\000\226\001\004\001U\000\228\001k\001?\001l\000\234\000\230\000R\000\228\001\207\001\213\000\226\001D\000\233\001\230\000\000\001\005\001T\000\226\001A\001U\000\228\001k\000j\001l\000\234\000\242\000j\000\228\001\004\000\000\001>\000\183\000\246\001\004\000\000\000o\001\240\001\213\002!\000y\001?\002!\002\002\000y\002#\001\t\000j\002#\002\007\001D\001\018\000l\000\000\002-\001T\001\n\002,\001U\002!\001k\001\213\001l\000\234\000y\002#\002!\001\213\000\231\000\234\002I\002\127\002#\001\213\002%\000\231\000\234\000j\002;\002D\002\135\002(\000j\002>\001H\001*\001\n\002!\000\231\000\234\001*\001\n\000j\002#\000y\000\231\000\234\002!\000j\000y\000\168\000\169\0021\002#\000\181\002E\000\222\000\178\002\031\000y\000P\000P\0025\000j\002/\000y\002&\002F\002)\002&\000\000\002)\001+\002<\000\000\000\000\000\000\001+\002<\001\155\001\158\000P\002?\000j\000P\000\000\002&\002?\002)\000\000\000j\001L\000\173\002&\000j\002)\000j\000Q\000Q\000\169\000y\001'\001;\000\169\001N\000\169\000j\000y\0017\0017\000P\000y\000\000\000y\002&\001P\002)\000P\000Q\000j\000P\000Q\001m\000y\002&\002[\002)\000P\001P\0017\000P\000j\0017\000P\000j\0023\000y\002)\002\012\000\000\000r\000\000\002\019\000t\000j\000\000\000j\000Q\000y\0029\000\000\000y\000\000\000v\000Q\000x\002K\000Q\002H\002R\000j\000y\001\213\000y\000Q\002H\001\213\000Q\002H\000|\000Q\002`\002E\000j\002h\000X\000j\000y\0017\000j\000j\0017\000~\000j\002L\000\128\000j\000\000\000\130\000\132\000y\000\000\000\134\000y\002E\000\136\000y\000y\000j\000j\000y\000j\000j\000y\000j\000j\002S\000\138\000\140\000\000\000\142\000\144\000\000\000\146\000\148\000y\000y\000j\000y\000y\000j\000y\000y\000j\000j\002m\000\150\000j\002y\000\152\000j\000\000\000\154\000\156\000y\000\000\000\158\000y\0014\000\165\000y\000y\000j\000j\000y\000j\000j\000y\000j\000j\002\\\000\189\000\195\002n\000\200\000\202\002z\000\207\000\211\000y\000y\000j\000y\000y\000j\000y\000y\000j\000j\000\000\000\215\000j\000\000\000\217\000j\000\000\000\250\000\255\000y\000\000\001\024\000y\0014\001\030\000y\000y\000j\000j\000y\000j\000j\000y\000j\000j\002a\0011\001W\000\000\001Z\001]\0014\001`\001c\000y\000y\000j\000y\000y\000j\000y\000y\000j\002i\000j\001f\000j\002s\001i\000j\000\000\001q\000j\000y\000j\002t\000y\000j\000\000\000y\001\157\001\158\001\163\001\158\000j\001\165\001\158\000j\001\167\001\158\001\169\001\158\000j\001\171\001\158\000j\000\000\000j\000\000\000j\001\173\001\158\000j\001\175\001\158\000j\000\000\000j\001\177\001\158\000j\001\179\001\158\001\183\001\158\001\186\001\158\000j\001\190\001\158\000j\001\193\001\158\001\197\001\158\000\000\001\200\001\158\000\000\001\211\000j\000j\000j\001\204\001\158\000j\000j\000y\000\000\001\216\001\222\001\227\000j\000\000\001\233\001\237\000j\000y\000y\000y\000\000\001\242\000y\000y\000\000\001\244\000j\000j\000j\000y\000j\000j\000j\000y\000\000\001\251\001\255\002\004\000\000\002\t\002\014\002\016\000j\000y\000y\000y\000j\000y\000y\000y\000\000\002\022\000j\000\000\000\000\002\024\000\000\000\000\000\000\000y\000\000\002\029\000\000\000y\000\000\000\000\000\000\000\000\000\000\000y"))
  
  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) = 
# 288 "src/frontend/parser.mly"
    (  grammar_logger "arg_decl" ;
       match od with None -> (UnsizedType.AutoDiffable, ut, id) | _ -> (DataOnly, ut, id)  )
# 641 "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) = 
# 536 "src/frontend/parser.mly"
                 ( grammar_logger "array dims" ; l  )
# 687 "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) = 
# 400 "src/frontend/parser.mly"
  ( grammar_logger "array_type" ;
    let (type_, trans) = ty in
    ((reducearray (type_, dims)), trans)
  )
# 724 "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) = 
# 400 "src/frontend/parser.mly"
  ( grammar_logger "array_type" ;
    let (type_, trans) = ty in
    ((reducearray (type_, dims)), trans)
  )
# 761 "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) = 
# 400 "src/frontend/parser.mly"
  ( grammar_logger "array_type" ;
    let (type_, trans) = ty in
    ((reducearray (type_, dims)), trans)
  )
# 798 "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) = 
# 400 "src/frontend/parser.mly"
  ( grammar_logger "array_type" ;
    let (type_, trans) = ty in
    ((reducearray (type_, dims)), trans)
  )
# 835 "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 = 
# 753 "src/frontend/parser.mly"
    (  grammar_logger "assign_plain" ; Assign )
# 882 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 722 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 893 "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 = 
# 755 "src/frontend/parser.mly"
    ( grammar_logger "assign_plus" ; OperatorAssign Plus )
# 944 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 722 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 955 "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 = 
# 757 "src/frontend/parser.mly"
    ( grammar_logger "assign_minus" ; OperatorAssign Minus )
# 1006 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 722 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1017 "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 = 
# 759 "src/frontend/parser.mly"
    ( grammar_logger "assign_times"  ; OperatorAssign Times )
# 1068 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 722 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1079 "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 = 
# 761 "src/frontend/parser.mly"
    ( grammar_logger "assign_divide" ; OperatorAssign Divide )
# 1130 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 722 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1141 "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 = 
# 763 "src/frontend/parser.mly"
    ( grammar_logger "assign_elttimes"  ; OperatorAssign EltTimes )
# 1192 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 722 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1203 "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 = 
# 765 "src/frontend/parser.mly"
    ( grammar_logger "assign_eltdivide" ; OperatorAssign EltDivide  )
# 1254 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_l_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 722 "src/frontend/parser.mly"
    (  grammar_logger "assignment_statement" ;
       Assignment {assign_lhs=try_convert_to_lvalue l _sloc;
                   assign_op=op;
                   assign_rhs=e} )
# 1265 "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 = 
# 241 "<standard.mly>"
    ( xs )
# 1323 "src/frontend/parser.ml"
           in
          (
# 727 "src/frontend/parser.mly"
    (  grammar_logger "funapp_statement" ; NRFunApp ((),id, args)  )
# 1328 "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 = _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 = 
# 241 "<standard.mly>"
    ( xs )
# 1407 "src/frontend/parser.ml"
           in
          (
# 730 "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  }
    )
# 1415 "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) = 
# 735 "src/frontend/parser.mly"
    (   grammar_logger "targetpe_statement" ; TargetPE e )
# 1468 "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) = 
# 737 "src/frontend/parser.mly"
    (  grammar_logger "break_statement" ; Break )
# 1503 "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) = 
# 739 "src/frontend/parser.mly"
    (  grammar_logger "continue_statement" ; Continue )
# 1538 "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) = 
# 741 "src/frontend/parser.mly"
    (  grammar_logger "print_statement" ; Print l )
# 1594 "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) = 
# 743 "src/frontend/parser.mly"
    (  grammar_logger "reject_statement" ; Reject l  )
# 1650 "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) = 
# 745 "src/frontend/parser.mly"
    (  grammar_logger "return_statement" ; Return e )
# 1692 "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) = 
# 747 "src/frontend/parser.mly"
    (  grammar_logger "return_nothing_statement" ; ReturnVoid )
# 1727 "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) = 
# 749 "src/frontend/parser.mly"
    (  grammar_logger "skip" ; Skip )
# 1755 "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) = 
# 311 "src/frontend/parser.mly"
    (  grammar_logger "basic_type INT" ; UnsizedType.UInt  )
# 1780 "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) = 
# 313 "src/frontend/parser.mly"
    (  grammar_logger "basic_type REAL"  ; UnsizedType.UReal )
# 1805 "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) = 
# 315 "src/frontend/parser.mly"
    ( grammar_logger "basic_type COMPLEX" ; UnsizedType.UComplex )
# 1830 "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) = 
# 317 "src/frontend/parser.mly"
    (  grammar_logger "basic_type VECTOR" ; UnsizedType.UVector )
# 1855 "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 ROWVECTOR" ; UnsizedType.URowVector )
# 1880 "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 MATRIX" ; UnsizedType.UMatrix )
# 1905 "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 COMPLEXVECTOR" ; UnsizedType.UComplexVector )
# 1930 "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 COMPLEXROWVECTOR" ; UnsizedType.UComplexRowVector )
# 1955 "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 COMPLEXMATRIX" ; UnsizedType.UComplexMatrix )
# 1980 "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
          (
# 575 "src/frontend/parser.mly"
    ( grammar_logger "identifier_expr" ;
      build_expr (Variable id) _loc )
# 2010 "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 : (
# 89 "src/frontend/parser.mly"
       (string)
# 2032 "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
          (
# 578 "src/frontend/parser.mly"
    ( grammar_logger ("intnumeral " ^ i) ;
      build_expr (IntNumeral i) _loc )
# 2045 "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 : (
# 90 "src/frontend/parser.mly"
       (string)
# 2067 "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
          (
# 582 "src/frontend/parser.mly"
    ( grammar_logger ("realnumeral " ^ r) ;
      build_expr (RealNumeral r) _loc )
# 2080 "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 : (
# 90 "src/frontend/parser.mly"
       (string)
# 2102 "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
          (
# 582 "src/frontend/parser.mly"
    ( grammar_logger ("realnumeral " ^ r) ;
      build_expr (RealNumeral r) _loc )
# 2115 "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 : (
# 91 "src/frontend/parser.mly"
       (string)
# 2137 "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
          (
# 585 "src/frontend/parser.mly"
    ( grammar_logger ("imagnumeral " ^ z) ;
      build_expr (ImagNumeral (String.drop_suffix z 1)) _loc )
# 2150 "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
          (
# 588 "src/frontend/parser.mly"
    ( grammar_logger "array_expression" ;
      build_expr (ArrayExpr xs) _loc )
# 2195 "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 = 
# 241 "<standard.mly>"
    ( xs )
# 2236 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__3_ in
          let _startpos = _startpos__1_ in
          let _loc = (_startpos, _endpos) in
          (
# 591 "src/frontend/parser.mly"
    ( grammar_logger "row_vector_expression" ;
      build_expr (RowVectorExpr xs) _loc )
# 2245 "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 = 
# 241 "<standard.mly>"
    ( xs )
# 2293 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _startpos = _startpos_id_ in
          let _loc = (_startpos, _endpos) in
          (
# 594 "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 )
# 2308 "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
          (
# 603 "src/frontend/parser.mly"
    ( grammar_logger "target_read" ;
      build_expr GetTarget _loc )
# 2353 "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 = 
# 241 "<standard.mly>"
    ( xs )
# 2415 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__6_ in
          let _startpos = _startpos_id_ in
          let _loc = (_startpos, _endpos) in
          (
# 607 "src/frontend/parser.mly"
    ( grammar_logger "conditional_dist_app" ;
      build_expr (CondDistApp ((), id, e :: args)) _loc )
# 2424 "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
          (
# 610 "src/frontend/parser.mly"
    ( grammar_logger "tuple_expression" ;
      build_expr (TupleExpr (x_head::xs)) _loc  )
# 2483 "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 : (
# 90 "src/frontend/parser.mly"
       (string)
# 2511 "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
          (
# 613 "src/frontend/parser.mly"
    ( grammar_logger "common_expression_tuple_index" ;
      build_expr (TupleProjection (e, parse_tuple_slot ix_str _loc)) _loc
    )
# 2526 "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
          (
# 617 "src/frontend/parser.mly"
    ( grammar_logger "common_expression_indexed";
      build_expr (Indexed (e, indices)) _loc )
# 2578 "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
          (
# 620 "src/frontend/parser.mly"
    ( grammar_logger "extra_paren" ;
      build_expr (Paren e) _loc )
# 2623 "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 = 
# 643 "src/frontend/parser.mly"
    (  grammar_logger "infix_plus" ; Operator.Plus )
# 2664 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2675 "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 = 
# 645 "src/frontend/parser.mly"
    (   grammar_logger "infix_minus" ;Operator.Minus )
# 2716 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2727 "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 = 
# 647 "src/frontend/parser.mly"
    (  grammar_logger "infix_times" ; Operator.Times )
# 2768 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2779 "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 = 
# 649 "src/frontend/parser.mly"
    (  grammar_logger "infix_divide" ; Operator.Divide )
# 2820 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2831 "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 = 
# 651 "src/frontend/parser.mly"
    (  grammar_logger "infix_intdivide" ; Operator.IntDivide )
# 2872 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2883 "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 = 
# 653 "src/frontend/parser.mly"
    (  grammar_logger "infix_modulo" ; Operator.Modulo )
# 2924 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2935 "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 = 
# 655 "src/frontend/parser.mly"
    (  grammar_logger "infix_ldivide" ; Operator.LDivide )
# 2976 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 2987 "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 = 
# 657 "src/frontend/parser.mly"
    (  grammar_logger "infix_elttimes" ; Operator.EltTimes )
# 3028 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3039 "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 = 
# 659 "src/frontend/parser.mly"
    (   grammar_logger "infix_eltdivide" ; Operator.EltDivide )
# 3080 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3091 "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 = 
# 661 "src/frontend/parser.mly"
    (  grammar_logger "infix_hat" ; Operator.Pow )
# 3132 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3143 "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 = 
# 663 "src/frontend/parser.mly"
    (  grammar_logger "infix_eltpow" ; Operator.EltPow )
# 3184 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 555 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_arithmetic" ;
      build_expr (BinOp (e1, op, e2)) _loc
    )
# 3195 "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 = 
# 625 "src/frontend/parser.mly"
    (   grammar_logger "prefix_bang" ; Operator.PNot )
# 3229 "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
          (
# 560 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_prefixOp" ;
      build_expr (PrefixOp (op, e)) _loc
    )
# 3241 "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 = 
# 627 "src/frontend/parser.mly"
    (  grammar_logger "prefix_minus" ; Operator.PMinus )
# 3275 "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
          (
# 560 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_prefixOp" ;
      build_expr (PrefixOp (op, e)) _loc
    )
# 3287 "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 = 
# 629 "src/frontend/parser.mly"
    (   grammar_logger "prefix_plus" ; Operator.PPlus )
# 3321 "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
          (
# 560 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_prefixOp" ;
      build_expr (PrefixOp (op, e)) _loc
    )
# 3333 "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 = 
# 633 "src/frontend/parser.mly"
    (  grammar_logger "postfix_transpose" ; Operator.Transpose )
# 3367 "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
          (
# 565 "src/frontend/parser.mly"
    (
      grammar_logger "constr_expression_postfix" ;
      build_expr (PostfixOp (e, op)) _loc
    )
# 3379 "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) = 
# 570 "src/frontend/parser.mly"
    ( grammar_logger "constr_expression_common_expr" ; e )
# 3405 "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
          (
# 183 "src/frontend/parser.mly"
    ( grammar_logger "data_block" ;
      {stmts= tvd; xloc= location_span_of_positions _loc} )
# 3457 "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 = 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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3509 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 371 "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
        }
      })
    )
# 3531 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3584 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 371 "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
        }
      })
    )
# 3606 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3659 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 371 "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
        }
      })
    )
# 3681 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3734 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 371 "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
        }
      })
    )
# 3756 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3809 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 371 "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
        }
      })
    )
# 3831 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3884 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 371 "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
        }
      })
    )
# 3906 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 3959 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 371 "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
        }
      })
    )
# 3981 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 4034 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 371 "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
        }
      })
    )
# 4056 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 4109 "src/frontend/parser.ml"
           in
          let _endpos = _endpos__4_ in
          let _symbolstartpos = _startpos_ty_ in
          let _sloc = (_symbolstartpos, _endpos) in
          (
# 371 "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
        }
      })
    )
# 4131 "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) = 
# 218 "src/frontend/parser.mly"
                  ( id )
# 4159 "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) = 
# 219 "src/frontend/parser.mly"
                      ( reserved err )
# 4184 "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) = 
# 222 "src/frontend/parser.mly"
                  ( id )
# 4209 "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) = 
# 223 "src/frontend/parser.mly"
                      ( reserved_decl err )
# 4234 "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
          (
# 541 "src/frontend/parser.mly"
    ( grammar_logger "ifthenelse_expr" ; build_expr (TernaryIf (e1, e2, e3)) _loc )
# 4291 "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 = 
# 643 "src/frontend/parser.mly"
    (  grammar_logger "infix_plus" ; Operator.Plus )
# 4333 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4338 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4347 "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 = 
# 645 "src/frontend/parser.mly"
    (   grammar_logger "infix_minus" ;Operator.Minus )
# 4389 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4394 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4403 "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 = 
# 647 "src/frontend/parser.mly"
    (  grammar_logger "infix_times" ; Operator.Times )
# 4445 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4450 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4459 "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 = 
# 649 "src/frontend/parser.mly"
    (  grammar_logger "infix_divide" ; Operator.Divide )
# 4501 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4506 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4515 "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 = 
# 651 "src/frontend/parser.mly"
    (  grammar_logger "infix_intdivide" ; Operator.IntDivide )
# 4557 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4562 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4571 "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 = 
# 653 "src/frontend/parser.mly"
    (  grammar_logger "infix_modulo" ; Operator.Modulo )
# 4613 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4618 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4627 "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 = 
# 655 "src/frontend/parser.mly"
    (  grammar_logger "infix_ldivide" ; Operator.LDivide )
# 4669 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4674 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4683 "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 = 
# 657 "src/frontend/parser.mly"
    (  grammar_logger "infix_elttimes" ; Operator.EltTimes )
# 4725 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4730 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4739 "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 = 
# 659 "src/frontend/parser.mly"
    (   grammar_logger "infix_eltdivide" ; Operator.EltDivide )
# 4781 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4786 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4795 "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 = 
# 661 "src/frontend/parser.mly"
    (  grammar_logger "infix_hat" ; Operator.Pow )
# 4837 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4842 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4851 "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 = 
# 663 "src/frontend/parser.mly"
    (  grammar_logger "infix_eltpow" ; Operator.EltPow )
# 4893 "src/frontend/parser.ml"
             in
            
# 637 "src/frontend/parser.mly"
    (   grammar_logger "infix_arithmetic" ; a )
# 4898 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4907 "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 = 
# 667 "src/frontend/parser.mly"
    (   grammar_logger "infix_or" ; Operator.Or )
# 4949 "src/frontend/parser.ml"
             in
            
# 639 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 4954 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 4963 "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 = 
# 669 "src/frontend/parser.mly"
    (   grammar_logger "infix_and" ; Operator.And )
# 5005 "src/frontend/parser.ml"
             in
            
# 639 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5010 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5019 "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 = 
# 671 "src/frontend/parser.mly"
    (   grammar_logger "infix_equals" ; Operator.Equals )
# 5061 "src/frontend/parser.ml"
             in
            
# 639 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5066 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5075 "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 = 
# 673 "src/frontend/parser.mly"
    (   grammar_logger "infix_nequals" ; Operator.NEquals)
# 5117 "src/frontend/parser.ml"
             in
            
# 639 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5122 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5131 "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 = 
# 675 "src/frontend/parser.mly"
    (   grammar_logger "infix_less" ; Operator.Less )
# 5173 "src/frontend/parser.ml"
             in
            
# 639 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5178 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5187 "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 = 
# 677 "src/frontend/parser.mly"
    (   grammar_logger "infix_leq" ; Operator.Leq )
# 5229 "src/frontend/parser.ml"
             in
            
# 639 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5234 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5243 "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 = 
# 679 "src/frontend/parser.mly"
    (   grammar_logger "infix_greater" ; Operator.Greater )
# 5285 "src/frontend/parser.ml"
             in
            
# 639 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5290 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5299 "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 = 
# 681 "src/frontend/parser.mly"
    (   grammar_logger "infix_geq" ; Operator.Geq )
# 5341 "src/frontend/parser.ml"
             in
            
# 639 "src/frontend/parser.mly"
    (  grammar_logger "infix_logical" ; l )
# 5346 "src/frontend/parser.ml"
            
          in
          let _endpos = _endpos_e2_ in
          let _startpos = _startpos_e1_ in
          let _loc = (_startpos, _endpos) in
          (
# 543 "src/frontend/parser.mly"
    ( grammar_logger "infix_expr" ; build_expr (BinOp (e1, op, e2)) _loc  )
# 5355 "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 = 
# 625 "src/frontend/parser.mly"
    (   grammar_logger "prefix_bang" ; Operator.PNot )
# 5389 "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
          (
# 545 "src/frontend/parser.mly"
    ( grammar_logger "prefix_expr" ; build_expr (PrefixOp (op, e)) _loc )
# 5398 "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 = 
# 627 "src/frontend/parser.mly"
    (  grammar_logger "prefix_minus" ; Operator.PMinus )
# 5432 "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
          (
# 545 "src/frontend/parser.mly"
    ( grammar_logger "prefix_expr" ; build_expr (PrefixOp (op, e)) _loc )
# 5441 "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 = 
# 629 "src/frontend/parser.mly"
    (   grammar_logger "prefix_plus" ; Operator.PPlus )
# 5475 "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
          (
# 545 "src/frontend/parser.mly"
    ( grammar_logger "prefix_expr" ; build_expr (PrefixOp (op, e)) _loc )
# 5484 "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 = 
# 633 "src/frontend/parser.mly"
    (  grammar_logger "postfix_transpose" ; Operator.Transpose )
# 5518 "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
          (
# 547 "src/frontend/parser.mly"
    ( grammar_logger "postfix_expr" ; build_expr (PostfixOp (e, op)) _loc)
# 5527 "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) = 
# 549 "src/frontend/parser.mly"
    ( grammar_logger "common_expr" ; e )
# 5553 "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
          (
# 178 "src/frontend/parser.mly"
    ( grammar_logger "function_block" ;
      {stmts= fd; xloc= location_span_of_positions _loc} )
# 5605 "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 = 
# 241 "<standard.mly>"
    ( xs )
# 5670 "src/frontend/parser.ml"
           in
          let _endpos = _endpos_b_ in
          let _startpos = _startpos_rt_ in
          let _loc = (_startpos, _endpos) in
          (
# 272 "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}
      }
    )
# 5684 "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
          (
# 164 "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= [] }
    )
# 5731 "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
          (
# 208 "src/frontend/parser.mly"
    ( grammar_logger "generated_quantities_block" ;
      {stmts= tvds; xloc= location_span_of_positions _loc} )
# 5784 "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) = 
# 347 "src/frontend/parser.mly"
    ( Ast.{identifier; initial_value} )
# 5818 "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) = 
# 347 "src/frontend/parser.mly"
    ( Ast.{identifier; initial_value} )
# 5850 "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) = 
# 347 "src/frontend/parser.mly"
    ( Ast.{identifier; initial_value} )
# 5882 "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) = 
# 347 "src/frontend/parser.mly"
    ( Ast.{identifier; initial_value} )
# 5914 "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 : (
# 93 "src/frontend/parser.mly"
       (string)
# 5935 "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
          (
# 213 "src/frontend/parser.mly"
                  ( build_id id _loc )
# 5947 "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
          (
# 214 "src/frontend/parser.mly"
             ( build_id "T" _loc)
# 5977 "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) = 
# 685 "src/frontend/parser.mly"
    (   grammar_logger "index_nothing" ; [All] )
# 5996 "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) = 
# 687 "src/frontend/parser.mly"
    (   grammar_logger "index_all" ; [All] )
# 6021 "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) = 
# 689 "src/frontend/parser.mly"
    (  grammar_logger "index_single" ; [Single e] )
# 6046 "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) = 
# 691 "src/frontend/parser.mly"
    (  grammar_logger "index_upper" ; [Upfrom e] )
# 6078 "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) = 
# 693 "src/frontend/parser.mly"
    (   grammar_logger "index_lower" ; [Downfrom e] )
# 6110 "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) = 
# 695 "src/frontend/parser.mly"
    (  grammar_logger "index_twosided" ; [Between (e1, e2)] )
# 6149 "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) = 
# 697 "src/frontend/parser.mly"
    (  grammar_logger "indexes" ; i1 @ i2 )
# 6188 "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) = 
# 216 "<standard.mly>"
    ( [] )
# 6206 "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) = 
# 219 "<standard.mly>"
    ( x :: xs )
# 6238 "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) = 
# 216 "<standard.mly>"
    ( [] )
# 6257 "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) = 
# 219 "<standard.mly>"
    ( x :: xs )
# 6291 "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) = 
# 216 "<standard.mly>"
    ( [] )
# 6310 "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) = 
# 219 "<standard.mly>"
    ( x :: xs )
# 6345 "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) = 
# 216 "<standard.mly>"
    ( [] )
# 6364 "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) = 
# 219 "<standard.mly>"
    ( x :: xs )
# 6399 "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) = 
# 216 "<standard.mly>"
    ( [] )
# 6418 "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) = 
# 219 "<standard.mly>"
    ( x :: xs )
# 6453 "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) = 
# 145 "<standard.mly>"
    ( [] )
# 6472 "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) = 
# 148 "<standard.mly>"
    ( x )
# 6499 "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) = 
# 145 "<standard.mly>"
    ( [] )
# 6517 "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) = 
# 148 "<standard.mly>"
    ( x )
# 6542 "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
          (
# 203 "src/frontend/parser.mly"
    ( grammar_logger "model_block" ;
      {stmts= vds; xloc= location_span_of_positions _loc} )
# 6594 "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) = 
# 783 "src/frontend/parser.mly"
    (  grammar_logger "ifelse_statement" ; IfThenElse (e, s1, Some s2) )
# 6668 "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) = 
# 785 "src/frontend/parser.mly"
    (  grammar_logger "if_statement" ; IfThenElse (e, s, None) )
# 6725 "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) = 
# 787 "src/frontend/parser.mly"
    (  grammar_logger "while_statement" ; While (e, s) )
# 6782 "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) = 
# 790 "src/frontend/parser.mly"
    (
      grammar_logger "for_statement" ;
      For {loop_variable= id;
           lower_bound= e1;
           upper_bound= e2;
           loop_body= s;}
    )
# 6873 "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) = 
# 798 "src/frontend/parser.mly"
    (  grammar_logger "foreach_statement" ; ForEach (id, e, s) )
# 6944 "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) = 
# 800 "src/frontend/parser.mly"
    (  grammar_logger "profile_statement" ; Profile (st, l) )
# 7015 "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) = 
# 802 "src/frontend/parser.mly"
    (  grammar_logger "block_statement" ; Block l )
# 7058 "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) = 
# 336 "src/frontend/parser.mly"
    ( (* This code will never be reached *)
       Common.FatalError.fatal_error_msg
          [%message "the UNREACHABLE token should never be produced"]
    )
# 7086 "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) = 
# 528 "src/frontend/parser.mly"
    ( grammar_logger "offset_mult" ; Transformation.OffsetMultiplier (e1, e2) )
# 7153 "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) = 
# 528 "src/frontend/parser.mly"
    ( grammar_logger "offset_mult" ; Transformation.OffsetMultiplier (e1, e2) )
# 7220 "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) = 
# 530 "src/frontend/parser.mly"
    ( grammar_logger "offset" ; Offset e )
# 7259 "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) = 
# 532 "src/frontend/parser.mly"
    ( grammar_logger "multiplier" ; Multiplier e )
# 7298 "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 )
# 7316 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7341 "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 )
# 7360 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7387 "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 )
# 7405 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7430 "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 )
# 7449 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7476 "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 )
# 7495 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7522 "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 )
# 7541 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7568 "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 )
# 7586 "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 = 
# 172 "<standard.mly>"
    ( (x, y) )
# 7619 "src/frontend/parser.ml"
           in
          (
# 114 "<standard.mly>"
    ( Some x )
# 7624 "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 )
# 7643 "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 = 
# 172 "<standard.mly>"
    ( (x, y) )
# 7676 "src/frontend/parser.ml"
           in
          (
# 114 "<standard.mly>"
    ( Some x )
# 7681 "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 )
# 7700 "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 = 
# 172 "<standard.mly>"
    ( (x, y) )
# 7733 "src/frontend/parser.ml"
           in
          (
# 114 "<standard.mly>"
    ( Some x )
# 7738 "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 )
# 7758 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7785 "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 )
# 7803 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7828 "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 )
# 7846 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7871 "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 )
# 7890 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7917 "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 )
# 7936 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 7963 "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 )
# 7981 "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) = 
# 114 "<standard.mly>"
    ( Some x )
# 8006 "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) = 
# 343 "src/frontend/parser.mly"
    ( Option.map ~f:snd rhs_opt )
# 8031 "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) = 
# 343 "src/frontend/parser.mly"
    ( Option.map ~f:snd rhs_opt )
# 8056 "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
          (
# 193 "src/frontend/parser.mly"
    ( grammar_logger "parameters_block" ;
      {stmts= tvd; xloc= location_span_of_positions _loc} )
# 8108 "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) = 
# 701 "src/frontend/parser.mly"
    (  grammar_logger "printable expression" ; [PExpr e] )
# 8135 "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) = 
# 703 "src/frontend/parser.mly"
    (  grammar_logger "printable string" ; [PString s] )
# 8160 "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) = 
# 705 "src/frontend/parser.mly"
    ( grammar_logger "printables" ; p1 @ p2 )
# 8199 "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
          (
# 143 "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= [] }
    )
# 8299 "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) = 
# 519 "src/frontend/parser.mly"
    ( grammar_logger "lower_upper_range" ; Transformation.LowerUpper (e1, e2) )
# 8368 "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) = 
# 519 "src/frontend/parser.mly"
    ( grammar_logger "lower_upper_range" ; Transformation.LowerUpper (e1, e2) )
# 8435 "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) = 
# 521 "src/frontend/parser.mly"
    (  grammar_logger "lower_range" ; Lower e )
# 8474 "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) = 
# 523 "src/frontend/parser.mly"
    ( grammar_logger "upper_range" ; Upper e )
# 8513 "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) = 
# 512 "src/frontend/parser.mly"
    ( grammar_logger "empty_constraint" ; Transformation.Identity )
# 8531 "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) = 
# 514 "src/frontend/parser.mly"
    (  grammar_logger "range_constraint" ; r )
# 8570 "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) = 
# 351 "src/frontend/parser.mly"
    ( decls )
# 8602 "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) = 
# 351 "src/frontend/parser.mly"
    ( decls )
# 8634 "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
          (
# 228 "src/frontend/parser.mly"
                  ( "functions", _loc, false )
# 8663 "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
          (
# 229 "src/frontend/parser.mly"
              ( "data", _loc, false )
# 8693 "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
          (
# 230 "src/frontend/parser.mly"
                    ( "parameters", _loc, false )
# 8723 "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
          (
# 231 "src/frontend/parser.mly"
               ( "model", _loc, false )
# 8753 "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
          (
# 232 "src/frontend/parser.mly"
           ( "return", _loc, false )
# 8783 "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
          (
# 233 "src/frontend/parser.mly"
       ( "if", _loc, false )
# 8813 "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"
         ( "else", _loc, false )
# 8843 "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"
          ( "while", _loc, false )
# 8873 "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"
        ( "for", _loc, false )
# 8903 "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"
       ( "in", _loc, false )
# 8933 "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"
          ( "break", _loc, false )
# 8963 "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"
             ( "continue", _loc, false )
# 8993 "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"
         ( "void", _loc, false )
# 9023 "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"
        ( "int", _loc, true )
# 9053 "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"
         ( "real", _loc, true )
# 9083 "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"
            ( "complex", _loc, true )
# 9113 "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"
           ( "vector", _loc, true )
# 9143 "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"
              ( "row_vector", _loc, true )
# 9173 "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"
           ( "matrix", _loc, true )
# 9203 "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"
                  ( "complex_vector", _loc, true )
# 9233 "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_row_vector", _loc, true )
# 9263 "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"
                  ( "complex_matrix", _loc, true )
# 9293 "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"
            ( "ordered", _loc, true )
# 9323 "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"
                    ( "positive_ordered", _loc, true )
# 9353 "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"
            ( "simplex", _loc, true )
# 9383 "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"
               ( "unit_vector", _loc, true )
# 9413 "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"
                       ( "cholesky_factor_corr", _loc, true )
# 9443 "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"
                      ( "cholesky_factor_cov", _loc, true )
# 9473 "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"
               ( "corr_matrix", _loc, true )
# 9503 "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"
              ( "cov_matrix", _loc, true  )
# 9533 "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"
          ( "print", _loc, false )
# 9563 "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"
           ( "reject", _loc, false )
# 9593 "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"
           ( "target", _loc, false )
# 9623 "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"
            ( "profile", _loc, false )
# 9653 "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"
          ( "tuple", _loc, true )
# 9683 "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"
           ( "offset", _loc, false )
# 9713 "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"
               ( "multiplier", _loc, false )
# 9743 "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"
          ( "lower", _loc, false )
# 9773 "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"
          ( "upper", _loc, false )
# 9803 "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"
          ( "array", _loc, true )
# 9833 "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) = 
# 282 "src/frontend/parser.mly"
    ( grammar_logger "return_type VOID" ; Void )
# 9859 "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) = 
# 284 "src/frontend/parser.mly"
    (  grammar_logger "return_type unsized_type" ; UnsizedType.ReturnType ut )
# 9884 "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) = 
# 250 "<standard.mly>"
    ( [ x ] )
# 9910 "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) = 
# 253 "<standard.mly>"
    ( x :: xs )
# 9951 "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) = 
# 250 "<standard.mly>"
    ( [ x ] )
# 9976 "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) = 
# 253 "<standard.mly>"
    ( x :: xs )
# 10015 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10044 "src/frontend/parser.ml"
           in
          (
# 250 "<standard.mly>"
    ( [ x ] )
# 10049 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10081 "src/frontend/parser.ml"
           in
          (
# 250 "<standard.mly>"
    ( [ x ] )
# 10086 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10118 "src/frontend/parser.ml"
           in
          (
# 250 "<standard.mly>"
    ( [ x ] )
# 10123 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10171 "src/frontend/parser.ml"
           in
          (
# 253 "<standard.mly>"
    ( x :: xs )
# 10176 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10224 "src/frontend/parser.ml"
           in
          (
# 253 "<standard.mly>"
    ( x :: xs )
# 10229 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10277 "src/frontend/parser.ml"
           in
          (
# 253 "<standard.mly>"
    ( x :: xs )
# 10282 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10314 "src/frontend/parser.ml"
           in
          (
# 250 "<standard.mly>"
    ( [ x ] )
# 10319 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10351 "src/frontend/parser.ml"
           in
          (
# 250 "<standard.mly>"
    ( [ x ] )
# 10356 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10388 "src/frontend/parser.ml"
           in
          (
# 250 "<standard.mly>"
    ( [ x ] )
# 10393 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10441 "src/frontend/parser.ml"
           in
          (
# 253 "<standard.mly>"
    ( x :: xs )
# 10446 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10494 "src/frontend/parser.ml"
           in
          (
# 253 "<standard.mly>"
    ( x :: xs )
# 10499 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 10547 "src/frontend/parser.ml"
           in
          (
# 253 "<standard.mly>"
    ( x :: xs )
# 10552 "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) = 
# 250 "<standard.mly>"
    ( [ x ] )
# 10580 "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) = 
# 253 "<standard.mly>"
    ( x :: xs )
# 10619 "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) = 
# 250 "<standard.mly>"
    ( [ x ] )
# 10644 "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) = 
# 253 "<standard.mly>"
    ( x :: xs )
# 10683 "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) = 
# 250 "<standard.mly>"
    ( [ x ] )
# 10708 "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) = 
# 253 "<standard.mly>"
    ( x :: xs )
# 10747 "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) = 
# 439 "src/frontend/parser.mly"
    ( grammar_logger "INT_var_type" ; (SizedType.SInt, Identity) )
# 10773 "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) = 
# 441 "src/frontend/parser.mly"
    ( grammar_logger "REAL_var_type" ; (SizedType.SReal, Identity) )
# 10799 "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) = 
# 443 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEX_var_type" ; (SizedType.SComplex, Identity) )
# 10825 "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) = 
# 445 "src/frontend/parser.mly"
    ( grammar_logger "VECTOR_var_type" ; (SizedType.SVector (Mem_pattern.AoS, e), Identity) )
# 10872 "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) = 
# 447 "src/frontend/parser.mly"
    ( grammar_logger "ROWVECTOR_var_type" ; (SizedType.SRowVector (AoS, e) , Identity) )
# 10919 "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) = 
# 449 "src/frontend/parser.mly"
    ( grammar_logger "MATRIX_var_type" ; (SizedType.SMatrix (AoS, e1, e2), Identity) )
# 10980 "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) = 
# 451 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXVECTOR_var_type" ; (SizedType.SComplexVector e, Identity) )
# 11027 "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) = 
# 453 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXROWVECTOR_var_type" ; (SizedType.SComplexRowVector e , Identity) )
# 11074 "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) = 
# 455 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXMATRIX_var_type" ; (SizedType.SComplexMatrix (e1, e2), Transformation.Identity) )
# 11135 "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
          (
# 710 "src/frontend/parser.mly"
    (  grammar_logger "atomic_statement" ;
       {stmt= s;
        smeta= { loc=location_span_of_positions _sloc} }
    )
# 11170 "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
          (
# 715 "src/frontend/parser.mly"
    (  grammar_logger "nested_statement" ;
       {stmt= s;
        smeta={loc = location_span_of_positions _sloc} }
    )
# 11207 "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 : (
# 92 "src/frontend/parser.mly"
       (string)
# 11230 "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) = 
# 769 "src/frontend/parser.mly"
    (  grammar_logger ("string_literal " ^ s) ; s )
# 11238 "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) = 
# 421 "src/frontend/parser.mly"
    ( grammar_logger "top_var_decl" ;
      d_fn ~is_global:true
    )
# 11268 "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) = 
# 427 "src/frontend/parser.mly"
    ( grammar_logger "top_var_decl_no_assign" ;
      d_fn ~is_global:true
    )
# 11298 "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
          (
# 431 "src/frontend/parser.mly"
    ( grammar_logger "top_var_decl_no_assign_skip";
      { stmt= Skip
      ; smeta= { loc= location_span_of_positions _loc }
      }
    )
# 11331 "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) = 
# 459 "src/frontend/parser.mly"
    ( grammar_logger "INT_top_var_type" ; (SInt, r) )
# 11366 "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) = 
# 461 "src/frontend/parser.mly"
    ( grammar_logger "REAL_top_var_type" ; (SReal, c) )
# 11399 "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) = 
# 463 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEX_var_type" ; (SComplex, c) )
# 11432 "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) = 
# 465 "src/frontend/parser.mly"
    ( grammar_logger "VECTOR_top_var_type" ; (SVector (AoS, e), c) )
# 11486 "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) = 
# 467 "src/frontend/parser.mly"
    ( grammar_logger "ROWVECTOR_top_var_type" ; (SRowVector (AoS, e), c) )
# 11540 "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) = 
# 469 "src/frontend/parser.mly"
    ( grammar_logger "MATRIX_top_var_type" ; (SMatrix (AoS, e1, e2), c) )
# 11608 "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) = 
# 471 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXVECTOR_top_var_type" ; (SComplexVector e, c) )
# 11662 "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) = 
# 473 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXROWVECTOR_top_var_type" ; (SComplexRowVector e, c) )
# 11716 "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) = 
# 475 "src/frontend/parser.mly"
    ( grammar_logger "COMPLEXMATRIX_top_var_type" ; (SComplexMatrix (e1, e2), c) )
# 11784 "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) = 
# 477 "src/frontend/parser.mly"
    ( grammar_logger "ORDERED_top_var_type" ; (SVector (AoS, e), Ordered) )
# 11831 "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) = 
# 479 "src/frontend/parser.mly"
    (
      grammar_logger "POSITIVEORDERED_top_var_type" ;
      (SVector (AoS, e), PositiveOrdered)
    )
# 11881 "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) = 
# 484 "src/frontend/parser.mly"
    ( grammar_logger "SIMPLEX_top_var_type" ; (SVector (AoS, e), Simplex) )
# 11928 "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) = 
# 486 "src/frontend/parser.mly"
    ( grammar_logger "UNITVECTOR_top_var_type" ; (SVector (AoS, e), UnitVector) )
# 11975 "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) = 
# 488 "src/frontend/parser.mly"
    (
      grammar_logger "CHOLESKYFACTORCORR_top_var_type" ;
      (SMatrix (AoS, e, e), CholeskyCorr)
    )
# 12025 "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) = 
# 494 "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)
    )
# 12083 "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) = 
# 500 "src/frontend/parser.mly"
    ( grammar_logger "CORRMATRIX_top_var_type" ; (SMatrix (AoS, e, e), Correlation) )
# 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 = _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) = 
# 502 "src/frontend/parser.mly"
    ( grammar_logger "COVMATRIX_top_var_type" ; (SizedType.SMatrix (AoS, e, e), Transformation.Covariance) )
# 12177 "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) = 
# 813 "src/frontend/parser.mly"
    ( grammar_logger "top_vardecl_or_statement_statement" ; s )
# 12204 "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) = 
# 815 "src/frontend/parser.mly"
    ( grammar_logger "top_vardecl_or_statement_top_vardecl" ; v )
# 12231 "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
          (
# 188 "src/frontend/parser.mly"
    ( grammar_logger "transformed_data_block" ;
      {stmts= tvds; xloc= location_span_of_positions _loc} )
# 12283 "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
          (
# 198 "src/frontend/parser.mly"
    ( grammar_logger "transformed_parameters_block" ;
      {stmts= tvds; xloc= location_span_of_positions _loc} )
# 12337 "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) = 
# 774 "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  )
# 12404 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 12470 "src/frontend/parser.ml"
           in
          (
# 407 "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)
  )
# 12479 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 12547 "src/frontend/parser.ml"
           in
          (
# 407 "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)
  )
# 12556 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 12624 "src/frontend/parser.ml"
           in
          (
# 407 "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)
  )
# 12633 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 12701 "src/frontend/parser.ml"
           in
          (
# 407 "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)
  )
# 12710 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 12778 "src/frontend/parser.ml"
           in
          (
# 407 "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)
  )
# 12787 "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 = 
# 393 "src/frontend/parser.mly"
  ( grammar_logger "higher_type" ;
    ty
  )
# 12855 "src/frontend/parser.ml"
           in
          (
# 407 "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)
  )
# 12864 "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) = 
# 506 "src/frontend/parser.mly"
    (  grammar_logger "type_constraint_range" ; r )
# 12891 "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) = 
# 508 "src/frontend/parser.mly"
    (  grammar_logger "type_constraint_offset_mult" ; l )
# 12930 "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) = 
# 331 "src/frontend/parser.mly"
    ( grammar_logger "unsized_dims" ; List.length(cs) + 1 )
# 12969 "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) = 
# 294 "src/frontend/parser.mly"
    (  grammar_logger "unsized_type";
        nest_unsized_array t n
    )
# 13010 "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 = 
# 306 "src/frontend/parser.mly"
    (  UnsizedType.UTuple (hd::ts)
    )
# 13086 "src/frontend/parser.ml"
           in
          (
# 294 "src/frontend/parser.mly"
    (  grammar_logger "unsized_type";
        nest_unsized_array t n
    )
# 13093 "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 = bt;
          MenhirLib.EngineTypes.startp = _startpos_bt_;
          MenhirLib.EngineTypes.endp = _endpos_bt_;
          MenhirLib.EngineTypes.next = _menhir_stack;
        } = _menhir_stack 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_bt_ in
        let _v : (Middle.UnsizedType.t) = 
# 298 "src/frontend/parser.mly"
    (  grammar_logger "unsized_type";
       bt
    )
# 13121 "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 = _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 = 
# 306 "src/frontend/parser.mly"
    (  UnsizedType.UTuple (hd::ts)
    )
# 13183 "src/frontend/parser.ml"
           in
          (
# 302 "src/frontend/parser.mly"
    ( t )
# 13188 "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) = 
# 415 "src/frontend/parser.mly"
    ( grammar_logger "var_decl" ;
      d_fn ~is_global:false
    )
# 13219 "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) = 
# 807 "src/frontend/parser.mly"
    ( grammar_logger "vardecl_or_statement_statement" ; s )
# 13246 "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) = 
# 809 "src/frontend/parser.mly"
    ( grammar_logger "vardecl_or_statement_vardecl" ; v )
# 13273 "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 : ((Ast.untyped_expression, Ast.located_meta, Ast.untyped_lval, unit)
  Ast.statement_with Ast.program) ->
    Obj.magic (MenhirInterpreter.entry `Legacy 391 lexer lexbuf)

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

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