docs: function JsonParserES5(input) {
      // invoke super constructor
      Parser.call(this, input, allTokens, {
              // by default the error recovery / fault tolerance capabilities are disabled
              // use this flag to enable them
              recoveryEnabled: false
          }
      );
  
      // not mandatory, using <$> (or any other sign) to reduce verbosity (this. this. this. this. .......)
      var $ = this;
  
      this.RULE("object", function() {
          var object, key
  
          $.CONSUME(LCurly);
  
          object = {}
  
          $.MANY_SEP({
            SEP: Comma, DEF: function () {
              key = $.SUBRULE($.string)
              $.CONSUME(Colon)
              object[key] = $.SUBRULE($.value)
            }
          });
  
          $.CONSUME(RCurly);
  
          return object
      });
  
      this.RULE("array", function() {
          var array
  
          $.CONSUME(LSquare);
  
          array = []
  
          $.MANY_SEP({
            SEP: Comma, DEF: function () {
              array[array.length] = $.SUBRULE($.value);
            }
          });
  
          $.CONSUME(RSquare);
  
          return array
      });
  
      this.RULE("number", function(){
        var result = $.CONSUME(NumberLiteral)
        return Number(result.image)
      })
  
      this.RULE("string", function(){
        var result = $.CONSUME(StringLiteral)
        return result.image.slice(1, -1)
      })
  
  
      this.RULE("value", function() {
          return $.OR([
              {ALT: function() { return $.SUBRULE($.object) }},
              {ALT: function() { return $.SUBRULE($.array) }},
              {ALT: function() { return $.SUBRULE($.string) }},
              {ALT: function() { return $.SUBRULE($.number) }},
              {ALT: function() { $.CONSUME(True) ; return true }},
              {ALT: function() { $.CONSUME(False) ; return false }},
              {ALT: function() { $.CONSUME(Null) ; return null }}
          ]);
      });
  
      // very important to call this after all the rules have been defined.
      // otherwise the parser may not work correctly as it will lack information
      // derived during the self analysis phase.
      Parser.performSelfAnalysis(this);
  }