You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by an...@apache.org on 2013/03/04 20:32:53 UTC

[3/91] [abbrv] never ever check in node modules. baaad.

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/xcode/node_modules/pegjs/lib/peg.js
----------------------------------------------------------------------
diff --git a/node_modules/xcode/node_modules/pegjs/lib/peg.js b/node_modules/xcode/node_modules/pegjs/lib/peg.js
deleted file mode 100644
index 94c9423..0000000
--- a/node_modules/xcode/node_modules/pegjs/lib/peg.js
+++ /dev/null
@@ -1,5141 +0,0 @@
-/* PEG.js 0.6.2 (http://pegjs.majda.cz/) */
-
-(function() {
-
-var undefined;
-
-var PEG = {
-  /* PEG.js version. */
-  VERSION: "0.6.2",
-
-  /*
-   * Generates a parser from a specified grammar and returns it.
-   *
-   * The grammar must be a string in the format described by the metagramar in
-   * the parser.pegjs file.
-   *
-   * Throws |PEG.parser.SyntaxError| if the grammar contains a syntax error or
-   * |PEG.GrammarError| if it contains a semantic error. Note that not all
-   * errors are detected during the generation and some may protrude to the
-   * generated parser and cause its malfunction.
-   */
-  buildParser: function(grammar) {
-    return PEG.compiler.compile(PEG.parser.parse(grammar));
-  }
-};
-
-/* Thrown when the grammar contains an error. */
-
-PEG.GrammarError = function(message) {
-  this.name = "PEG.GrammarError";
-  this.message = message;
-};
-
-PEG.GrammarError.prototype = Error.prototype;
-
-function contains(array, value) {
-  /*
-   * Stupid IE does not have Array.prototype.indexOf, otherwise this function
-   * would be a one-liner.
-   */
-  var length = array.length;
-  for (var i = 0; i < length; i++) {
-    if (array[i] === value) {
-      return true;
-    }
-  }
-  return false;
-}
-
-function each(array, callback) {
-  var length = array.length;
-  for (var i = 0; i < length; i++) {
-    callback(array[i]);
-  }
-}
-
-function map(array, callback) {
-  var result = [];
-  var length = array.length;
-  for (var i = 0; i < length; i++) {
-    result[i] = callback(array[i]);
-  }
-  return result;
-}
-
-/*
- * Returns a string padded on the left to a desired length with a character.
- *
- * The code needs to be in sync with th code template in the compilation
- * function for "action" nodes.
- */
-function padLeft(input, padding, length) {
-  var result = input;
-
-  var padLength = length - input.length;
-  for (var i = 0; i < padLength; i++) {
-    result = padding + result;
-  }
-
-  return result;
-}
-
-/*
- * Returns an escape sequence for given character. Uses \x for characters <=
- * 0xFF to save space, \u for the rest.
- *
- * The code needs to be in sync with th code template in the compilation
- * function for "action" nodes.
- */
-function escape(ch) {
-  var charCode = ch.charCodeAt(0);
-
-  if (charCode <= 0xFF) {
-    var escapeChar = 'x';
-    var length = 2;
-  } else {
-    var escapeChar = 'u';
-    var length = 4;
-  }
-
-  return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
-}
-
-/*
- * Surrounds the string with quotes and escapes characters inside so that the
- * result is a valid JavaScript string.
- *
- * The code needs to be in sync with th code template in the compilation
- * function for "action" nodes.
- */
-function quote(s) {
-  /*
-   * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string
-   * literal except for the closing quote character, backslash, carriage return,
-   * line separator, paragraph separator, and line feed. Any character may
-   * appear in the form of an escape sequence.
-   *
-   * For portability, we also escape escape all non-ASCII characters.
-   */
-  return '"' + s
-    .replace(/\\/g, '\\\\')            // backslash
-    .replace(/"/g, '\\"')              // closing quote character
-    .replace(/\r/g, '\\r')             // carriage return
-    .replace(/\n/g, '\\n')             // line feed
-    .replace(/[\x80-\uFFFF]/g, escape) // non-ASCII characters
-    + '"';
-};
-
-/*
- * Escapes characters inside the string so that it can be used as a list of
- * characters in a character class of a regular expression.
- */
-function quoteForRegexpClass(s) {
-  /*
-   * Based on ECMA-262, 5th ed., 7.8.5 & 15.10.1.
-   *
-   * For portability, we also escape escape all non-ASCII characters.
-   */
-  return s
-    .replace(/\\/g, '\\\\')            // backslash
-    .replace(/\0/g, '\\0')             // null, IE needs this
-    .replace(/\//g, '\\/')             // closing slash
-    .replace(/]/g, '\\]')              // closing bracket
-    .replace(/-/g, '\\-')              // dash
-    .replace(/\r/g, '\\r')             // carriage return
-    .replace(/\n/g, '\\n')             // line feed
-    .replace(/[\x80-\uFFFF]/g, escape) // non-ASCII characters
-}
-
-/*
- * Builds a node visitor -- a function which takes a node and any number of
- * other parameters, calls an appropriate function according to the node type,
- * passes it all its parameters and returns its value. The functions for various
- * node types are passed in a parameter to |buildNodeVisitor| as a hash.
- */
-function buildNodeVisitor(functions) {
-  return function(node) {
-    return functions[node.type].apply(null, arguments);
-  }
-}
-PEG.parser = (function(){
-  /* Generated by PEG.js 0.6.2 (http://pegjs.majda.cz/). */
-  
-  var result = {
-    /*
-     * Parses the input with a generated parser. If the parsing is successfull,
-     * returns a value explicitly or implicitly specified by the grammar from
-     * which the parser was generated (see |PEG.buildParser|). If the parsing is
-     * unsuccessful, throws |PEG.parser.SyntaxError| describing the error.
-     */
-    parse: function(input, startRule) {
-      var parseFunctions = {
-        "__": parse___,
-        "action": parse_action,
-        "and": parse_and,
-        "braced": parse_braced,
-        "bracketDelimitedCharacter": parse_bracketDelimitedCharacter,
-        "choice": parse_choice,
-        "class": parse_class,
-        "classCharacter": parse_classCharacter,
-        "classCharacterRange": parse_classCharacterRange,
-        "colon": parse_colon,
-        "comment": parse_comment,
-        "digit": parse_digit,
-        "dot": parse_dot,
-        "doubleQuotedCharacter": parse_doubleQuotedCharacter,
-        "doubleQuotedLiteral": parse_doubleQuotedLiteral,
-        "eol": parse_eol,
-        "eolChar": parse_eolChar,
-        "eolEscapeSequence": parse_eolEscapeSequence,
-        "equals": parse_equals,
-        "grammar": parse_grammar,
-        "hexDigit": parse_hexDigit,
-        "hexEscapeSequence": parse_hexEscapeSequence,
-        "identifier": parse_identifier,
-        "initializer": parse_initializer,
-        "labeled": parse_labeled,
-        "letter": parse_letter,
-        "literal": parse_literal,
-        "lowerCaseLetter": parse_lowerCaseLetter,
-        "lparen": parse_lparen,
-        "multiLineComment": parse_multiLineComment,
-        "nonBraceCharacter": parse_nonBraceCharacter,
-        "nonBraceCharacters": parse_nonBraceCharacters,
-        "not": parse_not,
-        "plus": parse_plus,
-        "prefixed": parse_prefixed,
-        "primary": parse_primary,
-        "question": parse_question,
-        "rparen": parse_rparen,
-        "rule": parse_rule,
-        "semicolon": parse_semicolon,
-        "sequence": parse_sequence,
-        "simpleBracketDelimitedCharacter": parse_simpleBracketDelimitedCharacter,
-        "simpleDoubleQuotedCharacter": parse_simpleDoubleQuotedCharacter,
-        "simpleEscapeSequence": parse_simpleEscapeSequence,
-        "simpleSingleQuotedCharacter": parse_simpleSingleQuotedCharacter,
-        "singleLineComment": parse_singleLineComment,
-        "singleQuotedCharacter": parse_singleQuotedCharacter,
-        "singleQuotedLiteral": parse_singleQuotedLiteral,
-        "slash": parse_slash,
-        "star": parse_star,
-        "suffixed": parse_suffixed,
-        "unicodeEscapeSequence": parse_unicodeEscapeSequence,
-        "upperCaseLetter": parse_upperCaseLetter,
-        "whitespace": parse_whitespace,
-        "zeroEscapeSequence": parse_zeroEscapeSequence
-      };
-      
-      if (startRule !== undefined) {
-        if (parseFunctions[startRule] === undefined) {
-          throw new Error("Invalid rule name: " + quote(startRule) + ".");
-        }
-      } else {
-        startRule = "grammar";
-      }
-      
-      var pos = 0;
-      var reportMatchFailures = true;
-      var rightmostMatchFailuresPos = 0;
-      var rightmostMatchFailuresExpected = [];
-      var cache = {};
-      
-      function padLeft(input, padding, length) {
-        var result = input;
-        
-        var padLength = length - input.length;
-        for (var i = 0; i < padLength; i++) {
-          result = padding + result;
-        }
-        
-        return result;
-      }
-      
-      function escape(ch) {
-        var charCode = ch.charCodeAt(0);
-        
-        if (charCode <= 0xFF) {
-          var escapeChar = 'x';
-          var length = 2;
-        } else {
-          var escapeChar = 'u';
-          var length = 4;
-        }
-        
-        return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
-      }
-      
-      function quote(s) {
-        /*
-         * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a
-         * string literal except for the closing quote character, backslash,
-         * carriage return, line separator, paragraph separator, and line feed.
-         * Any character may appear in the form of an escape sequence.
-         */
-        return '"' + s
-          .replace(/\\/g, '\\\\')            // backslash
-          .replace(/"/g, '\\"')              // closing quote character
-          .replace(/\r/g, '\\r')             // carriage return
-          .replace(/\n/g, '\\n')             // line feed
-          .replace(/[\x80-\uFFFF]/g, escape) // non-ASCII characters
-          + '"';
-      }
-      
-      function matchFailed(failure) {
-        if (pos < rightmostMatchFailuresPos) {
-          return;
-        }
-        
-        if (pos > rightmostMatchFailuresPos) {
-          rightmostMatchFailuresPos = pos;
-          rightmostMatchFailuresExpected = [];
-        }
-        
-        rightmostMatchFailuresExpected.push(failure);
-      }
-      
-      function parse_grammar() {
-        var cacheKey = 'grammar@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse___();
-        if (result3 !== null) {
-          var result7 = parse_initializer();
-          var result4 = result7 !== null ? result7 : '';
-          if (result4 !== null) {
-            var result6 = parse_rule();
-            if (result6 !== null) {
-              var result5 = [];
-              while (result6 !== null) {
-                result5.push(result6);
-                var result6 = parse_rule();
-              }
-            } else {
-              var result5 = null;
-            }
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(initializer, rules) {
-                var rulesConverted = {};
-                each(rules, function(rule) { rulesConverted[rule.name] = rule; });
-          
-                return {
-                  type:        "grammar",
-                  initializer: initializer !== "" ? initializer : null,
-                  rules:       rulesConverted,
-                  startRule:   rules[0].name
-                }
-              })(result1[1], result1[2])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_initializer() {
-        var cacheKey = 'initializer@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_action();
-        if (result3 !== null) {
-          var result5 = parse_semicolon();
-          var result4 = result5 !== null ? result5 : '';
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(code) {
-                return {
-                  type: "initializer",
-                  code: code
-                };
-              })(result1[0])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_rule() {
-        var cacheKey = 'rule@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_identifier();
-        if (result3 !== null) {
-          var result10 = parse_literal();
-          if (result10 !== null) {
-            var result4 = result10;
-          } else {
-            if (input.substr(pos, 0) === "") {
-              var result9 = "";
-              pos += 0;
-            } else {
-              var result9 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"\"");
-              }
-            }
-            if (result9 !== null) {
-              var result4 = result9;
-            } else {
-              var result4 = null;;
-            };
-          }
-          if (result4 !== null) {
-            var result5 = parse_equals();
-            if (result5 !== null) {
-              var result6 = parse_choice();
-              if (result6 !== null) {
-                var result8 = parse_semicolon();
-                var result7 = result8 !== null ? result8 : '';
-                if (result7 !== null) {
-                  var result1 = [result3, result4, result5, result6, result7];
-                } else {
-                  var result1 = null;
-                  pos = savedPos1;
-                }
-              } else {
-                var result1 = null;
-                pos = savedPos1;
-              }
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(name, displayName, expression) {
-                return {
-                  type:        "rule",
-                  name:        name,
-                  displayName: displayName !== "" ? displayName : null,
-                  expression:  expression
-                };
-              })(result1[0], result1[1], result1[3])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_choice() {
-        var cacheKey = 'choice@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_sequence();
-        if (result3 !== null) {
-          var result4 = [];
-          var savedPos2 = pos;
-          var result6 = parse_slash();
-          if (result6 !== null) {
-            var result7 = parse_sequence();
-            if (result7 !== null) {
-              var result5 = [result6, result7];
-            } else {
-              var result5 = null;
-              pos = savedPos2;
-            }
-          } else {
-            var result5 = null;
-            pos = savedPos2;
-          }
-          while (result5 !== null) {
-            result4.push(result5);
-            var savedPos2 = pos;
-            var result6 = parse_slash();
-            if (result6 !== null) {
-              var result7 = parse_sequence();
-              if (result7 !== null) {
-                var result5 = [result6, result7];
-              } else {
-                var result5 = null;
-                pos = savedPos2;
-              }
-            } else {
-              var result5 = null;
-              pos = savedPos2;
-            }
-          }
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(head, tail) {
-                if (tail.length > 0) {
-                  var alternatives = [head].concat(map(
-                      tail,
-                      function(element) { return element[1]; }
-                  ));
-                  return {
-                    type:         "choice",
-                    alternatives: alternatives
-                  }
-                } else {
-                  return head;
-                }
-              })(result1[0], result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_sequence() {
-        var cacheKey = 'sequence@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos1 = pos;
-        var savedPos2 = pos;
-        var result8 = [];
-        var result10 = parse_labeled();
-        while (result10 !== null) {
-          result8.push(result10);
-          var result10 = parse_labeled();
-        }
-        if (result8 !== null) {
-          var result9 = parse_action();
-          if (result9 !== null) {
-            var result6 = [result8, result9];
-          } else {
-            var result6 = null;
-            pos = savedPos2;
-          }
-        } else {
-          var result6 = null;
-          pos = savedPos2;
-        }
-        var result7 = result6 !== null
-          ? (function(elements, code) {
-                var expression = elements.length != 1
-                  ? {
-                      type:     "sequence",
-                      elements: elements
-                    }
-                  : elements[0];
-                return {
-                  type:       "action",
-                  expression: expression,
-                  code:       code
-                };
-              })(result6[0], result6[1])
-          : null;
-        if (result7 !== null) {
-          var result5 = result7;
-        } else {
-          var result5 = null;
-          pos = savedPos1;
-        }
-        if (result5 !== null) {
-          var result0 = result5;
-        } else {
-          var savedPos0 = pos;
-          var result2 = [];
-          var result4 = parse_labeled();
-          while (result4 !== null) {
-            result2.push(result4);
-            var result4 = parse_labeled();
-          }
-          var result3 = result2 !== null
-            ? (function(elements) {
-                  return elements.length != 1
-                    ? {
-                        type:     "sequence",
-                        elements: elements
-                      }
-                    : elements[0];
-                })(result2)
-            : null;
-          if (result3 !== null) {
-            var result1 = result3;
-          } else {
-            var result1 = null;
-            pos = savedPos0;
-          }
-          if (result1 !== null) {
-            var result0 = result1;
-          } else {
-            var result0 = null;;
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_labeled() {
-        var cacheKey = 'labeled@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result5 = parse_identifier();
-        if (result5 !== null) {
-          var result6 = parse_colon();
-          if (result6 !== null) {
-            var result7 = parse_prefixed();
-            if (result7 !== null) {
-              var result3 = [result5, result6, result7];
-            } else {
-              var result3 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result3 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result3 = null;
-          pos = savedPos1;
-        }
-        var result4 = result3 !== null
-          ? (function(label, expression) {
-                return {
-                  type:       "labeled",
-                  label:      label,
-                  expression: expression
-                };
-              })(result3[0], result3[2])
-          : null;
-        if (result4 !== null) {
-          var result2 = result4;
-        } else {
-          var result2 = null;
-          pos = savedPos0;
-        }
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result1 = parse_prefixed();
-          if (result1 !== null) {
-            var result0 = result1;
-          } else {
-            var result0 = null;;
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_prefixed() {
-        var cacheKey = 'prefixed@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos6 = pos;
-        var savedPos7 = pos;
-        var result20 = parse_and();
-        if (result20 !== null) {
-          var result21 = parse_action();
-          if (result21 !== null) {
-            var result18 = [result20, result21];
-          } else {
-            var result18 = null;
-            pos = savedPos7;
-          }
-        } else {
-          var result18 = null;
-          pos = savedPos7;
-        }
-        var result19 = result18 !== null
-          ? (function(code) {
-                return {
-                  type: "semantic_and",
-                  code: code
-                };
-              })(result18[1])
-          : null;
-        if (result19 !== null) {
-          var result17 = result19;
-        } else {
-          var result17 = null;
-          pos = savedPos6;
-        }
-        if (result17 !== null) {
-          var result0 = result17;
-        } else {
-          var savedPos4 = pos;
-          var savedPos5 = pos;
-          var result15 = parse_and();
-          if (result15 !== null) {
-            var result16 = parse_suffixed();
-            if (result16 !== null) {
-              var result13 = [result15, result16];
-            } else {
-              var result13 = null;
-              pos = savedPos5;
-            }
-          } else {
-            var result13 = null;
-            pos = savedPos5;
-          }
-          var result14 = result13 !== null
-            ? (function(expression) {
-                  return {
-                    type:       "simple_and",
-                    expression: expression
-                  };
-                })(result13[1])
-            : null;
-          if (result14 !== null) {
-            var result12 = result14;
-          } else {
-            var result12 = null;
-            pos = savedPos4;
-          }
-          if (result12 !== null) {
-            var result0 = result12;
-          } else {
-            var savedPos2 = pos;
-            var savedPos3 = pos;
-            var result10 = parse_not();
-            if (result10 !== null) {
-              var result11 = parse_action();
-              if (result11 !== null) {
-                var result8 = [result10, result11];
-              } else {
-                var result8 = null;
-                pos = savedPos3;
-              }
-            } else {
-              var result8 = null;
-              pos = savedPos3;
-            }
-            var result9 = result8 !== null
-              ? (function(code) {
-                    return {
-                      type: "semantic_not",
-                      code: code
-                    };
-                  })(result8[1])
-              : null;
-            if (result9 !== null) {
-              var result7 = result9;
-            } else {
-              var result7 = null;
-              pos = savedPos2;
-            }
-            if (result7 !== null) {
-              var result0 = result7;
-            } else {
-              var savedPos0 = pos;
-              var savedPos1 = pos;
-              var result5 = parse_not();
-              if (result5 !== null) {
-                var result6 = parse_suffixed();
-                if (result6 !== null) {
-                  var result3 = [result5, result6];
-                } else {
-                  var result3 = null;
-                  pos = savedPos1;
-                }
-              } else {
-                var result3 = null;
-                pos = savedPos1;
-              }
-              var result4 = result3 !== null
-                ? (function(expression) {
-                      return {
-                        type:       "simple_not",
-                        expression: expression
-                      };
-                    })(result3[1])
-                : null;
-              if (result4 !== null) {
-                var result2 = result4;
-              } else {
-                var result2 = null;
-                pos = savedPos0;
-              }
-              if (result2 !== null) {
-                var result0 = result2;
-              } else {
-                var result1 = parse_suffixed();
-                if (result1 !== null) {
-                  var result0 = result1;
-                } else {
-                  var result0 = null;;
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_suffixed() {
-        var cacheKey = 'suffixed@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos4 = pos;
-        var savedPos5 = pos;
-        var result15 = parse_primary();
-        if (result15 !== null) {
-          var result16 = parse_question();
-          if (result16 !== null) {
-            var result13 = [result15, result16];
-          } else {
-            var result13 = null;
-            pos = savedPos5;
-          }
-        } else {
-          var result13 = null;
-          pos = savedPos5;
-        }
-        var result14 = result13 !== null
-          ? (function(expression) {
-                return {
-                  type:       "optional",
-                  expression: expression
-                };
-              })(result13[0])
-          : null;
-        if (result14 !== null) {
-          var result12 = result14;
-        } else {
-          var result12 = null;
-          pos = savedPos4;
-        }
-        if (result12 !== null) {
-          var result0 = result12;
-        } else {
-          var savedPos2 = pos;
-          var savedPos3 = pos;
-          var result10 = parse_primary();
-          if (result10 !== null) {
-            var result11 = parse_star();
-            if (result11 !== null) {
-              var result8 = [result10, result11];
-            } else {
-              var result8 = null;
-              pos = savedPos3;
-            }
-          } else {
-            var result8 = null;
-            pos = savedPos3;
-          }
-          var result9 = result8 !== null
-            ? (function(expression) {
-                  return {
-                    type:       "zero_or_more",
-                    expression: expression
-                  };
-                })(result8[0])
-            : null;
-          if (result9 !== null) {
-            var result7 = result9;
-          } else {
-            var result7 = null;
-            pos = savedPos2;
-          }
-          if (result7 !== null) {
-            var result0 = result7;
-          } else {
-            var savedPos0 = pos;
-            var savedPos1 = pos;
-            var result5 = parse_primary();
-            if (result5 !== null) {
-              var result6 = parse_plus();
-              if (result6 !== null) {
-                var result3 = [result5, result6];
-              } else {
-                var result3 = null;
-                pos = savedPos1;
-              }
-            } else {
-              var result3 = null;
-              pos = savedPos1;
-            }
-            var result4 = result3 !== null
-              ? (function(expression) {
-                    return {
-                      type:       "one_or_more",
-                      expression: expression
-                    };
-                  })(result3[0])
-              : null;
-            if (result4 !== null) {
-              var result2 = result4;
-            } else {
-              var result2 = null;
-              pos = savedPos0;
-            }
-            if (result2 !== null) {
-              var result0 = result2;
-            } else {
-              var result1 = parse_primary();
-              if (result1 !== null) {
-                var result0 = result1;
-              } else {
-                var result0 = null;;
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_primary() {
-        var cacheKey = 'primary@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos4 = pos;
-        var savedPos5 = pos;
-        var result17 = parse_identifier();
-        if (result17 !== null) {
-          var savedPos6 = pos;
-          var savedReportMatchFailuresVar0 = reportMatchFailures;
-          reportMatchFailures = false;
-          var savedPos7 = pos;
-          var result23 = parse_literal();
-          if (result23 !== null) {
-            var result20 = result23;
-          } else {
-            if (input.substr(pos, 0) === "") {
-              var result22 = "";
-              pos += 0;
-            } else {
-              var result22 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"\"");
-              }
-            }
-            if (result22 !== null) {
-              var result20 = result22;
-            } else {
-              var result20 = null;;
-            };
-          }
-          if (result20 !== null) {
-            var result21 = parse_equals();
-            if (result21 !== null) {
-              var result19 = [result20, result21];
-            } else {
-              var result19 = null;
-              pos = savedPos7;
-            }
-          } else {
-            var result19 = null;
-            pos = savedPos7;
-          }
-          reportMatchFailures = savedReportMatchFailuresVar0;
-          if (result19 === null) {
-            var result18 = '';
-          } else {
-            var result18 = null;
-            pos = savedPos6;
-          }
-          if (result18 !== null) {
-            var result15 = [result17, result18];
-          } else {
-            var result15 = null;
-            pos = savedPos5;
-          }
-        } else {
-          var result15 = null;
-          pos = savedPos5;
-        }
-        var result16 = result15 !== null
-          ? (function(name) {
-                return {
-                  type: "rule_ref",
-                  name: name
-                };
-              })(result15[0])
-          : null;
-        if (result16 !== null) {
-          var result14 = result16;
-        } else {
-          var result14 = null;
-          pos = savedPos4;
-        }
-        if (result14 !== null) {
-          var result0 = result14;
-        } else {
-          var savedPos3 = pos;
-          var result12 = parse_literal();
-          var result13 = result12 !== null
-            ? (function(value) {
-                  return {
-                    type:  "literal",
-                    value: value
-                  };
-                })(result12)
-            : null;
-          if (result13 !== null) {
-            var result11 = result13;
-          } else {
-            var result11 = null;
-            pos = savedPos3;
-          }
-          if (result11 !== null) {
-            var result0 = result11;
-          } else {
-            var savedPos2 = pos;
-            var result9 = parse_dot();
-            var result10 = result9 !== null
-              ? (function() { return { type: "any" }; })()
-              : null;
-            if (result10 !== null) {
-              var result8 = result10;
-            } else {
-              var result8 = null;
-              pos = savedPos2;
-            }
-            if (result8 !== null) {
-              var result0 = result8;
-            } else {
-              var result7 = parse_class();
-              if (result7 !== null) {
-                var result0 = result7;
-              } else {
-                var savedPos0 = pos;
-                var savedPos1 = pos;
-                var result4 = parse_lparen();
-                if (result4 !== null) {
-                  var result5 = parse_choice();
-                  if (result5 !== null) {
-                    var result6 = parse_rparen();
-                    if (result6 !== null) {
-                      var result2 = [result4, result5, result6];
-                    } else {
-                      var result2 = null;
-                      pos = savedPos1;
-                    }
-                  } else {
-                    var result2 = null;
-                    pos = savedPos1;
-                  }
-                } else {
-                  var result2 = null;
-                  pos = savedPos1;
-                }
-                var result3 = result2 !== null
-                  ? (function(expression) { return expression; })(result2[1])
-                  : null;
-                if (result3 !== null) {
-                  var result1 = result3;
-                } else {
-                  var result1 = null;
-                  pos = savedPos0;
-                }
-                if (result1 !== null) {
-                  var result0 = result1;
-                } else {
-                  var result0 = null;;
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_action() {
-        var cacheKey = 'action@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_braced();
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(braced) { return braced.substr(1, braced.length - 2); })(result1[0])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("action");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_braced() {
-        var cacheKey = 'braced@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "{") {
-          var result3 = "{";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"{\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = [];
-          var result8 = parse_braced();
-          if (result8 !== null) {
-            var result6 = result8;
-          } else {
-            var result7 = parse_nonBraceCharacter();
-            if (result7 !== null) {
-              var result6 = result7;
-            } else {
-              var result6 = null;;
-            };
-          }
-          while (result6 !== null) {
-            result4.push(result6);
-            var result8 = parse_braced();
-            if (result8 !== null) {
-              var result6 = result8;
-            } else {
-              var result7 = parse_nonBraceCharacter();
-              if (result7 !== null) {
-                var result6 = result7;
-              } else {
-                var result6 = null;;
-              };
-            }
-          }
-          if (result4 !== null) {
-            if (input.substr(pos, 1) === "}") {
-              var result5 = "}";
-              pos += 1;
-            } else {
-              var result5 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"}\"");
-              }
-            }
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(parts) {
-                return "{" + parts.join("") + "}";
-              })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_nonBraceCharacters() {
-        var cacheKey = 'nonBraceCharacters@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var result3 = parse_nonBraceCharacter();
-        if (result3 !== null) {
-          var result1 = [];
-          while (result3 !== null) {
-            result1.push(result3);
-            var result3 = parse_nonBraceCharacter();
-          }
-        } else {
-          var result1 = null;
-        }
-        var result2 = result1 !== null
-          ? (function(chars) { return chars.join(""); })(result1)
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_nonBraceCharacter() {
-        var cacheKey = 'nonBraceCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        if (input.substr(pos).match(/^[^{}]/) !== null) {
-          var result0 = input.charAt(pos);
-          pos++;
-        } else {
-          var result0 = null;
-          if (reportMatchFailures) {
-            matchFailed("[^{}]");
-          }
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_equals() {
-        var cacheKey = 'equals@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "=") {
-          var result3 = "=";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"=\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "="; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_colon() {
-        var cacheKey = 'colon@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === ":") {
-          var result3 = ":";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\":\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return ":"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_semicolon() {
-        var cacheKey = 'semicolon@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === ";") {
-          var result3 = ";";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\";\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return ";"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_slash() {
-        var cacheKey = 'slash@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "/") {
-          var result3 = "/";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"/\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "/"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_and() {
-        var cacheKey = 'and@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "&") {
-          var result3 = "&";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"&\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "&"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_not() {
-        var cacheKey = 'not@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "!") {
-          var result3 = "!";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"!\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "!"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_question() {
-        var cacheKey = 'question@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "?") {
-          var result3 = "?";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"?\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "?"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_star() {
-        var cacheKey = 'star@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "*") {
-          var result3 = "*";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"*\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "*"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_plus() {
-        var cacheKey = 'plus@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "+") {
-          var result3 = "+";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"+\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "+"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_lparen() {
-        var cacheKey = 'lparen@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "(") {
-          var result3 = "(";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"(\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "("; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_rparen() {
-        var cacheKey = 'rparen@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === ")") {
-          var result3 = ")";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\")\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return ")"; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_dot() {
-        var cacheKey = 'dot@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === ".") {
-          var result3 = ".";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\".\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function() { return "."; })()
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_identifier() {
-        var cacheKey = 'identifier@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result13 = parse_letter();
-        if (result13 !== null) {
-          var result3 = result13;
-        } else {
-          if (input.substr(pos, 1) === "_") {
-            var result12 = "_";
-            pos += 1;
-          } else {
-            var result12 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"_\"");
-            }
-          }
-          if (result12 !== null) {
-            var result3 = result12;
-          } else {
-            if (input.substr(pos, 1) === "$") {
-              var result11 = "$";
-              pos += 1;
-            } else {
-              var result11 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"$\"");
-              }
-            }
-            if (result11 !== null) {
-              var result3 = result11;
-            } else {
-              var result3 = null;;
-            };
-          };
-        }
-        if (result3 !== null) {
-          var result4 = [];
-          var result10 = parse_letter();
-          if (result10 !== null) {
-            var result6 = result10;
-          } else {
-            var result9 = parse_digit();
-            if (result9 !== null) {
-              var result6 = result9;
-            } else {
-              if (input.substr(pos, 1) === "_") {
-                var result8 = "_";
-                pos += 1;
-              } else {
-                var result8 = null;
-                if (reportMatchFailures) {
-                  matchFailed("\"_\"");
-                }
-              }
-              if (result8 !== null) {
-                var result6 = result8;
-              } else {
-                if (input.substr(pos, 1) === "$") {
-                  var result7 = "$";
-                  pos += 1;
-                } else {
-                  var result7 = null;
-                  if (reportMatchFailures) {
-                    matchFailed("\"$\"");
-                  }
-                }
-                if (result7 !== null) {
-                  var result6 = result7;
-                } else {
-                  var result6 = null;;
-                };
-              };
-            };
-          }
-          while (result6 !== null) {
-            result4.push(result6);
-            var result10 = parse_letter();
-            if (result10 !== null) {
-              var result6 = result10;
-            } else {
-              var result9 = parse_digit();
-              if (result9 !== null) {
-                var result6 = result9;
-              } else {
-                if (input.substr(pos, 1) === "_") {
-                  var result8 = "_";
-                  pos += 1;
-                } else {
-                  var result8 = null;
-                  if (reportMatchFailures) {
-                    matchFailed("\"_\"");
-                  }
-                }
-                if (result8 !== null) {
-                  var result6 = result8;
-                } else {
-                  if (input.substr(pos, 1) === "$") {
-                    var result7 = "$";
-                    pos += 1;
-                  } else {
-                    var result7 = null;
-                    if (reportMatchFailures) {
-                      matchFailed("\"$\"");
-                    }
-                  }
-                  if (result7 !== null) {
-                    var result6 = result7;
-                  } else {
-                    var result6 = null;;
-                  };
-                };
-              };
-            }
-          }
-          if (result4 !== null) {
-            var result5 = parse___();
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(head, tail) {
-                return head + tail.join("");
-              })(result1[0], result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("identifier");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_literal() {
-        var cacheKey = 'literal@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result6 = parse_doubleQuotedLiteral();
-        if (result6 !== null) {
-          var result3 = result6;
-        } else {
-          var result5 = parse_singleQuotedLiteral();
-          if (result5 !== null) {
-            var result3 = result5;
-          } else {
-            var result3 = null;;
-          };
-        }
-        if (result3 !== null) {
-          var result4 = parse___();
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(literal) { return literal; })(result1[0])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("literal");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_doubleQuotedLiteral() {
-        var cacheKey = 'doubleQuotedLiteral@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "\"") {
-          var result3 = "\"";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\\"\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = [];
-          var result6 = parse_doubleQuotedCharacter();
-          while (result6 !== null) {
-            result4.push(result6);
-            var result6 = parse_doubleQuotedCharacter();
-          }
-          if (result4 !== null) {
-            if (input.substr(pos, 1) === "\"") {
-              var result5 = "\"";
-              pos += 1;
-            } else {
-              var result5 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"\\\"\"");
-              }
-            }
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(chars) { return chars.join(""); })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_doubleQuotedCharacter() {
-        var cacheKey = 'doubleQuotedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var result6 = parse_simpleDoubleQuotedCharacter();
-        if (result6 !== null) {
-          var result0 = result6;
-        } else {
-          var result5 = parse_simpleEscapeSequence();
-          if (result5 !== null) {
-            var result0 = result5;
-          } else {
-            var result4 = parse_zeroEscapeSequence();
-            if (result4 !== null) {
-              var result0 = result4;
-            } else {
-              var result3 = parse_hexEscapeSequence();
-              if (result3 !== null) {
-                var result0 = result3;
-              } else {
-                var result2 = parse_unicodeEscapeSequence();
-                if (result2 !== null) {
-                  var result0 = result2;
-                } else {
-                  var result1 = parse_eolEscapeSequence();
-                  if (result1 !== null) {
-                    var result0 = result1;
-                  } else {
-                    var result0 = null;;
-                  };
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_simpleDoubleQuotedCharacter() {
-        var cacheKey = 'simpleDoubleQuotedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var savedPos2 = pos;
-        var savedReportMatchFailuresVar0 = reportMatchFailures;
-        reportMatchFailures = false;
-        if (input.substr(pos, 1) === "\"") {
-          var result8 = "\"";
-          pos += 1;
-        } else {
-          var result8 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"\\\"\"");
-          }
-        }
-        if (result8 !== null) {
-          var result5 = result8;
-        } else {
-          if (input.substr(pos, 1) === "\\") {
-            var result7 = "\\";
-            pos += 1;
-          } else {
-            var result7 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"\\\\\"");
-            }
-          }
-          if (result7 !== null) {
-            var result5 = result7;
-          } else {
-            var result6 = parse_eolChar();
-            if (result6 !== null) {
-              var result5 = result6;
-            } else {
-              var result5 = null;;
-            };
-          };
-        }
-        reportMatchFailures = savedReportMatchFailuresVar0;
-        if (result5 === null) {
-          var result3 = '';
-        } else {
-          var result3 = null;
-          pos = savedPos2;
-        }
-        if (result3 !== null) {
-          if (input.length > pos) {
-            var result4 = input.charAt(pos);
-            pos++;
-          } else {
-            var result4 = null;
-            if (reportMatchFailures) {
-              matchFailed('any character');
-            }
-          }
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(char_) { return char_; })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_singleQuotedLiteral() {
-        var cacheKey = 'singleQuotedLiteral@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "'") {
-          var result3 = "'";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"'\"");
-          }
-        }
-        if (result3 !== null) {
-          var result4 = [];
-          var result6 = parse_singleQuotedCharacter();
-          while (result6 !== null) {
-            result4.push(result6);
-            var result6 = parse_singleQuotedCharacter();
-          }
-          if (result4 !== null) {
-            if (input.substr(pos, 1) === "'") {
-              var result5 = "'";
-              pos += 1;
-            } else {
-              var result5 = null;
-              if (reportMatchFailures) {
-                matchFailed("\"'\"");
-              }
-            }
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(chars) { return chars.join(""); })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_singleQuotedCharacter() {
-        var cacheKey = 'singleQuotedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var result6 = parse_simpleSingleQuotedCharacter();
-        if (result6 !== null) {
-          var result0 = result6;
-        } else {
-          var result5 = parse_simpleEscapeSequence();
-          if (result5 !== null) {
-            var result0 = result5;
-          } else {
-            var result4 = parse_zeroEscapeSequence();
-            if (result4 !== null) {
-              var result0 = result4;
-            } else {
-              var result3 = parse_hexEscapeSequence();
-              if (result3 !== null) {
-                var result0 = result3;
-              } else {
-                var result2 = parse_unicodeEscapeSequence();
-                if (result2 !== null) {
-                  var result0 = result2;
-                } else {
-                  var result1 = parse_eolEscapeSequence();
-                  if (result1 !== null) {
-                    var result0 = result1;
-                  } else {
-                    var result0 = null;;
-                  };
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_simpleSingleQuotedCharacter() {
-        var cacheKey = 'simpleSingleQuotedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var savedPos2 = pos;
-        var savedReportMatchFailuresVar0 = reportMatchFailures;
-        reportMatchFailures = false;
-        if (input.substr(pos, 1) === "'") {
-          var result8 = "'";
-          pos += 1;
-        } else {
-          var result8 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"'\"");
-          }
-        }
-        if (result8 !== null) {
-          var result5 = result8;
-        } else {
-          if (input.substr(pos, 1) === "\\") {
-            var result7 = "\\";
-            pos += 1;
-          } else {
-            var result7 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"\\\\\"");
-            }
-          }
-          if (result7 !== null) {
-            var result5 = result7;
-          } else {
-            var result6 = parse_eolChar();
-            if (result6 !== null) {
-              var result5 = result6;
-            } else {
-              var result5 = null;;
-            };
-          };
-        }
-        reportMatchFailures = savedReportMatchFailuresVar0;
-        if (result5 === null) {
-          var result3 = '';
-        } else {
-          var result3 = null;
-          pos = savedPos2;
-        }
-        if (result3 !== null) {
-          if (input.length > pos) {
-            var result4 = input.charAt(pos);
-            pos++;
-          } else {
-            var result4 = null;
-            if (reportMatchFailures) {
-              matchFailed('any character');
-            }
-          }
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(char_) { return char_; })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_class() {
-        var cacheKey = 'class@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        var savedReportMatchFailures = reportMatchFailures;
-        reportMatchFailures = false;
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        if (input.substr(pos, 1) === "[") {
-          var result3 = "[";
-          pos += 1;
-        } else {
-          var result3 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"[\"");
-          }
-        }
-        if (result3 !== null) {
-          if (input.substr(pos, 1) === "^") {
-            var result11 = "^";
-            pos += 1;
-          } else {
-            var result11 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"^\"");
-            }
-          }
-          var result4 = result11 !== null ? result11 : '';
-          if (result4 !== null) {
-            var result5 = [];
-            var result10 = parse_classCharacterRange();
-            if (result10 !== null) {
-              var result8 = result10;
-            } else {
-              var result9 = parse_classCharacter();
-              if (result9 !== null) {
-                var result8 = result9;
-              } else {
-                var result8 = null;;
-              };
-            }
-            while (result8 !== null) {
-              result5.push(result8);
-              var result10 = parse_classCharacterRange();
-              if (result10 !== null) {
-                var result8 = result10;
-              } else {
-                var result9 = parse_classCharacter();
-                if (result9 !== null) {
-                  var result8 = result9;
-                } else {
-                  var result8 = null;;
-                };
-              }
-            }
-            if (result5 !== null) {
-              if (input.substr(pos, 1) === "]") {
-                var result6 = "]";
-                pos += 1;
-              } else {
-                var result6 = null;
-                if (reportMatchFailures) {
-                  matchFailed("\"]\"");
-                }
-              }
-              if (result6 !== null) {
-                var result7 = parse___();
-                if (result7 !== null) {
-                  var result1 = [result3, result4, result5, result6, result7];
-                } else {
-                  var result1 = null;
-                  pos = savedPos1;
-                }
-              } else {
-                var result1 = null;
-                pos = savedPos1;
-              }
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(inverted, parts) {
-                var partsConverted = map(parts, function(part) { return part.data; });
-                var rawText = "["
-                  + inverted
-                  + map(parts, function(part) { return part.rawText; }).join("")
-                  + "]";
-          
-                return {
-                  type:     "class",
-                  inverted: inverted === "^",
-                  parts:    partsConverted,
-                  // FIXME: Get the raw text from the input directly.
-                  rawText:  rawText
-                };
-              })(result1[1], result1[2])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        reportMatchFailures = savedReportMatchFailures;
-        if (reportMatchFailures && result0 === null) {
-          matchFailed("character class");
-        }
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_classCharacterRange() {
-        var cacheKey = 'classCharacterRange@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var result3 = parse_classCharacter();
-        if (result3 !== null) {
-          if (input.substr(pos, 1) === "-") {
-            var result4 = "-";
-            pos += 1;
-          } else {
-            var result4 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"-\"");
-            }
-          }
-          if (result4 !== null) {
-            var result5 = parse_classCharacter();
-            if (result5 !== null) {
-              var result1 = [result3, result4, result5];
-            } else {
-              var result1 = null;
-              pos = savedPos1;
-            }
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(begin, end) {
-                if (begin.data.charCodeAt(0) > end.data.charCodeAt(0)) {
-                  throw new this.SyntaxError(
-                    "Invalid character range: " + begin.rawText + "-" + end.rawText + "."
-                  );
-                }
-          
-                return {
-                  data:    [begin.data, end.data],
-                  // FIXME: Get the raw text from the input directly.
-                  rawText: begin.rawText + "-" + end.rawText
-                }
-              })(result1[0], result1[2])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_classCharacter() {
-        var cacheKey = 'classCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var result1 = parse_bracketDelimitedCharacter();
-        var result2 = result1 !== null
-          ? (function(char_) {
-                return {
-                  data:    char_,
-                  // FIXME: Get the raw text from the input directly.
-                  rawText: quoteForRegexpClass(char_)
-                };
-              })(result1)
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_bracketDelimitedCharacter() {
-        var cacheKey = 'bracketDelimitedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var result6 = parse_simpleBracketDelimitedCharacter();
-        if (result6 !== null) {
-          var result0 = result6;
-        } else {
-          var result5 = parse_simpleEscapeSequence();
-          if (result5 !== null) {
-            var result0 = result5;
-          } else {
-            var result4 = parse_zeroEscapeSequence();
-            if (result4 !== null) {
-              var result0 = result4;
-            } else {
-              var result3 = parse_hexEscapeSequence();
-              if (result3 !== null) {
-                var result0 = result3;
-              } else {
-                var result2 = parse_unicodeEscapeSequence();
-                if (result2 !== null) {
-                  var result0 = result2;
-                } else {
-                  var result1 = parse_eolEscapeSequence();
-                  if (result1 !== null) {
-                    var result0 = result1;
-                  } else {
-                    var result0 = null;;
-                  };
-                };
-              };
-            };
-          };
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_simpleBracketDelimitedCharacter() {
-        var cacheKey = 'simpleBracketDelimitedCharacter@' + pos;
-        var cachedResult = cache[cacheKey];
-        if (cachedResult) {
-          pos = cachedResult.nextPos;
-          return cachedResult.result;
-        }
-        
-        
-        var savedPos0 = pos;
-        var savedPos1 = pos;
-        var savedPos2 = pos;
-        var savedReportMatchFailuresVar0 = reportMatchFailures;
-        reportMatchFailures = false;
-        if (input.substr(pos, 1) === "]") {
-          var result8 = "]";
-          pos += 1;
-        } else {
-          var result8 = null;
-          if (reportMatchFailures) {
-            matchFailed("\"]\"");
-          }
-        }
-        if (result8 !== null) {
-          var result5 = result8;
-        } else {
-          if (input.substr(pos, 1) === "\\") {
-            var result7 = "\\";
-            pos += 1;
-          } else {
-            var result7 = null;
-            if (reportMatchFailures) {
-              matchFailed("\"\\\\\"");
-            }
-          }
-          if (result7 !== null) {
-            var result5 = result7;
-          } else {
-            var result6 = parse_eolChar();
-            if (result6 !== null) {
-              var result5 = result6;
-            } else {
-              var result5 = null;;
-            };
-          };
-        }
-        reportMatchFailures = savedReportMatchFailuresVar0;
-        if (result5 === null) {
-          var result3 = '';
-        } else {
-          var result3 = null;
-          pos = savedPos2;
-        }
-        if (result3 !== null) {
-          if (input.length > pos) {
-            var result4 = input.charAt(pos);
-            pos++;
-          } else {
-            var result4 = null;
-            if (reportMatchFailures) {
-              matchFailed('any character');
-            }
-          }
-          if (result4 !== null) {
-            var result1 = [result3, result4];
-          } else {
-            var result1 = null;
-            pos = savedPos1;
-          }
-        } else {
-          var result1 = null;
-          pos = savedPos1;
-        }
-        var result2 = result1 !== null
-          ? (function(char_) { return char_; })(result1[1])
-          : null;
-        if (result2 !== null) {
-          var result0 = result2;
-        } else {
-          var result0 = null;
-          pos = savedPos0;
-        }
-        
-        
-        
-        cache[cacheKey] = {
-          nextPos: pos,
-          result:  result0
-        };
-        return result0;
-      }
-      
-      function parse_simpleEscapeSequence() {
-        var cacheKey = 'simpleEscapeSequence@

<TRUNCATED>