text: // Generated by BUCKLESCRIPT VERSION 5.0.4, PLEASE EDIT WITH CARE
  'use strict';
  
  var Block = require("bs-platform/lib/js/block.js");
  var Curry = require("bs-platform/lib/js/curry.js");
  var Printf = require("bs-platform/lib/js/printf.js");
  var Pervasives = require("bs-platform/lib/js/pervasives.js");
  var Caml_exceptions = require("bs-platform/lib/js/caml_exceptions.js");
  var Caml_builtin_exceptions = require("bs-platform/lib/js/caml_builtin_exceptions.js");
  
  var $$Error = Caml_exceptions.create("Parser-AiProject.MenhirBasics.Error");
  
  function _menhir_run18(_menhir_env, _menhir_stack) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    if (typeof _tok === "number") {
      switch (_tok) {
        case 7 : 
            return _menhir_run5(_menhir_env$1, _menhir_stack, /* MenhirState18 */11);
        case 9 : 
            return _menhir_run15(_menhir_env$1, _menhir_stack, /* MenhirState18 */11);
        default:
          if (_menhir_env$1[/* _menhir_error */3]) {
            throw [
                  Caml_builtin_exceptions.assert_failure,
                  /* tuple */[
                    "parser.ml",
                    100,
                    8
                  ]
                ];
          }
          _menhir_env$1[/* _menhir_error */3] = true;
          return _menhir_errorcase(_menhir_env$1, _menhir_stack, /* MenhirState18 */11);
      }
    } else if (_tok.tag) {
      return _menhir_run7(_menhir_env$1, _menhir_stack, /* MenhirState18 */11, _tok[0]);
    } else {
      return _menhir_run4(_menhir_env$1, _menhir_stack, /* MenhirState18 */11, _tok[0]);
    }
  }
  
  function _menhir_run6(__menhir_env, __menhir_stack, __menhir_s) {
    while(true) {
      var _menhir_s = __menhir_s;
      var _menhir_stack = __menhir_stack;
      var _menhir_env = __menhir_env;
      var _menhir_stack$1 = /* tuple */[
        _menhir_stack,
        _menhir_s
      ];
      var _menhir_env$1 = _menhir_discard(_menhir_env);
      var _tok = _menhir_env$1[/* _menhir_token */2];
      if (typeof _tok === "number") {
        switch (_tok) {
          case 7 : 
              return _menhir_run5(_menhir_env$1, _menhir_stack$1, /* MenhirState6 */15);
          case 9 : 
              __menhir_s = /* MenhirState6 */15;
              __menhir_stack = _menhir_stack$1;
              __menhir_env = _menhir_env$1;
              continue ;
          default:
            if (_menhir_env$1[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      804,
                      8
                    ]
                  ];
            }
            _menhir_env$1[/* _menhir_error */3] = true;
            return _menhir_errorcase(_menhir_env$1, _menhir_stack$1, /* MenhirState6 */15);
        }
      } else if (_tok.tag) {
        return _menhir_run7(_menhir_env$1, _menhir_stack$1, /* MenhirState6 */15, _tok[0]);
      } else {
        return _menhir_run4(_menhir_env$1, _menhir_stack$1, /* MenhirState6 */15, _tok[0]);
      }
    };
  }
  
  function _menhir_run7(_menhir_env, _menhir_stack, _menhir_s, _v) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _v$1 = /* Var */Block.__(1, [_v]);
    return _menhir_goto_aexpr(_menhir_env$1, _menhir_stack, _menhir_s, _v$1);
  }
  
  function _menhir_discard(_menhir_env) {
    var lexer = _menhir_env[/* _menhir_lexer */0];
    var lexbuf = _menhir_env[/* _menhir_lexbuf */1];
    var _tok = Curry._1(lexer, lexbuf);
    return /* record */[
            /* _menhir_lexer */lexer,
            /* _menhir_lexbuf */lexbuf,
            /* _menhir_token */_tok,
            /* _menhir_error */false
          ];
  }
  
  function _menhir_run4(_menhir_env, _menhir_stack, _menhir_s, _v) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _v$1 = /* Num */Block.__(0, [_v]);
    return _menhir_goto_aexpr(_menhir_env$1, _menhir_stack, _menhir_s, _v$1);
  }
  
  function _menhir_errorcase(_menhir_env, __menhir_stack, __menhir_s) {
    while(true) {
      var _menhir_s = __menhir_s;
      var _menhir_stack = __menhir_stack;
      if (_menhir_s >= 19) {
        throw $$Error;
      } else {
        __menhir_s = _menhir_stack[1];
        __menhir_stack = _menhir_stack[0];
        continue ;
      }
    };
  }
  
  function _menhir_run5(__menhir_env, __menhir_stack, __menhir_s) {
    while(true) {
      var _menhir_s = __menhir_s;
      var _menhir_stack = __menhir_stack;
      var _menhir_env = __menhir_env;
      var _menhir_stack$1 = /* tuple */[
        _menhir_stack,
        _menhir_s
      ];
      var _menhir_env$1 = _menhir_discard(_menhir_env);
      var _tok = _menhir_env$1[/* _menhir_token */2];
      if (typeof _tok === "number") {
        switch (_tok) {
          case 7 : 
              __menhir_s = /* MenhirState5 */16;
              __menhir_stack = _menhir_stack$1;
              __menhir_env = _menhir_env$1;
              continue ;
          case 9 : 
              return _menhir_run6(_menhir_env$1, _menhir_stack$1, /* MenhirState5 */16);
          default:
            if (_menhir_env$1[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      785,
                      8
                    ]
                  ];
            }
            _menhir_env$1[/* _menhir_error */3] = true;
            return _menhir_errorcase(_menhir_env$1, _menhir_stack$1, /* MenhirState5 */16);
        }
      } else if (_tok.tag) {
        return _menhir_run7(_menhir_env$1, _menhir_stack$1, /* MenhirState5 */16, _tok[0]);
      } else {
        return _menhir_run4(_menhir_env$1, _menhir_stack$1, /* MenhirState5 */16, _tok[0]);
      }
    };
  }
  
  function _menhir_reduce22(_menhir_env, _menhir_stack, _menhir_s) {
    return _menhir_goto_stmtlist(_menhir_env, _menhir_stack, _menhir_s, /* [] */0);
  }
  
  function _menhir_run40(_menhir_env, _menhir_stack, _menhir_s, _v) {
    var _menhir_stack$1 = /* tuple */[
      _menhir_stack,
      _menhir_s,
      _v
    ];
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    var exit = 0;
    if (typeof _tok === "number" && _tok >= 17) {
      var _menhir_env$2 = _menhir_discard(_menhir_env$1);
      var _tok$1 = _menhir_env$2[/* _menhir_token */2];
      if (typeof _tok$1 === "number") {
        switch (_tok$1) {
          case 7 : 
              return _menhir_run5(_menhir_env$2, _menhir_stack$1, /* MenhirState41 */1);
          case 9 : 
              return _menhir_run6(_menhir_env$2, _menhir_stack$1, /* MenhirState41 */1);
          default:
            if (_menhir_env$2[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      1170,
                      12
                    ]
                  ];
            }
            _menhir_env$2[/* _menhir_error */3] = true;
            return _menhir_errorcase(_menhir_env$2, _menhir_stack$1, /* MenhirState41 */1);
        }
      } else if (_tok$1.tag) {
        return _menhir_run7(_menhir_env$2, _menhir_stack$1, /* MenhirState41 */1, _tok$1[0]);
      } else {
        return _menhir_run4(_menhir_env$2, _menhir_stack$1, /* MenhirState41 */1, _tok$1[0]);
      }
    } else {
      exit = 1;
    }
    if (exit === 1) {
      if (_menhir_env$1[/* _menhir_error */3]) {
        throw [
              Caml_builtin_exceptions.assert_failure,
              /* tuple */[
                "parser.ml",
                1174,
                8
              ]
            ];
      }
      _menhir_env$1[/* _menhir_error */3] = true;
      return _menhir_errorcase(_menhir_env$1, _menhir_stack, _menhir_s);
    }
    
  }
  
  function _menhir_run33(_menhir_env, _menhir_stack, _menhir_s) {
    var _menhir_stack$1 = /* tuple */[
      _menhir_stack,
      _menhir_s
    ];
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    return _menhir_reduce22(_menhir_env$1, _menhir_stack$1, /* MenhirState33 */5);
  }
  
  function _menhir_goto_stmtlist(_menhir_env, _menhir_stack, _menhir_s, _v) {
    var _menhir_stack$1 = /* tuple */[
      _menhir_stack,
      _menhir_s,
      _v
    ];
    if (_menhir_s !== 5) {
      if (_menhir_s >= 19) {
        if (_menhir_env[/* _menhir_error */3]) {
          throw [
                Caml_builtin_exceptions.assert_failure,
                /* tuple */[
                  "parser.ml",
                  1220,
                  8
                ]
              ];
        }
        var _tok = _menhir_env[/* _menhir_token */2];
        var exit = 0;
        if (typeof _tok === "number") {
          switch (_tok) {
            case 0 : 
                return _menhir_run2(_menhir_env, _menhir_stack$1, /* MenhirState1 */18);
            case 1 : 
                return _menhir_run32(_menhir_env, _menhir_stack$1, /* MenhirState1 */18);
            case 10 : 
                return _menhir_run33(_menhir_env, _menhir_stack$1, /* MenhirState1 */18);
            case 11 : 
                return _menhir_run36(_menhir_env, _menhir_stack$1, /* MenhirState1 */18);
            case 14 : 
                return /* Prog */Block.__(0, [
                          _v,
                          /* () */0
                        ]);
            case 16 : 
                return _menhir_run44(_menhir_env, _menhir_stack$1, /* MenhirState1 */18);
            default:
              exit = 1;
          }
        } else if (_tok.tag === 1) {
          return _menhir_run40(_menhir_env, _menhir_stack$1, /* MenhirState1 */18, _tok[0]);
        } else {
          exit = 1;
        }
        if (exit === 1) {
          if (_menhir_env[/* _menhir_error */3]) {
            throw [
                  Caml_builtin_exceptions.assert_failure,
                  /* tuple */[
                    "parser.ml",
                    1263,
                    12
                  ]
                ];
          }
          _menhir_env[/* _menhir_error */3] = true;
          return _menhir_errorcase(_menhir_env, _menhir_stack$1, /* MenhirState1 */18);
        }
        
      } else {
        return _menhir_fail(/* () */0);
      }
    } else {
      if (_menhir_env[/* _menhir_error */3]) {
        throw [
              Caml_builtin_exceptions.assert_failure,
              /* tuple */[
                "parser.ml",
                1268,
                8
              ]
            ];
      }
      var _tok$1 = _menhir_env[/* _menhir_token */2];
      var exit$1 = 0;
      if (typeof _tok$1 === "number") {
        switch (_tok$1) {
          case 0 : 
              return _menhir_run2(_menhir_env, _menhir_stack$1, /* MenhirState34 */4);
          case 1 : 
              return _menhir_run32(_menhir_env, _menhir_stack$1, /* MenhirState34 */4);
          case 3 : 
              var _menhir_env$1 = _menhir_discard(_menhir_env);
              var _v$1 = /* Stmtlist */Block.__(7, [
                  _v,
                  /* () */0
                ]);
              return _menhir_goto_stmt(_menhir_env$1, _menhir_stack[0], _menhir_stack[1], _v$1);
          case 10 : 
              return _menhir_run33(_menhir_env, _menhir_stack$1, /* MenhirState34 */4);
          case 11 : 
              return _menhir_run36(_menhir_env, _menhir_stack$1, /* MenhirState34 */4);
          case 16 : 
              return _menhir_run44(_menhir_env, _menhir_stack$1, /* MenhirState34 */4);
          default:
            exit$1 = 1;
        }
      } else if (_tok$1.tag === 1) {
        return _menhir_run40(_menhir_env, _menhir_stack$1, /* MenhirState34 */4, _tok$1[0]);
      } else {
        exit$1 = 1;
      }
      if (exit$1 === 1) {
        if (_menhir_env[/* _menhir_error */3]) {
          throw [
                Caml_builtin_exceptions.assert_failure,
                /* tuple */[
                  "parser.ml",
                  1306,
                  12
                ]
              ];
        }
        _menhir_env[/* _menhir_error */3] = true;
        return _menhir_errorcase(_menhir_env, _menhir_stack$1, /* MenhirState34 */4);
      }
      
    }
  }
  
  function _menhir_fail(param) {
    Printf.fprintf(Pervasives.stderr, /* Format */[
          /* String_literal */Block.__(11, [
              "Internal failure -- please contact the parser generator's developers.\n",
              /* Flush */Block.__(10, [/* End_of_format */0])
            ]),
          "Internal failure -- please contact the parser generator's developers.\n%!"
        ]);
    throw [
          Caml_builtin_exceptions.assert_failure,
          /* tuple */[
            "parser.ml",
            835,
            4
          ]
        ];
  }
  
  function _menhir_run32(_menhir_env, _menhir_stack, _menhir_s) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    return _menhir_goto_stmt(_menhir_env$1, _menhir_stack, _menhir_s, /* Emptystmt */Block.__(2, [/* () */0]));
  }
  
  function _menhir_goto_stmt(_menhir_env, __menhir_stack, __menhir_s, __v) {
    while(true) {
      var _v = __v;
      var _menhir_s = __menhir_s;
      var _menhir_stack = __menhir_stack;
      var _menhir_stack$1 = /* tuple */[
        _menhir_stack,
        _menhir_s,
        _v
      ];
      var exit = 0;
      switch (_menhir_s) {
        case 0 : 
            var match = _menhir_stack[0];
            var match$1 = match[0];
            var _v_000 = match[2];
            var _v_001 = _menhir_stack[2];
            var _v$1 = /* Ifelse */Block.__(4, [
                _v_000,
                _v_001,
                _v,
                /* () */0
              ]);
            __v = _v$1;
            __menhir_s = match$1[1];
            __menhir_stack = match$1[0];
            continue ;
        case 2 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      847,
                      8
                    ]
                  ];
            }
            var _tok = _menhir_env[/* _menhir_token */2];
            var exit$1 = 0;
            if (typeof _tok === "number") {
              switch (_tok) {
                case 15 : 
                    var _menhir_env$1 = _menhir_discard(_menhir_env);
                    var _tok$1 = _menhir_env$1[/* _menhir_token */2];
                    var exit$2 = 0;
                    if (typeof _tok$1 === "number") {
                      switch (_tok$1) {
                        case 0 : 
                            return _menhir_run2(_menhir_env$1, _menhir_stack$1, /* MenhirState47 */0);
                        case 1 : 
                            return _menhir_run32(_menhir_env$1, _menhir_stack$1, /* MenhirState47 */0);
                        case 10 : 
                            return _menhir_run33(_menhir_env$1, _menhir_stack$1, /* MenhirState47 */0);
                        case 11 : 
                            return _menhir_run36(_menhir_env$1, _menhir_stack$1, /* MenhirState47 */0);
                        case 16 : 
                            return _menhir_run44(_menhir_env$1, _menhir_stack$1, /* MenhirState47 */0);
                        default:
                          exit$2 = 4;
                      }
                    } else if (_tok$1.tag === 1) {
                      return _menhir_run40(_menhir_env$1, _menhir_stack$1, /* MenhirState47 */0, _tok$1[0]);
                    } else {
                      exit$2 = 4;
                    }
                    if (exit$2 === 4) {
                      if (_menhir_env$1[/* _menhir_error */3]) {
                        throw [
                              Caml_builtin_exceptions.assert_failure,
                              /* tuple */[
                                "parser.ml",
                                868,
                                16
                              ]
                            ];
                      }
                      _menhir_env$1[/* _menhir_error */3] = true;
                      return _menhir_errorcase(_menhir_env$1, _menhir_stack$1, /* MenhirState47 */0);
                    }
                    break;
                case 0 : 
                case 1 : 
                case 3 : 
                case 10 : 
                case 11 : 
                case 14 : 
                case 16 : 
                    exit$1 = 3;
                    break;
                default:
                  exit$1 = 2;
              }
            } else {
              exit$1 = _tok.tag === 1 ? 3 : 2;
            }
            switch (exit$1) {
              case 2 : 
                  if (_menhir_env[/* _menhir_error */3]) {
                    throw [
                          Caml_builtin_exceptions.assert_failure,
                          /* tuple */[
                            "parser.ml",
                            896,
                            12
                          ]
                        ];
                  }
                  _menhir_env[/* _menhir_error */3] = true;
                  return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
              case 3 : 
                  var match$2 = _menhir_stack[0];
                  var _v_000$1 = _menhir_stack[2];
                  var _v$2 = /* If */Block.__(3, [
                      _v_000$1,
                      _v,
                      /* () */0
                    ]);
                  __v = _v$2;
                  __menhir_s = match$2[1];
                  __menhir_stack = match$2[0];
                  continue ;
              
            }
            break;
        case 6 : 
            var match$3 = _menhir_stack[0];
            var _v_000$2 = _menhir_stack[2];
            var _v$3 = /* While */Block.__(5, [
                _v_000$2,
                _v,
                /* () */0
              ]);
            __v = _v$3;
            __menhir_s = match$3[1];
            __menhir_stack = match$3[0];
            continue ;
        case 4 : 
        case 18 : 
            exit = 1;
            break;
        case 1 : 
        case 3 : 
        case 5 : 
        case 7 : 
        case 8 : 
        case 9 : 
        case 10 : 
        case 11 : 
        case 12 : 
        case 13 : 
        case 14 : 
        case 15 : 
        case 16 : 
        case 17 : 
        case 19 : 
            return _menhir_fail(/* () */0);
        
      }
      if (exit === 1) {
        var _v_001$1 = _menhir_stack[2];
        var _v$4 = /* :: */[
          _v,
          _v_001$1
        ];
        return _menhir_goto_stmtlist(_menhir_env, _menhir_stack[0], _menhir_stack[1], _v$4);
      }
      
    };
  }
  
  function _menhir_run44(_menhir_env, _menhir_stack, _menhir_s) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    var exit = 0;
    if (typeof _tok === "number" && _tok === 1) {
      var _menhir_env$2 = _menhir_discard(_menhir_env$1);
      return _menhir_goto_stmt(_menhir_env$2, _menhir_stack, _menhir_s, /* Break */Block.__(6, [/* () */0]));
    } else {
      exit = 1;
    }
    if (exit === 1) {
      if (_menhir_env$1[/* _menhir_error */3]) {
        throw [
              Caml_builtin_exceptions.assert_failure,
              /* tuple */[
                "parser.ml",
                1204,
                8
              ]
            ];
      }
      _menhir_env$1[/* _menhir_error */3] = true;
      return _menhir_errorcase(_menhir_env$1, _menhir_stack, _menhir_s);
    }
    
  }
  
  function _menhir_run36(_menhir_env, _menhir_stack, _menhir_s) {
    var _menhir_stack$1 = /* tuple */[
      _menhir_stack,
      _menhir_s
    ];
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    var exit = 0;
    if (typeof _tok === "number" && _tok === 9) {
      var _menhir_env$2 = _menhir_discard(_menhir_env$1);
      var _tok$1 = _menhir_env$2[/* _menhir_token */2];
      if (typeof _tok$1 === "number") {
        switch (_tok$1) {
          case 7 : 
              return _menhir_run5(_menhir_env$2, _menhir_stack$1, /* MenhirState37 */3);
          case 9 : 
              return _menhir_run15(_menhir_env$2, _menhir_stack$1, /* MenhirState37 */3);
          default:
            if (_menhir_env$2[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      1136,
                      12
                    ]
                  ];
            }
            _menhir_env$2[/* _menhir_error */3] = true;
            return _menhir_errorcase(_menhir_env$2, _menhir_stack$1, /* MenhirState37 */3);
        }
      } else if (_tok$1.tag) {
        return _menhir_run7(_menhir_env$2, _menhir_stack$1, /* MenhirState37 */3, _tok$1[0]);
      } else {
        return _menhir_run4(_menhir_env$2, _menhir_stack$1, /* MenhirState37 */3, _tok$1[0]);
      }
    } else {
      exit = 1;
    }
    if (exit === 1) {
      if (_menhir_env$1[/* _menhir_error */3]) {
        throw [
              Caml_builtin_exceptions.assert_failure,
              /* tuple */[
                "parser.ml",
                1140,
                8
              ]
            ];
      }
      _menhir_env$1[/* _menhir_error */3] = true;
      return _menhir_errorcase(_menhir_env$1, _menhir_stack, _menhir_s);
    }
    
  }
  
  function _menhir_run2(_menhir_env, _menhir_stack, _menhir_s) {
    var _menhir_stack$1 = /* tuple */[
      _menhir_stack,
      _menhir_s
    ];
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    var exit = 0;
    if (typeof _tok === "number" && _tok === 9) {
      var _menhir_env$2 = _menhir_discard(_menhir_env$1);
      var _tok$1 = _menhir_env$2[/* _menhir_token */2];
      if (typeof _tok$1 === "number") {
        switch (_tok$1) {
          case 7 : 
              return _menhir_run5(_menhir_env$2, _menhir_stack$1, /* MenhirState3 */17);
          case 9 : 
              return _menhir_run15(_menhir_env$2, _menhir_stack$1, /* MenhirState3 */17);
          default:
            if (_menhir_env$2[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      1084,
                      12
                    ]
                  ];
            }
            _menhir_env$2[/* _menhir_error */3] = true;
            return _menhir_errorcase(_menhir_env$2, _menhir_stack$1, /* MenhirState3 */17);
        }
      } else if (_tok$1.tag) {
        return _menhir_run7(_menhir_env$2, _menhir_stack$1, /* MenhirState3 */17, _tok$1[0]);
      } else {
        return _menhir_run4(_menhir_env$2, _menhir_stack$1, /* MenhirState3 */17, _tok$1[0]);
      }
    } else {
      exit = 1;
    }
    if (exit === 1) {
      if (_menhir_env$1[/* _menhir_error */3]) {
        throw [
              Caml_builtin_exceptions.assert_failure,
              /* tuple */[
                "parser.ml",
                1088,
                8
              ]
            ];
      }
      _menhir_env$1[/* _menhir_error */3] = true;
      return _menhir_errorcase(_menhir_env$1, _menhir_stack, _menhir_s);
    }
    
  }
  
  function _menhir_goto_aexpr(_menhir_env, __menhir_stack, __menhir_s, __v) {
    while(true) {
      var _v = __v;
      var _menhir_s = __menhir_s;
      var _menhir_stack = __menhir_stack;
      var _menhir_stack$1 = /* tuple */[
        _menhir_stack,
        _menhir_s,
        _v
      ];
      var exit = 0;
      switch (_menhir_s) {
        case 1 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      686,
                      8
                    ]
                  ];
            }
            var _tok = _menhir_env[/* _menhir_token */2];
            var exit$1 = 0;
            if (typeof _tok === "number" && _tok < 8) {
              switch (_tok) {
                case 1 : 
                    var _menhir_env$1 = _menhir_discard(_menhir_env);
                    var _v_000 = _menhir_stack[2];
                    var _v$1 = /* Assign */Block.__(1, [
                        _v_000,
                        _v,
                        /* () */0
                      ]);
                    return _menhir_goto_stmt(_menhir_env$1, _menhir_stack[0], _menhir_stack[1], _v$1);
                case 4 : 
                    return _menhir_run10(_menhir_env, _menhir_stack$1);
                case 0 : 
                case 2 : 
                case 3 : 
                case 5 : 
                case 6 : 
                    exit$1 = 2;
                    break;
                case 7 : 
                    return _menhir_run12(_menhir_env, _menhir_stack$1);
                
              }
            } else {
              exit$1 = 2;
            }
            if (exit$1 === 2) {
              if (_menhir_env[/* _menhir_error */3]) {
                throw [
                      Caml_builtin_exceptions.assert_failure,
                      /* tuple */[
                        "parser.ml",
                        719,
                        12
                      ]
                    ];
              }
              _menhir_env[/* _menhir_error */3] = true;
              return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
            }
            break;
        case 7 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      624,
                      8
                    ]
                  ];
            }
            var _tok$1 = _menhir_env[/* _menhir_token */2];
            var exit$2 = 0;
            if (typeof _tok$1 === "number") {
              switch (_tok$1) {
                case 4 : 
                    return _menhir_run10(_menhir_env, _menhir_stack$1);
                case 2 : 
                case 6 : 
                    exit$2 = 3;
                    break;
                case 7 : 
                    return _menhir_run12(_menhir_env, _menhir_stack$1);
                case 0 : 
                case 1 : 
                case 3 : 
                case 5 : 
                case 8 : 
                case 9 : 
                case 10 : 
                case 11 : 
                case 12 : 
                case 13 : 
                case 14 : 
                case 15 : 
                case 16 : 
                case 17 : 
                    exit$2 = 2;
                    break;
                
              }
            } else {
              exit$2 = 2;
            }
            switch (exit$2) {
              case 2 : 
                  if (_menhir_env[/* _menhir_error */3]) {
                    throw [
                          Caml_builtin_exceptions.assert_failure,
                          /* tuple */[
                            "parser.ml",
                            654,
                            12
                          ]
                        ];
                  }
                  _menhir_env[/* _menhir_error */3] = true;
                  return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
              case 3 : 
                  var _v_000$1 = _menhir_stack[2];
                  var _v$2 = /* Eq */Block.__(2, [
                      _v_000$1,
                      _v
                    ]);
                  return _menhir_goto_bexpr(_menhir_env, _menhir_stack[0], _menhir_stack[1], _v$2);
              
            }
            break;
        case 8 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      587,
                      8
                    ]
                  ];
            }
            var _tok$2 = _menhir_env[/* _menhir_token */2];
            var exit$3 = 0;
            if (typeof _tok$2 === "number") {
              switch (_tok$2) {
                case 4 : 
                    return _menhir_run10(_menhir_env, _menhir_stack$1);
                case 2 : 
                case 6 : 
                    exit$3 = 3;
                    break;
                case 7 : 
                    return _menhir_run12(_menhir_env, _menhir_stack$1);
                case 0 : 
                case 1 : 
                case 3 : 
                case 5 : 
                case 8 : 
                case 9 : 
                case 10 : 
                case 11 : 
                case 12 : 
                case 13 : 
                case 14 : 
                case 15 : 
                case 16 : 
                case 17 : 
                    exit$3 = 2;
                    break;
                
              }
            } else {
              exit$3 = 2;
            }
            switch (exit$3) {
              case 2 : 
                  if (_menhir_env[/* _menhir_error */3]) {
                    throw [
                          Caml_builtin_exceptions.assert_failure,
                          /* tuple */[
                            "parser.ml",
                            617,
                            12
                          ]
                        ];
                  }
                  _menhir_env[/* _menhir_error */3] = true;
                  return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
              case 3 : 
                  var _v_000$2 = _menhir_stack[2];
                  var _v$3 = /* Gt */Block.__(1, [
                      _v_000$2,
                      _v
                    ]);
                  return _menhir_goto_bexpr(_menhir_env, _menhir_stack[0], _menhir_stack[1], _v$3);
              
            }
            break;
        case 9 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      550,
                      8
                    ]
                  ];
            }
            var _tok$3 = _menhir_env[/* _menhir_token */2];
            var exit$4 = 0;
            if (typeof _tok$3 === "number") {
              switch (_tok$3) {
                case 4 : 
                    return _menhir_run10(_menhir_env, _menhir_stack$1);
                case 2 : 
                case 6 : 
                    exit$4 = 3;
                    break;
                case 7 : 
                    return _menhir_run12(_menhir_env, _menhir_stack$1);
                case 0 : 
                case 1 : 
                case 3 : 
                case 5 : 
                case 8 : 
                case 9 : 
                case 10 : 
                case 11 : 
                case 12 : 
                case 13 : 
                case 14 : 
                case 15 : 
                case 16 : 
                case 17 : 
                    exit$4 = 2;
                    break;
                
              }
            } else {
              exit$4 = 2;
            }
            switch (exit$4) {
              case 2 : 
                  if (_menhir_env[/* _menhir_error */3]) {
                    throw [
                          Caml_builtin_exceptions.assert_failure,
                          /* tuple */[
                            "parser.ml",
                            580,
                            12
                          ]
                        ];
                  }
                  _menhir_env[/* _menhir_error */3] = true;
                  return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
              case 3 : 
                  var _v_000$3 = _menhir_stack[2];
                  var _v$4 = /* Lt */Block.__(0, [
                      _v_000$3,
                      _v
                    ]);
                  return _menhir_goto_bexpr(_menhir_env, _menhir_stack[0], _menhir_stack[1], _v$4);
              
            }
            break;
        case 10 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      513,
                      8
                    ]
                  ];
            }
            var _tok$4 = _menhir_env[/* _menhir_token */2];
            var exit$5 = 0;
            if (typeof _tok$4 === "number") {
              switch (_tok$4) {
                case 4 : 
                    return _menhir_run10(_menhir_env, _menhir_stack$1);
                case 2 : 
                case 6 : 
                    exit$5 = 3;
                    break;
                case 7 : 
                    return _menhir_run12(_menhir_env, _menhir_stack$1);
                case 0 : 
                case 1 : 
                case 3 : 
                case 5 : 
                case 8 : 
                case 9 : 
                case 10 : 
                case 11 : 
                case 12 : 
                case 13 : 
                case 14 : 
                case 15 : 
                case 16 : 
                case 17 : 
                    exit$5 = 2;
                    break;
                
              }
            } else {
              exit$5 = 2;
            }
            switch (exit$5) {
              case 2 : 
                  if (_menhir_env[/* _menhir_error */3]) {
                    throw [
                          Caml_builtin_exceptions.assert_failure,
                          /* tuple */[
                            "parser.ml",
                            543,
                            12
                          ]
                        ];
                  }
                  _menhir_env[/* _menhir_error */3] = true;
                  return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
              case 3 : 
                  var _v_000$4 = _menhir_stack[2];
                  var _v$5 = /* Neq */Block.__(3, [
                      _v_000$4,
                      _v
                    ]);
                  return _menhir_goto_bexpr(_menhir_env, _menhir_stack[0], _menhir_stack[1], _v$5);
              
            }
            break;
        case 12 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      661,
                      8
                    ]
                  ];
            }
            var _tok$5 = _menhir_env[/* _menhir_token */2];
            var exit$6 = 0;
            if (typeof _tok$5 === "number") {
              switch (_tok$5) {
                case 2 : 
                    return _menhir_run9(_menhir_env, _menhir_stack$1);
                case 4 : 
                    return _menhir_run10(_menhir_env, _menhir_stack$1);
                case 5 : 
                    return _menhir_run21(_menhir_env, _menhir_stack$1);
                case 7 : 
                    return _menhir_run12(_menhir_env, _menhir_stack$1);
                case 8 : 
                    return _menhir_run23(_menhir_env, _menhir_stack$1);
                case 12 : 
                    return _menhir_run25(_menhir_env, _menhir_stack$1);
                case 13 : 
                    return _menhir_run27(_menhir_env, _menhir_stack$1);
                case 0 : 
                case 1 : 
                case 3 : 
                case 6 : 
                case 9 : 
                case 10 : 
                case 11 : 
                case 14 : 
                case 15 : 
                case 16 : 
                case 17 : 
                    exit$6 = 2;
                    break;
                
              }
            } else {
              exit$6 = 2;
            }
            if (exit$6 === 2) {
              if (_menhir_env[/* _menhir_error */3]) {
                throw [
                      Caml_builtin_exceptions.assert_failure,
                      /* tuple */[
                        "parser.ml",
                        679,
                        12
                      ]
                    ];
              }
              _menhir_env[/* _menhir_error */3] = true;
              return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
            }
            break;
        case 13 : 
            var _v_000$5 = _menhir_stack[2];
            var _v$6 = /* Minus */Block.__(2, [
                _v_000$5,
                _v
              ]);
            __v = _v$6;
            __menhir_s = _menhir_stack[1];
            __menhir_stack = _menhir_stack[0];
            continue ;
        case 14 : 
            var _v_000$6 = _menhir_stack[2];
            var _v$7 = /* Plus */Block.__(3, [
                _v_000$6,
                _v
              ]);
            __v = _v$7;
            __menhir_s = _menhir_stack[1];
            __menhir_stack = _menhir_stack[0];
            continue ;
        case 15 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      408,
                      8
                    ]
                  ];
            }
            var _tok$6 = _menhir_env[/* _menhir_token */2];
            var exit$7 = 0;
            if (typeof _tok$6 === "number" && _tok$6 < 8) {
              switch (_tok$6) {
                case 2 : 
                    return _menhir_run9(_menhir_env, _menhir_stack$1);
                case 4 : 
                    return _menhir_run10(_menhir_env, _menhir_stack$1);
                case 0 : 
                case 1 : 
                case 3 : 
                case 5 : 
                case 6 : 
                    exit$7 = 2;
                    break;
                case 7 : 
                    return _menhir_run12(_menhir_env, _menhir_stack$1);
                
              }
            } else {
              exit$7 = 2;
            }
            if (exit$7 === 2) {
              if (_menhir_env[/* _menhir_error */3]) {
                throw [
                      Caml_builtin_exceptions.assert_failure,
                      /* tuple */[
                        "parser.ml",
                        418,
                        12
                      ]
                    ];
              }
              _menhir_env[/* _menhir_error */3] = true;
              return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
            }
            break;
        case 16 : 
            var _v_000$7 = /* Num */Block.__(0, [0]);
            var _v$8 = /* Minus */Block.__(2, [
                _v_000$7,
                _v
              ]);
            __v = _v$8;
            __menhir_s = _menhir_stack[1];
            __menhir_stack = _menhir_stack[0];
            continue ;
        case 3 : 
        case 11 : 
        case 17 : 
            exit = 1;
            break;
        case 0 : 
        case 2 : 
        case 4 : 
        case 5 : 
        case 6 : 
        case 18 : 
        case 19 : 
            return _menhir_fail(/* () */0);
        
      }
      if (exit === 1) {
        if (_menhir_env[/* _menhir_error */3]) {
          throw [
                Caml_builtin_exceptions.assert_failure,
                /* tuple */[
                  "parser.ml",
                  490,
                  8
                ]
              ];
        }
        var _tok$7 = _menhir_env[/* _menhir_token */2];
        var exit$8 = 0;
        if (typeof _tok$7 === "number") {
          switch (_tok$7) {
            case 4 : 
                return _menhir_run10(_menhir_env, _menhir_stack$1);
            case 5 : 
                return _menhir_run21(_menhir_env, _menhir_stack$1);
            case 7 : 
                return _menhir_run12(_menhir_env, _menhir_stack$1);
            case 8 : 
                return _menhir_run23(_menhir_env, _menhir_stack$1);
            case 12 : 
                return _menhir_run25(_menhir_env, _menhir_stack$1);
            case 13 : 
                return _menhir_run27(_menhir_env, _menhir_stack$1);
            case 0 : 
            case 1 : 
            case 2 : 
            case 3 : 
            case 6 : 
            case 9 : 
            case 10 : 
            case 11 : 
            case 14 : 
            case 15 : 
            case 16 : 
            case 17 : 
                exit$8 = 2;
                break;
            
          }
        } else {
          exit$8 = 2;
        }
        if (exit$8 === 2) {
          if (_menhir_env[/* _menhir_error */3]) {
            throw [
                  Caml_builtin_exceptions.assert_failure,
                  /* tuple */[
                    "parser.ml",
                    506,
                    12
                  ]
                ];
          }
          _menhir_env[/* _menhir_error */3] = true;
          return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
        }
        
      }
      
    };
  }
  
  function _menhir_goto_bexpr(__menhir_env, __menhir_stack, __menhir_s, __v) {
    while(true) {
      var _v = __v;
      var _menhir_s = __menhir_s;
      var _menhir_stack = __menhir_stack;
      var _menhir_env = __menhir_env;
      var _menhir_stack$1 = /* tuple */[
        _menhir_stack,
        _menhir_s,
        _v
      ];
      switch (_menhir_s) {
        case 3 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      205,
                      8
                    ]
                  ];
            }
            var _tok = _menhir_env[/* _menhir_token */2];
            var exit = 0;
            if (typeof _tok === "number") {
              if (_tok !== 2) {
                if (_tok !== 6) {
                  exit = 1;
                } else {
                  return _menhir_run18(_menhir_env, _menhir_stack$1);
                }
              } else {
                var _menhir_env$1 = _menhir_discard(_menhir_env);
                var _tok$1 = _menhir_env$1[/* _menhir_token */2];
                var exit$1 = 0;
                if (typeof _tok$1 === "number") {
                  switch (_tok$1) {
                    case 0 : 
                        return _menhir_run2(_menhir_env$1, _menhir_stack$1, /* MenhirState39 */2);
                    case 1 : 
                        return _menhir_run32(_menhir_env$1, _menhir_stack$1, /* MenhirState39 */2);
                    case 10 : 
                        return _menhir_run33(_menhir_env$1, _menhir_stack$1, /* MenhirState39 */2);
                    case 11 : 
                        return _menhir_run36(_menhir_env$1, _menhir_stack$1, /* MenhirState39 */2);
                    case 16 : 
                        return _menhir_run44(_menhir_env$1, _menhir_stack$1, /* MenhirState39 */2);
                    default:
                      exit$1 = 2;
                  }
                } else if (_tok$1.tag === 1) {
                  return _menhir_run40(_menhir_env$1, _menhir_stack$1, /* MenhirState39 */2, _tok$1[0]);
                } else {
                  exit$1 = 2;
                }
                if (exit$1 === 2) {
                  if (_menhir_env$1[/* _menhir_error */3]) {
                    throw [
                          Caml_builtin_exceptions.assert_failure,
                          /* tuple */[
                            "parser.ml",
                            228,
                            16
                          ]
                        ];
                  }
                  _menhir_env$1[/* _menhir_error */3] = true;
                  return _menhir_errorcase(_menhir_env$1, _menhir_stack$1, /* MenhirState39 */2);
                }
                
              }
            } else {
              exit = 1;
            }
            if (exit === 1) {
              if (_menhir_env[/* _menhir_error */3]) {
                throw [
                      Caml_builtin_exceptions.assert_failure,
                      /* tuple */[
                        "parser.ml",
                        232,
                        12
                      ]
                    ];
              }
              _menhir_env[/* _menhir_error */3] = true;
              return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
            }
            break;
        case 11 : 
            var _v_000 = _menhir_stack[2];
            var _v$1 = /* Nand */Block.__(4, [
                _v_000,
                _v
              ]);
            __v = _v$1;
            __menhir_s = _menhir_stack[1];
            __menhir_stack = _menhir_stack[0];
            continue ;
        case 12 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      114,
                      8
                    ]
                  ];
            }
            var _tok$2 = _menhir_env[/* _menhir_token */2];
            var exit$2 = 0;
            if (typeof _tok$2 === "number") {
              if (_tok$2 !== 2) {
                if (_tok$2 !== 6) {
                  exit$2 = 1;
                } else {
                  return _menhir_run18(_menhir_env, _menhir_stack$1);
                }
              } else {
                var _menhir_env$2 = _menhir_discard(_menhir_env);
                __menhir_s = _menhir_stack[1];
                __menhir_stack = _menhir_stack[0];
                __menhir_env = _menhir_env$2;
                continue ;
              }
            } else {
              exit$2 = 1;
            }
            if (exit$2 === 1) {
              if (_menhir_env[/* _menhir_error */3]) {
                throw [
                      Caml_builtin_exceptions.assert_failure,
                      /* tuple */[
                        "parser.ml",
                        141,
                        12
                      ]
                    ];
              }
              _menhir_env[/* _menhir_error */3] = true;
              return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
            }
            break;
        case 17 : 
            if (_menhir_env[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      171,
                      8
                    ]
                  ];
            }
            var _tok$3 = _menhir_env[/* _menhir_token */2];
            var exit$3 = 0;
            if (typeof _tok$3 === "number") {
              if (_tok$3 !== 2) {
                if (_tok$3 !== 6) {
                  exit$3 = 1;
                } else {
                  return _menhir_run18(_menhir_env, _menhir_stack$1);
                }
              } else {
                var _menhir_env$3 = _menhir_discard(_menhir_env);
                var _tok$4 = _menhir_env$3[/* _menhir_token */2];
                var exit$4 = 0;
                if (typeof _tok$4 === "number") {
                  switch (_tok$4) {
                    case 0 : 
                        return _menhir_run2(_menhir_env$3, _menhir_stack$1, /* MenhirState31 */6);
                    case 1 : 
                        return _menhir_run32(_menhir_env$3, _menhir_stack$1, /* MenhirState31 */6);
                    case 10 : 
                        return _menhir_run33(_menhir_env$3, _menhir_stack$1, /* MenhirState31 */6);
                    case 11 : 
                        return _menhir_run36(_menhir_env$3, _menhir_stack$1, /* MenhirState31 */6);
                    case 16 : 
                        return _menhir_run44(_menhir_env$3, _menhir_stack$1, /* MenhirState31 */6);
                    default:
                      exit$4 = 2;
                  }
                } else if (_tok$4.tag === 1) {
                  return _menhir_run40(_menhir_env$3, _menhir_stack$1, /* MenhirState31 */6, _tok$4[0]);
                } else {
                  exit$4 = 2;
                }
                if (exit$4 === 2) {
                  if (_menhir_env$3[/* _menhir_error */3]) {
                    throw [
                          Caml_builtin_exceptions.assert_failure,
                          /* tuple */[
                            "parser.ml",
                            194,
                            16
                          ]
                        ];
                  }
                  _menhir_env$3[/* _menhir_error */3] = true;
                  return _menhir_errorcase(_menhir_env$3, _menhir_stack$1, /* MenhirState31 */6);
                }
                
              }
            } else {
              exit$3 = 1;
            }
            if (exit$3 === 1) {
              if (_menhir_env[/* _menhir_error */3]) {
                throw [
                      Caml_builtin_exceptions.assert_failure,
                      /* tuple */[
                        "parser.ml",
                        198,
                        12
                      ]
                    ];
              }
              _menhir_env[/* _menhir_error */3] = true;
              return _menhir_errorcase(_menhir_env, _menhir_stack, _menhir_s);
            }
            break;
        case 0 : 
        case 1 : 
        case 2 : 
        case 4 : 
        case 5 : 
        case 6 : 
        case 7 : 
        case 8 : 
        case 9 : 
        case 10 : 
        case 13 : 
        case 14 : 
        case 15 : 
        case 16 : 
        case 18 : 
        case 19 : 
            return _menhir_fail(/* () */0);
        
      }
    };
  }
  
  function _menhir_run15(__menhir_env, __menhir_stack, __menhir_s) {
    while(true) {
      var _menhir_s = __menhir_s;
      var _menhir_stack = __menhir_stack;
      var _menhir_env = __menhir_env;
      var _menhir_stack$1 = /* tuple */[
        _menhir_stack,
        _menhir_s
      ];
      var _menhir_env$1 = _menhir_discard(_menhir_env);
      var _tok = _menhir_env$1[/* _menhir_token */2];
      if (typeof _tok === "number") {
        switch (_tok) {
          case 7 : 
              return _menhir_run5(_menhir_env$1, _menhir_stack$1, /* MenhirState15 */12);
          case 9 : 
              __menhir_s = /* MenhirState15 */12;
              __menhir_stack = _menhir_stack$1;
              __menhir_env = _menhir_env$1;
              continue ;
          default:
            if (_menhir_env$1[/* _menhir_error */3]) {
              throw [
                    Caml_builtin_exceptions.assert_failure,
                    /* tuple */[
                      "parser.ml",
                      742,
                      8
                    ]
                  ];
            }
            _menhir_env$1[/* _menhir_error */3] = true;
            return _menhir_errorcase(_menhir_env$1, _menhir_stack$1, /* MenhirState15 */12);
        }
      } else if (_tok.tag) {
        return _menhir_run7(_menhir_env$1, _menhir_stack$1, /* MenhirState15 */12, _tok[0]);
      } else {
        return _menhir_run4(_menhir_env$1, _menhir_stack$1, /* MenhirState15 */12, _tok[0]);
      }
    };
  }
  
  function _menhir_run12(_menhir_env, _menhir_stack) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    if (typeof _tok === "number") {
      switch (_tok) {
        case 7 : 
            return _menhir_run5(_menhir_env$1, _menhir_stack, /* MenhirState12 */13);
        case 9 : 
            return _menhir_run6(_menhir_env$1, _menhir_stack, /* MenhirState12 */13);
        default:
          if (_menhir_env$1[/* _menhir_error */3]) {
            throw [
                  Caml_builtin_exceptions.assert_failure,
                  /* tuple */[
                    "parser.ml",
                    394,
                    8
                  ]
                ];
          }
          _menhir_env$1[/* _menhir_error */3] = true;
          return _menhir_errorcase(_menhir_env$1, _menhir_stack, /* MenhirState12 */13);
      }
    } else if (_tok.tag) {
      return _menhir_run7(_menhir_env$1, _menhir_stack, /* MenhirState12 */13, _tok[0]);
    } else {
      return _menhir_run4(_menhir_env$1, _menhir_stack, /* MenhirState12 */13, _tok[0]);
    }
  }
  
  function _menhir_run25(_menhir_env, _menhir_stack) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    if (typeof _tok === "number") {
      switch (_tok) {
        case 7 : 
            return _menhir_run5(_menhir_env$1, _menhir_stack, /* MenhirState25 */8);
        case 9 : 
            return _menhir_run6(_menhir_env$1, _menhir_stack, /* MenhirState25 */8);
        default:
          if (_menhir_env$1[/* _menhir_error */3]) {
            throw [
                  Caml_builtin_exceptions.assert_failure,
                  /* tuple */[
                    "parser.ml",
                    302,
                    8
                  ]
                ];
          }
          _menhir_env$1[/* _menhir_error */3] = true;
          return _menhir_errorcase(_menhir_env$1, _menhir_stack, /* MenhirState25 */8);
      }
    } else if (_tok.tag) {
      return _menhir_run7(_menhir_env$1, _menhir_stack, /* MenhirState25 */8, _tok[0]);
    } else {
      return _menhir_run4(_menhir_env$1, _menhir_stack, /* MenhirState25 */8, _tok[0]);
    }
  }
  
  function _menhir_run21(_menhir_env, _menhir_stack) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    if (typeof _tok === "number") {
      switch (_tok) {
        case 7 : 
            return _menhir_run5(_menhir_env$1, _menhir_stack, /* MenhirState21 */10);
        case 9 : 
            return _menhir_run6(_menhir_env$1, _menhir_stack, /* MenhirState21 */10);
        default:
          if (_menhir_env$1[/* _menhir_error */3]) {
            throw [
                  Caml_builtin_exceptions.assert_failure,
                  /* tuple */[
                    "parser.ml",
                    258,
                    8
                  ]
                ];
          }
          _menhir_env$1[/* _menhir_error */3] = true;
          return _menhir_errorcase(_menhir_env$1, _menhir_stack, /* MenhirState21 */10);
      }
    } else if (_tok.tag) {
      return _menhir_run7(_menhir_env$1, _menhir_stack, /* MenhirState21 */10, _tok[0]);
    } else {
      return _menhir_run4(_menhir_env$1, _menhir_stack, /* MenhirState21 */10, _tok[0]);
    }
  }
  
  function _menhir_run27(_menhir_env, _menhir_stack) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    if (typeof _tok === "number") {
      switch (_tok) {
        case 7 : 
            return _menhir_run5(_menhir_env$1, _menhir_stack, /* MenhirState27 */7);
        case 9 : 
            return _menhir_run6(_menhir_env$1, _menhir_stack, /* MenhirState27 */7);
        default:
          if (_menhir_env$1[/* _menhir_error */3]) {
            throw [
                  Caml_builtin_exceptions.assert_failure,
                  /* tuple */[
                    "parser.ml",
                    324,
                    8
                  ]
                ];
          }
          _menhir_env$1[/* _menhir_error */3] = true;
          return _menhir_errorcase(_menhir_env$1, _menhir_stack, /* MenhirState27 */7);
      }
    } else if (_tok.tag) {
      return _menhir_run7(_menhir_env$1, _menhir_stack, /* MenhirState27 */7, _tok[0]);
    } else {
      return _menhir_run4(_menhir_env$1, _menhir_stack, /* MenhirState27 */7, _tok[0]);
    }
  }
  
  function _menhir_run10(_menhir_env, _menhir_stack) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    if (typeof _tok === "number") {
      switch (_tok) {
        case 7 : 
            return _menhir_run5(_menhir_env$1, _menhir_stack, /* MenhirState10 */14);
        case 9 : 
            return _menhir_run6(_menhir_env$1, _menhir_stack, /* MenhirState10 */14);
        default:
          if (_menhir_env$1[/* _menhir_error */3]) {
            throw [
                  Caml_builtin_exceptions.assert_failure,
                  /* tuple */[
                    "parser.ml",
                    372,
                    8
                  ]
                ];
          }
          _menhir_env$1[/* _menhir_error */3] = true;
          return _menhir_errorcase(_menhir_env$1, _menhir_stack, /* MenhirState10 */14);
      }
    } else if (_tok.tag) {
      return _menhir_run7(_menhir_env$1, _menhir_stack, /* MenhirState10 */14, _tok[0]);
    } else {
      return _menhir_run4(_menhir_env$1, _menhir_stack, /* MenhirState10 */14, _tok[0]);
    }
  }
  
  function _menhir_run9(_menhir_env, _menhir_stack) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var match = _menhir_stack[0];
    return _menhir_goto_aexpr(_menhir_env$1, match[0], match[1], _menhir_stack[2]);
  }
  
  function _menhir_run23(_menhir_env, _menhir_stack) {
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    var _tok = _menhir_env$1[/* _menhir_token */2];
    if (typeof _tok === "number") {
      switch (_tok) {
        case 7 : 
            return _menhir_run5(_menhir_env$1, _menhir_stack, /* MenhirState23 */9);
        case 9 : 
            return _menhir_run6(_menhir_env$1, _menhir_stack, /* MenhirState23 */9);
        default:
          if (_menhir_env$1[/* _menhir_error */3]) {
            throw [
                  Caml_builtin_exceptions.assert_failure,
                  /* tuple */[
                    "parser.ml",
                    280,
                    8
                  ]
                ];
          }
          _menhir_env$1[/* _menhir_error */3] = true;
          return _menhir_errorcase(_menhir_env$1, _menhir_stack, /* MenhirState23 */9);
      }
    } else if (_tok.tag) {
      return _menhir_run7(_menhir_env$1, _menhir_stack, /* MenhirState23 */9, _tok[0]);
    } else {
      return _menhir_run4(_menhir_env$1, _menhir_stack, /* MenhirState23 */9, _tok[0]);
    }
  }
  
  function prog(lexer, lexbuf) {
    var _menhir_env = /* record */[
      /* _menhir_lexer */lexer,
      /* _menhir_lexbuf */lexbuf,
      /* _menhir_token : () */0,
      /* _menhir_error */false
    ];
    var _menhir_stack_001 = _menhir_env[/* _menhir_lexbuf */1][/* lex_curr_p */11];
    var _menhir_stack = /* tuple */[
      /* () */0,
      _menhir_stack_001
    ];
    var _menhir_env$1 = _menhir_discard(_menhir_env);
    return _menhir_reduce22(_menhir_env$1, _menhir_stack, /* MenhirState0 */19);
  }
  
  exports.$$Error = $$Error;
  exports.prog = prog;
  /* No side effect */
  