exception Error

type token = 
  | WRITELN
  | WRITE
  | WHILE
  | VAR
  | TIMES
  | THEN
  | SLASH
  | SEMICOLON
  | RPAREN
  | READLN
  | RBRACKET
  | PROGRAM
  | PROCEDURE
  | PLUS
  | OR
  | OF
  | NOT
  | NEW
  | NE
  | MINUS
  | LT
  | LPAREN
  | LE
  | LBRACKET
  | INTEGER
  | INTCONST of (int32)
  | IF
  | ID of (string Location.t)
  | GT
  | GE
  | FUNCTION
  | EQ
  | END
  | ELSE
  | DOT
  | DO
  | COMMA
  | COLONEQ
  | COLON
  | BOOLEAN
  | BOOLCONST of (bool)
  | BEGIN
  | ARRAY
  | AND

and _menhir_env = {
  _menhir_lexer: Lexing.lexbuf -> token;
  _menhir_lexbuf: Lexing.lexbuf;
  mutable _menhir_token: token;
  mutable _menhir_startp: Lexing.position;
  mutable _menhir_endp: Lexing.position;
  mutable _menhir_shifted: int
}

and _menhir_state = 
  | MenhirState142
  | MenhirState140
  | MenhirState137
  | MenhirState136
  | MenhirState134
  | MenhirState131
  | MenhirState127
  | MenhirState120
  | MenhirState112
  | MenhirState109
  | MenhirState106
  | MenhirState102
  | MenhirState99
  | MenhirState97
  | MenhirState95
  | MenhirState94
  | MenhirState90
  | MenhirState86
  | MenhirState81
  | MenhirState74
  | MenhirState72
  | MenhirState70
  | MenhirState68
  | MenhirState66
  | MenhirState64
  | MenhirState62
  | MenhirState60
  | MenhirState58
  | MenhirState55
  | MenhirState53
  | MenhirState51
  | MenhirState46
  | MenhirState40
  | MenhirState39
  | MenhirState38
  | MenhirState36
  | MenhirState33
  | MenhirState31
  | MenhirState28
  | MenhirState27
  | MenhirState26
  | MenhirState22
  | MenhirState19
  | MenhirState17
  | MenhirState12
  | MenhirState8
  | MenhirState4
  | MenhirState2
  | MenhirState1

  

  open MIPSOps
  open LPP
  open Primitive

let _eRR =
  Error

let rec _menhir_reduce4 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.condition) -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let (_menhir_stack, _menhir_s, c) = _menhir_stack in
    let _v : (LPP.condition) =     ( c ) in
    _menhir_goto_condition _menhir_env _menhir_stack _menhir_s _v

and _menhir_goto_nontrivial_condition : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.condition) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    match _menhir_s with
    | MenhirState81 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | RPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos = _menhir_env._menhir_endp in
            let _ = _menhir_discard _menhir_env in
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos__3_ = _endpos in
            let ((_menhir_stack, _menhir_s, _startpos__1_), _, c) = _menhir_stack in
            let _v : (LPP.condition) =     ( c ) in
            _menhir_goto_nontrivial_condition _menhir_env _menhir_stack _menhir_s _v
        | AND | OR ->
            _menhir_reduce4 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState95 | MenhirState31 | MenhirState33 | MenhirState90 | MenhirState86 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        _menhir_reduce4 _menhir_env (Obj.magic _menhir_stack)
    | _ ->
        _menhir_fail ()

and _menhir_run86 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.condition) -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState86 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState86 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState86 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run81 _menhir_env (Obj.magic _menhir_stack) MenhirState86 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState86 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState86 _menhir_env._menhir_startp
    | NOT ->
        _menhir_run33 _menhir_env (Obj.magic _menhir_stack) MenhirState86
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState86 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState86 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState86 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState86

and _menhir_run90 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.condition) -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState90 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState90 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState90 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run81 _menhir_env (Obj.magic _menhir_stack) MenhirState90 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState90 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState90 _menhir_env._menhir_startp
    | NOT ->
        _menhir_run33 _menhir_env (Obj.magic _menhir_stack) MenhirState90
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState90 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState90 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState90 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState90

and _menhir_reduce51 : _menhir_env -> ((('ttv_tail * _menhir_state * (Primitive.callee) * Lexing.position) * Lexing.position) * _menhir_state * (LPP.expression list)) * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let ((((_menhir_stack, _menhir_s, c0, _startpos_c0_), _startpos__menhir_p0_), _, xs0), _endpos__4_) = _menhir_stack in
    let _menhir_p0 = () in
    let _startpos = _startpos_c0_ in
    let _endpos = _endpos__4_ in
    let _v : (LPP.raw_expression) = let actuals =
      let xs = xs0 in
          ( xs )
    in
    let c =
      let _endpos = _startpos__menhir_p0_ in
      let c = c0 in
          ( Location.make _startpos _endpos c )
    in
        ( EFunCall (c, actuals) ) in
    _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos

and _menhir_goto_condition : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.condition) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    match _menhir_s with
    | MenhirState81 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | AND ->
            _menhir_run90 _menhir_env (Obj.magic _menhir_stack)
        | OR ->
            _menhir_run86 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState86 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | AND ->
            _menhir_run90 _menhir_env (Obj.magic _menhir_stack)
        | DO | OR | RPAREN | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, c1), _, c2) = _menhir_stack in
            let _v : (LPP.condition) =     ( COr (c1, c2) ) in
            _menhir_goto_nontrivial_condition _menhir_env _menhir_stack _menhir_s _v
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState90 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, c1), _, c2) = _menhir_stack in
        let _v : (LPP.condition) =     ( CAnd (c1, c2) ) in
        _menhir_goto_nontrivial_condition _menhir_env _menhir_stack _menhir_s _v
    | MenhirState33 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s), _, c) = _menhir_stack in
        let _v : (LPP.condition) =     ( CNot c ) in
        _menhir_goto_nontrivial_condition _menhir_env _menhir_stack _menhir_s _v
    | MenhirState31 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | AND ->
            _menhir_run90 _menhir_env (Obj.magic _menhir_stack)
        | DO ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | BEGIN ->
                _menhir_run28 _menhir_env (Obj.magic _menhir_stack) MenhirState94
            | BOOLCONST _v ->
                _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState94 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | ID _v ->
                _menhir_run98 _menhir_env (Obj.magic _menhir_stack) MenhirState94 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | IF ->
                _menhir_run95 _menhir_env (Obj.magic _menhir_stack) MenhirState94
            | INTCONST _v ->
                _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState94 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | LPAREN ->
                _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState94 _menhir_env._menhir_startp
            | MINUS ->
                _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState94 _menhir_env._menhir_startp
            | NEW ->
                _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState94 _menhir_env._menhir_startp
            | READLN ->
                _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState94 _menhir_env._menhir_startp
            | WHILE ->
                _menhir_run31 _menhir_env (Obj.magic _menhir_stack) MenhirState94
            | WRITE ->
                _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState94 _menhir_env._menhir_startp
            | WRITELN ->
                _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState94 _menhir_env._menhir_startp
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState94)
        | OR ->
            _menhir_run86 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState95 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | AND ->
            _menhir_run90 _menhir_env (Obj.magic _menhir_stack)
        | OR ->
            _menhir_run86 _menhir_env (Obj.magic _menhir_stack)
        | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | BEGIN ->
                _menhir_run28 _menhir_env (Obj.magic _menhir_stack) MenhirState97
            | BOOLCONST _v ->
                _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState97 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | ID _v ->
                _menhir_run98 _menhir_env (Obj.magic _menhir_stack) MenhirState97 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | IF ->
                _menhir_run95 _menhir_env (Obj.magic _menhir_stack) MenhirState97
            | INTCONST _v ->
                _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState97 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | LPAREN ->
                _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState97 _menhir_env._menhir_startp
            | MINUS ->
                _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState97 _menhir_env._menhir_startp
            | NEW ->
                _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState97 _menhir_env._menhir_startp
            | READLN ->
                _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState97 _menhir_env._menhir_startp
            | WHILE ->
                _menhir_run31 _menhir_env (Obj.magic _menhir_stack) MenhirState97
            | WRITE ->
                _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState97 _menhir_env._menhir_startp
            | WRITELN ->
                _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState97 _menhir_env._menhir_startp
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState97)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        _menhir_fail ()

and _menhir_goto_loption_separated_nonempty_list_COMMA_expression__ : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.expression list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    match _menhir_s with
    | MenhirState46 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | RPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos = _menhir_env._menhir_endp in
            let _menhir_stack = (_menhir_stack, _endpos) in
            let _ = _menhir_discard _menhir_env in
            _menhir_reduce51 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState102 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | RPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos = _menhir_env._menhir_endp in
            let _menhir_stack = (_menhir_stack, _endpos) in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | EQ | GE | GT | LBRACKET | LE | LT | MINUS | NE | PLUS | SLASH | TIMES ->
                _menhir_reduce51 _menhir_env (Obj.magic _menhir_stack)
            | ELSE | END | SEMICOLON ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let ((((_menhir_stack, _menhir_s, c0, _startpos_c0_), _startpos__menhir_p0_), _, xs0), _endpos__4_) = _menhir_stack in
                let _menhir_p0 = () in
                let _startpos = _startpos_c0_ in
                let _v : (LPP.instruction) = let actuals =
                  let xs = xs0 in
                      ( xs )
                in
                let callee =
                  let _endpos = _startpos__menhir_p0_ in
                  let c = c0 in
                      ( Location.make _startpos _endpos c )
                in
                    ( IProcCall (callee, actuals) ) in
                _menhir_goto_instruction _menhir_env _menhir_stack _menhir_s _v
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                let _menhir_stack = Obj.magic _menhir_stack in
                let ((_menhir_stack, _menhir_s, _), _) = _menhir_stack in
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        _menhir_fail ()

and _menhir_reduce3 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let (_menhir_stack, _menhir_s, e, _startpos_e_, _endpos_e_) = _menhir_stack in
    let _v : (LPP.condition) =     ( CExpression e ) in
    _menhir_goto_condition _menhir_env _menhir_stack _menhir_s _v

and _menhir_run77 : _menhir_env -> ('ttv_tail * _menhir_state * Lexing.position) * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _endpos ->
    let _ = _menhir_discard _menhir_env in
    let _menhir_stack = Obj.magic _menhir_stack in
    let _endpos__3_ = _endpos in
    let ((_menhir_stack, _menhir_s, _startpos__1_), _, e, _startpos_e_, _endpos_e_) = _menhir_stack in
    let _startpos = _startpos__1_ in
    let _endpos = _endpos__3_ in
    let _v : (LPP.expression) =     ( e ) in
    _menhir_goto_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos

and _menhir_reduce52 : _menhir_env -> (('ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position) * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position) * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let (((_menhir_stack, _menhir_s, a, _startpos_a_, _endpos_a_), _, i, _startpos_i_, _endpos_i_), _endpos__4_) = _menhir_stack in
    let _startpos = _startpos_a_ in
    let _endpos = _endpos__4_ in
    let _v : (LPP.raw_expression) =     ( EArrayGet (a, i) ) in
    _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos

and _menhir_goto_separated_nonempty_list_COMMA_expression_ : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.expression list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    match _menhir_s with
    | MenhirState102 | MenhirState46 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let x = _v in
        let _v : (LPP.expression list) =     ( x ) in
        _menhir_goto_loption_separated_nonempty_list_COMMA_expression__ _menhir_env _menhir_stack _menhir_s _v
    | MenhirState74 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let xs = _v in
        let (_menhir_stack, _menhir_s, x, _startpos_x_, _endpos_x_) = _menhir_stack in
        let _v : (LPP.expression list) =     ( x :: xs ) in
        _menhir_goto_separated_nonempty_list_COMMA_expression_ _menhir_env _menhir_stack _menhir_s _v
    | _ ->
        _menhir_fail ()

and _menhir_run51 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState51 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState51 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState51 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState51 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState51 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState51 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState51 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState51 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState51 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState51

and _menhir_run55 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState55 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState55 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState55 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState55 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState55 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState55 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState55 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState55 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState55 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState55

and _menhir_run58 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState58 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState58 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState58 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState58 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState58 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState58 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState58 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState58 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState58 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState58

and _menhir_run60 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState60 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState60 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState60 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState60 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState60 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState60 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState60 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState60 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState60 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState60

and _menhir_run62 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _startpos ->
    let _menhir_stack = (_menhir_stack, _startpos) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState62 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState62 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState62 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState62 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState62 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState62 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState62 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState62 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState62 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState62

and _menhir_run64 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState64 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState64 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState64 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState64 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState64 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState64 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState64 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState64 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState64 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState64

and _menhir_run66 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState66 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState66 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState66 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState66 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState66 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState66 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState66 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState66 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState66 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState66

and _menhir_run53 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState53

and _menhir_run68 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState68 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState68 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState68 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState68 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState68 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState68 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState68 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState68 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState68 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState68

and _menhir_run70 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState70 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState70 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState70 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState70 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState70 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState70 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState70 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState70 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState70 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState70

and _menhir_run72 : _menhir_env -> 'ttv_tail * _menhir_state * (LPP.expression) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState72 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState72 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState72 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState72 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState72 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState72 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState72 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState72 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState72 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState72

and _menhir_goto_separated_nonempty_list_SEMICOLON_instruction_ : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.instruction list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    match _menhir_s with
    | MenhirState28 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let x = _v in
        let _v : (LPP.instruction list) =     ( x ) in
        _menhir_goto_loption_separated_nonempty_list_SEMICOLON_instruction__ _menhir_env _menhir_stack _menhir_s _v
    | MenhirState120 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let xs = _v in
        let (_menhir_stack, _menhir_s, x) = _menhir_stack in
        let _v : (LPP.instruction list) =     ( x :: xs ) in
        _menhir_goto_separated_nonempty_list_SEMICOLON_instruction_ _menhir_env _menhir_stack _menhir_s _v
    | _ ->
        _menhir_fail ()

and _menhir_reduce18 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _v : (LPP.expression list) =     ( [] ) in
    _menhir_goto_loption_separated_nonempty_list_COMMA_expression__ _menhir_env _menhir_stack _menhir_s _v

and _menhir_goto_expression : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.expression) -> Lexing.position -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v _startpos _endpos ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v, _startpos, _endpos) in
    match _menhir_s with
    | MenhirState102 | MenhirState74 | MenhirState46 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | COMMA ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | BOOLCONST _v ->
                _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState74 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | ID _v ->
                _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState74 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | INTCONST _v ->
                _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState74 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | LPAREN ->
                _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState74 _menhir_env._menhir_startp
            | MINUS ->
                _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState74 _menhir_env._menhir_startp
            | NEW ->
                _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState74 _menhir_env._menhir_startp
            | READLN ->
                _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState74 _menhir_env._menhir_startp
            | WRITE ->
                _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState74 _menhir_env._menhir_startp
            | WRITELN ->
                _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState74 _menhir_env._menhir_startp
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState74)
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | RPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, x, _startpos_x_, _endpos_x_) = _menhir_stack in
            let _v : (LPP.expression list) =     ( [ x ] ) in
            _menhir_goto_separated_nonempty_list_COMMA_expression_ _menhir_env _menhir_stack _menhir_s _v
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState51 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | EQ | GE | GT | LE | LT | MINUS | NE | OR | PLUS | RBRACKET | RPAREN | SEMICOLON | SLASH | THEN | TIMES ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpMul )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState53 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | RBRACKET ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos = _menhir_env._menhir_endp in
            let _menhir_stack = (_menhir_stack, _endpos) in
            let _ = _menhir_discard _menhir_env in
            _menhir_reduce52 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState55 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | EQ | GE | GT | LE | LT | MINUS | NE | OR | PLUS | RBRACKET | RPAREN | SEMICOLON | SLASH | THEN | TIMES ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpDiv )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState58 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | EQ | GE | GT | LE | LT | MINUS | NE | OR | PLUS | RBRACKET | RPAREN | SEMICOLON | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpAdd )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState60 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | OR | RBRACKET | RPAREN | SEMICOLON | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpNe )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState62 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | EQ | GE | GT | LE | LT | MINUS | NE | OR | PLUS | RBRACKET | RPAREN | SEMICOLON | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let (((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _startpos__2_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpSub )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState64 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | OR | RBRACKET | RPAREN | SEMICOLON | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpLt )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState66 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | OR | RBRACKET | RPAREN | SEMICOLON | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpLe )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState68 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | OR | RBRACKET | RPAREN | SEMICOLON | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpGt )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState70 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | OR | RBRACKET | RPAREN | SEMICOLON | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpGe )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState72 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | OR | RBRACKET | RPAREN | SEMICOLON | THEN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, e1, _startpos_e1_, _endpos_e1_), _, e2, _startpos_e2_, _endpos_e2_) = _menhir_stack in
            let _startpos = _startpos_e1_ in
            let _endpos = _endpos_e2_ in
            let _v : (LPP.raw_expression) = let op =
                  ( OpEq )
            in
                ( EBinOp (op, e1, e2) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState40 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | RPAREN ->
            _menhir_run77 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_endp
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState39 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | AND | COMMA | DO | ELSE | END | EQ | GE | GT | LE | LT | MINUS | NE | OR | PLUS | RBRACKET | RPAREN | SEMICOLON | SLASH | THEN | TIMES ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, _startpos__1_), _, e, _startpos_e_, _endpos_e_) = _menhir_stack in
            let _startpos = _startpos__1_ in
            let _endpos = _endpos_e_ in
            let _v : (LPP.raw_expression) =     ( EUnOp (UOpNeg, e) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState38 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | RBRACKET ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos = _menhir_env._menhir_endp in
            let _ = _menhir_discard _menhir_env in
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos__7_ = _endpos in
            let (((_menhir_stack, _menhir_s, _startpos__1_), _, t), _, e, _startpos_e_, _endpos_e_) = _menhir_stack in
            let _startpos = _startpos__1_ in
            let _endpos = _endpos__7_ in
            let _v : (LPP.raw_expression) =     ( EArrayAlloc (t, e) ) in
            _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState81 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | RPAREN ->
            _menhir_run77 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_endp
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | OR ->
            _menhir_reduce3 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState95 | MenhirState31 | MenhirState33 | MenhirState90 | MenhirState86 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | AND | DO | OR | RPAREN | THEN ->
            _menhir_reduce3 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState99 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | ELSE | END | SEMICOLON ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s, id, _startpos_id_, _endpos_id_), _, e, _startpos_e_, _endpos_e_) = _menhir_stack in
            let _v : (LPP.instruction) =     ( ISetVar (id, e) ) in
            _menhir_goto_instruction _menhir_env _menhir_stack _menhir_s _v
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState28 | MenhirState120 | MenhirState94 | MenhirState97 | MenhirState106 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | BOOLCONST _v ->
                _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState109 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | ID _v ->
                _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState109 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | INTCONST _v ->
                _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState109 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | LPAREN ->
                _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState109 _menhir_env._menhir_startp
            | MINUS ->
                _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState109 _menhir_env._menhir_startp
            | NEW ->
                _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState109 _menhir_env._menhir_startp
            | READLN ->
                _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState109 _menhir_env._menhir_startp
            | WRITE ->
                _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState109 _menhir_env._menhir_startp
            | WRITELN ->
                _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState109 _menhir_env._menhir_startp
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState109)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState109 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | RBRACKET ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos = _menhir_env._menhir_endp in
            let _menhir_stack = (_menhir_stack, _endpos) in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | COLONEQ ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let _tok = _menhir_discard _menhir_env in
                (match _tok with
                | BOOLCONST _v ->
                    _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState112 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
                | ID _v ->
                    _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState112 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
                | INTCONST _v ->
                    _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState112 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
                | LPAREN ->
                    _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState112 _menhir_env._menhir_startp
                | MINUS ->
                    _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState112 _menhir_env._menhir_startp
                | NEW ->
                    _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState112 _menhir_env._menhir_startp
                | READLN ->
                    _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState112 _menhir_env._menhir_startp
                | WRITE ->
                    _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState112 _menhir_env._menhir_startp
                | WRITELN ->
                    _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState112 _menhir_env._menhir_startp
                | _ ->
                    assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                    _menhir_env._menhir_shifted <- (-1);
                    _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState112)
            | EQ | GE | GT | LBRACKET | LE | LT | MINUS | NE | PLUS | SLASH | TIMES ->
                _menhir_reduce52 _menhir_env (Obj.magic _menhir_stack)
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                let _menhir_stack = Obj.magic _menhir_stack in
                let ((_menhir_stack, _menhir_s, _, _, _), _) = _menhir_stack in
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState112 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | EQ ->
            _menhir_run72 _menhir_env (Obj.magic _menhir_stack)
        | GE ->
            _menhir_run70 _menhir_env (Obj.magic _menhir_stack)
        | GT ->
            _menhir_run68 _menhir_env (Obj.magic _menhir_stack)
        | LBRACKET ->
            _menhir_run53 _menhir_env (Obj.magic _menhir_stack)
        | LE ->
            _menhir_run66 _menhir_env (Obj.magic _menhir_stack)
        | LT ->
            _menhir_run64 _menhir_env (Obj.magic _menhir_stack)
        | MINUS ->
            _menhir_run62 _menhir_env (Obj.magic _menhir_stack) _menhir_env._menhir_startp
        | NE ->
            _menhir_run60 _menhir_env (Obj.magic _menhir_stack)
        | PLUS ->
            _menhir_run58 _menhir_env (Obj.magic _menhir_stack)
        | SLASH ->
            _menhir_run55 _menhir_env (Obj.magic _menhir_stack)
        | TIMES ->
            _menhir_run51 _menhir_env (Obj.magic _menhir_stack)
        | ELSE | END | SEMICOLON ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((((_menhir_stack, _menhir_s, a, _startpos_a_, _endpos_a_), _, i, _startpos_i_, _endpos_i_), _endpos__4_), _, e, _startpos_e_, _endpos_e_) = _menhir_stack in
            let _v : (LPP.instruction) =     ( IArraySet (a, i, e) ) in
            _menhir_goto_instruction _menhir_env _menhir_stack _menhir_s _v
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        _menhir_fail ()

and _menhir_goto_separated_nonempty_list_SEMICOLON_binding_ : _menhir_env -> 'ttv_tail -> _menhir_state -> ((LPP.identifier * LPP.typ) list list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    match _menhir_s with
    | MenhirState131 | MenhirState22 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let x = _v in
        let _v : ((LPP.identifier * LPP.typ) list list) =     ( x ) in
        _menhir_goto_loption_separated_nonempty_list_SEMICOLON_binding__ _menhir_env _menhir_stack _menhir_s _v
    | MenhirState127 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let xs = _v in
        let (_menhir_stack, _menhir_s, x) = _menhir_stack in
        let _v : ((LPP.identifier * LPP.typ) list list) =     ( x :: xs ) in
        _menhir_goto_separated_nonempty_list_SEMICOLON_binding_ _menhir_env _menhir_stack _menhir_s _v
    | _ ->
        _menhir_fail ()

and _menhir_goto_nonempty_list_terminated_binding_SEMICOLON__ : _menhir_env -> 'ttv_tail -> _menhir_state -> ((LPP.identifier * LPP.typ) list list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    match _menhir_s with
    | MenhirState2 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let bindings = _v in
        let _v : ((LPP.identifier * LPP.typ) list) =     ( List.flatten bindings ) in
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let x0 = _v in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        let _v : ((LPP.identifier * LPP.typ) list) = let x =
          let x = x0 in
              ( x )
        in
            ( x ) in
        _menhir_goto_loption_preceded_VAR_terminated_bindings__ _menhir_env _menhir_stack _menhir_s _v
    | MenhirState17 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let xs = _v in
        let (_menhir_stack, _menhir_s, x0) = _menhir_stack in
        let _v : ((LPP.identifier * LPP.typ) list list) = let x =
          let x = x0 in
              ( x )
        in
            ( x :: xs ) in
        _menhir_goto_nonempty_list_terminated_binding_SEMICOLON__ _menhir_env _menhir_stack _menhir_s _v
    | _ ->
        _menhir_fail ()

and _menhir_goto_procedure : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.identifier * LPP.procedure) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    let _menhir_stack = Obj.magic _menhir_stack in
    assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
    let _tok = _menhir_env._menhir_token in
    match _tok with
    | FUNCTION ->
        _menhir_run129 _menhir_env (Obj.magic _menhir_stack) MenhirState140
    | PROCEDURE ->
        _menhir_run20 _menhir_env (Obj.magic _menhir_stack) MenhirState140
    | BEGIN ->
        _menhir_reduce14 _menhir_env (Obj.magic _menhir_stack) MenhirState140
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState140

and _menhir_goto_instruction : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.instruction) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    match _menhir_s with
    | MenhirState97 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | ELSE ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | BEGIN ->
                _menhir_run28 _menhir_env (Obj.magic _menhir_stack) MenhirState106
            | BOOLCONST _v ->
                _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState106 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | ID _v ->
                _menhir_run98 _menhir_env (Obj.magic _menhir_stack) MenhirState106 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | IF ->
                _menhir_run95 _menhir_env (Obj.magic _menhir_stack) MenhirState106
            | INTCONST _v ->
                _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState106 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | LPAREN ->
                _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState106 _menhir_env._menhir_startp
            | MINUS ->
                _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState106 _menhir_env._menhir_startp
            | NEW ->
                _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState106 _menhir_env._menhir_startp
            | READLN ->
                _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState106 _menhir_env._menhir_startp
            | WHILE ->
                _menhir_run31 _menhir_env (Obj.magic _menhir_stack) MenhirState106
            | WRITE ->
                _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState106 _menhir_env._menhir_startp
            | WRITELN ->
                _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState106 _menhir_env._menhir_startp
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState106)
        | END | SEMICOLON ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let (((_menhir_stack, _menhir_s), _, c), _, b) = _menhir_stack in
            let _v : (LPP.instruction) =     ( IIf (c, b, ISeq []) ) in
            _menhir_goto_instruction _menhir_env _menhir_stack _menhir_s _v
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState106 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((((_menhir_stack, _menhir_s), _, c), _, b1), _, b2) = _menhir_stack in
        let _v : (LPP.instruction) =     ( IIf (c, b1, b2) ) in
        _menhir_goto_instruction _menhir_env _menhir_stack _menhir_s _v
    | MenhirState94 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let (((_menhir_stack, _menhir_s), _, c), _, b) = _menhir_stack in
        let _v : (LPP.instruction) =     ( IWhile (c, b) ) in
        _menhir_goto_instruction _menhir_env _menhir_stack _menhir_s _v
    | MenhirState120 | MenhirState28 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | SEMICOLON ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | BEGIN ->
                _menhir_run28 _menhir_env (Obj.magic _menhir_stack) MenhirState120
            | BOOLCONST _v ->
                _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState120 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | ID _v ->
                _menhir_run98 _menhir_env (Obj.magic _menhir_stack) MenhirState120 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | IF ->
                _menhir_run95 _menhir_env (Obj.magic _menhir_stack) MenhirState120
            | INTCONST _v ->
                _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState120 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | LPAREN ->
                _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState120 _menhir_env._menhir_startp
            | MINUS ->
                _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState120 _menhir_env._menhir_startp
            | NEW ->
                _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState120 _menhir_env._menhir_startp
            | READLN ->
                _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState120 _menhir_env._menhir_startp
            | WHILE ->
                _menhir_run31 _menhir_env (Obj.magic _menhir_stack) MenhirState120
            | WRITE ->
                _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState120 _menhir_env._menhir_startp
            | WRITELN ->
                _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState120 _menhir_env._menhir_startp
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState120)
        | END ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, x) = _menhir_stack in
            let _v : (LPP.instruction list) =     ( [ x ] ) in
            _menhir_goto_separated_nonempty_list_SEMICOLON_instruction_ _menhir_env _menhir_stack _menhir_s _v
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        _menhir_fail ()

and _menhir_goto_raw_callee : _menhir_env -> 'ttv_tail -> _menhir_state -> (Primitive.callee) -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v _startpos ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v, _startpos) in
    match _menhir_s with
    | MenhirState112 | MenhirState109 | MenhirState102 | MenhirState99 | MenhirState95 | MenhirState31 | MenhirState33 | MenhirState90 | MenhirState86 | MenhirState81 | MenhirState38 | MenhirState39 | MenhirState74 | MenhirState72 | MenhirState70 | MenhirState68 | MenhirState66 | MenhirState64 | MenhirState62 | MenhirState60 | MenhirState58 | MenhirState55 | MenhirState53 | MenhirState51 | MenhirState46 | MenhirState40 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _startpos = _menhir_env._menhir_startp in
            let _menhir_stack = (_menhir_stack, _startpos) in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | BOOLCONST _v ->
                _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState46 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | ID _v ->
                _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState46 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | INTCONST _v ->
                _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState46 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | LPAREN ->
                _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState46 _menhir_env._menhir_startp
            | MINUS ->
                _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState46 _menhir_env._menhir_startp
            | NEW ->
                _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState46 _menhir_env._menhir_startp
            | READLN ->
                _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState46 _menhir_env._menhir_startp
            | WRITE ->
                _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState46 _menhir_env._menhir_startp
            | WRITELN ->
                _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState46 _menhir_env._menhir_startp
            | RPAREN ->
                _menhir_reduce18 _menhir_env (Obj.magic _menhir_stack) MenhirState46
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState46)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState120 | MenhirState28 | MenhirState94 | MenhirState106 | MenhirState97 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _startpos = _menhir_env._menhir_startp in
            let _menhir_stack = (_menhir_stack, _startpos) in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | BOOLCONST _v ->
                _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState102 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | ID _v ->
                _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState102 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | INTCONST _v ->
                _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState102 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | LPAREN ->
                _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState102 _menhir_env._menhir_startp
            | MINUS ->
                _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState102 _menhir_env._menhir_startp
            | NEW ->
                _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState102 _menhir_env._menhir_startp
            | READLN ->
                _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState102 _menhir_env._menhir_startp
            | WRITE ->
                _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState102 _menhir_env._menhir_startp
            | WRITELN ->
                _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState102 _menhir_env._menhir_startp
            | RPAREN ->
                _menhir_reduce18 _menhir_env (Obj.magic _menhir_stack) MenhirState102
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState102)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        _menhir_fail ()

and _menhir_run33 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _menhir_stack = (_menhir_stack, _menhir_s) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState33 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState33 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState33 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run81 _menhir_env (Obj.magic _menhir_stack) MenhirState33 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState33 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState33 _menhir_env._menhir_startp
    | NOT ->
        _menhir_run33 _menhir_env (Obj.magic _menhir_stack) MenhirState33
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState33 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState33 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState33 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState33

and _menhir_run81 : _menhir_env -> 'ttv_tail -> _menhir_state -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _startpos ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _startpos) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState81 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState81 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState81 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run81 _menhir_env (Obj.magic _menhir_stack) MenhirState81 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState81 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState81 _menhir_env._menhir_startp
    | NOT ->
        _menhir_run33 _menhir_env (Obj.magic _menhir_stack) MenhirState81
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState81 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState81 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState81 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState81

and _menhir_reduce36 : _menhir_env -> 'ttv_tail * _menhir_state * (string Location.t) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let (_menhir_stack, _menhir_s, id, _startpos_id_, _endpos_id_) = _menhir_stack in
    let _startpos = _startpos_id_ in
    let _v : (Primitive.callee) =     ( CUserFunction (Location.content id) ) in
    _menhir_goto_raw_callee _menhir_env _menhir_stack _menhir_s _v _startpos

and _menhir_reduce39 : _menhir_env -> 'ttv_tail * _menhir_state * (string Location.t) * Lexing.position * Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack ->
    let (_menhir_stack, _menhir_s, id, _startpos_id_, _endpos_id_) = _menhir_stack in
    let _startpos = _startpos_id_ in
    let _endpos = _endpos_id_ in
    let _v : (LPP.raw_expression) =     ( EGetVar id ) in
    _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos

and _menhir_run42 : _menhir_env -> 'ttv_tail -> _menhir_state -> (string Location.t) -> Lexing.position -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v _startpos _endpos ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v, _startpos, _endpos) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | AND | COMMA | DO | ELSE | END | EQ | GE | GT | LBRACKET | LE | LT | MINUS | NE | OR | PLUS | RBRACKET | RPAREN | SEMICOLON | SLASH | THEN | TIMES ->
        _menhir_reduce39 _menhir_env (Obj.magic _menhir_stack)
    | LPAREN ->
        _menhir_reduce36 _menhir_env (Obj.magic _menhir_stack)
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s

and _menhir_goto_raw_expression : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.raw_expression) -> Lexing.position -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v _startpos _endpos ->
    let _menhir_stack = Obj.magic _menhir_stack in
    let _menhir_stack = Obj.magic _menhir_stack in
    let e = _v in
    let _startpos_e_ = _startpos in
    let _endpos_e_ = _endpos in
    let _startpos = _startpos_e_ in
    let _endpos = _endpos_e_ in
    let _v : (LPP.expression) =     ( Location.make _startpos _endpos e ) in
    _menhir_goto_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos

and _menhir_goto_loption_separated_nonempty_list_SEMICOLON_binding__ : _menhir_env -> 'ttv_tail -> _menhir_state -> ((LPP.identifier * LPP.typ) list list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = Obj.magic _menhir_stack in
    let _menhir_stack = Obj.magic _menhir_stack in
    let xs0 = _v in
    let _v : ((LPP.identifier * LPP.typ) list) = let bindings =
      let xs = xs0 in
          ( xs )
    in
        ( List.flatten bindings ) in
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    match _menhir_s with
    | MenhirState22 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | RPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos = _menhir_env._menhir_endp in
            let _menhir_stack = (_menhir_stack, _endpos) in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | SEMICOLON ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let _tok = _menhir_discard _menhir_env in
                (match _tok with
                | VAR ->
                    _menhir_run2 _menhir_env (Obj.magic _menhir_stack) MenhirState26
                | BEGIN ->
                    _menhir_reduce16 _menhir_env (Obj.magic _menhir_stack) MenhirState26
                | _ ->
                    assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                    _menhir_env._menhir_shifted <- (-1);
                    _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState26)
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                let _menhir_stack = Obj.magic _menhir_stack in
                let ((_menhir_stack, _menhir_s, _), _) = _menhir_stack in
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState131 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | RPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _endpos = _menhir_env._menhir_endp in
            let _menhir_stack = (_menhir_stack, _endpos) in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | COLON ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let _tok = _menhir_discard _menhir_env in
                (match _tok with
                | ARRAY ->
                    _menhir_run11 _menhir_env (Obj.magic _menhir_stack) MenhirState134
                | BOOLEAN ->
                    _menhir_run10 _menhir_env (Obj.magic _menhir_stack) MenhirState134
                | INTEGER ->
                    _menhir_run9 _menhir_env (Obj.magic _menhir_stack) MenhirState134
                | _ ->
                    assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                    _menhir_env._menhir_shifted <- (-1);
                    _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState134)
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                let _menhir_stack = Obj.magic _menhir_stack in
                let ((_menhir_stack, _menhir_s, _), _) = _menhir_stack in
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        _menhir_fail ()

and _menhir_goto_typ : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.typ) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    match _menhir_s with
    | MenhirState12 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s), _, t) = _menhir_stack in
        let _v : (LPP.typ) =     ( TypArray t ) in
        _menhir_goto_typ _menhir_env _menhir_stack _menhir_s _v
    | MenhirState8 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, ids), _, t) = _menhir_stack in
        let _v : ((LPP.identifier * LPP.typ) list) =     ( List.map (fun id -> (id, t)) ids ) in
        let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
        (match _menhir_s with
        | MenhirState17 | MenhirState2 ->
            let _menhir_stack = Obj.magic _menhir_stack in
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            let _tok = _menhir_env._menhir_token in
            (match _tok with
            | SEMICOLON ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let _tok = _menhir_discard _menhir_env in
                (match _tok with
                | ID _v ->
                    _menhir_run3 _menhir_env (Obj.magic _menhir_stack) MenhirState17 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
                | BEGIN | FUNCTION | PROCEDURE ->
                    let _menhir_stack = Obj.magic _menhir_stack in
                    let (_menhir_stack, _menhir_s, x0) = _menhir_stack in
                    let _v : ((LPP.identifier * LPP.typ) list list) = let x =
                      let x = x0 in
                          ( x )
                    in
                        ( [ x ] ) in
                    _menhir_goto_nonempty_list_terminated_binding_SEMICOLON__ _menhir_env _menhir_stack _menhir_s _v
                | _ ->
                    assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                    _menhir_env._menhir_shifted <- (-1);
                    _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState17)
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                let _menhir_stack = Obj.magic _menhir_stack in
                let (_menhir_stack, _menhir_s, _) = _menhir_stack in
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
        | MenhirState131 | MenhirState127 | MenhirState22 ->
            let _menhir_stack = Obj.magic _menhir_stack in
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            let _tok = _menhir_env._menhir_token in
            (match _tok with
            | SEMICOLON ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let _tok = _menhir_discard _menhir_env in
                (match _tok with
                | ID _v ->
                    _menhir_run3 _menhir_env (Obj.magic _menhir_stack) MenhirState127 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
                | _ ->
                    assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                    _menhir_env._menhir_shifted <- (-1);
                    _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState127)
            | RPAREN ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let (_menhir_stack, _menhir_s, x) = _menhir_stack in
                let _v : ((LPP.identifier * LPP.typ) list list) =     ( [ x ] ) in
                _menhir_goto_separated_nonempty_list_SEMICOLON_binding_ _menhir_env _menhir_stack _menhir_s _v
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                let _menhir_stack = Obj.magic _menhir_stack in
                let (_menhir_stack, _menhir_s, _) = _menhir_stack in
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
        | _ ->
            _menhir_fail ())
    | MenhirState36 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | LBRACKET ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | BOOLCONST _v ->
                _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState38 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | ID _v ->
                _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState38 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | INTCONST _v ->
                _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState38 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | LPAREN ->
                _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState38 _menhir_env._menhir_startp
            | MINUS ->
                _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState38 _menhir_env._menhir_startp
            | NEW ->
                _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState38 _menhir_env._menhir_startp
            | READLN ->
                _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState38 _menhir_env._menhir_startp
            | WRITE ->
                _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState38 _menhir_env._menhir_startp
            | WRITELN ->
                _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState38 _menhir_env._menhir_startp
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState38)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | MenhirState134 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | SEMICOLON ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | VAR ->
                _menhir_run2 _menhir_env (Obj.magic _menhir_stack) MenhirState136
            | BEGIN ->
                _menhir_reduce16 _menhir_env (Obj.magic _menhir_stack) MenhirState136
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState136)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        _menhir_fail ()

and _menhir_goto_loption_separated_nonempty_list_SEMICOLON_instruction__ : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.instruction list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    let _menhir_stack = Obj.magic _menhir_stack in
    assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
    let _tok = _menhir_env._menhir_token in
    match _tok with
    | END ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _ = _menhir_discard _menhir_env in
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s), _, xs0) = _menhir_stack in
        let _v : (LPP.instruction) = let is =
          let xs = xs0 in
              ( xs )
        in
            ( ISeq is ) in
        let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
        (match _menhir_s with
        | MenhirState28 | MenhirState120 | MenhirState94 | MenhirState97 | MenhirState106 ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, b) = _menhir_stack in
            let _v : (LPP.instruction) =     ( b ) in
            _menhir_goto_instruction _menhir_env _menhir_stack _menhir_s _v
        | MenhirState27 ->
            let _menhir_stack = Obj.magic _menhir_stack in
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            let _tok = _menhir_env._menhir_token in
            (match _tok with
            | SEMICOLON ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let _ = _menhir_discard _menhir_env in
                let _menhir_stack = Obj.magic _menhir_stack in
                let (((((((_menhir_stack, _menhir_s), f, _startpos_f_, _endpos_f_), _startpos__3_), _, formals), _endpos__5_), _, locals), _, body) = _menhir_stack in
                let _v : (LPP.identifier * LPP.procedure) = let result =
                      ( None )
                in
                    (
      f, {
        formals = formals;
        result = result;
        locals = locals;
        body = body
      }
    ) in
                _menhir_goto_procedure _menhir_env _menhir_stack _menhir_s _v
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                let _menhir_stack = Obj.magic _menhir_stack in
                let (_menhir_stack, _menhir_s, _) = _menhir_stack in
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
        | MenhirState137 ->
            let _menhir_stack = Obj.magic _menhir_stack in
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            let _tok = _menhir_env._menhir_token in
            (match _tok with
            | SEMICOLON ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let _ = _menhir_discard _menhir_env in
                let _menhir_stack = Obj.magic _menhir_stack in
                let ((((((((_menhir_stack, _menhir_s), f, _startpos_f_, _endpos_f_), _startpos__3_), _, formals), _endpos__5_), _, t0), _, locals), _, body) = _menhir_stack in
                let _v : (LPP.identifier * LPP.procedure) = let result =
                  let t = t0 in
                      ( Some t )
                in
                    (
      f, {
        formals = formals;
        result = result;
        locals = locals;
        body = body
      }
    ) in
                _menhir_goto_procedure _menhir_env _menhir_stack _menhir_s _v
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                let _menhir_stack = Obj.magic _menhir_stack in
                let (_menhir_stack, _menhir_s, _) = _menhir_stack in
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
        | MenhirState142 ->
            let _menhir_stack = Obj.magic _menhir_stack in
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            let _tok = _menhir_env._menhir_token in
            (match _tok with
            | DOT ->
                let _menhir_stack = Obj.magic _menhir_stack in
                let _menhir_stack = Obj.magic _menhir_stack in
                let (((_menhir_stack, _, globals), _, defs), _, main) = _menhir_stack in
                let _v : (LPP.program) =     ({
      globals = globals;
      defs = defs;
      main = main
    }) in
                let _menhir_stack = Obj.magic _menhir_stack in
                let _menhir_stack = Obj.magic _menhir_stack in
                let _1 = _v in
                Obj.magic _1
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                let _menhir_stack = Obj.magic _menhir_stack in
                let (_menhir_stack, _menhir_s, _) = _menhir_stack in
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
        | _ ->
            _menhir_fail ())
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s

and _menhir_run29 : _menhir_env -> 'ttv_tail -> _menhir_state -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _startpos ->
    let _ = _menhir_discard _menhir_env in
    let _menhir_stack = Obj.magic _menhir_stack in
    let _startpos__1_ = _startpos in
    let _startpos = _startpos__1_ in
    let _v : (Primitive.callee) =     ( CPrimitiveFunction Writeln ) in
    _menhir_goto_raw_callee _menhir_env _menhir_stack _menhir_s _v _startpos

and _menhir_run30 : _menhir_env -> 'ttv_tail -> _menhir_state -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _startpos ->
    let _ = _menhir_discard _menhir_env in
    let _menhir_stack = Obj.magic _menhir_stack in
    let _startpos__1_ = _startpos in
    let _startpos = _startpos__1_ in
    let _v : (Primitive.callee) =     ( CPrimitiveFunction Write ) in
    _menhir_goto_raw_callee _menhir_env _menhir_stack _menhir_s _v _startpos

and _menhir_run31 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _menhir_stack = (_menhir_stack, _menhir_s) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState31 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState31 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState31 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run81 _menhir_env (Obj.magic _menhir_stack) MenhirState31 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState31 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState31 _menhir_env._menhir_startp
    | NOT ->
        _menhir_run33 _menhir_env (Obj.magic _menhir_stack) MenhirState31
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState31 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState31 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState31 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState31

and _menhir_run32 : _menhir_env -> 'ttv_tail -> _menhir_state -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _startpos ->
    let _ = _menhir_discard _menhir_env in
    let _menhir_stack = Obj.magic _menhir_stack in
    let _startpos__1_ = _startpos in
    let _startpos = _startpos__1_ in
    let _v : (Primitive.callee) =     ( CPrimitiveFunction Readln ) in
    _menhir_goto_raw_callee _menhir_env _menhir_stack _menhir_s _v _startpos

and _menhir_run34 : _menhir_env -> 'ttv_tail -> _menhir_state -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _startpos ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _startpos) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | ARRAY ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _tok = _menhir_discard _menhir_env in
        (match _tok with
        | OF ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | ARRAY ->
                _menhir_run11 _menhir_env (Obj.magic _menhir_stack) MenhirState36
            | BOOLEAN ->
                _menhir_run10 _menhir_env (Obj.magic _menhir_stack) MenhirState36
            | INTEGER ->
                _menhir_run9 _menhir_env (Obj.magic _menhir_stack) MenhirState36
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState36)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s

and _menhir_run39 : _menhir_env -> 'ttv_tail -> _menhir_state -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _startpos ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _startpos) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState39 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState39 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState39 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState39 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState39 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState39 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState39 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState39 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState39 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState39

and _menhir_run40 : _menhir_env -> 'ttv_tail -> _menhir_state -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _startpos ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _startpos) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState40 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState40 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState40 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState40 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState40 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState40 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState40 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState40 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState40 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState40

and _menhir_run41 : _menhir_env -> 'ttv_tail -> _menhir_state -> (int32) -> Lexing.position -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v _startpos _endpos ->
    let _ = _menhir_discard _menhir_env in
    let _menhir_stack = Obj.magic _menhir_stack in
    let i = _v in
    let _startpos_i_ = _startpos in
    let _endpos_i_ = _endpos in
    let _startpos = _startpos_i_ in
    let _endpos = _endpos_i_ in
    let _v : (LPP.raw_expression) =     ( EConst (ConstInt i) ) in
    _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos

and _menhir_run95 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _menhir_stack = (_menhir_stack, _menhir_s) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState95 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState95 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState95 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run81 _menhir_env (Obj.magic _menhir_stack) MenhirState95 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState95 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState95 _menhir_env._menhir_startp
    | NOT ->
        _menhir_run33 _menhir_env (Obj.magic _menhir_stack) MenhirState95
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState95 _menhir_env._menhir_startp
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState95 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState95 _menhir_env._menhir_startp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState95

and _menhir_run98 : _menhir_env -> 'ttv_tail -> _menhir_state -> (string Location.t) -> Lexing.position -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v _startpos _endpos ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v, _startpos, _endpos) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | COLONEQ ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _tok = _menhir_discard _menhir_env in
        (match _tok with
        | BOOLCONST _v ->
            _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState99 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
        | ID _v ->
            _menhir_run42 _menhir_env (Obj.magic _menhir_stack) MenhirState99 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
        | INTCONST _v ->
            _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState99 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
        | LPAREN ->
            _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState99 _menhir_env._menhir_startp
        | MINUS ->
            _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState99 _menhir_env._menhir_startp
        | NEW ->
            _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState99 _menhir_env._menhir_startp
        | READLN ->
            _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState99 _menhir_env._menhir_startp
        | WRITE ->
            _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState99 _menhir_env._menhir_startp
        | WRITELN ->
            _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState99 _menhir_env._menhir_startp
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState99)
    | EQ | GE | GT | LBRACKET | LE | LT | MINUS | NE | PLUS | SLASH | TIMES ->
        _menhir_reduce39 _menhir_env (Obj.magic _menhir_stack)
    | LPAREN ->
        _menhir_reduce36 _menhir_env (Obj.magic _menhir_stack)
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s

and _menhir_run43 : _menhir_env -> 'ttv_tail -> _menhir_state -> (bool) -> Lexing.position -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v _startpos _endpos ->
    let _ = _menhir_discard _menhir_env in
    let _menhir_stack = Obj.magic _menhir_stack in
    let b = _v in
    let _startpos_b_ = _startpos in
    let _endpos_b_ = _endpos in
    let _startpos = _startpos_b_ in
    let _endpos = _endpos_b_ in
    let _v : (LPP.raw_expression) =     ( EConst (ConstBool b) ) in
    _menhir_goto_raw_expression _menhir_env _menhir_stack _menhir_s _v _startpos _endpos

and _menhir_goto_list_procedure_ : _menhir_env -> 'ttv_tail -> _menhir_state -> ((LPP.identifier * LPP.procedure) list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    match _menhir_s with
    | MenhirState140 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, x), _, xs) = _menhir_stack in
        let _v : ((LPP.identifier * LPP.procedure) list) =     ( x :: xs ) in
        _menhir_goto_list_procedure_ _menhir_env _menhir_stack _menhir_s _v
    | MenhirState19 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | BEGIN ->
            _menhir_run28 _menhir_env (Obj.magic _menhir_stack) MenhirState142
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState142)
    | _ ->
        _menhir_fail ()

and _menhir_reduce20 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _v : ((LPP.identifier * LPP.typ) list list) =     ( [] ) in
    _menhir_goto_loption_separated_nonempty_list_SEMICOLON_binding__ _menhir_env _menhir_stack _menhir_s _v

and _menhir_run9 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _ = _menhir_discard _menhir_env in
    let _menhir_stack = Obj.magic _menhir_stack in
    let _v : (LPP.typ) =     ( TypInt ) in
    _menhir_goto_typ _menhir_env _menhir_stack _menhir_s _v

and _menhir_run10 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _ = _menhir_discard _menhir_env in
    let _menhir_stack = Obj.magic _menhir_stack in
    let _v : (LPP.typ) =     ( TypBool ) in
    _menhir_goto_typ _menhir_env _menhir_stack _menhir_s _v

and _menhir_run11 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _menhir_stack = (_menhir_stack, _menhir_s) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | OF ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _tok = _menhir_discard _menhir_env in
        (match _tok with
        | ARRAY ->
            _menhir_run11 _menhir_env (Obj.magic _menhir_stack) MenhirState12
        | BOOLEAN ->
            _menhir_run10 _menhir_env (Obj.magic _menhir_stack) MenhirState12
        | INTEGER ->
            _menhir_run9 _menhir_env (Obj.magic _menhir_stack) MenhirState12
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState12)
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s

and _menhir_fail : unit -> 'a =
  fun () ->
    Printf.fprintf Pervasives.stderr "Internal failure -- please contact the parser generator's developers.\n%!";
    assert false

and _menhir_run28 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _menhir_stack = (_menhir_stack, _menhir_s) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | BEGIN ->
        _menhir_run28 _menhir_env (Obj.magic _menhir_stack) MenhirState28
    | BOOLCONST _v ->
        _menhir_run43 _menhir_env (Obj.magic _menhir_stack) MenhirState28 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | ID _v ->
        _menhir_run98 _menhir_env (Obj.magic _menhir_stack) MenhirState28 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | IF ->
        _menhir_run95 _menhir_env (Obj.magic _menhir_stack) MenhirState28
    | INTCONST _v ->
        _menhir_run41 _menhir_env (Obj.magic _menhir_stack) MenhirState28 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | LPAREN ->
        _menhir_run40 _menhir_env (Obj.magic _menhir_stack) MenhirState28 _menhir_env._menhir_startp
    | MINUS ->
        _menhir_run39 _menhir_env (Obj.magic _menhir_stack) MenhirState28 _menhir_env._menhir_startp
    | NEW ->
        _menhir_run34 _menhir_env (Obj.magic _menhir_stack) MenhirState28 _menhir_env._menhir_startp
    | READLN ->
        _menhir_run32 _menhir_env (Obj.magic _menhir_stack) MenhirState28 _menhir_env._menhir_startp
    | WHILE ->
        _menhir_run31 _menhir_env (Obj.magic _menhir_stack) MenhirState28
    | WRITE ->
        _menhir_run30 _menhir_env (Obj.magic _menhir_stack) MenhirState28 _menhir_env._menhir_startp
    | WRITELN ->
        _menhir_run29 _menhir_env (Obj.magic _menhir_stack) MenhirState28 _menhir_env._menhir_startp
    | END ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_s = MenhirState28 in
        let _v : (LPP.instruction list) =     ( [] ) in
        _menhir_goto_loption_separated_nonempty_list_SEMICOLON_instruction__ _menhir_env _menhir_stack _menhir_s _v
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState28

and _menhir_reduce14 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _v : ((LPP.identifier * LPP.procedure) list) =     ( [] ) in
    _menhir_goto_list_procedure_ _menhir_env _menhir_stack _menhir_s _v

and _menhir_run20 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _menhir_stack = (_menhir_stack, _menhir_s) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | ID _v ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _startpos = _menhir_env._menhir_startp in
        let _endpos = _menhir_env._menhir_endp in
        let _menhir_stack = (_menhir_stack, _v, _startpos, _endpos) in
        let _tok = _menhir_discard _menhir_env in
        (match _tok with
        | LPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _startpos = _menhir_env._menhir_startp in
            let _menhir_stack = (_menhir_stack, _startpos) in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | ID _v ->
                _menhir_run3 _menhir_env (Obj.magic _menhir_stack) MenhirState22 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | RPAREN ->
                _menhir_reduce20 _menhir_env (Obj.magic _menhir_stack) MenhirState22
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState22)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s), _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s

and _menhir_run129 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _menhir_stack = (_menhir_stack, _menhir_s) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | ID _v ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _startpos = _menhir_env._menhir_startp in
        let _endpos = _menhir_env._menhir_endp in
        let _menhir_stack = (_menhir_stack, _v, _startpos, _endpos) in
        let _tok = _menhir_discard _menhir_env in
        (match _tok with
        | LPAREN ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _startpos = _menhir_env._menhir_startp in
            let _menhir_stack = (_menhir_stack, _startpos) in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | ID _v ->
                _menhir_run3 _menhir_env (Obj.magic _menhir_stack) MenhirState131 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
            | RPAREN ->
                _menhir_reduce20 _menhir_env (Obj.magic _menhir_stack) MenhirState131
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState131)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let ((_menhir_stack, _menhir_s), _, _, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s

and _menhir_goto_separated_nonempty_list_COMMA_ID_ : _menhir_env -> 'ttv_tail -> _menhir_state -> (LPP.identifier list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    match _menhir_s with
    | MenhirState4 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, x, _startpos_x_, _endpos_x_), _, xs) = _menhir_stack in
        let _v : (LPP.identifier list) =     ( x :: xs ) in
        _menhir_goto_separated_nonempty_list_COMMA_ID_ _menhir_env _menhir_stack _menhir_s _v
    | MenhirState131 | MenhirState127 | MenhirState22 | MenhirState17 | MenhirState2 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | COLON ->
            let _menhir_stack = Obj.magic _menhir_stack in
            let _tok = _menhir_discard _menhir_env in
            (match _tok with
            | ARRAY ->
                _menhir_run11 _menhir_env (Obj.magic _menhir_stack) MenhirState8
            | BOOLEAN ->
                _menhir_run10 _menhir_env (Obj.magic _menhir_stack) MenhirState8
            | INTEGER ->
                _menhir_run9 _menhir_env (Obj.magic _menhir_stack) MenhirState8
            | _ ->
                assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
                _menhir_env._menhir_shifted <- (-1);
                _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState8)
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            let _menhir_stack = Obj.magic _menhir_stack in
            let (_menhir_stack, _menhir_s, _) = _menhir_stack in
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s)
    | _ ->
        _menhir_fail ()

and _menhir_goto_loption_preceded_VAR_terminated_bindings__ : _menhir_env -> 'ttv_tail -> _menhir_state -> ((LPP.identifier * LPP.typ) list) -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v ->
    let _menhir_stack = Obj.magic _menhir_stack in
    let _menhir_stack = Obj.magic _menhir_stack in
    let vars = _v in
    let _v : ((LPP.identifier * LPP.typ) list) =     ( vars ) in
    let _menhir_stack = (_menhir_stack, _menhir_s, _v) in
    match _menhir_s with
    | MenhirState1 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | FUNCTION ->
            _menhir_run129 _menhir_env (Obj.magic _menhir_stack) MenhirState19
        | PROCEDURE ->
            _menhir_run20 _menhir_env (Obj.magic _menhir_stack) MenhirState19
        | BEGIN ->
            _menhir_reduce14 _menhir_env (Obj.magic _menhir_stack) MenhirState19
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState19)
    | MenhirState26 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | BEGIN ->
            _menhir_run28 _menhir_env (Obj.magic _menhir_stack) MenhirState27
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState27)
    | MenhirState136 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        let _tok = _menhir_env._menhir_token in
        (match _tok with
        | BEGIN ->
            _menhir_run28 _menhir_env (Obj.magic _menhir_stack) MenhirState137
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState137)
    | _ ->
        _menhir_fail ()

and _menhir_run3 : _menhir_env -> 'ttv_tail -> _menhir_state -> (string Location.t) -> Lexing.position -> Lexing.position -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s _v _startpos _endpos ->
    let _menhir_stack = (_menhir_stack, _menhir_s, _v, _startpos, _endpos) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | COMMA ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _tok = _menhir_discard _menhir_env in
        (match _tok with
        | ID _v ->
            _menhir_run3 _menhir_env (Obj.magic _menhir_stack) MenhirState4 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState4)
    | COLON ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, x, _startpos_x_, _endpos_x_) = _menhir_stack in
        let _v : (LPP.identifier list) =     ( [ x ] ) in
        _menhir_goto_separated_nonempty_list_COMMA_ID_ _menhir_env _menhir_stack _menhir_s _v
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s

and _menhir_errorcase : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    match _menhir_s with
    | MenhirState142 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState140 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState137 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState136 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState134 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, _), _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState131 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (((_menhir_stack, _menhir_s), _, _, _), _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState127 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState120 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState112 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, _, _, _), _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState109 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState106 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState102 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, _, _), _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState99 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState97 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState95 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState94 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState90 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState86 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState81 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState74 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState72 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState70 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState68 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState66 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState64 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState62 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, _, _, _), _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState60 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState58 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState55 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState53 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState51 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState46 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, _, _), _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState40 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState39 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState38 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState36 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState33 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState31 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState28 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState27 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState26 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let ((_menhir_stack, _menhir_s, _), _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState22 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (((_menhir_stack, _menhir_s), _, _, _), _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState19 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState17 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState12 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState8 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState4 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s, _, _, _) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState2 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let (_menhir_stack, _menhir_s) = _menhir_stack in
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s
    | MenhirState1 ->
        let _menhir_stack = Obj.magic _menhir_stack in
        raise _eRR

and _menhir_reduce16 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _v : ((LPP.identifier * LPP.typ) list) =     ( [] ) in
    _menhir_goto_loption_preceded_VAR_terminated_bindings__ _menhir_env _menhir_stack _menhir_s _v

and _menhir_run2 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return =
  fun _menhir_env _menhir_stack _menhir_s ->
    let _menhir_stack = (_menhir_stack, _menhir_s) in
    let _tok = _menhir_discard _menhir_env in
    match _tok with
    | ID _v ->
        _menhir_run3 _menhir_env (Obj.magic _menhir_stack) MenhirState2 _v _menhir_env._menhir_startp _menhir_env._menhir_endp
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState2

and _menhir_discard : _menhir_env -> token =
  fun _menhir_env ->
    let lexbuf = _menhir_env._menhir_lexbuf in
    let _tok = _menhir_env._menhir_lexer lexbuf in
    _menhir_env._menhir_token <- _tok;
    _menhir_env._menhir_startp <- lexbuf.Lexing.lex_start_p;
    _menhir_env._menhir_endp <- lexbuf.Lexing.lex_curr_p;
    let shifted = Pervasives.(+) _menhir_env._menhir_shifted 1 in
    if Pervasives.(>=) shifted 0 then
      _menhir_env._menhir_shifted <- shifted;
    _tok

and program : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (LPP.program) =
  fun lexer lexbuf ->
    let _menhir_env = let _tok = lexer lexbuf in
    {
      _menhir_lexer = lexer;
      _menhir_lexbuf = lexbuf;
      _menhir_token = _tok;
      _menhir_startp = lexbuf.Lexing.lex_start_p;
      _menhir_endp = lexbuf.Lexing.lex_curr_p;
      _menhir_shifted = max_int;
      } in
    Obj.magic (let _menhir_stack = () in
    assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
    let _tok = _menhir_env._menhir_token in
    match _tok with
    | PROGRAM ->
        let _menhir_stack = Obj.magic _menhir_stack in
        let _tok = _menhir_discard _menhir_env in
        (match _tok with
        | VAR ->
            _menhir_run2 _menhir_env (Obj.magic _menhir_stack) MenhirState1
        | BEGIN | FUNCTION | PROCEDURE ->
            _menhir_reduce16 _menhir_env (Obj.magic _menhir_stack) MenhirState1
        | _ ->
            assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
            _menhir_env._menhir_shifted <- (-1);
            _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState1)
    | _ ->
        assert (Pervasives.(<>) _menhir_env._menhir_shifted (-1));
        _menhir_env._menhir_shifted <- (-1);
        let _menhir_stack = Obj.magic _menhir_stack in
        raise _eRR)