{
  "version": 3,
  "sources": [
    "fileoverview-node.js",
    "typedef.js",
    "amdclean-node-globals.js",
    "lib/jscc/io/io.js",
    "lib/jscc/log/log.js",
    "lib/jscc/bitset/bitset.js",
    "bin/text.js",
    "text!lib/jscc/template/parser-driver-js.txt",
    "lib/jscc/bitset/BitSet32.js",
    "lib/jscc/enums/EDGE.js",
    "lib/jscc/classes/Nfa.js",
    "lib/jscc/nfaStates.js",
    "lib/jscc/enums/SYM.js",
    "lib/jscc/enums/ASSOC.js",
    "lib/jscc/enums/SPECIAL.js",
    "lib/jscc/classes/Symbol.js",
    "lib/jscc/classes/Production.js",
    "lib/jscc/enums/EXEC.js",
    "lib/jscc/global.js",
    "lib/jscc/io/ioNode.js",
    "lib/jscc/enums/LOG_LEVEL.js",
    "lib/jscc/util.js",
    "lib/jscc/first.js",
    "lib/jscc/log/logNode.js",
    "lib/jscc/classes/State.js",
    "lib/jscc/classes/Item.js",
    "lib/jscc/classes/TableEntry.js",
    "lib/jscc/enums/MODE_GEN.js",
    "lib/jscc/debug.js",
    "lib/jscc/tabgen.js",
    "lib/jscc/printtab.js",
    "lib/jscc/integrity.js",
    "lib/jscc/lexdbg.js",
    "lib/jscc/classes/Param.js",
    "lib/jscc/regex.js",
    "lib/jscc/parse.js",
    "lib/jscc/classes/Dfa.js",
    "lib/jscc/lexdfa.js",
    "lib/jscc/main.js",
    "main.js",
    "exports.js"
  ],
  "names": [],
  "mappings": "AAAA;AACA;AACA;AACA;AACA,ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrCA;AACA,ACDA;AACA;AACA;AACA,ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AClsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC9eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACnsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACnpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC/NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
  "file": "jscc-node.js",
  "sourcesContent": [
    "/**\r\n * @fileoverview\r\n * @suppress {uselessCode|globalThis}\r\n */\r\n",
    "/*\r\n * Contains type definitions for Closure's benefit.  Used as a\r\n * start file when optimizing with requirejs.\r\n */\r\n\"use strict\";\r\n/**\r\n * The root namespace.  Re-add the const tag after Closure bug #1235 is fixed.\r\n * @namespace\r\n */\r\nthis[\"jscc\"] = {};\r\n//>>excludeStart(\"jsccNamespacePreDefined\", pragmas.jsccNamespacePreDefined);\r\nvar jscc = this[\"jscc\"];\r\n//>>excludeEnd(\"jsccNamespacePreDefined\");\r\n//>>includeStart(\"jsccNamespacePreDefined\", pragmas.jsccNamespacePreDefined);\r\njscc = this[\"jscc\"];\r\n//>>includeEnd(\"jsccNamespacePreDefined\");\r\n/**\r\n * The namespace to which enum definitions belong.\r\n * @namespace\r\n */\r\njscc[\"enums\"] = {};\r\n/**\r\n * The namespace to which certain classes belong.\r\n * @namespace\r\n */\r\njscc[\"classes\"] = {};\r\njscc.enums = jscc[\"enums\"];\r\njscc.classes = jscc[\"classes\"];\r\n\r\n/*\r\n * To avoid type errors with enums, add the enum module code here.  The enum modules\r\n * will simply return the enum objects when the closure pragma is defined.  There\r\n * really should be a better solution than this, and maybe there is.\r\n */\r\n\r\n/**\r\n * Indicates the associativity of a symbol.\r\n * @enum {number}\r\n */\r\njscc.enums.ASSOC = {\r\n    /**\r\n     * The associativity has not yet been set.\r\n     */\r\n    NONE: 0,\r\n    /**\r\n     * The symbol is left-associative.\r\n     */\r\n    LEFT: 1,\r\n    /**\r\n     * The symbol is right-associative.\r\n     */\r\n    RIGHT: 2,\r\n    /**\r\n     * The symbol is non-associative.\r\n     */\r\n    NOASSOC: 3\r\n};\r\n\r\n/**\r\n * Identifies the type of an edge in an automation graph.\r\n * @enum {number}\r\n */\r\njscc.enums.EDGE = {\r\n    FREE: 0,\r\n    EPSILON: 1,\r\n    CHAR: 2\r\n};\r\n\r\n/**\r\n * Indicates whether the executable environment is a\r\n * console-based Javascript engine or a web environment.\r\n * @enum {number}\r\n */\r\njscc.enums.EXEC = {\r\n    /**\r\n     * A console-based Javascript engine is in use.\r\n     */\r\n    CONSOLE: 0,\r\n    /**\r\n     * A web-browser-based Javascript engine is in use.\r\n     */\r\n    WEB: 1\r\n};\r\n\r\n/**\r\n * Specifies the minimum logging level.\r\n * @enum {number}\r\n */\r\njscc.enums.LOG_LEVEL = {\r\n    /**\r\n     * Log all messages.\r\n     */\r\n    TRACE: 0,\r\n    /**\r\n     * Log debug messages and higher.\r\n     */\r\n    DEBUG: 1,\r\n    /**\r\n     * Log info messages and higher.\r\n     */\r\n    INFO: 2,\r\n    /**\r\n     * Log warning messages and higher.\r\n     */\r\n    WARN: 3,\r\n    /**\r\n     * Log error and fatal messages.\r\n     */\r\n    ERROR: 4,\r\n    /**\r\n     * Log only fatal messages.\r\n     */\r\n    FATAL: 5\r\n};\r\n// Export from Closure, as this enumeration may be used in the\r\n// mainOptions typedef.\r\njscc.enums.LOG_LEVEL['TRACE'] = jscc.enums.LOG_LEVEL.TRACE;\r\njscc.enums.LOG_LEVEL['DEBUG'] = jscc.enums.LOG_LEVEL.DEBUG;\r\njscc.enums.LOG_LEVEL['INFO'] = jscc.enums.LOG_LEVEL.INFO;\r\njscc.enums.LOG_LEVEL['WARN'] = jscc.enums.LOG_LEVEL.WARN;\r\njscc.enums.LOG_LEVEL['ERROR'] = jscc.enums.LOG_LEVEL.ERROR;\r\njscc.enums.LOG_LEVEL['FATAL'] = jscc.enums.LOG_LEVEL.FATAL;\r\njscc.enums['LOG_LEVEL'] = jscc.enums.LOG_LEVEL;\r\n\r\n/**\r\n * Indicates an output mode for the parser.\r\n * @enum {number}\r\n */\r\njscc.enums.MODE_GEN = {\r\n    /**\r\n     * Output is plain text.\r\n     */\r\n    TEXT: 0,\r\n    /**\r\n     * Output is JavaScript code.\r\n     */\r\n    JS: 1,\r\n    /**\r\n     * Output is HTML-formatted.\r\n     */\r\n    HTML: 2\r\n};\r\n\r\n/**\r\n * Identifies a special symbol.  Special symbols include\r\n * end-of-file, whitespace, and error symbols.  Use\r\n * NONE to indicate a non-special symbol.\r\n * @enum {number}\r\n */\r\njscc.enums.SPECIAL = {\r\n    /**\r\n     * Identifies a non-special symbol.\r\n     */\r\n    NONE: 0,\r\n    /**\r\n     * Identifies an end-of-file symbol.\r\n     */\r\n    EOF: 1,\r\n    /**\r\n     * Identifies a whitespace symbol.\r\n     */\r\n    WHITESPACE: 2,\r\n    /**\r\n     * Identifies an error symbol.\r\n     */\r\n    ERROR: 3\r\n};\r\n\r\n/**\r\n * Identifies a symbol as nonterminating or terminating.\r\n * @enum {number}\r\n */\r\njscc.enums.SYM = {\r\n    /**\r\n     * The symbol is nonterminating.\r\n     */\r\n    NONTERM: 0,\r\n    /**\r\n     * The symbol is terminating.\r\n     */\r\n    TERM: 1\r\n};\r\n\r\n/*\r\n * Some option-override, fictional types.\r\n */\r\n/**\r\n * @typedef {{id: ?number, kind: ?jscc.enums.SYM, label: ?string, prods: ?Array<number>, first:\r\n *     ?Array, associativity: ?jscc.enums.ASSOC, level: ?number, code: ?string, special: ?jscc.enums.SPECIAL,\r\n *     defined: ?boolean, \"nullable\": ?boolean}}\r\n */\r\nvar SymbolOptions;\r\n/**\r\n * @typedef {{id: ?number, lhs: ?number, rhs: ?Array<!number>, level: ?number, code: ?string}}\r\n */\r\nvar ProductionOptions;\r\n/**\r\n * @typedef {{kernel: ?Array<!jscc.classes.Item>, epsilon: ?Array<!jscc.classes.Item>, def_act: ?number, done:\r\n *     ?boolean, closed: ?boolean, actionrow: ?Array<!jscc.classes.TableEntry>, gotorow:\r\n *     ?Array<!jscc.classes.TableEntry>}}\r\n */\r\nvar StateOptions;\r\n/**\r\n * @typedef {{prod: ?number, dot_offset: ?number, lookahead: ?Array<!number>}}\r\n */\r\nvar ItemOptions;\r\n/**\r\n * @typedef {{edge: ?jscc.enums.EDGE, ccl: ?jscc.bitset, follow: ?number, follow2: ?number, accept: ?number,\r\n *     weight: ?number}}\r\n */\r\nvar NfaOptions;\r\n/**\r\n * @typedef {{line: ?Array, nfa_set: ?Array<!number>, accept: ?number, done: ?boolean, group: ?number}}\r\n */\r\nvar DfaOptions;\r\n/**\r\n * @typedef {{out_file: ?string, src_file: ?string, tpl_file: ?string, input: ?(string|function():!string),\r\n     *     template: ?(string|function():!string), outputCallback: ?function(string):void, dump_nfa: ?boolean,\r\n     *     dump_dfa: ?boolean, verbose: ?boolean, logLevel: ?(string|jscc.enums.LOG_LEVEL)}}\r\n * @property {?string} out_file - The path of the output file.  Defaults to\r\n * the empty string, which means to print to standard output (or the engine's equivalent).\r\n * @property {?string} src_file - The path of the input grammar file.\r\n * Defaults to the empty string, which means to read from standard input (or\r\n * the engine's equivalent).\r\n * @property {?string} tpl_file - The path of the input template file.\r\n * Defaults to the module's default template file, which is intended for generic\r\n * compilation tasks.\r\n * @property {?(string|function():!string)} input - If a string, the contents of the\r\n * input grammar.  If a function with no arguments, a function that returns\r\n * the contents of the grammar.  When input is specified, src_file is ignored.\r\n * @property {?(string|function():!string)} template - If a string, the contents of the\r\n * template.  If a function with no arguments, a function that returns the contents\r\n * of the template.  When template is specified, tpl_file is ignored.\r\n * @property {?function(string):void} outputCallback - A function with a parameter\r\n * that will be called with the output.  When outputCallback is specified,\r\n * out_file is ignored.\r\n * @property {?boolean} dump_nfa - Whether to output the nondeterministic finite\r\n * automata for debugging purposes.  Defaults to false.\r\n * @property {?boolean} dump_dfa - Whether to output the deterministic finite\r\n * automata for debugging purposes.  Defaults to false.\r\n * @property {?boolean} verbose - Make debugging output chattier.  Defaults to\r\n * false.\r\n * @property {?(string|jscc.enums.LOG_LEVEL)} logLevel - The logging\r\n * level.  Can be the name of one of the {@link module:jscc.enums.LOG_LEVEL} values\r\n * or one of the values themselves.  Defaults to WARN.\r\n * @property {?boolean} throwIfErrors - Whether to throw an exception before completion\r\n * of the main method if there are any errors.\r\n * @property {?boolean} exitIfErrors - Whether to exit the process with a non-zero exit\r\n * code if there are any errors, provided that the platform permits doing so.  Intended\r\n * for use with shell scripts.\r\n */\r\nvar mainOptions;\r\n\r\n//>>includeStart(\"amdclean\", pragmas.amdclean);\r\n/**\r\n * @typedef {(function(!string):*|Object)}\r\n */\r\n//>>includeEnd(\"amdclean\");\r\n//>>excludeStart(\"amdclean\", pragmas.amdclean);\r\n/**\r\n * @typedef {function(!string):*}\r\n */\r\n//>>excludeEnd(\"amdclean\");\r\nvar reqParameter;\r\n\r\n/**\r\n * @typedef {function((undefined|string|Array<string>|{deps: (string|Array<string>), callback: (string|Function)}), (string|Function|Array<string>)=, (string|Function)=, (string|boolean)=, boolean=):almondRequire}\r\n */\r\nvar almondRequire;\r\n\r\n\r\nvar almondRequireExtension =\r\n/**\r\n * @lends {almondRequire}\r\n */\r\n({\r\n    /**\r\n     * @type {!Object<string, *>}\r\n     */\r\n    _defined: {},\r\n    /**\r\n     * @param {Object<string, *>} cfg\r\n     * @returns {almondRequire}\r\n     */\r\n    config: function(cfg) {\r\n    }\r\n});\r\n\r\n/**\r\n * @typedef {string}\r\n */\r\nvar stringWithErrorMessage;\r\n\r\nvar stringWithErrorMessageExtension =\r\n    /**\r\n     * @lends {stringWithErrorMessage}\r\n     */\r\n    ({\r\n        /**\r\n         * @type {string}\r\n         */\r\n        ERROR_MSG: \"\"\r\n    });\r\n\r\n/**\r\n * @typedef {function(string):boolean}\r\n */\r\nvar hasObject;\r\n\r\nvar hasObjectExtension =\r\n    /**\r\n     * @lends {hasObject}\r\n     */\r\n    ({\r\n        /**\r\n         * @param {string} name\r\n         * @param {function(...*):boolean} test\r\n         * @param {boolean=} now\r\n         */\r\n        add: function(name, test, now) {\r\n        },\r\n        /**\r\n         * @param {T} el\r\n         * @returns {T}\r\n         * @template T\r\n         */\r\n        clearElement: function(el) {\r\n        },\r\n        /**\r\n         * @param {string} name\r\n         * @param {*} el\r\n         * @returns {boolean}\r\n         */\r\n        cssprop: function(name, el) {\r\n        },\r\n        /**\r\n         * @param {*} obj\r\n         * @param {*=} property\r\n         * @returns {boolean}\r\n         */\r\n        isHostType: function(obj, property) {\r\n        },\r\n        /**\r\n         * @returns {Object<string, (boolean|stringWithErrorMessage)>}\r\n         */\r\n        all: function() {\r\n        }\r\n    });\r\n",
    "//amdclean\r\n/** @suppress {duplicate} */\r\nvar util = require(\"util\");\r\n/** @suppress {duplicate} */\r\nvar fs = require(\"fs\");\r\n/** @suppress {duplicate} */\r\nvar path = require(\"path\");\r\n",
    "/**\r\n * @typedef {{filename: ?(string|undefined), chunkCallback: ?(function(string):void|undefined), endCallback:\r\n *     ?(function():void|undefined)}}\r\n * @property {?(string|undefined)} filename - The filename to read.  If omitted, read from standard input.\r\n * @property {?(function(string):void|undefined)} chunkCallback - The function to call when an input chunk is read\r\n *     asynchronously.\r\n * @property {?(function():void|undefined)} endCallback - The function to call when the asynchronous read operation has\r\n *     completed.\r\n */\r\nvar ioOptions;\r\n/**\r\n * @typedef {{text: string, destination: ?(string|undefined), callback: ?(function():void|undefined)}}\r\n * @property {string} text - The text to be written.\r\n * @property {?(string|undefined)} destination - The filename to which to write the text.  If omitted, text is written\r\n *     to standard output.\r\n * @property {?(function():void|undefined)} callback - A callback to be executed when the asynchronous write operation\r\n *     has completed.  If omitted, the operation occurs synchronously instead.\r\n */\r\nvar ioWriteOutputOptions;\r\n/**\r\n * Interface for engine-specific IO modules.\r\n * @interface\r\n */\r\njscc.io = function() {\r\n};\r\njscc.io.prototype = {\r\n    /**\r\n     * Reads input from the specified file or from standard input.\r\n     * If chunkCallback and/or endCallback are specified, the operation\r\n     * is asynchronous, and the function returns nothing.  Otherwise,\r\n     * the operation is synchronous, and the function returns a string\r\n     * with the contents read from the file or from standard input.\r\n     *\r\n     * @param {(string|function(string):void|ioOptions)=} options -\r\n     *     If a string, the filename to read.  If an object, has optional filename, chunkCallback, and endCallback\r\n     *     properties.  If a function, the callback function to execute for each chunk read from standard input.\r\n     * @returns {(string|void)} When running synchronously, the text read from\r\n     * the file or standard input.  When running asynchronously, returns nothing.\r\n     */\r\n    read_all_input: function(options) {\r\n\r\n    },\r\n\r\n    /**\r\n     * Reads the template file into which the parser code is inserted.\r\n     * If not specified, uses the default driver specified in\r\n     * {@link jscc.global.DEFAULT_DRIVER}.\r\n     *\r\n     * @param {(string|function(string):void|ioOptions)=} options -\r\n     *     If a string, specifies the template filename.  If a function, specifies the callback function to be used\r\n     *     when reading a file chunk has completed.  If an object, specifies either or both.  If omitted, causes the\r\n     *     function to read\r\n     * {@link jscc.global.DEFAULT_DRIVER} synchronously.\r\n     * @returns {(string|void)} When running synchronously, returns the contents of\r\n     * the template file as a string.  When running asynchronously, returns\r\n     * nothing.\r\n     */\r\n    read_template: function(options) {\r\n\r\n    },\r\n\r\n    /**\r\n     * Writes the provided text to the specified file or to standard output.\r\n     *\r\n     * @param {(string|ioWriteOutputOptions)} options - When a string, the text\r\n     *     to be written to standard output.  When an object, contains text, destination, and callback properties.\r\n     */\r\n    write_output: function(options) {\r\n\r\n    },\r\n\r\n    /**\r\n     * Writes the provided text to a debugging output, provided that such an output\r\n     * exists in the implementation of this interface.\r\n     *\r\n     * @param {string} text - The text to write to the debugging output.\r\n     */\r\n    write_debug: function(text) {\r\n\r\n    },\r\n\r\n    /**\r\n     * Attempts to exit the entire process with the provided exit code if the \r\n     * platform supports doing so.  Callers should also ensure that all functions\r\n     * exit appropriately if the platform does not support this feature.\r\n     * \r\n     * @param {number=} exitCode - The exit code to use.\r\n     */\r\n    exit: function(exitCode) {\r\n        \r\n    }\r\n};\r\n",
    "/**\r\n * Interface for engine-specific logging modules.\r\n * @interface\r\n */\r\njscc.log = function() {\r\n\r\n};\r\njscc.log.prototype = {\r\n    /**\r\n     * Logs a message at the fatal level.\r\n     * @param {string} msg - The message to log.\r\n     */\r\n    fatal: function(msg) {\r\n    },\r\n    /**\r\n     * Logs a message at the error level.\r\n     * @param {string} msg - The message to log.\r\n     */\r\n    error: function(msg) {\r\n    },\r\n    /**\r\n     * Logs a message at the warning level.\r\n     * @param {string} msg - The message to log.\r\n     */\r\n    warn: function(msg) {\r\n    },\r\n    /**\r\n     * Logs a message at the info level.\r\n     * @param {string} msg - The message to log.\r\n     */\r\n    info: function(msg) {\r\n    },\r\n    /**\r\n     * Logs a message at the debug level.\r\n     * @param {string} msg - The message to log.\r\n     */\r\n    debug: function(msg) {\r\n    },\r\n    /**\r\n     * Logs a message at the trace level.\r\n     * @param {string} msg - The message to log.\r\n     */\r\n    trace: function(msg) {\r\n    },\r\n    /**\r\n     * Sets the minimum level to log.  This function\r\n     * may not have an effect at all times with all\r\n     * loggers.\r\n     * @param {jscc.enums.LOG_LEVEL} level - The\r\n     * minimum level to log.\r\n     */\r\n    setLevel: function(level) {\r\n    }\r\n};\r\n\r\n",
    "/**\r\n * Interface definition for bitset implementations.\r\n * @interface\r\n */\r\njscc.bitset = function() {\r\n};\r\njscc.bitset.prototype = {\r\n    /**\r\n     * Sets the specified bit to true or false.\r\n     * @param {!number} bit - The index of the bit to set\r\n     * @param {boolean=} state - Whether to set the bit to true or false\r\n     * @returns {!boolean} Returns the state parameter for chaining purposes\r\n     * @method\r\n     */\r\n    set: function(bit, state) {\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Gets the bit at the specified index.\r\n     * @param {!number} bit - The index of the bit to get\r\n     * @returns {!boolean} Whether the bit is currently true or false\r\n     * @method\r\n     */\r\n    get: function(bit) {\r\n        return false;\r\n    },\r\n\r\n    /**\r\n     * Returns the number of true values in the bitset.\r\n     * @returns {!number} The number of true values in the bitset\r\n     * @method\r\n     */\r\n    count: function() {\r\n        return 0;\r\n    }\r\n};\r\n",
    "define('text',{load: function(id){throw new Error(\"Dynamic load not allowed: \" + id);}});\n",
    "\ndefine('text!lib/jscc/template/parser-driver-js.txt',[],function () { return '/*\\r\\n\\tThis is the general, platform-independent part of every parser driver;\\r\\n\\tInput-/Output and Feature-Functions are done by the particular drivers\\r\\n\\tcreated for the particular platform.\\r\\n*/\\r\\n##HEADER##\\r\\nvar __parse=(function(/** number */ eof, /** number */ whitespace, /** number */ error_token){\\r\\n\\t\\r\\n/// there was \"continue\" in code, we must to replace it\\r\\nvar Continue = function(){throw Continue;};\\r\\n\\r\\n\\t/**\\r\\n\\t * @template T\\r\\n\\t * @param {T} value\\r\\n\\t * @constructor\\r\\n\\t * @extends {Error}\\r\\n     */\\r\\n\\tvar ReturnValue = function(value) {\\r\\n\\t\\tError.call(this);\\r\\n\\t\\tthis._value = value;\\r\\n\\t};\\r\\n\\tReturnValue.prototype = Object.create(Error.prototype);\\r\\n\\tReturnValue.prototype.constructor = ReturnValue;\\r\\n\\t/**\\r\\n\\t * @type {T}\\r\\n\\t * @private\\r\\n     */\\r\\n\\tReturnValue.prototype._value = null;\\r\\n\\t/**\\r\\n\\t * @returns {T}\\r\\n     */\\r\\n\\tReturnValue.prototype.valueOf = function() {\\r\\n\\t\\treturn this._value;\\r\\n\\t};\\r\\n\\r\\n\\t///can return value from any place of callback\\r\\n\\tfunction Return(value){\\r\\n\\t\\tthrow new ReturnValue(value);\\r\\n\\t}\\r\\n\\r\\n\\tvar TERMINAL_ACTIONS = (function(){\\r\\n\\t\\tfunction emptyFn(PCB){return PCB.att;}\\r\\n\\t\\tvar actions = ##TERMINAL_ACTIONS##\\r\\n\\t\\treturn function(/** @type {!PcbClass} */ PCB, match){\\r\\n\\t\\t\\ttry{\\r\\n\\t\\t\\t\\treturn (actions[match] || emptyFn)(PCB);\\r\\n\\t\\t\\t}catch(e){\\r\\n\\t\\t\\t\\tif(e instanceof ReturnValue)return e.valueOf();\\r\\n\\t\\t\\t\\tif(e == Continue)return Continue;\\r\\n\\t\\t\\t\\tthrow e;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t})();\\r\\n\\t/**\\r\\n\\t * @constructor\\r\\n     */\\r\\n\\tvar DfaLex = function() {\\r\\n\\t\\tthis._dfaData = ##DFA##;\\r\\n\\t};\\r\\n\\t/**\\r\\n\\t * @type {!Array<!{line: !Array, accept: !number}>}\\r\\n\\t * @private\\r\\n     */\\r\\n\\tDfaLex.prototype._dfaData = [];\\r\\n\\t/**\\r\\n\\t * @type {number}\\r\\n     */\\r\\n\\tDfaLex.prototype.match_pos = 0;\\r\\n\\t/**\\r\\n\\t * @type {?number}\\r\\n     */\\r\\n\\tDfaLex.prototype.state = 0;\\r\\n\\t/**\\r\\n\\t * @type {?number}\\r\\n     */\\r\\n\\tDfaLex.prototype.match = null;\\r\\n\\t/**\\r\\n\\t * @param {number} chr\\r\\n\\t * @param {number} pos\\r\\n     */\\r\\n\\tDfaLex.prototype.exec = function(chr, pos) {\\r\\n\\t\\tif (this.state !== null) {\\r\\n\\t\\t    if ((typeof this.state !== \"number\") || this.state >= this._dfaData.length) {\\r\\n\\t\\t        this.state = null;\\r\\n\\t\\t        throw new Error(\"Invalid value for DfaLex.state at chr \" + chr + \" and pos \" + pos);\\r\\n\\t\\t    }\\r\\n\\t\\t\\tvar line = this._dfaData[this.state].line;\\r\\n\\t\\t\\tif (typeof line === \"undefined\" || line === null) {\\r\\n\\t\\t\\t    var badState = this.state;\\r\\n\\t\\t\\t    this.state = null;\\r\\n\\t\\t\\t    throw new Error(\"At chr \" + chr + \" and pos \" + pos +\\r\\n\\t\\t\\t                    \", DfaLex._dfaData[\" + badState +\\r\\n\\t\\t\\t                    \"] appears to exist, but its line property is \" +\\r\\n\\t\\t\\t                    (typeof line === \"undefined\" ? \"undefined.\" : \"null.\"));\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tvar p, st;\\r\\n\\t\\t\\tfor (p = 1 << 8, st = line; p; p >>= 1) {\\r\\n\\t\\t\\t\\tif ((chr & p) !== 0) {\\r\\n\\t\\t\\t\\t\\tst = st[1];\\r\\n\\t\\t\\t\\t} else {\\r\\n\\t\\t\\t\\t\\tst = st[0];\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tif (typeof st === \"undefined\") {\\r\\n\\t\\t\\t\\t    st = null;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tif (st === null)break;\\r\\n\\t\\t\\t\\tif (Array.isArray(st))continue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tvar ac = this._dfaData[this.state].accept;\\r\\n\\t\\t\\tthis.state = /** @type {?number} */ (st);\\r\\n\\t\\t\\tif (ac !== -1) {\\r\\n\\t\\t\\t\\tthis.match = /** @type{number} */ (ac);\\r\\n\\t\\t\\t\\tthis.match_pos = pos;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t};\\r\\n##TABLES##\\r\\n##LABELS##\\r\\n\\tvar ACTIONS = (function(){\\r\\n\\t\\tvar PCB = {};\\r\\n\\t\\tvar actions = ##ACTIONS##;\\r\\n\\t\\treturn function (/** number */ act, /** Array<*> */ vstack, /** !PcbClass */ pcb){\\r\\n\\t\\t\\ttry{\\r\\n\\t\\t\\t\\tPCB = pcb;\\r\\n\\t\\t\\t\\treturn actions[act].apply(null,vstack);\\r\\n\\t\\t\\t}catch(e){\\r\\n\\t\\t\\t\\tif(e instanceof ReturnValue)return e.valueOf();\\r\\n\\t\\t\\t\\tthrow e;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t})();\\r\\n\\r\\n\\t/**\\r\\n\\t * @param {number} top\\r\\n\\t * @param {?number} la\\r\\n\\t * @returns {?number}\\r\\n     */\\r\\n\\tfunction get_act(top, la){\\t\\r\\n\\t\\tfor(var i = 0; i < act_tab[top].length; i+=2)\\r\\n\\t\\t\\tif(act_tab[top][i] === la)\\r\\n\\t\\t\\t\\treturn act_tab[top][i+1];\\r\\n\\t\\treturn null;\\r\\n\\t}\\r\\n\\tfunction get_goto(top, pop){\\t\\r\\n\\t\\tfor(var i = 0; i < goto_tab[top].length; i+=2)\\r\\n\\t\\t\\tif(goto_tab[top][i] === pop)\\r\\n\\t\\t\\t\\treturn goto_tab[top][i+1];\\r\\n\\t\\treturn null;\\r\\n\\t}\\r\\n\\r\\n\\t/**\\r\\n\\t * @param {!string} src\\r\\n\\t * @constructor\\r\\n     */\\r\\n\\tvar PcbClass = function(src) {\\r\\n\\t\\tthis.src = src;\\r\\n\\t};\\r\\n\\t/**\\r\\n\\t * @type {number}\\r\\n     */\\r\\n\\tPcbClass.prototype.line = 1;\\r\\n\\t/**\\r\\n\\t * @type {number}\\r\\n     */\\r\\n\\tPcbClass.prototype.column = 1;\\r\\n\\t/**\\r\\n\\t * @type {number}\\r\\n     */\\r\\n\\tPcbClass.prototype.offset = 0;\\r\\n\\t/**\\r\\n\\t * @type {number}\\r\\n     */\\r\\n\\tPcbClass.prototype.error_step = 0;\\r\\n\\t/**\\r\\n\\t * @type {string}\\r\\n     */\\r\\n\\tPcbClass.prototype.src = \"\";\\r\\n\\t/**\\r\\n\\t * @type {string}\\r\\n     */\\r\\n\\tPcbClass.prototype.att = \"\";\\r\\n\\t/**\\r\\n\\t * @type {?number}\\r\\n     */\\r\\n\\tPcbClass.prototype.la = null;\\r\\n\\t/**\\r\\n\\t * @type {?number}\\r\\n     */\\r\\n\\tPcbClass.prototype.act = null;\\r\\n\\t/**\\r\\n\\t * @returns {?number}\\r\\n     */\\r\\n\\tPcbClass.prototype.lex = function() {\\r\\n        var /** number */ start, /** number */ pos, /** number */ chr, actionResult;\\r\\n\\t\\tvar dfa = new DfaLex();\\r\\n\\t\\tvar loop = true;\\r\\n\\t\\twhile(loop){\\r\\n\\t\\t\\tdfa.match_pos = 0;\\r\\n\\t\\t\\tpos = this.offset + 1;\\r\\n\\t\\t\\tdo{\\r\\n\\t\\t\\t\\tpos--;\\r\\n\\t\\t\\t\\tdfa.state = 0;\\r\\n\\t\\t\\t\\tdfa.match = null;\\r\\n\\t\\t\\t\\tstart = pos;\\r\\n\\t\\t\\t\\tif(this.src.length <= start) {\\r\\n\\t\\t\\t\\t\\tthis.la = eof;\\r\\n\\t\\t\\t\\t\\treturn eof;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tdo{\\r\\n\\t\\t\\t\\t\\tchr = this.src.charCodeAt(pos);\\r\\n\\t\\t\\t\\t\\tdfa.exec(chr,pos);\\r\\n\\t\\t\\t\\t\\tif(dfa.state !== null)\\r\\n\\t\\t\\t\\t\\t\\tthis.accountChar(chr);\\r\\n\\t\\t\\t\\t\\tpos++;\\r\\n\\t\\t\\t\\t}while(dfa.state !== null);\\r\\n\\t\\t\\t}while(whitespace > -1 && dfa.match === whitespace);\\r\\n\\t\\t\\tif(dfa.match !== null){\\r\\n\\t\\t\\t\\tthis.att = this.src.slice(start, dfa.match_pos);\\r\\n\\t\\t\\t\\tthis.offset = dfa.match_pos;\\r\\n\\t\\t\\t\\tactionResult = TERMINAL_ACTIONS(this,dfa.match);\\r\\n\\t\\t\\t\\tif(dfa.state !== null)\\r\\n\\t\\t\\t\\t\\tthis.accountChar(chr);\\r\\n\\t\\t\\t\\tif(actionResult === Continue)\\r\\n\\t\\t\\t\\t\\tcontinue;\\r\\n\\t\\t\\t\\tthis.att = actionResult;\\r\\n\\t\\t\\t}else {\\r\\n\\t\\t\\t\\tthis.att = \"\";\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tloop = false;\\r\\n\\t\\t}\\r\\n\\t\\tthis.la = dfa.match;\\r\\n\\t\\treturn this.la;\\r\\n\\t};\\r\\n\\t/**\\r\\n\\t * @param {number} chr\\r\\n     */\\r\\n    PcbClass.prototype.accountChar = function(chr) {\\r\\n\\t\\tif( chr === 10 ){\\r\\n\\t\\t\\tthis.line++;\\r\\n\\t\\t\\tthis.column = 0;\\r\\n\\t\\t}\\r\\n\\t\\tthis.column++;\\r\\n\\t};\\r\\n\\tfunction parse(/** string */ src, err_off, err_la){\\r\\n\\t\\t/**\\r\\n\\t\\t * @type {!Array<number>}\\r\\n         */\\r\\n\\t\\tvar\\t\\tsstack\\t\\t\\t= [0];\\r\\n\\t\\t/**\\r\\n\\t\\t * @type {!Array<*>}\\r\\n         */\\r\\n\\t\\tvar\\t\\tvstack\\t\\t\\t= [0];\\r\\n\\t\\t/**\\r\\n\\t\\t * @type {number}\\r\\n         */\\r\\n\\t\\tvar \\terr_cnt\\t\\t\\t= 0;\\r\\n\\t\\t/**\\r\\n\\t\\t * @type {*}\\r\\n\\t\\t */\\r\\n\\t\\tvar\\t\\trval;\\r\\n\\t\\t/**\\r\\n\\t\\t * @type {?number}\\r\\n\\t\\t */\\r\\n\\t\\tvar\\t\\tact;\\r\\n\\t\\t/**\\r\\n\\t\\t * @type {number}\\r\\n\\t\\t */\\r\\n\\t\\tvar i = 0;\\r\\n\\r\\n\\t\\tvar PCB\\t= new PcbClass(src);\\r\\n\\t\\terr_off\\t= err_off || [];\\r\\n\\t\\terr_la = err_la || [];\\r\\n\\t\\tPCB.lex();\\r\\n\\t\\twhile(true){\\r\\n\\t\\t\\tPCB.act = get_act(sstack[0],PCB.la);\\r\\n\\t\\t\\tif(PCB.act === null && defact_tab[sstack[0]] >= 0)\\r\\n\\t\\t\\t\\tPCB.act = -defact_tab[sstack[0]];\\r\\n\\t\\t\\tif(PCB.act === null){//Parse error? Try to recover!\\r\\n\\t\\t\\t\\t//Report errors only when error_step is 0, and this is not a\\r\\n\\t\\t\\t\\t//subsequent error from a previous parse\\r\\n\\t\\t\\t\\tif(PCB.error_step === 0){\\r\\n\\t\\t\\t\\t\\terr_cnt++;\\r\\n\\t\\t\\t\\t\\terr_off.unshift(PCB.offset - PCB.att.length);\\r\\n\\t\\t\\t\\t\\terr_la.unshift([]);\\r\\n\\t\\t\\t\\t\\tfor(i = 0; i < act_tab[sstack[0]].length; i+=2)\\r\\n\\t\\t\\t\\t\\t\\terr_la[0].push(labels[act_tab[sstack[0]][i]]);\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t//Perform error recovery\\t\\t\\t\\r\\n\\t\\t\\t\\twhile(sstack.length > 1 && PCB.act === null){\\r\\n\\t\\t\\t\\t\\tsstack.shift();\\r\\n\\t\\t\\t\\t\\tvstack.shift();\\r\\n\\t\\t\\t\\t\\t//Try to shift on error token\\r\\n\\t\\t\\t\\t\\tPCB.act = get_act(sstack[0],PCB.la);\\r\\n\\t\\t\\t\\t\\tif(PCB.act === error_token){\\r\\n\\t\\t\\t\\t\\t\\tsstack.unshift(PCB.act);\\r\\n\\t\\t\\t\\t\\t\\tvstack.unshift(\"\");\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t//Is it better to leave the parser now?\\r\\n\\t\\t\\t\\tif(sstack.length > 1 && PCB.act !== null){\\r\\n\\t\\t\\t\\t\\t//Ok, now try to shift on the next tokens\\r\\n\\t\\t\\t\\t\\twhile(PCB.la !== eof){\\r\\n\\t\\t\\t\\t\\t\\tPCB.act = act_tab[sstack[0]][i+1];\\r\\n\\t\\t\\t\\t\\t\\tif(PCB.act != null)break;\\r\\n\\t\\t\\t\\t\\t\\twhile(PCB.lex() != null)PCB.offset++;\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tif(PCB.act === null || PCB.la === eof){\\r\\n\\t\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t//Try to parse the next three tokens successfully...\\r\\n\\t\\t\\t\\tPCB.error_step = 3;\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif(PCB.act > 0){//Shift\\r\\n\\t\\t\\t\\t//Parse tree generation\\r\\n\\t\\t\\t\\tsstack.unshift(PCB.act);\\r\\n\\t\\t\\t\\tvstack.unshift(PCB.att);\\r\\n\\t\\t\\t\\tPCB.lex();\\r\\n\\t\\t\\t\\t//Successfull shift and right beyond error recovery?\\r\\n\\t\\t\\t\\tif(PCB.error_step > 0)\\r\\n\\t\\t\\t\\t\\tPCB.error_step--;\\r\\n\\t\\t\\t}else{\\t//Reduce\\t\\r\\n\\t\\t\\t\\tact = -PCB.act;\\r\\n\\t\\t\\t\\t//vstack.unshift(vstack);\\r\\n\\t\\t\\t\\trval = ACTIONS(act,vstack,PCB);\\r\\n\\t\\t\\t\\t//vstack.shift();\\r\\n\\t\\t\\t\\tsstack.splice(0,pop_tab[act][1]);\\r\\n\\t\\t\\t\\tvstack.splice(0,pop_tab[act][1]);\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\tPCB.act = get_goto(sstack[0],pop_tab[act][0]);\\r\\n\\t\\t\\t\\t//Do some parse tree construction if desired\\r\\n\\t\\t\\t\\t//Goal symbol match?\\r\\n\\t\\t\\t\\tif(act === 0) break; //Don\\'t use PCB.act here!\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t//...and push it!\\r\\n\\t\\t\\t\\tsstack.unshift(PCB.act);\\r\\n\\t\\t\\t\\tvstack.unshift(rval);\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn err_cnt;\\r\\n\\t}\\r\\n\\treturn parse;\\r\\n})(##EOF##,##WHITESPACE##,##ERROR_TOKEN##);\\r\\n\\r\\n##FOOTER##\\r\\n';});\n\n",
    "/*\r\n * Universal module definition for a bitset implementation backed by\r\n * integer bitmasks.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/bitset/BitSet32',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccbitset = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {};\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Creates a new BitSet32 object.\r\n     * @classdesc A bitset implementation backed by integer bitmasks.\r\n     * @implements {jscc.bitset}\r\n     * @constructor\r\n     */\r\n    jscc.BitSet32 = function() {\r\n        var that = this;\r\n        /**\r\n         * @private\r\n         * @type {!Array<number>}\r\n         */\r\n        this._data = [];\r\n        /**\r\n         * @inheritDoc\r\n         * @param {!number} bit\r\n         * @param {boolean=} state\r\n         * @returns {!boolean}\r\n         */\r\n        this.set = function(bit, state) {\r\n            state = !!state;\r\n            that._data[bit >> 5] =\r\n                (state ? (that._data[bit >> 5] | (1 << (bit & 31))) : (that._data[bit >> 5] & ~(1 << (bit & 31))));\r\n            return state;\r\n        };\r\n        /**\r\n         * @inheritDoc\r\n         * @param {!number} bit\r\n         * @returns {!boolean}\r\n         */\r\n        this.get = function(bit) {\r\n            return ((that._data[bit >> 5] & (1 << (bit & 31))) != 0);\r\n        };\r\n        /**\r\n         * @inheritDoc\r\n         * @returns {!number}\r\n         */\r\n        this.count = function() {\r\n            var i, l, c = 0;\r\n            for (i = 0, l = that._data.length * 32; i < l; i++) {\r\n                if (that.get(i)) {\r\n                    c++;\r\n                }\r\n            }\r\n            return c;\r\n        };\r\n    };\r\n    /**\r\n     * Module containing BitSet32 implementation.  Returns a factory\r\n     * function to make Closure slightly happier elsewhere.\r\n     * @module {function(new:jscc.BitSet32)} jscc/bitset/BitSet32\r\n     */\r\n    return jscc.BitSet32;\r\n}));\r\n\n",
    "(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/enums/EDGE',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccEDGE = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        enums: {}\r\n    };\r\n    /**\r\n     * Identifies the type of an edge in an automation graph.\r\n     * @enum {number}\r\n     * @memberof jscc.enums\r\n     */\r\n    jscc.enums.EDGE = {\r\n        FREE: 0,\r\n        EPSILON: 1,\r\n        CHAR: 2\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Module containing EDGE enumeration.\r\n     * @module jscc/enums/EDGE\r\n     */\r\n    return jscc.enums.EDGE;\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for module containing the Nfa class.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/classes/Nfa',['require', '../enums/EDGE', '../bitset'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccNfa = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {function(new:jscc.classes.Nfa, NfaOptions=)}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {\r\n          classes: {}\r\n      };\r\n      var has = /** @type {hasObject} */ (require(\"../localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      var BitSet, tmpBitSet, EDGE = require(\"../enums/EDGE\");\r\n\r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              tmpBitSet = require(\"../bitset/BitSet32\");\r\n          } else {\r\n              tmpBitSet = require(\"../bitset\");\r\n          }\r\n      })();\r\n      BitSet = /** @type {function(new:jscc.bitset)} */ (tmpBitSet);\r\n\r\n      /**\r\n       * Creates a new Nfa instance.\r\n       * @classdesc Represents a state in a nondeterministic finite automata.\r\n       * @param {NfaOptions=} o - Optional overrides for default property values.\r\n       * @constructor\r\n       * @const\r\n       */\r\n      jscc.classes.Nfa = function(o) {\r\n          var p = o || {};\r\n          if (p.edge === EDGE.CHAR || p.edge === EDGE.FREE) {\r\n              this.edge = /** @type {!jscc.enums.EDGE} */ (p.edge);\r\n          }\r\n          if (typeof p.ccl === 'object' && p.ccl.hasOwnProperty(\"get\") && p.ccl.hasOwnProperty(\"set\") &&\r\n              p.ccl.hasOwnProperty(\"count\")) {\r\n              this.ccl = /** @type {!jscc.bitset} */ (p.ccl);\r\n          } else {\r\n              this.ccl = new BitSet();\r\n          }\r\n          if (typeof p.follow === 'number') {\r\n              this.follow = /** @type {!number} */ (p.follow);\r\n          }\r\n          if (typeof p.follow2 === 'number') {\r\n              this.follow2 = /** @type {!number} */ (p.follow2);\r\n          }\r\n          if (typeof p.accept === 'number') {\r\n              this.accept = /** @type {!number} */ (p.accept);\r\n          }\r\n          if (typeof p.weight === 'number') {\r\n              this.weight = /** @type {!number} */ (p.weight);\r\n          }\r\n      };\r\n\r\n      /**\r\n       * The type of edge in this NFA state.\r\n       * @type {!jscc.enums.EDGE}\r\n       */\r\n      jscc.classes.Nfa.prototype.edge = EDGE.EPSILON;\r\n      /**\r\n       * The bitset for this NFA state.\r\n       * @type {!jscc.bitset}\r\n       */\r\n      jscc.classes.Nfa.prototype.ccl = new BitSet();\r\n      /**\r\n       * Index of an immediately-following state.\r\n       * @type {!number}\r\n       */\r\n      jscc.classes.Nfa.prototype.follow = -1;\r\n      /**\r\n       * Index of a second following state.\r\n       * @type {!number}\r\n       */\r\n      jscc.classes.Nfa.prototype.follow2 = -1;\r\n      /**\r\n       * Index of an accepting state.\r\n       * @type {!number}\r\n       */\r\n      jscc.classes.Nfa.prototype.accept = -1;\r\n      /**\r\n       * The weight of this particular state.\r\n       * @type {!number}\r\n       */\r\n      jscc.classes.Nfa.prototype.weight = -1;\r\n\r\n      /**\r\n       * The module containing the Nfa class.\r\n       * @module jscc/classes/Nfa\r\n       */\r\n      return jscc.classes.Nfa;\r\n  }));\r\n\n",
    "/*\r\n * Universal module definition for NFAStates (previously in global.js).\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/nfaStates',['require', './bitset', './enums/EDGE', './classes/Nfa'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccnfaStates = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {function(new:jscc.NFAStates)}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {};\r\n      //>>excludeEnd(\"closure\");\r\n\r\n      var BitSet,\r\n          tmpBitSet,\r\n          EDGE = require(\"./enums/EDGE\"),\r\n          Nfa = /** @type {function(new:jscc.classes.Nfa, ?NfaOptions=)} */ (require(\"./classes/Nfa\"));\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      \r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              tmpBitSet = require(\"./bitset/BitSet32\");\r\n          } else {\r\n              tmpBitSet = require(\"./bitset\");\r\n          }\r\n      })();\r\n      BitSet = /** @type {function(new:jscc.bitset)} */ (tmpBitSet);\r\n\r\n      /**\r\n       * Module with a class that creates and stores Nfa objects.\r\n       * @module {jscc.NFAStates} jscc/nfaStates\r\n       * @constructor\r\n       */\r\n      jscc.NFAStates = function() {\r\n      };\r\n      /**\r\n       * The inner array of Nfa objects.\r\n       * @type {!Array<!jscc.classes.Nfa>}\r\n       */\r\n      jscc.NFAStates.prototype.value = [];\r\n      /**\r\n       * Finds an empty Nfa already in the value array if possible,\r\n       * and returns its index.  Otherwise, creates a new Nfa object\r\n       * and returns its index within the value array.\r\n       * @returns {number} The index of the new or recycled Nfa\r\n       * object within the value array.\r\n       */\r\n      jscc.NFAStates.prototype.create = function() {\r\n          var nfa;\r\n          var i;\r\n          // Use an empty item if available, else create a new one...\r\n          for (i = 0; i < this.value.length; i++) {\r\n              if (this.value[i].edge === EDGE.FREE) {\r\n                  break;\r\n              }\r\n          }\r\n\r\n          if (i == this.value.length) {\r\n              nfa = new Nfa();\r\n              this.value.push(nfa);\r\n          } else {\r\n              nfa = this.value[i];\r\n          }\r\n          nfa.edge = EDGE.EPSILON;\r\n          nfa.ccl = new BitSet();\r\n          nfa.accept = -1;\r\n          nfa.follow = -1;\r\n          nfa.follow2 = -1;\r\n          nfa.weight = -1;\r\n          return i;\r\n      };\r\n      return jscc.NFAStates;\r\n  }));\r\n\n",
    "(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/enums/SYM',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccSYM = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        enums: {}\r\n    };\r\n    /**\r\n     * Identifies a symbol as nonterminating or terminating.\r\n     * @enum {number}\r\n     * @memberof jscc.enums\r\n     */\r\n    jscc.enums.SYM = {\r\n        /**\r\n         * The symbol is nonterminating.\r\n         */\r\n        NONTERM: 0,\r\n        /**\r\n         * The symbol is terminating.\r\n         */\r\n        TERM: 1\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Module containing SYM enumeration.\r\n     * @module jscc/enums/SYM\r\n     */\r\n    return jscc.enums.SYM;\r\n}));\r\n\n",
    "(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/enums/ASSOC',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccASSOC = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        enums: {}\r\n    };\r\n    /**\r\n     * Indicates the associativity of a symbol.\r\n     * @enum {number}\r\n     * @memberof jscc.enums\r\n     */\r\n    jscc.enums.ASSOC = {\r\n        /**\r\n         * The associativity has not yet been set.\r\n         */\r\n        NONE: 0,\r\n        /**\r\n         * The symbol is left-associative.\r\n         */\r\n        LEFT: 1,\r\n        /**\r\n         * The symbol is right-associative.\r\n         */\r\n        RIGHT: 2,\r\n        /**\r\n         * The symbol is non-associative.\r\n         */\r\n        NOASSOC: 3\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Module containing ASSOC enumeration.\r\n     * @module jscc/enums/ASSOC\r\n     */\r\n    return jscc.enums.ASSOC;\r\n}));\r\n\n",
    "(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/enums/SPECIAL',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccSPECIAL = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        enums: {}\r\n    };\r\n    /**\r\n     * Identifies a special symbol.  Special symbols include\r\n     * end-of-file, whitespace, and error symbols.  Use\r\n     * NONE to indicate a non-special symbol.\r\n     * @enum {number}\r\n     * @memberof jscc.enums\r\n     */\r\n    jscc.enums.SPECIAL = {\r\n        /**\r\n         * Identifies a non-special symbol.\r\n         */\r\n        NONE: 0,\r\n        /**\r\n         * Identifies an end-of-file symbol.\r\n         */\r\n        EOF: 1,\r\n        /**\r\n         * Identifies a whitespace symbol.\r\n         */\r\n        WHITESPACE: 2,\r\n        /**\r\n         * Identifies an error symbol.\r\n         */\r\n        ERROR: 3\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Module containing SPECIAL enumeration.\r\n     * @module jscc/enums/SPECIAL\r\n     */\r\n    return jscc.enums.SPECIAL;\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for the Symbol class module.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/classes/Symbol',[\"require\", \"../enums/SYM\", \"../enums/ASSOC\", \"../enums/SPECIAL\"], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccSymbol = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {function(new:jscc.classes.Symbol, SymbolOptions=)}\r\n   */\r\n  function(require, others) {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        classes: {}\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n\r\n    var SYM = require(\"../enums/SYM\"),\r\n        ASSOC = require(\"../enums/ASSOC\"),\r\n        SPECIAL = require(\"../enums/SPECIAL\");\r\n\r\n    /**\r\n     * Creates a new Symbol instance.\r\n     * @classdesc Represents a symbol in the grammar.\r\n     * @param {SymbolOptions=} o - Optional overrides for default property values.\r\n     * @constructor\r\n     * @memberof {jscc.classes}\r\n     * @const\r\n     */\r\n    jscc.classes.Symbol = function(o) {\r\n        var p = o || {};\r\n        if (typeof p.id === 'number') {\r\n            this.id = p.id;\r\n        }\r\n        if (p.kind === SYM.TERM) {\r\n            this.kind = p.kind;\r\n        }\r\n        if (typeof p.label === 'string') {\r\n            this.label = p.label;\r\n        }\r\n        if (Array.isArray(p.prods)) {\r\n            this.prods = /** @type {!Array<number>} */ (p.prods);\r\n        }\r\n        if (Array.isArray(p.first)) {\r\n            this.first = /** @type {!Array<number>} */ (p.first);\r\n        }\r\n        if (p.associativity === ASSOC.LEFT ||\r\n            p.associativity === ASSOC.RIGHT ||\r\n            p.associativity === ASSOC.NOASSOC) {\r\n            this.associativity = p.associativity;\r\n        }\r\n        if (typeof p.level === 'number') {\r\n            this.level = p.level;\r\n        }\r\n        if (typeof p.code === 'string') {\r\n            this.code = p.code;\r\n        }\r\n        if (p.special === SPECIAL.EOF ||\r\n            p.special === SPECIAL.ERROR ||\r\n            p.special === SPECIAL.WHITESPACE) {\r\n            this.special = p.special;\r\n        }\r\n        if (typeof p.nullable === 'boolean') {\r\n            this.nullable = p.nullable;\r\n        }\r\n        if (typeof p.defined === 'boolean') {\r\n            this.defined = p.defined;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * The unique identifier for this symbol.  Generally, this value should match the symbol's index within the\r\n     * global symbol array.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Symbol.prototype.id = -1;\r\n    /**\r\n     * Whether the symbol is terminating or nonterminating.\r\n     * @type {!jscc.enums.SYM}\r\n     */\r\n    jscc.classes.Symbol.prototype.kind = SYM.NONTERM;\r\n    /**\r\n     * The text of this symbol.\r\n     * @type {!string}\r\n     */\r\n    jscc.classes.Symbol.prototype.label = \"\";\r\n    /**\r\n     * The set of productions associated with this symbol, as identified by\r\n     * their id values within the global productions array.\r\n     * @type {!Array<number>}\r\n     */\r\n    jscc.classes.Symbol.prototype.prods = [];\r\n    /**\r\n     * The \"first\" array.\r\n     * @type {!Array<number>}\r\n     */\r\n    jscc.classes.Symbol.prototype.first = [];\r\n    /**\r\n     * The associativity of this symbol.\r\n     * @type {!jscc.enums.ASSOC}\r\n     */\r\n    jscc.classes.Symbol.prototype.associativity = ASSOC.NONE;\r\n    /**\r\n     * The level of this symbol.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Symbol.prototype.level = 0;\r\n    /**\r\n     * The code that this symbol produces.\r\n     * @type {!string}\r\n     */\r\n    jscc.classes.Symbol.prototype.code = \"\";\r\n    /**\r\n     * The type of special symbol, if any, that this symbol represents.\r\n     * @type {!jscc.enums.SPECIAL}\r\n     */\r\n    jscc.classes.Symbol.prototype.special = SPECIAL.NONE;\r\n    /**\r\n     * Whether this symbol is nullable.\r\n     * @type {!boolean}\r\n     */\r\n    jscc.classes.Symbol.prototype.nullable = false;\r\n    /**\r\n     * Whether this symbol is defined.\r\n     * @type {!boolean}\r\n     */\r\n    jscc.classes.Symbol.prototype.defined = false;\r\n\r\n    /**\r\n     * The module containing the Symbol class.\r\n     * @module {function(new:jscc.classes.Symbol, SymbolOptions=)} jscc/classes/Symbol\r\n     */\r\n    return jscc.classes.Symbol;\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for Production class.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/classes/Production',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccProduction = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        classes: {}\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Creates a new Production instance.\r\n     * @classdesc Represents a production created from the grammar.\r\n     * @param {ProductionOptions=} o - Overrides for default property values.\r\n     * @constructor\r\n     * @memberof {jscc.classes}\r\n     * @const\r\n     */\r\n    jscc.classes.Production = function(o) {\r\n        var p = o || {};\r\n        if (typeof p.id === 'number') {\r\n            this.id = /** @type {number} */ (p.id);\r\n        }\r\n        if (typeof p.lhs === 'number') {\r\n            this.lhs = /** @type {number} */ (p.lhs);\r\n        }\r\n        if (typeof p.rhs !== 'undefined' && Array.isArray(p.rhs)) {\r\n            this.rhs = /** @type {!Array<!number>} */ (p.rhs);\r\n        }\r\n        if (typeof p.level === 'number') {\r\n            this.level = /** @type {number} */ (p.level);\r\n        }\r\n        if (typeof p.code === 'string') {\r\n            this.code = /** @type {string} */ (p.code);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * The unique identifier of this production, which should\r\n     * match its index within the global productions array.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Production.prototype.id = -1;\r\n    /**\r\n     * The id of the symbol representing the left-hand side of\r\n     * this production.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Production.prototype.lhs = -1;\r\n    /**\r\n     * The id values of the symbols representing the right-hand side\r\n     * of this production.\r\n     * @type {!Array<!number>}\r\n     */\r\n    jscc.classes.Production.prototype.rhs = [];\r\n    /**\r\n     * The level of this production.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Production.prototype.level = 0;\r\n    /**\r\n     * The code associated with this production.\r\n     * @type {!string}\r\n     */\r\n    jscc.classes.Production.prototype.code = \"\";\r\n\r\n    /**\r\n     * Contains the Production class.\r\n     * @module {function(new:jscc.classes.Production, ProductionOptions=)} jscc/classes/Production\r\n     */\r\n    return jscc.classes.Production;\r\n}));\r\n\n",
    "(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/enums/EXEC',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccEXEC = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        enums: {}\r\n    };\r\n    /**\r\n     * Indicates whether the executable environment is a\r\n     * console-based Javascript engine or a web environment.\r\n     * @enum {number}\r\n     * @memberof jscc.enums\r\n     */\r\n    jscc.enums.EXEC = {\r\n        /**\r\n         * A console-based Javascript engine is in use.\r\n         */\r\n        CONSOLE: 0,\r\n        /**\r\n         * A web-browser-based Javascript engine is in use.\r\n         */\r\n        WEB: 1\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Module containing EXEC enumeration.\r\n     * @module jscc/enums/EXEC\r\n     */\r\n    return jscc.enums.EXEC;\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for global variables in JS/CC.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/global',['require', 'text!./template/parser-driver-js.txt', './nfaStates', './classes/Symbol',\r\n                './classes/Production', './enums/SYM',\r\n                './enums/SPECIAL', './enums/EXEC'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccglobal =\r\n            factory(function(mod) {\r\n                var parts = mod.split(\"/\");\r\n                var last = parts[parts.length - 1];\r\n                if (/js\\.txt$/.test(last)) {\r\n                    return root.jsccDEFAULT_PARSER_DRIVER;\r\n                }\r\n                return root[\"jscc\" + last];\r\n            });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.global}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {};\r\n      var has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      var defaultParserDriver,\r\n          nfaStates = /** @type {function(new:jscc.NFAStates)} */ (require(\"./nfaStates\")),\r\n          Symbol = /** @type {function(new:jscc.classes.Symbol, ?SymbolOptions=)} */ (require(\"./classes/Symbol\")),\r\n          Production = /** @type {function(new:jscc.classes.Production)} */ (require(\"./classes/Production\")),\r\n          SYM = require(\"./enums/SYM\"),\r\n          SPECIAL = require(\"./enums/SPECIAL\"),\r\n          EXEC = require(\"./enums/EXEC\");\r\n\r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              try {\r\n                  defaultParserDriver = /** @type {string} */ (require(\"text!./template/parser-driver-js.txt\"));\r\n              } catch (e) {\r\n                  if (typeof fs !== \"undefined\" && typeof path !== \"undefined\") {\r\n                      defaultParserDriver = /** @type {string} */\r\n                          (fs.readFileSync(path.join(__dirname, \"template\", \"parser-driver-js.txt\"), \"utf8\"));\r\n                  } else if (typeof require === \"function\") {\r\n                      defaultParserDriver = /** @type {string} */\r\n                          (require(\"fs\")\r\n                              .readFileSync(require(\"path\").join(__dirname, \"template\", \"parser-driver-js.txt\"),\r\n                                            \"utf8\"));\r\n                  }\r\n              }\r\n          } else {\r\n              defaultParserDriver = /** @type {string} */ (require(\"text!./template/parser-driver-js.txt\"));\r\n          }\r\n      })();\r\n\r\n      /**\r\n       * Constructs the singleton instance of jscc.global.\r\n       * @classdesc The namespace to which the Global properties and objects belong.\r\n       * @const\r\n       * @constructor\r\n       */\r\n      jscc.global = function() {\r\n          this.nfa_states = new nfaStates();\r\n          var goalSymbol = new Symbol();\r\n          goalSymbol.kind = SYM.NONTERM;\r\n          goalSymbol.special = SPECIAL.NONE;\r\n          goalSymbol.label = \"\";\r\n          goalSymbol.id = 0;\r\n          goalSymbol.defined = true;\r\n\r\n          var errorResyncSymbol = new Symbol();\r\n          errorResyncSymbol.kind = SYM.TERM;\r\n          errorResyncSymbol.special = SPECIAL.ERROR;\r\n          errorResyncSymbol.label = \"ERROR_RESYNC\";\r\n          errorResyncSymbol.id = 1;\r\n          errorResyncSymbol.defined = true;\r\n          this.symbols = [goalSymbol, errorResyncSymbol];\r\n\r\n          var p = new Production();\r\n          p.lhs = 0;\r\n          p.rhs = [];\r\n          p.code = \"%% = %1;\";\r\n          this.symbols[0].prods.push(0);\r\n          this.productions = [p];\r\n          this.whitespace_token = -1;\r\n          this.file = \"\";\r\n          this.errors = 0;\r\n          this.warnings = 0;\r\n          this.shifts = 0;\r\n          this.reduces = 0;\r\n          this.gotos = 0;\r\n          this.regex_weight = 0;\r\n          this.code_head = \"\";\r\n          this.code_foot = \"\";\r\n\r\n          // /**\r\n          //  * @const\r\n          //  * @type {string}\r\n          //  */\r\n          // this.JSCC_VERSION = module.config().version;\r\n\r\n          /**\r\n           * @const\r\n           * @type {string}\r\n           */\r\n          this.DEFAULT_DRIVER = defaultParserDriver;\r\n\r\n          /**\r\n           * The default code contents for a production.\r\n           * @const\r\n           * @type {string}\r\n           */\r\n          this.DEF_PROD_CODE = \"%% = %1;\";\r\n\r\n          /**\r\n           * The minimum lexer-state index.\r\n           * @type {number}\r\n           * @const\r\n           */\r\n          this.MIN_CHAR = 0;\r\n\r\n          /**\r\n           * One greater than the maximum lexer-state index.\r\n           * @type {number}\r\n           * @const\r\n           */\r\n          this.MAX_CHAR = 255;\r\n      };\r\n\r\n      /**\r\n       * The global symbol array.\r\n       * @type {!Array<!jscc.classes.Symbol>}\r\n       */\r\n      jscc.global.prototype.symbols = [];\r\n\r\n      /**\r\n       * The global production array.\r\n       * @type {!Array<!jscc.classes.Production>}\r\n       */\r\n      jscc.global.prototype.productions = [];\r\n\r\n      /**\r\n       * The global state array.\r\n       * @type {!Array<!jscc.classes.State>}\r\n       */\r\n      jscc.global.prototype.states = [];\r\n\r\n\r\n      /**\r\n       * The global NfaStates object.\r\n       * @type {jscc.NFAStates}\r\n       */\r\n      jscc.global.prototype.nfa_states = null;\r\n\r\n      /**\r\n       * The global array of DFA states.\r\n       * @type {!Array<!jscc.classes.Dfa>}\r\n       */\r\n      jscc.global.prototype.dfa_states = [];\r\n\r\n      /**\r\n       * Contains the {@link jscc.global.Symbol#id} value of the\r\n       * whitespace token, or -1 if the whitespace token\r\n       * has not yet been created.\r\n       * @type {!number}\r\n       */\r\n      jscc.global.prototype.whitespace_token = -1;\r\n\r\n      /**\r\n       * A string that the parser builds to replace the\r\n       * ##HEADER## token in the template file.\r\n       * @type {!string}\r\n       */\r\n      jscc.global.prototype.code_head = \"\";\r\n\r\n      /**\r\n       * A string that the parser builds to replace the\r\n       * ##FOOTER## token in the template file.\r\n       * @type {!string}\r\n       */\r\n      jscc.global.prototype.code_foot = \"\";\r\n\r\n      /**\r\n       * The filename of the grammar file currently in-process,\r\n       * or the empty string when reading from a non-file input\r\n       * source.\r\n       * @type {!string}\r\n       */\r\n      jscc.global.prototype.file = \"\";\r\n\r\n      /**\r\n       * A running count of errors.\r\n       * @type {!number}\r\n       */\r\n      jscc.global.prototype.errors = 0;\r\n\r\n      /**\r\n       * A running count of warnings.\r\n       * @type {!number}\r\n       */\r\n      jscc.global.prototype.warnings = 0;\r\n\r\n      /**\r\n       * A running count of shift operations.\r\n       * @type {!number}\r\n       */\r\n      jscc.global.prototype.shifts = 0;\r\n\r\n      /**\r\n       * A running count of reduce operations.\r\n       * @type {!number}\r\n       */\r\n      jscc.global.prototype.reduces = 0;\r\n\r\n      /**\r\n       * A running count of goto operations.\r\n       * @type {!number}\r\n       */\r\n      jscc.global.prototype.gotos = 0;\r\n\r\n      /**\r\n       * The execution mode for this program.\r\n       * @type {!jscc.enums.EXEC}\r\n       */\r\n      jscc.global.prototype.exec_mode = EXEC.CONSOLE;\r\n\r\n      /**\r\n       * A value that the parser uses to keep track of\r\n       * associativity levels to assign to the\r\n       * {@link jscc.classes.Symbol#level} property.\r\n       * @type {!number}\r\n       */\r\n      jscc.global.prototype.assoc_level = 1;\r\n\r\n      /**\r\n       * A value that the parser uses to track the\r\n       * value assigned to the {@link jscc.classes.Nfa#weight}\r\n       * property.\r\n       * @type {!number}\r\n       */\r\n      jscc.global.prototype.regex_weight = 0;\r\n\r\n      /**\r\n       * When running in an environment without obvious IO,\r\n       * contains a function with one parameter that accepts\r\n       * the output.\r\n       * @type {?function(string):void}\r\n       */\r\n      jscc.global.prototype.write_output_function = null;\r\n\r\n      /**\r\n       * When running in an environment without obvious IO,\r\n       * contains a function that returns the grammar as\r\n       * a string.\r\n       * @type {?function():!string}\r\n       */\r\n      jscc.global.prototype.read_all_input_function = null;\r\n\r\n      /**\r\n       * When running in an environment without obvious IO,\r\n       * contains a function that returns the template as\r\n       * a string.\r\n       * @type {?function():!string}\r\n       */\r\n      jscc.global.prototype.read_template_function = null;\r\n\r\n      /**\r\n       * When running in an environment without obvious IO,\r\n       * contains a function that receives debugging output.\r\n       * @type {?function(string):void}\r\n       */\r\n      jscc.global.prototype.write_debug_function = null;\r\n\r\n      /**\r\n       * The global module.\r\n       * @module {jscc.global} jscc/global\r\n       */\r\n      return new jscc.global();\r\n  }));\r\n\n",
    "/*\r\n * Universal module definition for the Node version of the io module.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/io/ioNode',['require', '../global'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccio = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.io}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {};\r\n      //>>excludeEnd(\"closure\");\r\n      var global = require(\"../global\"), thisUtil, thisFs, thisPath;\r\n\r\n      //>>excludeStart(\"amdclean\", pragmas.amdclean);\r\n      /*\r\n      //>>excludeEnd(\"amdclean\");\r\n      thisUtil = util;\r\n      thisFs = fs;\r\n      thisPath = path;\r\n      //>>excludeStart(\"amdclean\", pragmas.amdclean);\r\n      */\r\n      thisUtil = require('util');\r\n      thisFs = require('fs');\r\n      thisPath = require('path');\r\n      //>>excludeEnd(\"amdclean\");\r\n\r\n      /**\r\n       * @constructor\r\n       * @implements {jscc.io}\r\n       */\r\n      jscc.ioNode = function() {\r\n      };\r\n\r\n      /**\r\n       * @inheritDoc\r\n       */\r\n      jscc.ioNode.prototype.read_all_input = function(options) {\r\n          var filename = \"\";\r\n          var async = false;\r\n          /**\r\n           * @param {string} chunk\r\n           * @param {string=} encoding\r\n           * @param {Function=} next\r\n           */\r\n          var chunkCallback = function(chunk, encoding, next) {\r\n          };\r\n          var endCallback = function() {\r\n          };\r\n          if (options) {\r\n              if (typeof options === \"string\") {\r\n                  filename = options;\r\n              } else if (typeof options === \"function\") {\r\n                  // amdclean\r\n                  chunkCallback = /** @type {function(string)} */ (options);\r\n                  async = true;\r\n              } else if (typeof options === \"object\") {\r\n                  if (typeof options.filename === \"string\") {\r\n                      filename = options.filename;\r\n                  }\r\n                  if (typeof options.chunkCallback === \"function\") {\r\n                      chunkCallback = options.chunkCallback;\r\n                      async = true;\r\n                  }\r\n                  if (typeof options.endCallback === \"function\") {\r\n                      endCallback = options.endCallback;\r\n                      async = true;\r\n                  }\r\n              }\r\n          }\r\n\r\n          if (filename !== \"\" && !thisPath.isAbsolute(filename)) {\r\n              filename = thisPath.join(process.cwd(), filename);\r\n          }\r\n\r\n          if (filename !== \"\" && !async) {\r\n              return thisFs.readFileSync(filename, \"utf-8\");\r\n          }\r\n\r\n          if (filename === \"\" && !async) {\r\n              /**\r\n               * @type {string}\r\n               */\r\n              var result = \"\";\r\n              var done = false;\r\n              process.stdin.setEncoding(\"utf-8\");\r\n              process.stdin.on('end', function() {\r\n                  done = true;\r\n              });\r\n              process.stdin.on('data', function(chunk, encoding, next) {\r\n                  result += \"\" + chunk;\r\n                  next();\r\n              });\r\n              while (!done) {\r\n\r\n              }\r\n              return /** @type {string} */ (result);\r\n          }\r\n\r\n          if (filename !== \"\") {\r\n              thisFs.readFile(filename, \"utf-8\", chunkCallback);\r\n          } else {\r\n              process.stdin.setEncoding(\"utf-8\");\r\n              process.stdin.on(\"end\", endCallback);\r\n              process.stdin.on(\"data\", chunkCallback);\r\n          }\r\n      };\r\n\r\n      /**\r\n       * @inheritDoc\r\n       */\r\n      jscc.ioNode.prototype.read_template = function(options) {\r\n          var filename = null;\r\n          var async = false;\r\n\r\n          /**\r\n           * @param {string} chunk\r\n           * @param {string=} encoding\r\n           * @param {Function=} next\r\n           */\r\n          var chunkCallback = function(chunk, encoding, next) {\r\n          };\r\n\r\n          if (options) {\r\n              if (typeof options === \"string\") {\r\n                  filename = options;\r\n              } else if (typeof options === \"function\") {\r\n                  chunkCallback = options.chunkCallback;\r\n                  async = true;\r\n              } else if (typeof options === \"object\") {\r\n                  if (typeof options.filename === \"string\") {\r\n                      filename = options.filename;\r\n                  }\r\n                  if (typeof options.chunkCallback === \"function\") {\r\n                      chunkCallback = options.chunkCallback;\r\n                      async = true;\r\n                  }\r\n              }\r\n          }\r\n\r\n          if (filename === null) {\r\n              if (async) {\r\n                  chunkCallback(global.DEFAULT_DRIVER, \"utf-8\", function() {\r\n                  });\r\n              } else {\r\n                  return global.DEFAULT_DRIVER;\r\n              }\r\n          } else {\r\n              if (!thisPath.isAbsolute(filename)) {\r\n                  filename = thisPath.join(process.cwd(), filename);\r\n              }\r\n              if (!async) {\r\n                  return thisFs.readFileSync(filename, \"utf-8\");\r\n              }\r\n              thisFs.readFile(filename, \"utf-8\", chunkCallback);\r\n          }\r\n      };\r\n\r\n      /**\r\n       * @inheritDoc\r\n       */\r\n      jscc.ioNode.prototype.write_output = function(options) {\r\n          var text = \"\";\r\n          var destination = \"\";\r\n          var async = false;\r\n          var callback = function() {\r\n          };\r\n\r\n          if (options) {\r\n              if (typeof options === \"string\") {\r\n                  text = options;\r\n              } else if (typeof options === \"object\") {\r\n                  if (typeof options.text === \"string\") {\r\n                      text = options.text;\r\n                  }\r\n                  if (typeof options.destination === \"string\") {\r\n                      destination = options.destination;\r\n                  }\r\n                  if (typeof options.callback === \"function\") {\r\n                      callback = options.callback;\r\n                      async = true;\r\n                  }\r\n              }\r\n          }\r\n\r\n          if (destination !== \"\" && !async) {\r\n              thisFs.writeFileSync(destination, text, \"utf-8\");\r\n          } else if (destination === \"\" && !async) {\r\n              process.stdout.write(text, \"utf-8\");\r\n          } else if (destination !== \"\") {\r\n              thisFs.writeFile(destination, text, \"utf-8\", callback);\r\n          } else {\r\n              process.stdout.on('finish', callback);\r\n              process.stdout.write(text, \"utf-8\");\r\n              process.stdout.end();\r\n          }\r\n      };\r\n\r\n      /**\r\n       * @inheritDoc\r\n       */\r\n      jscc.ioNode.prototype.write_debug = function(text) {\r\n          thisUtil.puts(text);\r\n      };\r\n\r\n      /**\r\n       * @inheritDoc\r\n       */\r\n      jscc.ioNode.prototype.exit = function(exitCode) {\r\n          process.exit(exitCode);\r\n      };\r\n\r\n      /**\r\n       * @module jscc/io/io\r\n       */\r\n      return new jscc.ioNode();\r\n  }));\r\n\r\n\n",
    "(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/enums/LOG_LEVEL',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccLOG_LEVEL = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        enums: {}\r\n    };\r\n    /**\r\n     * Specifies the minimum logging level.\r\n     * @enum {number}\r\n     * @memberof jscc.enums\r\n     */\r\n    jscc.enums.LOG_LEVEL = {\r\n        /**\r\n         * Log all messages.\r\n         */\r\n        TRACE: 0,\r\n        /**\r\n         * Log debug messages and higher.\r\n         */\r\n        DEBUG: 1,\r\n        /**\r\n         * Log info messages and higher.\r\n         */\r\n        INFO: 2,\r\n        /**\r\n         * Log warning messages and higher.\r\n         */\r\n        WARN: 3,\r\n        /**\r\n         * Log error and fatal messages.\r\n         */\r\n        ERROR: 4,\r\n        /**\r\n         * Log only fatal messages.\r\n         */\r\n        FATAL: 5\r\n    };\r\n    // Export from Closure, as this enumeration may be used in the\r\n    // mainOptions typedef.\r\n    jscc.enums.LOG_LEVEL['TRACE'] = jscc.enums.LOG_LEVEL.TRACE;\r\n    jscc.enums.LOG_LEVEL['DEBUG'] = jscc.enums.LOG_LEVEL.DEBUG;\r\n    jscc.enums.LOG_LEVEL['INFO'] = jscc.enums.LOG_LEVEL.INFO;\r\n    jscc.enums.LOG_LEVEL['WARN'] = jscc.enums.LOG_LEVEL.WARN;\r\n    jscc.enums.LOG_LEVEL['ERROR'] = jscc.enums.LOG_LEVEL.ERROR;\r\n    jscc.enums.LOG_LEVEL['FATAL'] = jscc.enums.LOG_LEVEL.FATAL;\r\n    jscc.enums['LOG_LEVEL'] = jscc.enums.LOG_LEVEL;\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Module containing LOG_LEVEL enumeration.\r\n     * @module jscc/enums/LOG_LEVEL\r\n     */\r\n    return jscc.enums.LOG_LEVEL;\r\n}));\r\n\n",
    "/**\r\n * Universal module definition for util.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/util',['require', './enums/LOG_LEVEL'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccutil =\r\n            factory(function(mod) {\r\n                return root[\"jscc\" + mod.split(\"/\").pop()];\r\n            });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.util}\r\n   */\r\n  function(require, others) {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {};\r\n    //>>excludeEnd(\"closure\");\r\n    var LOG_LEVEL = require(\"./enums/LOG_LEVEL\");\r\n\r\n    /**\r\n     * Utility functions.\r\n     * @module {jscc.util} jscc/util\r\n     */\r\n    /**\r\n     * @constructor\r\n     */\r\n    jscc.util = function() {\r\n    };\r\n    jscc.util.prototype = {\r\n        /**\r\n         * Unions the content of two arrays.\r\n         * @template T\r\n         * @param {!Array<T>} dest_array - The destination array.\r\n         * @param {!Array<T>} src_array - The source array.  Elements\r\n         * that are not in dest_array but in src_array are copied\r\n         * to dest_array.\r\n         * @returns {!Array<T>} The destination array, the union of\r\n         * both input arrays.\r\n         * @author Jan Max Meyer\r\n         * @memberof jscc.util\r\n         */\r\n        union: function(dest_array, src_array) {\r\n            var i, j;\r\n            for (i = 0; i < src_array.length; i++) {\r\n                for (j = 0; j < dest_array.length; j++) {\r\n                    if (src_array[i] == dest_array[j]) {\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                if (j == dest_array.length) {\r\n                    dest_array.push(src_array[i]);\r\n                }\r\n            }\r\n\r\n            return dest_array;\r\n        },\r\n\r\n        /**\r\n         * Gets the string name (in all caps) of the\r\n         * {@link jscc.enums.LOG_LEVEL} value provided.\r\n         * @param {jscc.enums.LOG_LEVEL} level - The\r\n         * LOG_LEVEL value\r\n         * @returns {string} The name of the log level in all caps\r\n         * @memberof jscc.Util\r\n         */\r\n        log_level_string: function(level) {\r\n            switch (level) {\r\n                case LOG_LEVEL.FATAL:\r\n                    return \"FATAL\";\r\n                case LOG_LEVEL.ERROR:\r\n                    return \"ERROR\";\r\n                case LOG_LEVEL.WARN:\r\n                    return \"WARN\";\r\n                case LOG_LEVEL.INFO:\r\n                    return \"INFO\";\r\n                case LOG_LEVEL.DEBUG:\r\n                    return \"DEBUG\";\r\n                case LOG_LEVEL.TRACE:\r\n                    return \"TRACE\";\r\n                default:\r\n                    return \"\";\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Gets the {@link jscc.enums.LOG_LEVEL} value\r\n         * corresponding to the provided string.  If the string\r\n         * is empty or invalid, returns\r\n         * {@link jscc.enums.LOG_LEVEL.WARN} as a default.\r\n         * @param {string} levelString - The name of the log level.\r\n         * @returns {jscc.enums.LOG_LEVEL} The corresponding\r\n         * LOG_LEVEL value, defaulting to WARN.\r\n         */\r\n        log_level_value: function(levelString) {\r\n            switch ((levelString || \"\").trim().toUpperCase()) {\r\n                case \"FATAL\":\r\n                    return LOG_LEVEL.FATAL;\r\n                case \"ERROR\":\r\n                    return LOG_LEVEL.ERROR;\r\n                case \"WARN\":\r\n                    return LOG_LEVEL.WARN;\r\n                case \"INFO\":\r\n                    return LOG_LEVEL.INFO;\r\n                case \"DEBUG\":\r\n                    return LOG_LEVEL.DEBUG;\r\n                case \"TRACE\":\r\n                    return LOG_LEVEL.TRACE;\r\n                default:\r\n                    return LOG_LEVEL.WARN;\r\n            }\r\n        }\r\n    };\r\n    return new jscc.util();\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for first.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/first',['require', './global', './util', './enums/SYM'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccfirst = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.first}\r\n   */\r\n  function(require, others) {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {};\r\n    //>>excludeEnd(\"closure\");\r\n    var global = /** @type {jscc.global} */ (require(\"./global\")),\r\n        util = /** @type {jscc.util} */ (require(\"./util\")),\r\n        SYM = require(\"./enums/SYM\");\r\n\r\n    /**\r\n     * Creates an instance of jscc.first.\r\n     * @classdesc Functions relating to FIRST-sets.\r\n     * @constructor\r\n     */\r\n    jscc.first = function() {\r\n    };\r\n    /**\r\n     * Computes the FIRST-sets for all non-terminals of the grammar.\r\n     * Must be called right after the parse and before the table\r\n     * generation methods are performed.\r\n     * @author Jan Max Meyer\r\n     */\r\n    jscc.first.prototype.first = function() {\r\n        var cnt = 0,\r\n            old_cnt = 0;\r\n        var nullable;\r\n\r\n        do {\r\n            old_cnt = cnt;\r\n            cnt = 0;\r\n\r\n            for (var i = 0; i < global.symbols.length; i++) {\r\n                if (global.symbols[i].kind == SYM.NONTERM) {\r\n                    for (var j = 0; j < global.symbols[i].prods.length; j++) {\r\n                        nullable = false;\r\n                        for (var k = 0; k < global.productions[global.symbols[i].prods[j]].rhs.length; k++) {\r\n                            global.symbols[i].first = util.union(global.symbols[i].first,\r\n                                                                 global.symbols[global.productions[global.symbols[i].prods[j]].rhs[k]].first);\r\n\r\n                            nullable =\r\n                                global.symbols[global.productions[global.symbols[i].prods[j]].rhs[k]].nullable;\r\n                            if (!nullable) {\r\n                                break;\r\n                            }\r\n                        }\r\n                        cnt += global.symbols[i].first.length;\r\n\r\n                        if (k == global.productions[global.symbols[i].prods[j]].rhs.length) {\r\n                            nullable = true;\r\n                        }\r\n\r\n                        if (nullable) {\r\n                            global.symbols[i].nullable = true;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } while (cnt != old_cnt);\r\n    };\r\n\r\n    /**\r\n     * Returns all terminals that are possible from a given position\r\n     * of a production's right-hand side.\r\n     * @param {jscc.classes.Item} item - Item to which the lookaheads are added.\r\n     * @param {jscc.classes.Production} p - The production where the computation\r\n     * should be done.\r\n     * @param {number} begin - The offset of the symbol where the\r\n     * rhs_first() begins its calculations.\r\n     * @returns {boolean} True if the whole rest of the right-hand side\r\n     * can be null (epsilon), else false.\r\n     * @author Jan Max Meyer\r\n     */\r\n    jscc.first.prototype.rhs_first = function(item, p, begin) {\r\n        var i;\r\n        for (i = begin; i < p.rhs.length; i++) {\r\n            item.lookahead = util.union(item.lookahead, global.symbols[p.rhs[i]].first);\r\n\r\n            if (!global.symbols[p.rhs[i]].nullable) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    /**\r\n     * Functions relating to FIRST-sets.\r\n     * @module {jscc.first} jscc/first\r\n     * @requires module:jscc/global\r\n     * @requires module:jscc/util\r\n     */\r\n    return new jscc.first();\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for logging in Node.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/log/logNode',['require', '../global', '../enums/LOG_LEVEL'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jscclog = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.log}\r\n   */\r\n  function(require, others) {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {};\r\n    //>>excludeEnd(\"closure\");\r\n    var global = /** @type {jscc.global} */ (require(\"../global\")),\r\n        LOG_LEVEL = require(\"../enums/LOG_LEVEL\");\r\n\r\n    /**\r\n     * @constructor\r\n     * @implements {jscc.log}\r\n     */\r\n    jscc.logNode = function() {\r\n        this._level = LOG_LEVEL.WARN;\r\n    };\r\n\r\n    /**\r\n     * @type {jscc.enums.LOG_LEVEL}\r\n     * @private\r\n     */\r\n    jscc.logNode.prototype._level = LOG_LEVEL.WARN;\r\n\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    jscc.logNode.prototype.fatal = function(msg) {\r\n        console.error(msg);\r\n        global.errors++;\r\n    };\r\n\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    jscc.logNode.prototype.error = function(msg) {\r\n        if (this._level <= LOG_LEVEL.ERROR) {\r\n            console.error(msg);\r\n        }\r\n        global.errors++;\r\n    };\r\n\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    jscc.logNode.prototype.warn = function(msg) {\r\n        if (this._level <= LOG_LEVEL.WARN) {\r\n            console.warn(msg);\r\n        }\r\n        global.warnings++;\r\n    };\r\n\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    jscc.logNode.prototype.info = function(msg) {\r\n        if (this._level <= LOG_LEVEL.INFO) {\r\n            console.info(msg);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    jscc.logNode.prototype.debug = function(msg) {\r\n        if (this._level <= LOG_LEVEL.DEBUG) {\r\n            console.log(msg);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    jscc.logNode.prototype.trace = function(msg) {\r\n        if (this._level <= LOG_LEVEL.TRACE) {\r\n            console.trace(msg);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    jscc.logNode.prototype.setLevel = function(level) {\r\n        this._level = level;\r\n    };\r\n\r\n    /**\r\n     * @module jscc/log/log\r\n     */\r\n    return new jscc.logNode();\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for module containing State class.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/classes/State',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccState = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        classes: {}\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Creates a new State instance.\r\n     * @classdesc Represents a state machine entry.\r\n     * @param {StateOptions=} o - Optional overrides for default property values.\r\n     * @constructor\r\n     * @memberof {jscc.classes}\r\n     */\r\n    jscc.classes.State = function(o) {\r\n        var p = o || {};\r\n        if (Array.isArray(p.kernel)) {\r\n            this.kernel = /** @type {!Array<!jscc.classes.Item>} */ (p.kernel);\r\n        }\r\n        if (Array.isArray(p.epsilon)) {\r\n            this.epsilon = /** @type {!Array<!jscc.classes.Item>} */ (p.epsilon);\r\n        }\r\n        if (typeof p.def_act === 'number') {\r\n            this.def_act = /** @type {!number} */ (p.def_act);\r\n        }\r\n        if (typeof p.done === 'boolean') {\r\n            this.done = /** @type {!boolean} */ (p.done);\r\n        }\r\n        if (typeof p.closed === 'boolean') {\r\n            this.closed = /** @type {!boolean} */ (p.closed);\r\n        }\r\n        if (Array.isArray(p.actionrow)) {\r\n            this.actionrow = /** @type {!Array<!jscc.classes.TableEntry>} */ (p.actionrow);\r\n        }\r\n        if (Array.isArray(p.gotorow)) {\r\n            this.gotorow = /** @type {!Array<!jscc.classes.TableEntry>} */ (p.gotorow);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * An array of items forming the kernel of this state.\r\n     * @type {!Array<!jscc.classes.Item>}\r\n     */\r\n    jscc.classes.State.prototype.kernel = [];\r\n    /**\r\n     * An array of items forming the epsilon of this state.\r\n     * @type {!Array<!jscc.classes.Item>}\r\n     */\r\n    jscc.classes.State.prototype.epsilon = [];\r\n    /**\r\n     * A number representing a defined action.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.State.prototype.def_act = 0;\r\n    /**\r\n     * Whether this state has been fully processed.\r\n     * @type {!boolean}\r\n     */\r\n    jscc.classes.State.prototype.done = false;\r\n    /**\r\n     * Whether this state is closed.\r\n     * @type {!boolean}\r\n     */\r\n    jscc.classes.State.prototype.closed = false;\r\n    /**\r\n     * Table entries representing actions for this state.\r\n     * @type {!Array<!jscc.classes.TableEntry>}\r\n     */\r\n    jscc.classes.State.prototype.actionrow = [];\r\n    /**\r\n     * Table entries representing goto operations for this state.\r\n     * @type {!Array<!jscc.classes.TableEntry>}\r\n     */\r\n    jscc.classes.State.prototype.gotorow = [];\r\n\r\n    /**\r\n     * The module containing the State class.\r\n     * @module jscc/classes/State\r\n     */\r\n    return jscc.classes.State;\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for module containing the Item class.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/classes/Item',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccItem = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        classes: {}\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Creates a new Item instance.\r\n     * @classdesc Contains lookahead information associated with a production.\r\n     * @param {ItemOptions=} o - Optional overrides for default property values.\r\n     * @constructor\r\n     * @const\r\n     */\r\n    jscc.classes.Item = function(o) {\r\n        var p = o || {};\r\n        if (typeof p.prod === 'number') {\r\n            this.prod = /** @type {!number} */ (p.prod);\r\n        }\r\n        if (typeof p.dot_offset === 'number') {\r\n            this.dot_offset = /** @type {!number} */ (p.dot_offset);\r\n        }\r\n        if (typeof p.lookahead !== 'undefined' && Array.isArray(p.lookahead)) {\r\n            this.lookahead = /** @type {!Array<!number>} */ (p.lookahead);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * The index within the global productions array of the production associated with this item.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Item.prototype.prod = -1;\r\n    /**\r\n     * The dot offset.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Item.prototype.dot_offset = 0;\r\n    /**\r\n     * An array of lookahead indexes.\r\n     * @type {!Array<!number>}\r\n     */\r\n    jscc.classes.Item.prototype.lookahead = [];\r\n\r\n    /**\r\n     * The module containing the Item class.\r\n     * @module {function(new:jscc.classes.Item, ItemOptions=)} jscc/classes/Item\r\n     */\r\n    return jscc.classes.Item;\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for TableEntry class.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/classes/TableEntry',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccTableEntry = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        classes: {}\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Creates a new TableEntry instance.\r\n     * @classdesc An object used in the {@link jscc.classes.State#actionrow} and {@link jscc.classes.State#gotorow}\r\n     *     arrays to indicate how symbols and actions are paired for that state.\r\n     * @param {number} sym - A number representing a {@link jscc.classes.Symbol#id} value.\r\n     * @param {number} act - A number representing the action associated with the symbol.\r\n     * @constructor\r\n     * @memberof {jscc.classes}\r\n     * @const\r\n     */\r\n    jscc.classes.TableEntry = function(sym, act) {\r\n        this.symbol = sym;\r\n        this.action = act;\r\n    };\r\n\r\n    /**\r\n     * The id value of the Symbol with which this entry is associated.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.TableEntry.prototype.symbol = -1;\r\n    /**\r\n     * A number representing the action associated with the symbol.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.TableEntry.prototype.action = -1;\r\n\r\n    /**\r\n     * The module containing the TableEntry class.\r\n     * @module jscc/classes/TableEntry\r\n     */\r\n    return jscc.classes.TableEntry;\r\n}));\r\n\n",
    "(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/enums/MODE_GEN',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccMODE_GEN = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        enums: {}\r\n    };\r\n    /**\r\n     * Indicates an output mode for the parser.\r\n     * @readonly\r\n     * @enum {number}\r\n     * @memberof jscc.enums\r\n     */\r\n    jscc.enums.MODE_GEN = {\r\n        /**\r\n         * Output is plain text.\r\n         */\r\n        TEXT: 0,\r\n        /**\r\n         * Output is JavaScript code.\r\n         */\r\n        JS: 1,\r\n        /**\r\n         * Output is HTML-formatted.\r\n         */\r\n        HTML: 2\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Module containing MODE_GEN enumeration.\r\n     * @module jscc/enums/MODE_GEN\r\n     */\r\n    return jscc.enums.MODE_GEN;\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for debug.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/debug',['require', './global', './io/io', './enums/MODE_GEN', './enums/SYM', './enums/ASSOC'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccdebug = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.debug}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {};\r\n      var has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      var io,\r\n          global = /** @type {jscc.global} */ (require(\"./global\")),\r\n          MODE_GEN = require(\"./enums/MODE_GEN\"),\r\n          SYM = require(\"./enums/SYM\"),\r\n          ASSOC = require(\"./enums/ASSOC\");\r\n\r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              io = /** @type {jscc.io} */ (require(\"./io/ioNode\"));\r\n          } else {\r\n              io = /** @type {jscc.io} */ (require(\"./io/io\"));\r\n          }\r\n      })();\r\n\r\n\r\n      /**\r\n       * Debugging-output functions.\r\n       * @namespace jscc.debug\r\n       */\r\n      /**\r\n       * Debugging-output functions.\r\n       * @module {jscc.debug} jscc/debug\r\n       * @requires module:jscc/global\r\n       * @requires module:jscc/io/io\r\n       * @constructor\r\n       */\r\n      jscc.debug = function() {\r\n      };\r\n      jscc.debug.prototype = {\r\n          /**\r\n           * Prints debugging output related to the current value of the\r\n           * {@link jscc.global.symbols} array.\r\n           * @param {jscc.enums.MODE_GEN} mode - The current output mode.\r\n           * @memberof jscc.debug\r\n           */\r\n          print_symbols: function(mode) {\r\n              if (mode == MODE_GEN.HTML) {\r\n                  io.write_debug(\"<table class=\\\"debug\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\");\r\n                  io.write_debug(\"<tr>\");\r\n                  io.write_debug(\"<td class=\\\"tabtitle\\\" colspan=\\\"3\\\">Symbols Overview</td>\");\r\n                  io.write_debug(\"</tr>\");\r\n                  io.write_debug(\"<tr>\");\r\n                  io.write_debug(\"<td class=\\\"coltitle\\\">Symbol</td>\");\r\n                  io.write_debug(\"<td class=\\\"coltitle\\\">Type</td>\");\r\n                  io.write_debug(\"</tr>\");\r\n              } else if (mode == MODE_GEN.TEXT) {\r\n                  io.write_debug(\"--- Symbol Dump ---\");\r\n              }\r\n\r\n              for (var i = 0; i < global.symbols.length; i++) {\r\n                  if (mode == MODE_GEN.HTML) {\r\n                      io.write_debug(\"<tr>\");\r\n\r\n                      io.write_debug(\"<td>\");\r\n                      io.write_debug(global.symbols[i].label);\r\n                      io.write_debug(\"</td>\");\r\n\r\n                      io.write_debug(\"<td>\");\r\n                      io.write_debug(((global.symbols[i].kind == SYM.NONTERM) ? \"Non-terminal\" : \"Terminal\"));\r\n                      io.write_debug(\"</td>\");\r\n                  } else if (mode == MODE_GEN.TEXT) {\r\n                      var output = \"\";\r\n\r\n                      output = global.symbols[i].label;\r\n                      for (var j = output.length; j < 20; j++) {\r\n                          output += \" \";\r\n                      }\r\n\r\n                      output += ((global.symbols[i].kind == SYM.NONTERM) ? \"Non-terminal\" : \"Terminal\");\r\n\r\n                      if (global.symbols[i].kind == SYM.TERM) {\r\n                          for (var j = output.length; j < 40; j++) {\r\n                              output += \" \";\r\n                          }\r\n                          output += global.symbols[i].level + \"/\";\r\n\r\n                          switch (global.symbols[i].associativity) {\r\n                              case ASSOC.NONE:\r\n                                  output += \"^\";\r\n                                  break;\r\n                              case ASSOC.LEFT:\r\n                                  output += \"<\";\r\n                                  break;\r\n                              case ASSOC.RIGHT:\r\n                                  output += \">\";\r\n                                  break;\r\n                          }\r\n                      }\r\n\r\n                      io.write_debug(output);\r\n                  }\r\n              }\r\n\r\n              if (mode == MODE_GEN.HTML) {\r\n                  io.write_debug(\"</table>\");\r\n              } else if (mode == MODE_GEN.TEXT) {\r\n                  io.write_debug(\"\");\r\n              }\r\n          },\r\n\r\n          /**\r\n           * Prints debugging output related to the grammar being processed,\r\n           * using information from the {@link jscc.global.symbols} and\r\n           * {@link jscc.global.productions} arrays.\r\n           * @param {jscc.enums.MODE_GEN} mode - The current output mode.\r\n           * @memberof jscc.debug\r\n           */\r\n          print_grammar: function(mode) {\r\n              if (mode == MODE_GEN.HTML) {\r\n                  io.write_debug(\"<table class=\\\"debug\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\");\r\n                  io.write_debug(\"<tr>\");\r\n                  io.write_debug(\"<td class=\\\"tabtitle\\\" colspan=\\\"3\\\">Grammar Overview</td>\");\r\n                  io.write_debug(\"</tr>\");\r\n                  io.write_debug(\"<tr>\");\r\n                  io.write_debug(\"<td class=\\\"coltitle\\\">Left-hand side</td>\");\r\n                  io.write_debug(\"<td class=\\\"coltitle\\\">FIRST-set</td>\");\r\n                  io.write_debug(\"<td class=\\\"coltitle\\\">Right-hand side</td>\");\r\n                  io.write_debug(\"</tr>\");\r\n\r\n                  for (var i = 0; i < global.symbols.length; i++) {\r\n                      io.write_debug(\"<tr>\");\r\n\r\n                      if (global.symbols[i].kind == SYM.NONTERM) {\r\n                          io.write_debug(\"<td>\");\r\n                          io.write_debug(global.symbols[i].label);\r\n                          io.write_debug(\"</td>\");\r\n\r\n                          io.write_debug(\"<td>\");\r\n                          for (var j = 0; j < global.symbols[i].first.length; j++) {\r\n                              io.write_debug(\"<b>\" + global.symbols[global.symbols[i].first[j]].label + \"</b>\");\r\n                          }\r\n                          io.write_debug(\"</td>\");\r\n\r\n                          io.write_debug(\"<td>\");\r\n                          for (var j = 0; j < global.symbols[i].prods.length; j++) {\r\n                              for (var k = 0; k < global.productions[global.symbols[i].prods[j]].rhs.length; k++) {\r\n                                  if (global.symbols[global.productions[global.symbols[i].prods[j]].rhs[k]].kind ==\r\n                                      SYM.TERM) {\r\n                                      io.write_debug(\"<b>\" +\r\n                                                     global.symbols[global.productions[global.symbols[i].prods[j]].rhs[k]].label +\r\n                                                     \"</b>\");\r\n                                  } else {\r\n                                      io.write_debug(\" \" +\r\n                                                     global.symbols[global.productions[global.symbols[i].prods[j]].rhs[k]].label +\r\n                                                     \" \");\r\n                                  }\r\n                              }\r\n                              io.write_debug(\"<br />\");\r\n                          }\r\n                          io.write_debug(\"</td>\");\r\n                      }\r\n                      io.write_debug(\"</tr>\");\r\n                  }\r\n                  io.write_debug(\"</table>\");\r\n              } else if (mode == MODE_GEN.TEXT) {\r\n                  var output = \"\";\r\n\r\n                  for (var i = 0; i < global.symbols.length; i++) {\r\n                      if (global.symbols[i].kind == SYM.NONTERM) {\r\n                          output += global.symbols[i].label + \" {\";\r\n\r\n                          for (var j = 0; j < global.symbols[i].first.length; j++) {\r\n                              output += \" \" + global.symbols[global.symbols[i].first[j]].label + \" \";\r\n                          }\r\n\r\n                          output += \"}\\n\";\r\n\r\n                          for (var j = 0; j < global.symbols[i].prods.length; j++) {\r\n                              output += \"\\t\";\r\n                              for (var k = 0; k < global.productions[global.symbols[i].prods[j]].rhs.length; k++) {\r\n                                  if (global.symbols[global.productions[global.symbols[i].prods[j]].rhs[k]].kind ==\r\n                                      SYM.TERM) {\r\n                                      output += \"#\" +\r\n                                                global.symbols[global.productions[global.symbols[i].prods[j]].rhs[k]].label +\r\n                                                \" \";\r\n                                  } else {\r\n                                      output +=\r\n                                          global.symbols[global.productions[global.symbols[i].prods[j]].rhs[k]].label +\r\n                                          \" \";\r\n                                  }\r\n                              }\r\n                              output += \"\\n\";\r\n                          }\r\n                      }\r\n                  }\r\n\r\n                  io.write_debug(output);\r\n              }\r\n          },\r\n\r\n          /**\r\n           * Prints debugging information relating to the provided array\r\n           * of Item objects.\r\n           * @param {jscc.enums.MODE_GEN} mode - The current output mode.\r\n           * @param {string} label - A label for the debugging output.\r\n           * @param {Array<!jscc.classes.Item>} item_set - The items for which to print information.\r\n           * @memberof jscc.debug\r\n           */\r\n          print_item_set: function(mode, label, item_set) {\r\n              var i, j;\r\n\r\n              if (item_set.length == 0) {\r\n                  return;\r\n              }\r\n\r\n              if (mode == MODE_GEN.HTML) {\r\n                  io.write_debug(\"<table class=\\\"debug\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\");\r\n                  io.write_debug(\"<tr>\");\r\n                  io.write_debug(\"<td class=\\\"tabtitle\\\" colspan=\\\"2\\\">\" + label + \"</td>\");\r\n                  io.write_debug(\"</tr>\");\r\n                  io.write_debug(\"<tr>\");\r\n                  io.write_debug(\"<td class=\\\"coltitle\\\" width=\\\"35%\\\">Lookahead</td>\");\r\n                  io.write_debug(\"<td class=\\\"coltitle\\\" width=\\\"65%\\\">Production</td>\");\r\n                  io.write_debug(\"</tr>\");\r\n              } else if (mode == MODE_GEN.TEXT) {\r\n                  io.write_debug(\"--- \" + label + \" ---\");\r\n              }\r\n\r\n              for (i = 0; i < item_set.length; i++) {\r\n                  if (mode == MODE_GEN.HTML) {\r\n                      io.write_debug(\"<tr>\");\r\n                      io.write_debug(\"<td>\");\r\n                      for (j = 0; j < item_set[i].lookahead.length; j++) {\r\n                          io.write_debug(\"<b>\" + global.symbols[item_set[i].lookahead[j]].label + \"</b> \");\r\n                      }\r\n                      io.write_debug(\"</td>\");\r\n\r\n                      io.write_debug(\"<td>\");\r\n                      io.write_debug(global.symbols[global.productions[item_set[i].prod].lhs].label + \" -&gt; \");\r\n                      for (j = 0; j < global.productions[item_set[i].prod].rhs.length; j++) {\r\n                          if (j == item_set[i].dot_offset) {\r\n                              io.write_debug(\".\");\r\n                          }\r\n\r\n                          if (global.symbols[global.productions[item_set[i].prod].rhs[j]].kind == SYM.TERM) {\r\n                              io.write_debug(\"<b>\" + global.symbols[global.productions[item_set[i].prod].rhs[j]].label +\r\n                                             \"</b>\");\r\n                          } else {\r\n                              io.write_debug(\r\n                                  \" \" + global.symbols[global.productions[item_set[i].prod].rhs[j]].label + \" \");\r\n                          }\r\n                      }\r\n\r\n                      if (j == item_set[i].dot_offset) {\r\n                          io.write_debug(\".\");\r\n                      }\r\n                      io.write_debug(\"</td>\");\r\n                      io.write_debug(\"</tr>\");\r\n                  } else if (mode == MODE_GEN.TEXT) {\r\n                      var out = \"\";\r\n\r\n                      out += global.symbols[global.productions[item_set[i].prod].lhs].label;\r\n\r\n                      for (j = out.length; j < 20; j++) {\r\n                          out += \" \";\r\n                      }\r\n\r\n                      out += \" -> \";\r\n\r\n                      for (j = 0; j < global.productions[item_set[i].prod].rhs.length; j++) {\r\n                          if (j == item_set[i].dot_offset) {\r\n                              out += \".\";\r\n                          }\r\n                          if (global.symbols[global.productions[item_set[i].prod].rhs[j]].kind == SYM.TERM) {\r\n                              out += \" #\" + global.symbols[global.productions[item_set[i].prod].rhs[j]].label + \" \";\r\n                          } else {\r\n                              out += \" \" + global.symbols[global.productions[item_set[i].prod].rhs[j]].label + \" \";\r\n                          }\r\n                      }\r\n\r\n                      if (j == item_set[i].dot_offset) {\r\n                          out += \".\";\r\n                      }\r\n\r\n                      for (j = out.length; j < 60; j++) {\r\n                          out += \" \";\r\n                      }\r\n                      out += \"{ \";\r\n\r\n                      for (j = 0; j < item_set[i].lookahead.length; j++) {\r\n                          out += \"#\" + global.symbols[item_set[i].lookahead[j]].label + \" \";\r\n                      }\r\n\r\n                      out += \"}\";\r\n\r\n                      io.write_debug(out);\r\n                  }\r\n              }\r\n\r\n              if (mode == MODE_GEN.HTML) {\r\n                  io.write_debug(\"</table>\");\r\n              }\r\n          }\r\n      };\r\n      return new jscc.debug();\r\n  }));\r\n\n",
    "/*\r\n * Universal module definition for tabgen.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/tabgen',['require', './global', './first', './util', './log/log', './classes/State', './classes/Item',\r\n                './classes/TableEntry', './classes/Symbol', './enums/SPECIAL', './enums/ASSOC', './enums/SYM',\r\n                './enums/MODE_GEN', './enums/EXEC', './debug'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jscctabgen = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.tabgen}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {};\r\n      var has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      var log;\r\n      var global = require(\"./global\");\r\n      var first = require(\"./first\");\r\n      var util = require(\"./util\");\r\n\r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              log = require(\"./log/logNode\");\r\n          } else {\r\n              log = require(\"./log/log\");\r\n          }\r\n      })();\r\n      \r\n      var State = /** @type {function(new:jscc.classes.State, StateOptions=)} */ (require(\"./classes/State\"));\r\n      var Item = /** @type {function(new:jscc.classes.Item, ItemOptions=)} */ (require(\"./classes/Item\"));\r\n      var TableEntry = /** @type {function(new:jscc.classes.TableEntry, number, number)} */ (require(\r\n          \"./classes/TableEntry\"));\r\n      var Symbol = /** @type {function(new:jscc.classes.Symbol, SymbolOptions=)} */ (require(\"./classes/Symbol\"));\r\n      var SPECIAL = require(\"./enums/SPECIAL\");\r\n      var ASSOC = require(\"./enums/ASSOC\");\r\n      var SYM = require(\"./enums/SYM\");\r\n      var EXEC = require(\"./enums/EXEC\");\r\n      var MODE_GEN = require(\"./enums/MODE_GEN\");\r\n      var debugFunctions = require(\"./debug\");\r\n\r\n      /**\r\n       * Contains table-generation functions.\r\n       * @module {jscc.tabgen} jscc/tabgen\r\n       * @requires module:jscc/global\r\n       * @requires module:jscc/first\r\n       * @requires module:jscc/util\r\n       * @requires module:jscc/log/log\r\n       * @constructor\r\n       */\r\n      jscc.tabgen = function() {\r\n      };\r\n\r\n      /**\r\n       * Creates a new {@link jscc.classes.State} object, adds it to the global states array,\r\n       * and returns the new {@link jscc.classes.State} object.\r\n       * @returns {!jscc.classes.State} The newly-created, default State object.\r\n       */\r\n      jscc.tabgen.prototype.create_state = function() {\r\n          var state = new State({\r\n              kernel: [],\r\n              epsilon: [],\r\n              actionrow: [],\r\n              gotorow: [],\r\n              done: false,\r\n              closed: false,\r\n              def_act: 0\r\n          });\r\n          global.states.push(state);\r\n          return state;\r\n      };\r\n\r\n      /**\r\n       * Creates and returns a new Item instance using the specified parameter\r\n       * as the {@link jscc.classes.Item#prod} value.\r\n       * @param {number} p - The prod value of the new Item instance.\r\n       * @returns {!jscc.classes.Item} The new Item instance.\r\n       */\r\n      jscc.tabgen.prototype.create_item = function(p) {\r\n          return new Item({\r\n              prod: p,\r\n              dot_offset: 0,\r\n              lookahead: []\r\n          });\r\n      };\r\n\r\n      /**\r\n       * If row already contains a {@link jscc.classes.TableEntry} with the given symbol,\r\n       * returns row.  Otherwise, adds a new TableEntry with the\r\n       * provided symbol and action to the row, then returns the row.\r\n       * @param {Array<!jscc.classes.TableEntry>} row - The row to check for the\r\n       * given symbol.\r\n       * @param {number} sym - The symbol for which to check, or if not found,\r\n       * the symbol that becomes part of the new TableEntry.\r\n       * @param {number} act - The action that becomes part of the new\r\n       * TableEntry, should one be created.\r\n       * @returns {!Array<!jscc.classes.TableEntry>} The row parameter with the possible\r\n       * addition of a new TableEntry if no TableEntry with the given symbol\r\n       * was already in the row.\r\n       */\r\n      jscc.tabgen.prototype.add_table_entry = function(row, sym, act) {\r\n          for (var i = 0; i < row.length; i++) {\r\n              if (row[i].symbol == sym) {\r\n                  return row;\r\n              }\r\n          }\r\n          row.push(new TableEntry(sym, act));\r\n          return row;\r\n      };\r\n\r\n      /**\r\n       * If row already contains a {@link jscc.classes.TableEntry} with the given symbol,\r\n       * updates the {@link jscc.classes.TableEntry#action}\r\n       * property of that TableEntry to match the given action.  If the\r\n       * symbol is not present, no changes are made to the row.  Either way,\r\n       * the row is returned.\r\n       * @param {Array<!jscc.classes.TableEntry>} row - The row to check for the given\r\n       * symbol.\r\n       * @param {number} sym - The symbol for which to check.\r\n       * @param {number} act - The action to which to update a TableEntry\r\n       * containing the given symbol.\r\n       * @returns {!Array<!jscc.classes.TableEntry>} The row parameter, possibly with one\r\n       * modified TableEntry.\r\n       */\r\n      jscc.tabgen.prototype.update_table_entry = function(row, sym, act) {\r\n          var i;\r\n          for (i = 0; i < row.length; i++) {\r\n              if (row[i].symbol == sym) {\r\n                  row[i].action = act;\r\n                  return row;\r\n              }\r\n          }\r\n          return row;\r\n      };\r\n\r\n      /**\r\n       * If row contains a {@link jscc.classes.TableEntry} with the given symbol, removes that\r\n       * symbol's TableEntry and returns the row.  Otherwise, simply\r\n       * returns the row.\r\n       * @param {Array<!jscc.classes.TableEntry>} row - The row to check for the given\r\n       * symbol.\r\n       * @param {number} sym - The symbol for which to check and, if found,\r\n       * delete.\r\n       * @returns {!Array<!jscc.classes.TableEntry>} The row parameter, possibly with one\r\n       * fewer TableEntry.\r\n       */\r\n      jscc.tabgen.prototype.remove_table_entry = function(row, sym) {\r\n          for (var i = 0; i < row.length; i++) {\r\n              if (row[i].symbol == sym) {\r\n                  row.splice(i, 1);\r\n                  return row;\r\n              }\r\n          }\r\n          return row;\r\n      };\r\n\r\n      /**\r\n       * If row contains a TableEntry with the given symbol, returns that\r\n       * TableEntry's {@link jscc.classes.TableEntry#action} property.\r\n       * Otherwise, returns void(0).\r\n       * @param {Array<!jscc.classes.TableEntry>} row - The row to check for the given\r\n       * symbol.\r\n       * @param {number} sym - The symbol for which to check.\r\n       * @returns {(number|void)}\r\n       */\r\n      jscc.tabgen.prototype.get_table_entry = function(row, sym) {\r\n          for (var i = 0; i < row.length; i++) {\r\n              if (row[i].symbol == sym) {\r\n                  return row[i].action;\r\n              }\r\n          }\r\n          return void(0);\r\n      };\r\n\r\n      /**\r\n       * Returns the index of the first {@link jscc.global.states}\r\n       * array entry whose {@link jscc.global.State#done} property\r\n       * is false, or -1 if no such entry exists.\r\n       * @returns {number} The index of the first undone state, or -1 if\r\n       * no undone states exist.\r\n       */\r\n      jscc.tabgen.prototype.get_undone_state = function() {\r\n          for (var i = 0; i < global.states.length; i++) {\r\n              if (global.states[i].done == false) {\r\n                  return i;\r\n              }\r\n          }\r\n          return -1;\r\n      };\r\n\r\n      /**\r\n       * Compares two {@link jscc.classes.Item} objects for\r\n       * sorting purposes by comparing their\r\n       * {@link jscc.classes.Item#prod} values.\r\n       * @param {!jscc.classes.Item} a - The first Item\r\n       * @param {!jscc.classes.Item} b - The second Item\r\n       * @returns {number} Less than zero if a.prod < b.prod;\r\n       * greater than zero if a.prod > b.prod; zero if\r\n       * a.prod equals b.prod.\r\n       */\r\n      jscc.tabgen.prototype.sort_partition = function(a, b) {\r\n          return a.prod - b.prod;\r\n      };\r\n\r\n      /**\r\n       * Returns the index within the {@link jscc.global.symbols}\r\n       * array of the first symbol with the given label, SYM, and\r\n       * SPECIAL values.  If no such symbol is found, returns -1.\r\n       * @param {string} label - The symbol label for which to search.\r\n       * @param {jscc.enums.SYM} kind - Whether the symbol is terminating or\r\n       * nonterminating.\r\n       * @param {jscc.enums.SPECIAL=} special - The type of special symbol, if any.\r\n       * Defaults to NONE.\r\n       * @returns {number} - The index within the symbols array of the\r\n       * first matching symbol, or -1 if there are no matching symbols.\r\n       */\r\n      jscc.tabgen.prototype.find_symbol = function(label, kind, special) {\r\n          if (!special) {\r\n              special = SPECIAL.NONE;\r\n          }\r\n          for (var i = 0; i < global.symbols.length; i++) {\r\n              if (global.symbols[i].label.toString() == label.toString()\r\n                  && global.symbols[i].kind == kind\r\n                  && global.symbols[i].special == special) {\r\n                  return i;\r\n              }\r\n          }\r\n          return -1;\r\n      };\r\n\r\n      /**\r\n       * Creates a new symbol (if necessary) and appends it to the\r\n       * global symbol array.  If the symbol does not already exist,\r\n       * the instance of that symbol is returned only.\r\n       * @param {string} label - The label of the symbol.  In case\r\n       * of kind == SYM.NONTERM, the label is the name of the\r\n       * right-hand side, else it is the regular expression for the\r\n       * terminal symbol.\r\n       * @param {jscc.enums.SYM} kind - Type of the symbol.  This can be\r\n       * SYM.NONTERM or SYM.TERM.\r\n       * @param {jscc.enums.SPECIAL} special - Specialized symbols.\r\n       * @returns {number} The id property of the particular Symbol\r\n       * object.\r\n       * @author Jan Max Meyer\r\n       */\r\n      jscc.tabgen.prototype.create_symbol = function(label, kind, special) {\r\n          var exists;\r\n\r\n          if ((exists = this.find_symbol(label, kind, special)) > -1) {\r\n              return global.symbols[exists].id;\r\n          }\r\n\r\n          var sym = new Symbol({\r\n              label: label,\r\n              kind: kind,\r\n              prods: [],\r\n              nullable: false,\r\n              id: global.symbols.length,\r\n              code: \"\",\r\n              associativity: ASSOC.NONE,\r\n              level: 0,\r\n              special: special,\r\n              defined: false,\r\n              first: []\r\n          });\r\n\r\n          if (kind == SYM.TERM) {\r\n              sym.first.push(sym.id);\r\n          }\r\n\r\n          global.symbols.push(sym);\r\n          return sym.id;\r\n      };\r\n\r\n      /**\r\n       * Checks if two item sets contain the same items.  The\r\n       * items may only differ in their lookahead.\r\n       * @param {Array<!jscc.classes.Item>} set1 - Set to be compared with\r\n       * set2.\r\n       * @param {Array<!jscc.classes.Item>} set2 - Set to be compared with\r\n       * set1.\r\n       * @returns {boolean} True if equal, else false.\r\n       * @author Jan Max Meyer\r\n       */\r\n      jscc.tabgen.prototype.item_set_equal = function(set1, set2) {\r\n          var i, j, cnt = 0;\r\n\r\n          if (set1.length != set2.length) {\r\n              return false;\r\n          }\r\n\r\n          for (i = 0; i < set1.length; i++) {\r\n              for (j = 0; j < set2.length; j++) {\r\n                  if (set1[i].prod == set2[j].prod &&\r\n                      set1[i].dot_offset == set2[j].dot_offset) {\r\n                      cnt++;\r\n                      break;\r\n                  }\r\n              }\r\n          }\r\n          return cnt == set1.length;\r\n      };\r\n\r\n      /**\r\n       *\r\n       * @param {Array<!jscc.classes.Item>} seed\r\n       * @param {Array<!jscc.classes.Item>} closure\r\n       * @returns {number}\r\n       * @author Jan Max Meyer\r\n       */\r\n      jscc.tabgen.prototype.close_items = function(seed, closure) {\r\n          var i, j, k;\r\n          var cnt = 0, tmp_cnt = 0;\r\n          var item;\r\n\r\n          for (i = 0; i < seed.length; i++) {\r\n              if (seed[i].dot_offset < global.productions[seed[i].prod].rhs.length) {\r\n                  if (global.symbols[global.productions[seed[i].prod].rhs[seed[i].dot_offset]].kind ==\r\n                      SYM.NONTERM) {\r\n                      for (j = 0;\r\n                           j < global.symbols[global.productions[seed[i].prod].rhs[seed[i].dot_offset]].prods.length;\r\n                           j++) {\r\n                          for (k = 0; k < closure.length; k++) {\r\n                              if (closure[k].prod ==\r\n                                  global.symbols[global.productions[seed[i].prod].rhs[seed[i].dot_offset]].prods[j]) {\r\n                                  break;\r\n                              }\r\n                          }\r\n\r\n                          if (k == closure.length) {\r\n                              item =\r\n                                  this.create_item(\r\n                                      global.symbols[global.productions[seed[i].prod].rhs[seed[i].dot_offset]].prods[j]);\r\n                              closure.push(item);\r\n\r\n                              cnt++;\r\n                          }\r\n\r\n                          tmp_cnt = closure[k].lookahead.length;\r\n                          if (first.rhs_first(closure[k], global.productions[seed[i].prod], seed[i].dot_offset + 1)) {\r\n                              closure[k].lookahead = util.union(closure[k].lookahead, seed[i].lookahead);\r\n                          }\r\n\r\n                          cnt += closure[k].lookahead.length - tmp_cnt;\r\n                      }\r\n                  }\r\n              }\r\n          }\r\n\r\n          return cnt;\r\n      };\r\n\r\n      /**\r\n       * @summary Implements the LALR(1) closure algorithm.\r\n       * @description A short overview:\r\n       *  1. Closing a closure_set of Item objects from a given\r\n       *     kernel seed (this includes the kernel seed itself!)\r\n       *  2. Moving all epsilon items to the current state's epsilon\r\n       *     set.\r\n       *  3. Moving all symbols with the same symbol right to the\r\n       *     dot to a partition set.\r\n       *  4. Check if there is already a state with the same items\r\n       *     as there are in the partition.  If so, union the\r\n       *     lookaheads, else, create a new state and set the\r\n       *     partition as kernel seed.\r\n       *  5. If the (probably new) state was not closed yet, perform\r\n       *     some table creation: If there is a terminal to the\r\n       *     right of the dot, do a shift on the action table, else\r\n       *     do a goto on the goto table.  Reductions are performed\r\n       *     later, when all states are closed.\r\n       * @param {number} s - Id of the state that should be closed.\r\n       * @author Jan Max Meyer\r\n       */\r\n      jscc.tabgen.prototype.lalr1_closure = function(s) {\r\n          var closure = [], nclosure, partition;\r\n          var partition_sym;\r\n          var i, j, cnt = 0, old_cnt = 0, tmp_cnt, ns;\r\n\r\n          do {\r\n              old_cnt = cnt;\r\n              cnt = this.close_items(((old_cnt == 0) ? global.states[s].kernel : closure), closure);\r\n          } while (cnt != old_cnt);\r\n\r\n          for (i = 0; i < global.states[s].kernel.length; i++) {\r\n              if (global.states[s].kernel[i].dot_offset <\r\n                  global.productions[global.states[s].kernel[i].prod].rhs.length) {\r\n                  closure.unshift(new Item({\r\n                      prod: global.states[s].kernel[i].prod,\r\n                      dot_offset: global.states[s].kernel[i].dot_offset,\r\n                      lookahead: []\r\n                  }));\r\n                  for (j = 0; j < global.states[s].kernel[i].lookahead.length; j++) {\r\n                      closure[0].lookahead[j] = global.states[s].kernel[i].lookahead[j];\r\n                  }\r\n              }\r\n          }\r\n\r\n          for (i = 0; i < closure.length; i++) {\r\n              if (global.productions[closure[i].prod].rhs.length == 0) {\r\n                  for (j = 0; j < global.states[s].epsilon.length; j++) {\r\n                      if (global.states[s].epsilon[j].prod == closure[i].prod\r\n                          && global.states[s].epsilon[j].dot_offset == closure[i].dot_offset) {\r\n                          break;\r\n                      }\r\n                  }\r\n                  if (j == global.states[s].epsilon.length) {\r\n                      global.states[s].epsilon.push(closure[i]);\r\n                  }\r\n                  closure.splice(i, 1);\r\n              }\r\n          }\r\n\r\n          while (closure.length > 0) {\r\n              partition = [];\r\n              nclosure = [];\r\n              partition_sym = -1;\r\n\r\n              for (i = 0; i < closure.length; i++) {\r\n                  if (partition.length == 0) {\r\n                      partition_sym = global.productions[closure[i].prod].rhs[closure[i].dot_offset];\r\n                  }\r\n\r\n                  if (closure[i].dot_offset < global.productions[closure[i].prod].rhs.length) {\r\n                      if (global.productions[closure[i].prod].rhs[closure[i].dot_offset] == partition_sym) {\r\n                          closure[i].dot_offset++;\r\n                          partition.push(closure[i]);\r\n                      } else {\r\n                          nclosure.push(closure[i]);\r\n                      }\r\n                  }\r\n              }\r\n\r\n              if (partition.length > 0) {\r\n                  // beachcoder Feb 23, 2009:\r\n                  // Uhh here was a very exciting bug that only came up on\r\n                  // special grammar constellations: If we don't sort the\r\n                  // partition set by production here, it may happen that\r\n                  // states get wrong lookahead, and unexpected conflicts\r\n                  // or failing grammars come up.\r\n                  partition.sort(this.sort_partition);\r\n\r\n                  // Now one can check for equality\r\n                  for (i = 0; i < global.states.length; i++) {\r\n                      if (this.item_set_equal(global.states[i].kernel, partition)) {\r\n                          break;\r\n                      }\r\n                  }\r\n\r\n                  if (i == global.states.length) {\r\n                      ns = this.create_state();\r\n                      ns.kernel = partition;\r\n                  }\r\n\r\n                  tmp_cnt = 0;\r\n                  cnt = 0;\r\n\r\n                  for (j = 0; j < partition.length; j++) {\r\n                      tmp_cnt += global.states[i].kernel[j].lookahead.length;\r\n                      global.states[i].kernel[j].lookahead =\r\n                          util.union(global.states[i].kernel[j].lookahead, partition[j].lookahead);\r\n                      cnt += global.states[i].kernel[j].lookahead.length;\r\n                  }\r\n\r\n                  if (tmp_cnt != cnt) {\r\n                      global.states[i].done = false;\r\n                  }\r\n\r\n                  if (!(global.states[s].closed)) {\r\n                      for (j = 0; j < partition.length; j++) {\r\n                          if (partition[j].dot_offset - 1 < global.productions[partition[j].prod].rhs.length) {\r\n                              if (global.symbols[global.productions[partition[j].prod].rhs[partition[j].dot_offset -\r\n                                                                                           1]].kind ==\r\n                                  SYM.TERM) {\r\n                                  global.states[s].actionrow = this.add_table_entry(global.states[s].actionrow,\r\n                                                                                    global.productions[partition[j].prod].rhs[partition[j].dot_offset -\r\n                                                                                                                              1],\r\n                                                                                    i);\r\n                                  global.shifts++;\r\n                              } else {\r\n                                  global.states[s].gotorow = this.add_table_entry(global.states[s].gotorow,\r\n                                                                                  global.productions[partition[j].prod].rhs[partition[j].dot_offset -\r\n                                                                                                                            1],\r\n                                                                                  i);\r\n                                  global.gotos++;\r\n                              }\r\n                          }\r\n                      }\r\n                  }\r\n              }\r\n              closure = nclosure;\r\n          }\r\n          global.states[s].closed = true;\r\n      };\r\n\r\n      /**\r\n       * Inserts reduce-cells into the action table.  A reduction\r\n       * does always occur for items with the dot to the far right\r\n       * of the production and to items with no production (epsilon\r\n       * items).\r\n       *\r\n       * The reductions are done on the corresponding lookahead\r\n       * symbols.  If a shift-reduce conflict appears, the function\r\n       * will always behave in favor of the shift.\r\n       *\r\n       * Reduce-reduce conflicts are reported immediately, and need\r\n       * to be solved.\r\n       * @param {number} s - The index of the state where the\r\n       * reductions take effect.\r\n       * @author Jan Max Meyer\r\n       */\r\n      jscc.tabgen.prototype.do_reductions = function(s) {\r\n          var n, i, j, ex, act, output_warning, item_set;\r\n\r\n          var reds = [];\r\n          var max = 0, count;\r\n\r\n          for (n = 0; n < 2; n++) {\r\n              if (!n) {\r\n                  item_set = global.states[s].kernel;\r\n              } else {\r\n                  item_set = global.states[s].epsilon;\r\n              }\r\n\r\n              for (i = 0; i < item_set.length; i++) {\r\n                  if (item_set[i].dot_offset == global.productions[item_set[i].prod].rhs.length) {\r\n                      for (j = 0; j < item_set[i].lookahead.length; j++) {\r\n                          output_warning = true;\r\n\r\n                          ex = this.get_table_entry(global.states[s].actionrow,\r\n                                                    item_set[i].lookahead[j]);\r\n\r\n                          if (ex == void(0)) {\r\n                              act = -1 * item_set[i].prod;\r\n\r\n                              global.states[s].actionrow = this.add_table_entry(global.states[s].actionrow,\r\n                                                                                item_set[i].lookahead[j], act);\r\n\r\n                              global.reduces++;\r\n                          } else {\r\n                              act = ex;\r\n                              var warning = \"\";\r\n                              if (ex > 0) {\r\n                                  // Shift-reduce conflict\r\n\r\n                                  // Is there any level specified?\r\n                                  if (global.symbols[item_set[i].lookahead[j]].level > 0\r\n                                      || global.productions[item_set[i].prod].level > 0) {\r\n                                      // Is the level the same?\r\n                                      if (global.symbols[item_set[i].lookahead[j]].level ==\r\n                                          global.productions[item_set[i].prod].level) {\r\n                                          // In case of left-associativity, reduce\r\n                                          if (global.symbols[item_set[i].lookahead[j]].associativity == ASSOC.LEFT) {\r\n                                              // Reduce\r\n                                              act = -1 * item_set[i].prod;\r\n                                          } else if (global.symbols[item_set[i].lookahead[j]].associativity ==\r\n                                                     ASSOC.NOASSOC) {\r\n                                              // else, if nonassociativity is set,\r\n                                              // remove table entry\r\n                                              this.remove_table_entry(global.states[s].actionrow,\r\n                                                                      item_set[i].lookahead[j]);\r\n                                              log.warn(\"Removing nonassociative symbol '\" +\r\n                                                       global.symbols[item_set[i].lookahead[j]].label +\r\n                                                       \"' in state \" + s);\r\n\r\n                                              output_warning = false;\r\n                                          }\r\n                                      } else {\r\n                                          // If symbol precedence is lower production's\r\n                                          // precedence, reduce\r\n                                          if (global.symbols[item_set[i].lookahead[j]].level <\r\n                                              global.productions[item_set[i].prod].level) {\r\n                                              // Reduce\r\n                                              act = -1 * item_set[i].prod;\r\n                                          }\r\n                                      }\r\n                                  }\r\n\r\n                                  warning = \"Shift\";\r\n                              } else {\r\n                                  // Reduce-reduce conflict\r\n                                  act = ((act * -1 < item_set[i].prod) ?\r\n                                      act : -1 * item_set[i].prod);\r\n\r\n                                  warning = \"Reduce\";\r\n                              }\r\n\r\n                              warning += \"-reduce conflict on symbol '\" +\r\n                                         global.symbols[item_set[i].lookahead[j]].label +\r\n                                         \"' in state \" + s;\r\n                              warning += \"\\n         Conflict resolved by \" +\r\n                                         ((act <= 0) ? \"reducing with production\" :\r\n                                             \"shifting to state\") + \" \" +\r\n                                         ((act <= 0) ? act * -1 : act);\r\n\r\n                              if (output_warning) {\r\n                                  log.warn(warning);\r\n                              }\r\n\r\n                              if (act != ex) {\r\n                                  this.update_table_entry(global.states[s].actionrow,\r\n                                                          item_set[i].lookahead[j], act);\r\n                              }\r\n                          }\r\n                      }\r\n                  }\r\n              }\r\n          }\r\n\r\n          // Find most common reduction\r\n          global.states[s].def_act = -1; // Define no default action\r\n\r\n          // Are there any reductions?  Then select the best of them.\r\n          for (i = 0; i < reds.length; i++) {\r\n              for (j = 0, count = 0; j < reds.length; j++) {\r\n                  if (reds[j] == reds[i]) {\r\n                      count++;\r\n                  }\r\n              }\r\n              if (max < count) {\r\n                  max = count;\r\n                  global.states[s].def_act = reds[i];\r\n              }\r\n          }\r\n\r\n          // Remove all default reduce action reductions, if they exist.\r\n          if (global.states[s].def_act >= 0) {\r\n              do {\r\n                  count = global.states[s].actionrow.length;\r\n\r\n                  for (i = 0; i < global.states[s].actionrow.length; i++) {\r\n                      if (global.states[s].actionrow[i][1] == global.states[s].def_act * -1) {\r\n                          global.states[s].actionrow.splice(i, 1);\r\n                      }\r\n                  }\r\n              } while (count != global.states[s].actionrow.length);\r\n          }\r\n      };\r\n\r\n      /**\r\n       * Entry function to perform table generation.  If all states\r\n       * of the parsing state machine are constructed, all reduce\r\n       * operations are inserted in the particular positions of the\r\n       * action table.\r\n       *\r\n       * If there is a Shift-reduce conflict, the shift takes the\r\n       * higher precedence.  Reduce-reduce conflicts are resolved by\r\n       * choosing the first defined production.\r\n       * @param {boolean} debug - Toggle debug trace output.  This\r\n       * should only be switched on when JS/CC is executed in a web\r\n       * environment, because HTML-code will be printed.\r\n       * @author Jan Max Meyer\r\n       */\r\n      jscc.tabgen.prototype.lalr1_parse_table = function(debug) {\r\n          var i, item, s;\r\n\r\n          // Create EOF symbol\r\n          item = this.create_item(0);\r\n          s = this.create_symbol(\"$\", SYM.TERM, SPECIAL.EOF);\r\n          item.lookahead.push(s);\r\n\r\n          // Create first state\r\n          s = this.create_state();\r\n          s.kernel.push(item);\r\n\r\n          while ((i = this.get_undone_state()) >= 0) {\r\n              global.states[i].done = true;\r\n              this.lalr1_closure(i);\r\n          }\r\n\r\n          for (i = 0; i < global.states.length; i++) {\r\n              this.do_reductions(i);\r\n          }\r\n\r\n          if (debug) {\r\n              for (i = 0; i < global.states.length; i++) {\r\n                  debugFunctions.print_item_set((global.exec_mode == EXEC.CONSOLE) ?\r\n                                                    MODE_GEN.TEXT :\r\n                                                    MODE_GEN.HTML,\r\n                                                \"states[\" + i + \"].kernel\", global.states[i].kernel);\r\n                  debugFunctions.print_item_set((global.exec_mode == EXEC.CONSOLE) ?\r\n                                                    MODE_GEN.TEXT :\r\n                                                    MODE_GEN.HTML,\r\n                                                \"states[\" + i + \"].epsilon\", global.states[i].epsilon);\r\n              }\r\n\r\n              log.debug(global.states.length + \" States created.\");\r\n          }\r\n      };\r\n\r\n      return new jscc.tabgen();\r\n  }));\r\n\n",
    "/*\r\n * Universal module definition for printtab.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/printtab',['require', './global', './tabgen', './log/log', './enums/MODE_GEN', './enums/SYM', './enums/SPECIAL'],\r\n               factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccprinttab =\r\n            factory(function(mod) {\r\n                return root[\"jscc\" + mod.split(\"/\").pop()];\r\n            });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.printtab}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {};\r\n      var has = (require(\"./localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      var log, global = /** @type {jscc.global} */ (require(\"./global\")),\r\n          tabgen = /** @type {jscc.tabgen} */ (require(\"./tabgen\")),\r\n          MODE_GEN = require(\"./enums/MODE_GEN\"),\r\n          SYM = require(\"./enums/SYM\"),\r\n          SPECIAL = require(\"./enums/SPECIAL\");\r\n\r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              log = /** @type {jscc.log} */ (require(\"./log/logNode\"));\r\n          } else {\r\n              log = /** @type {jscc.log} */ (require(\"./log/log\"));\r\n          }\r\n      })();\r\n\r\n      /**\r\n       * Functions for printing parse tables.\r\n       * @module {jscc.printtab} jscc/printtab\r\n       * @requires module:jscc/global\r\n       * @requires module:jscc/tabgen\r\n       * @requires module:jscc/log/log\r\n       * @requires module:jscc/enums/MODE_GEN\r\n       * @requires module:jscc/enums/SYM\r\n       * @requires module:jscc/enums/SPECIAL\r\n       */\r\n      /**\r\n       * @constructor\r\n       */\r\n      jscc.printtab = function() {\r\n      };\r\n      jscc.printtab.prototype = {\r\n          /**\r\n           * Prints the parse tables in a desired format.\r\n           * @param {(jscc.enums.MODE_GEN|string)} mode - The output mode.\r\n           * This can be either {@link jscc.enums.MODE_GEN.JS} to create JavaScript/\r\n           * JScript code as output or {@link jscc.enums.MODE_GEN.HTML} to create\r\n           * HTML-tables as output (the HTML-tables are formatted to\r\n           * look nice with the JS/CC Web Environment).\r\n           * @returns {string} The code to be printed to a file or\r\n           * website.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.printtab\r\n           */\r\n          print_parse_tables: function(mode) {\r\n              var code = \"\";\r\n              var i, j, deepest = 0, val;\r\n              switch (mode) {\r\n                  case MODE_GEN.HTML:\r\n                  case \"html\":\r\n                      code += \"<table class=\\\"print\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\";\r\n                      code += \"<tr>\";\r\n                      code += \"<td class=\\\"tabtitle\\\" colspan=\\\"2\\\">Pop-Table</td>\";\r\n                      code += \"</tr>\";\r\n                      code +=\r\n                          \"<td class=\\\"coltitle\\\" width=\\\"1%\\\" style=\\\"border-right: 1px solid lightgray;\\\">Left-hand side</td>\";\r\n                      code += \"<td class=\\\"coltitle\\\">Number of symbols to pop</td>\";\r\n                      code += \"</tr>\";\r\n                      for (i = 0; i < global.productions.length; i++) {\r\n                          code += \"<tr>\";\r\n                          code +=\r\n                              \"<td style=\\\"border-right: 1px solid lightgray;\\\">\" + global.productions[i].lhs + \"</td>\";\r\n                          code += \"<td>\" + global.productions[i].rhs.length + \"</td>\";\r\n                          code += \"</tr>\";\r\n                      }\r\n                      code += \"</table>\";\r\n\r\n                      for (i = 0; i < global.symbols.length; i++) {\r\n                          if (global.symbols[i].kind == SYM.TERM) {\r\n                              deepest++;\r\n                          }\r\n                      }\r\n\r\n                      code += \"<table class=\\\"print\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\";\r\n                      code += \"<tr>\";\r\n                      code += \"<td class=\\\"tabtitle\\\" colspan=\\\"\" + (deepest + 1) + \"\\\">Action-Table</td>\";\r\n                      code += \"</tr>\";\r\n\r\n                      code +=\r\n                          \"<td class=\\\"coltitle\\\" width=\\\"1%\\\" style=\\\"border-right: 1px solid lightgray;\\\">State</td>\";\r\n                      for (i = 0; i < global.symbols.length; i++) {\r\n                          if (global.symbols[i].kind == SYM.TERM) {\r\n                              code += \"<td><b>\" + global.symbols[i].label + \"</b></td>\";\r\n                          }\r\n                      }\r\n\r\n                      code += \"</tr>\";\r\n\r\n                      for (i = 0; i < global.states.length; i++) {\r\n                          code += \"<tr>\";\r\n                          code += \"<td class=\\\"coltitle\\\" style=\\\"border-right: 1px solid lightgray;\\\">\" + i + \"</td>\";\r\n\r\n                          for (j = 0; j < global.symbols.length; j++) {\r\n                              if (global.symbols[j].kind == SYM.TERM) {\r\n                                  code += \"<td>\";\r\n                                  if ((val = tabgen.get_table_entry(global.states[i].actionrow, j)) != void(0)) {\r\n                                      if (val <= 0) {\r\n                                          code += \"r\" + (val * -1);\r\n                                      } else {\r\n                                          code += \"s\" + val;\r\n                                      }\r\n                                  }\r\n                                  code += \"</td>\";\r\n                              }\r\n                          }\r\n\r\n                          code += \"</tr>\";\r\n                      }\r\n\r\n                      code += \"</table>\";\r\n\r\n                      for (i = 0; i < global.symbols.length; i++) {\r\n                          if (global.symbols[i].kind == SYM.NONTERM) {\r\n                              deepest++;\r\n                          }\r\n                      }\r\n\r\n                      code += \"<table class=\\\"print\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\";\r\n                      code += \"<tr>\";\r\n                      code += \"<td class=\\\"tabtitle\\\" colspan=\\\"\" + (deepest + 1) + \"\\\">Goto-Table</td>\";\r\n                      code += \"</tr>\";\r\n\r\n                      code +=\r\n                          \"<td class=\\\"coltitle\\\" width=\\\"1%\\\" style=\\\"border-right: 1px solid lightgray;\\\">State</td>\";\r\n                      for (i = 0; i < global.symbols.length; i++) {\r\n                          if (global.symbols[i].kind == SYM.NONTERM) {\r\n                              code += \"<td>\" + global.symbols[i].label + \"</td>\";\r\n                          }\r\n                      }\r\n\r\n                      code += \"</tr>\";\r\n\r\n                      for (i = 0; i < global.states.length; i++) {\r\n                          code += \"<tr>\";\r\n                          code += \"<td class=\\\"coltitle\\\" style=\\\"border-right: 1px solid lightgray;\\\">\" + i + \"</td>\";\r\n\r\n                          for (j = 0; j < global.symbols.length; j++) {\r\n                              if (global.symbols[j].kind == SYM.NONTERM) {\r\n                                  code += \"<td>\";\r\n                                  if ((val = tabgen.get_table_entry(global.states[i].gotorow, j)) != void(0)) {\r\n                                      code += val;\r\n                                  }\r\n                                  code += \"</td>\";\r\n                              }\r\n                          }\r\n\r\n                          code += \"</tr>\";\r\n                      }\r\n\r\n                      code += \"</table>\";\r\n\r\n                      code += \"<table class=\\\"print\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\";\r\n                      code += \"<tr>\";\r\n                      code += \"<td class=\\\"tabtitle\\\" colspan=\\\"2\\\">Default Actions Table</td>\";\r\n                      code += \"</tr>\";\r\n                      code +=\r\n                          \"<td class=\\\"coltitle\\\" width=\\\"1%\\\" style=\\\"border-right: 1px solid lightgray;\\\">Left-hand side</td>\";\r\n                      code += \"<td class=\\\"coltitle\\\">Number of symbols to pop</td>\";\r\n                      code += \"</tr>\";\r\n                      for (i = 0; i < global.states.length; i++) {\r\n                          code += \"<tr>\";\r\n                          code += \"<td style=\\\"border-right: 1px solid lightgray;\\\">State \" + i + \"</td>\";\r\n                          code +=\r\n                              \"<td>\" + ((global.states[i].def_act < 0) ? \"(none)\" : global.states[i].def_act) + \"</td>\";\r\n                          code += \"</tr>\";\r\n                      }\r\n                      code += \"</table>\";\r\n                      break;\r\n                  case MODE_GEN.JS:\r\n                  case \"js\":\r\n                      var pop_tab_json = [];\r\n                      for (i = 0; i < global.productions.length; i++) {\r\n                          pop_tab_json.push([global.productions[i].lhs, global.productions[i].rhs.length]);\r\n                      }\r\n                      code += \"\\nvar pop_tab = \" + JSON.stringify(pop_tab_json) + \";\\n\";\r\n\r\n                      var act_tab_json = [];\r\n                      for (i = 0; i < global.states.length; i++) {\r\n                          var act_tab_json_item = [];\r\n                          for (j = 0; j < global.states[i].actionrow.length; j++) {\r\n                              act_tab_json_item.push(global.states[i].actionrow[j].symbol,\r\n                                                     global.states[i].actionrow[j].action);\r\n                          }\r\n                          act_tab_json.push(act_tab_json_item);\r\n                      }\r\n                      code += \"\\n/** @type {!Array<!Array<number>>} */\\nvar act_tab =\" + JSON.stringify(act_tab_json) +\r\n                              \";\\n\";\r\n\r\n                      var goto_tab_json = [];\r\n                      for (i = 0; i < global.states.length; i++) {\r\n                          var goto_tab_json_item = [];\r\n                          for (j = 0; j < global.states[i].gotorow.length; j++) {\r\n                              goto_tab_json_item.push(global.states[i].gotorow[j].symbol,\r\n                                                      global.states[i].gotorow[j].action);\r\n                          }\r\n                          goto_tab_json.push(goto_tab_json_item);\r\n                      }\r\n                      code += \"\\nvar goto_tab =\" + JSON.stringify(goto_tab_json) + \";\\n\";\r\n\r\n                      var defact_tab_json = [];\r\n                      for (i = 0; i < global.states.length; i++) {\r\n                          defact_tab_json.push(global.states[i].def_act);\r\n                      }\r\n                      code += \"\\nvar defect_tab =\" + JSON.stringify(defact_tab_json) + \";\\n\";\r\n                      break;\r\n              }\r\n              return code;\r\n          },\r\n          /**\r\n           *\r\n           * @param {Array<jscc.classes.Dfa>} dfa_states\r\n           * @returns {Array}\r\n           * @memberof jscc.printtab\r\n           */\r\n          pack_dfa: function(dfa_states) {\r\n              var PL = function(line) {\r\n                  var out = [];\r\n                  while (line.length) {\r\n                      var first = line.shift();\r\n                      var second = line.shift();\r\n                      if (first == second) {\r\n                          out.push(first);\r\n                      } else {\r\n                          out.push([first, second]);\r\n                      }\r\n                  }\r\n                  return out;\r\n              };\r\n              var json = [];\r\n              for (var i = 0; i < dfa_states.length; i++) {\r\n                  (function(i) {\r\n                      var line = [];\r\n                      for (var j = 0; j < dfa_states[i].line.length; j++) {\r\n                          if (dfa_states[i].line[j] != -1) {\r\n                              line[j] = dfa_states[i].line[j];\r\n                          }\r\n                      }\r\n                      line = PL(PL(PL(PL(PL(PL(PL(PL((line)))))))));\r\n                      json.push({\r\n                                    line: line,\r\n                                    accept: dfa_states[i].accept\r\n                                });\r\n                  })(i);\r\n              }\r\n              return json;\r\n          },\r\n\r\n          /**\r\n           * Generates a state-machine construction from the deterministic\r\n           * finite automata.\r\n           * @param {Array<jscc.classes.Dfa>} dfa_states - The dfa state machine for\r\n           * the lexing function.\r\n           * @returns {string} The code to be inserted into the static\r\n           * parser driver framework.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.printtab\r\n           */\r\n          print_dfa_table: function(dfa_states) {\r\n              var json = [], code;\r\n              for (var i = 0; i < dfa_states.length; i++) {\r\n                  (function(i) {\r\n                      var line = {};\r\n                      for (var j = 0; j < dfa_states[i].line.length; j++) {\r\n                          if (dfa_states[i].line[j] != -1) {\r\n                              line[j] = dfa_states[i].line[j];\r\n                          }\r\n                      }\r\n                      json.push({\r\n                                    line: line,\r\n                                    accept: dfa_states[i].accept\r\n                                });\r\n                  })(i);\r\n              }\r\n              code = JSON.stringify(this.pack_dfa(dfa_states));\r\n              // JSON quotes object keys, of course, but doing so breaks minimization.  So, replace keys\r\n              // with unquoted versions, when possible.\r\n              return code.replace(/\"([A-Za-z_][A-Za-z0-9_]*)\"\\s*:/g, \"$1:\").replace(/,/g, \",\\n\\t\");\r\n          },\r\n\r\n          /**\r\n           * Prints all symbol labels into an array; this is used for\r\n           * error reporting purposes only in the resulting parser.\r\n           * @returns {string} The code to be inserted into the\r\n           * static parser driver framework.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.printtab\r\n           */\r\n          print_symbol_labels: function() {\r\n              for (var i = 0, arr = []; i < global.symbols.length; i++) {\r\n                  arr.push(global.symbols[i].label);\r\n              }\r\n              return \"var labels = \" + JSON.stringify(global.symbols) + \";\\n\\n\";\r\n          },\r\n\r\n          /**\r\n           * Prints the terminal symbol actions to be associated with a\r\n           * terminal definition into a switch-case-construct.\r\n           * @returns {string} The code to be inserted into the static\r\n           * parser driver framework.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.printtab\r\n           */\r\n          print_term_actions: function() {\r\n              var code = \"({\\n\";\r\n              var re = /%match|%offset|%source/;\r\n              var i, j, k;\r\n              var semcode;\r\n              var strmatch;\r\n              for (i = 0; i < global.symbols.length; i++) {\r\n                  if (global.symbols[i].kind == SYM.TERM && global.symbols[i].code != \"\") {\r\n                      code += \"   \\\"\" + i + \"\\\":\";\r\n                      code += \" /** @suppress {uselessCode} */ function(PCB){\";\r\n                      semcode = \"\";\r\n                      for (j = 0, k = 0; j < global.symbols[i].code.length; j++, k++) {\r\n                          strmatch = re.exec(global.symbols[i].code.substr(j, global.symbols[i].code.length));\r\n                          if (strmatch && strmatch.index == 0) {\r\n                              if (strmatch[0] == \"%match\") {\r\n                                  semcode += \"PCB.att\";\r\n                              } else if (strmatch[0] == \"%offset\") {\r\n                                  semcode += \"( PCB.offset - PCB.att.length )\";\r\n                              } else if (strmatch[0] == \"%source\") {\r\n                                  semcode += \"PCB.src\";\r\n                              }\r\n\r\n                              j += strmatch[0].length - 1;\r\n                              k = semcode.length;\r\n                          } else {\r\n                              semcode += global.symbols[i].code.charAt(j);\r\n                          }\r\n                      }\r\n                      code += \"       \" + semcode + \"\\n\";\r\n                      code += \"       return PCB.att;},\\n\";\r\n                  }\r\n              }\r\n              code += \"\\n})\";\r\n              return code;\r\n          },\r\n\r\n          /**\r\n           * Generates a switch-case-construction that contains all\r\n           * the semantic actions.  This construction should then be\r\n           * generated into the static parser driver template.\r\n           * @returns {string} The code to be inserted into the static\r\n           * parser driver framework.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.printtab\r\n           */\r\n          print_actions: function() {\r\n              var code = \"\";\r\n              var re = /%[0-9]+|%%/;\r\n              var semcode, strmatch;\r\n              var i, j, k, idx, src;\r\n              code += \"[\";\r\n              for (i = 0; i < global.productions.length; i++) {\r\n                  src = global.productions[i].code;\r\n                  semcode = \"function(){\\n\";\r\n                  semcode += \"var rval;\";\r\n                  for (j = 0, k = 0; j < src.length; j++, k++) {\r\n                      strmatch = re.exec(src.substr(j, src.length));\r\n                      if (strmatch && strmatch.index == 0) {\r\n                          if (strmatch[0] == \"%%\") {\r\n                              semcode += \"rval\";\r\n                          } else {\r\n                              idx = parseInt(strmatch[0].substr(1, strmatch[0].length), 10);\r\n                              idx = global.productions[i].rhs.length - idx;\r\n                              if (idx < 0) {\r\n                                  // The wildcard index is not valid.  Ideally, this\r\n                                  // condition should be caught during parsing or\r\n                                  // semantic analysis.\r\n                                  var badProduction = global.productions[i],\r\n                                      badLeftSymbol = global.symbols[badProduction.lhs];\r\n                                  if (global.productions[i].rhs.length == 0) {\r\n                                      // Likely, default code was used for an empty right-hand side\r\n                                      log.error(\r\n                                          \"Default code was used for an empty right-hand side of a production, or a wildcard \" +\r\n                                          strmatch[0] +\r\n                                          \" was used explicitly.  The faulty left-hand side symbol label is '\"\r\n                                          + badLeftSymbol.label + \"'.\");\r\n                                  } else {\r\n                                      log.error(\"The wildcard \" + strmatch[0] + \" was used, but there are only \" +\r\n                                                global.productions[i].rhs.length +\r\n                                                \" symbols on the right-hand side of the production.  The faulty left-hand \" +\r\n                                                \"side symbol label is '\" + badLeftSymbol.label + \"'.\");\r\n                                  }\r\n                                  semcode += \" \\\"\\\" \";\r\n                              } else {\r\n                                  semcode += \" arguments[\" + idx + \"] \";\r\n                              }\r\n                          }\r\n                          j += strmatch[0].length - 1;\r\n                          k = semcode.length;\r\n                      } else {\r\n                          semcode += src.charAt(j);\r\n                      }\r\n                  }\r\n                  code += \"       \" + semcode + \"\\nreturn rval;},\\n\";\r\n              }\r\n              code += \"]\";\r\n              return code;\r\n          },\r\n\r\n          /**\r\n           * Returns the value of the eof-symbol.\r\n           * @returns {number} The id of the EOF-symbol.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.printtab\r\n           */\r\n          get_eof_symbol_id: function() {\r\n              var eof_id = -1;\r\n              // Find out which symbol is for EOF\r\n              for (var i = 0; i < global.symbols.length; i++) {\r\n                  if (global.symbols[i].special == SPECIAL.EOF) {\r\n                      eof_id = i;\r\n                      break;\r\n                  }\r\n              }\r\n              if (eof_id == -1) {\r\n                  log.error(\"No EOF-symbol defined - This might not be possible (bug!)\");\r\n              }\r\n              return eof_id;\r\n          },\r\n\r\n          /**\r\n           * Returns the value of the error-symbol.\r\n           * @returns {number} The id of the error-symbol.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.printtab\r\n           */\r\n          get_error_symbol_id: function() {\r\n              var error_id = -1;\r\n              for (var i = 0; i < global.symbols.length; i++) {\r\n                  if (global.symbols[i].special == SPECIAL.ERROR) {\r\n                      error_id = i;\r\n                      break;\r\n                  }\r\n              }\r\n              if (error_id == -1) {\r\n                  log.error(\"No ERROR-symbol defined - This might not be possible (bug!)\");\r\n              }\r\n              return error_id;\r\n          },\r\n\r\n          /**\r\n           * Returns the ID of the whitespace-symbol.\r\n           * @returns {number} The id of the whitespace-symbol.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.printtab\r\n           */\r\n          get_whitespace_symbol_id: function() {\r\n              return global.whitespace_token;\r\n          },\r\n\r\n          /**\r\n           * Returns the ID of a non-existing state.\r\n           * @returns {number} One greater than the length of the\r\n           * states array.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.printtab\r\n           */\r\n          get_error_state: function() {\r\n              return global.states.length + 1;\r\n          }\r\n      };\r\n      return new jscc.printtab();\r\n  }));\r\n\n",
    "/*\r\n * Universal module definition for integrity.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/integrity',['require', './global', './log/log', './enums/SYM'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccintegrity = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.integrity}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {};\r\n      var has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      var log, global = /** @type {jscc.global} */ (require(\"./global\")),\r\n          SYM = require(\"./enums/SYM\");\r\n\r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              log = /** @type {jscc.log} */ (require(\"./log/logNode\"));\r\n          } else {\r\n              log = /** @type {jscc.log} */ (require(\"./log/log\"));\r\n          }\r\n      })();\r\n\r\n      /**\r\n       * Error-checking functions.\r\n       * @module {jscc.integrity} jscc/integrity\r\n       * @requires module:jscc/global\r\n       * @requires module:jscc/log/log\r\n       */\r\n\r\n      /**\r\n       * @constructor\r\n       */\r\n      jscc.integrity = function() {\r\n      };\r\n\r\n      jscc.integrity.prototype = {\r\n          /**\r\n           * Checks the {@link jscc.global.symbols} array for\r\n           * nonterminating, undefined symbols.  Logs an error if\r\n           * any such symbols are found.\r\n           */\r\n          undef: function() {\r\n              for (var i = 0; i < global.symbols.length; i++) {\r\n                  if (global.symbols[i].kind == SYM.NONTERM\r\n                      && global.symbols[i].defined == false) {\r\n                      log.error(\"Call to undefined non-terminal \\\"\" +\r\n                                global.symbols[i].label + \"\\\"\");\r\n                  }\r\n              }\r\n          },\r\n\r\n          /**\r\n           * Checks the {@link jscc.global.symbols} and\r\n           * {@link jscc.global.productions} arrays for\r\n           * unreachable, nonterminating symbols.  Logs a warning\r\n           * if any such symbols are found.\r\n           */\r\n          unreachable: function() {\r\n              var stack = [];\r\n              var reachable = [];\r\n              var i, j, k, l;\r\n\r\n              for (i = 0; i < global.symbols.length; i++) {\r\n                  if (global.symbols[i].kind == SYM.NONTERM) {\r\n                      break;\r\n                  }\r\n              }\r\n\r\n              if (i == global.symbols.length) {\r\n                  return;\r\n              }\r\n\r\n              stack.push(i);\r\n              reachable.push(i);\r\n\r\n              while (stack.length > 0) {\r\n                  i = stack.pop();\r\n                  for (j = 0; j < global.symbols[i].prods.length; j++) {\r\n                      for (k = 0; k < global.productions[global.symbols[i].prods[j]].rhs.length; k++) {\r\n                          if (global.symbols[global.productions[global.symbols[i].prods[j]].rhs[k]].kind ==\r\n                              SYM.NONTERM) {\r\n                              for (l = 0; l < reachable.length; l++) {\r\n                                  if (reachable[l] == global.productions[global.symbols[i].prods[j]].rhs[k]) {\r\n                                      break;\r\n                                  }\r\n                              }\r\n\r\n                              if (l == reachable.length) {\r\n                                  stack.push(global.productions[global.symbols[i].prods[j]].rhs[k]);\r\n                                  reachable.push(global.productions[global.symbols[i].prods[j]].rhs[k]);\r\n                              }\r\n                          }\r\n                      }\r\n                  }\r\n              }\r\n\r\n              for (i = 0; i < global.symbols.length; i++) {\r\n                  if (global.symbols[i].kind == SYM.NONTERM) {\r\n                      for (j = 0; j < reachable.length; j++) {\r\n                          if (reachable[j] == i) {\r\n                              break;\r\n                          }\r\n                      }\r\n                      if (j == reachable.length) {\r\n                          log.warn(\"Unreachable non-terminal \\\"\" + global.symbols[i].label + \"\\\"\");\r\n                      }\r\n                  }\r\n              }\r\n          },\r\n\r\n          /**\r\n           * Checks the {@link jscc.global.states} array for\r\n           * states with no lookahead information.  Logs an error\r\n           * if any such states are found.\r\n           */\r\n          check_empty_states: function() {\r\n              for (var i = 0; i < global.states.length; i++) {\r\n                  if (global.states[i].actionrow.length == 0 && global.states[i].def_act == -1) {\r\n                      log.error(\"No lookaheads in state \" + i + \", watch for endless list definitions\");\r\n                  }\r\n              }\r\n          }\r\n      };\r\n      return new jscc.integrity();\r\n  }));\r\n\n",
    "/*\r\n * Universal module definition for lexdbg.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/lexdbg',['require', './global', './io/io', './enums/EDGE'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jscclexdbg = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.lexdbg}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {};\r\n      var has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      var io, global = /** @type {jscc.global} */ (require(\"./global\")),\r\n          EDGE = require(\"./enums/EDGE\");\r\n\r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              io = /** @type {jscc.io} */ (require(\"./io/ioNode\"));\r\n          } else {\r\n              io = /** @type {jscc.io} */ (require(\"./io/io\"));\r\n          }\r\n      })();\r\n\r\n      /**\r\n       * Debugging-output functions for automata.\r\n       * @module {jscc.lexdbg} jscc/lexdbg\r\n       * @requires module:jscc/global\r\n       * @requires module:jscc/io/io\r\n       */\r\n      /**\r\n       * @constructor\r\n       */\r\n      jscc.lexdbg = function() {\r\n      };\r\n      jscc.lexdbg.prototype = {\r\n          /**\r\n           * Prints debugging information about the contents of the\r\n           * {@link jscc.global.nfa_states.value} array.\r\n           * @memberof jscc.lexdbg\r\n           */\r\n          print_nfa: function() {\r\n              io.write_debug(\"Pos\\tType\\t\\tfollow\\t\\tfollow2\\t\\taccept\");\r\n              io.write_debug(\"-----------------------------------------------------------------------\");\r\n              for (var i = 0; i < global.nfa_states.value.length; i++) {\r\n                  io.write_debug(i + \"\\t\" + ((global.nfa_states.value[i].edge == EDGE.FREE) ? \"FREE\" :\r\n                                     ((global.nfa_states.value[i].edge == EDGE.EPSILON) ? \"EPSILON\" : \"CHAR\")) +\r\n                                 \"\\t\\t\" +\r\n                                 ((global.nfa_states.value[i].edge != EDGE.FREE &&\r\n                                   global.nfa_states.value[i].follow > -1) ?\r\n                                     global.nfa_states.value[i].follow :\r\n                                     \"\") + \"\\t\\t\" +\r\n                                 ((global.nfa_states.value[i].edge != EDGE.FREE &&\r\n                                   global.nfa_states.value[i].follow2 > -1) ?\r\n                                     global.nfa_states.value[i].follow2 :\r\n                                     \"\") + \"\\t\\t\" +\r\n                                 ((global.nfa_states.value[i].edge != EDGE.FREE &&\r\n                                   global.nfa_states.value[i].accept > -1) ?\r\n                                     global.nfa_states.value[i].accept :\r\n                                     \"\"));\r\n\r\n                  if (global.nfa_states.value[i].edge == EDGE.CHAR) {\r\n                      var chars = \"\";\r\n                      for (var j = global.MIN_CHAR; j < global.MAX_CHAR; j++) {\r\n                          if (global.nfa_states.value[i].ccl.get(j)) {\r\n                              chars += String.fromCharCode(j);\r\n                              if (chars.length == 10) {\r\n                                  io.write_debug(\"\\t\" + chars);\r\n                                  chars = \"\";\r\n                              }\r\n                          }\r\n                      }\r\n\r\n                      if (chars.length > 0) {\r\n                          io.write_debug(\"\\t\" + chars);\r\n                      }\r\n                  }\r\n              }\r\n              io.write_debug(\"\");\r\n          },\r\n\r\n          /**\r\n           * Prints debugging information about the provided array of\r\n           * Dfa objects.\r\n           * @param {Array<jscc.classes.Dfa>} dfa_states - The states for which to\r\n           * print debugging information.\r\n           * @memberof jscc.lexdbg\r\n           */\r\n          print_dfa: function(dfa_states) {\r\n              var str = \"\";\r\n              var chr_cnt = 0;\r\n              for (var i = 0; i < dfa_states.length; i++) {\r\n                  str = i + \" => (\";\r\n\r\n                  chr_cnt = 0;\r\n                  for (var j = 0; j < dfa_states[i].line.length; j++) {\r\n                      if (dfa_states[i].line[j] > -1) {\r\n                          str += \" >\" + String.fromCharCode(j) + \"<,\" + dfa_states[i].line[j] + \" \";\r\n                          chr_cnt++;\r\n\r\n                          if ((chr_cnt % 5) == 0) {\r\n                              str += \"\\n       \";\r\n                          }\r\n                      }\r\n                  }\r\n\r\n                  str += \") \" + dfa_states[i].accept;\r\n                  io.write_debug(str);\r\n              }\r\n          }\r\n      };\r\n      return new jscc.lexdbg();\r\n  }));\r\n\n",
    "/*\r\n * Universal module definition for module containing Param class.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/classes/Param',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccParam = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure);\r\n    var jscc = {\r\n        classes: {}\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Creates a new Param instance.\r\n     * @classdesc Contains indexes of start and end states.\r\n     * @param {number=} start - Index of the starting state.\r\n     * @param {number=} end - Index of the ending state.\r\n     * @constructor\r\n     * @memberof {jscc.classes}\r\n     * @const\r\n     */\r\n    jscc.classes.Param = function(start, end) {\r\n        if (typeof start === 'number') {\r\n            this.start = start;\r\n        }\r\n        if (typeof end === 'number') {\r\n            this.end = end;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Index of the starting state.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Param.prototype.start = -1;\r\n    /**\r\n     * Index of the ending state.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Param.prototype.end = -1;\r\n\r\n    /**\r\n     * The module containing the Param class.\r\n     * @module jscc/classes/Param\r\n     */\r\n    return jscc.classes.Param;\r\n}));\r\n\n",
    "/*\r\n\tThis is the general, platform-independent part of every parser driver;\r\n\tInput-/Output and Feature-Functions are done by the particular drivers\r\n\tcreated for the particular platform.\r\n*/\r\n\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine('lib/jscc/regex',['require', './global', './log/log', './classes/Param', './classes/Nfa', './enums/EDGE'], factory);\r\n\t} else if (typeof module === 'object' && module.exports) {\r\n\t\tmodule.exports = factory(require);\r\n\t} else {\r\n\t\troot.jsccregex = factory(function(mod) {\r\n\t\t    return root[\"jscc\" + mod.split(\"/\").pop()];\r\n\t\t});\r\n\t}\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {function(string, number, boolean, number)}\r\n   */\r\n  function(require, others) {\r\nvar first_nfa;\r\nvar last_nfa;\r\n//>>excludeStart(\"closure\", pragmas.closure);\r\nvar has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n//>>excludeEnd(\"closure\");\r\n\r\nvar log, global = /** @type {jscc.global} */ (require(\"./global\")),\r\n    Param = /** @type {function(new:jscc.classes.Param, number=, number=)} */ (require(\"./classes/Param\")),\r\n    Nfa = /** @type {function(new:jscc.classes.Nfa, ?NfaOptions=)} */ (require(\"./classes/Nfa\")),\r\n    EDGE = require(\"./enums/EDGE\");\r\n\r\n/**\r\n * @suppress {uselessCode}\r\n */\r\n(function() {\r\n    if (has(\"node\")) {\r\n        log = /** @type {jscc.log} */ (require(\"./log/logNode\"));\r\n    } else {\r\n        log = /** @type {jscc.log} */ (require(\"./log/log\"));\r\n    }\r\n})();\r\n\r\n\r\nvar __parse=(function(/** number */ eof, /** number */ whitespace, /** number */ error_token){\r\n\t\r\n/// there was \"continue\" in code, we must to replace it\r\nvar Continue = function(){throw Continue;};\r\n\r\n\t/**\r\n\t * @template T\r\n\t * @param {T} value\r\n\t * @constructor\r\n\t * @extends {Error}\r\n     */\r\n\tvar ReturnValue = function(value) {\r\n\t\tError.call(this);\r\n\t\tthis._value = value;\r\n\t};\r\n\tReturnValue.prototype = Object.create(Error.prototype);\r\n\tReturnValue.prototype.constructor = ReturnValue;\r\n\t/**\r\n\t * @type {T}\r\n\t * @private\r\n     */\r\n\tReturnValue.prototype._value = null;\r\n\t/**\r\n\t * @returns {T}\r\n     */\r\n\tReturnValue.prototype.valueOf = function() {\r\n\t\treturn this._value;\r\n\t};\r\n\r\n\t///can return value from any place of callback\r\n\tfunction Return(value){\r\n\t\tthrow new ReturnValue(value);\r\n\t}\r\n\r\n\tvar TERMINAL_ACTIONS = (function(){\r\n\t\tfunction emptyFn(PCB){return PCB.att;}\r\n\t\tvar actions = ({\r\n\r\n})\r\n\t\treturn function(/** @type {!PcbClass} */ PCB, match){\r\n\t\t\ttry{\r\n\t\t\t\treturn (actions[match] || emptyFn)(PCB);\r\n\t\t\t}catch(e){\r\n\t\t\t\tif(e instanceof ReturnValue)return e.valueOf();\r\n\t\t\t\tif(e == Continue)return Continue;\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\t\t}\r\n\t})();\r\n\t/**\r\n\t * @constructor\r\n     */\r\n\tvar DfaLex = function() {\r\n\t\tthis._dfaData = [{line:[[[[1,\r\n\t[[1,\r\n\t[[[2,\r\n\t3],\r\n\t[4,\r\n\t5]],\r\n\t[1,\r\n\t[6,\r\n\t1]]]],\r\n\t[1,\r\n\t[1,\r\n\t[1,\r\n\t[1,\r\n\t7]]]]]],\r\n\t[[1,\r\n\t[1,\r\n\t[[1,\r\n\t[1,\r\n\t8]],\r\n\t[[13,\r\n\t9],\r\n\t1]]]],\r\n\t[1,\r\n\t[1,\r\n\t[1,\r\n\t[[10,\r\n\t1],\r\n\t1]]]]]],\r\n\t[1,\r\n\t[1,\r\n\t[1,\r\n\t[1,\r\n\t[1,\r\n\t[1,\r\n\t[1,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[],\r\n\taccept:13},\r\n\t{line:[],\r\n\taccept:6},\r\n\t{line:[],\r\n\taccept:7},\r\n\t{line:[],\r\n\taccept:3},\r\n\t{line:[],\r\n\taccept:4},\r\n\t{line:[],\r\n\taccept:10},\r\n\t{line:[],\r\n\taccept:5},\r\n\t{line:[],\r\n\taccept:8},\r\n\t{line:[],\r\n\taccept:9},\r\n\t{line:[],\r\n\taccept:2},\r\n\t{line:[],\r\n\taccept:12},\r\n\t{line:[[[[null,\r\n\t[null,\r\n\t[12,\r\n\t[[12,\r\n\tnull],\r\n\tnull]]]],\r\n\tnull],\r\n\tnull]],\r\n\taccept:11},\r\n\t{line:[[[[11,\r\n\t[11,\r\n\t[12,\r\n\t[[12,\r\n\t11],\r\n\t11]]]],\r\n\t11],\r\n\t[11,\r\n\t[11,\r\n\t[11,\r\n\t[11,\r\n\t[11,\r\n\t[11,\r\n\t[11,\r\n\tnull]]]]]]]]],\r\n\taccept:13}];\r\n\t};\r\n\t/**\r\n\t * @type {!Array<!{line: !Array, accept: !number}>}\r\n\t * @private\r\n     */\r\n\tDfaLex.prototype._dfaData = [];\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tDfaLex.prototype.match_pos = 0;\r\n\t/**\r\n\t * @type {?number}\r\n     */\r\n\tDfaLex.prototype.state = 0;\r\n\t/**\r\n\t * @type {?number}\r\n     */\r\n\tDfaLex.prototype.match = null;\r\n\t/**\r\n\t * @param {number} chr\r\n\t * @param {number} pos\r\n     */\r\n\tDfaLex.prototype.exec = function(chr, pos) {\r\n\t\tif (this.state !== null) {\r\n\t\t    if ((typeof this.state !== \"number\") || this.state >= this._dfaData.length) {\r\n\t\t        this.state = null;\r\n\t\t        throw new Error(\"Invalid value for DfaLex.state at chr \" + chr + \" and pos \" + pos);\r\n\t\t    }\r\n\t\t\tvar line = this._dfaData[this.state].line;\r\n\t\t\tif (typeof line === \"undefined\" || line === null) {\r\n\t\t\t    var badState = this.state;\r\n\t\t\t    this.state = null;\r\n\t\t\t    throw new Error(\"At chr \" + chr + \" and pos \" + pos +\r\n\t\t\t                    \", DfaLex._dfaData[\" + badState +\r\n\t\t\t                    \"] appears to exist, but its line property is \" +\r\n\t\t\t                    (typeof line === \"undefined\" ? \"undefined.\" : \"null.\"));\r\n\t\t\t}\r\n\t\t\tvar p, st;\r\n\t\t\tfor (p = 1 << 8, st = line; p; p >>= 1) {\r\n\t\t\t\tif ((chr & p) !== 0) {\r\n\t\t\t\t\tst = st[1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tst = st[0];\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof st === \"undefined\") {\r\n\t\t\t\t    st = null;\r\n\t\t\t\t}\r\n\t\t\t\tif (st === null)break;\r\n\t\t\t\tif (Array.isArray(st))continue;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tvar ac = this._dfaData[this.state].accept;\r\n\t\t\tthis.state = /** @type {?number} */ (st);\r\n\t\t\tif (ac !== -1) {\r\n\t\t\t\tthis.match = /** @type{number} */ (ac);\r\n\t\t\t\tthis.match_pos = pos;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\nvar pop_tab =[[0,1],[15,1],[14,3],[14,1],[16,2],[16,1],[17,2],[17,2],[17,2],[17,1],[18,1],[18,1],[18,3],[20,3],[20,1],[21,2],[21,0],[19,1],[19,1],[19,1]];\r\n\r\n/** @type {!Array<!Array<number>>} */\r\nvar act_tab =[[6,8,11,9,12,10,13,11,8,12,10,13],[],[2,14],[6,8,11,9,12,10,13,11,8,12,10,13],[],[5,16,4,17,3,18],[],[],[6,8,11,9,12,10,13,11,8,12,10,13],[],[],[],[],[],[6,8,11,9,12,10,13,11,8,12,10,13],[],[],[],[],[7,22,2,14],[9,24,11,9,12,10,13,11],[6,8,11,9,12,10,13,11,8,12,10,13],[],[],[]];\r\n\r\nvar goto_tab =[[15,1,14,2,16,3,17,4,18,5,19,6,20,7],[],[],[17,15,18,5,19,6,20,7],[],[],[],[],[14,19,16,3,17,4,18,5,19,6,20,7],[],[],[],[21,20],[],[16,21,17,4,18,5,19,6,20,7],[],[],[],[],[],[19,23],[17,15,18,5,19,6,20,7],[],[],[]];\r\n\r\nvar defact_tab =[-1,0,1,3,5,9,10,11,-1,17,18,19,16,14,-1,4,8,7,6,-1,-1,2,12,15,13];\r\n\r\nvar labels = [{\"label\":\"RegEx'\",\"kind\":{},\"prods\":[0],\"nullable\":0,\"id\":0,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[6,11,12,13,8,10]},{\"label\":\"ERROR_RESYNC\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":1,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[1]},{\"label\":\"|\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":2,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[2]},{\"label\":\"*\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":3,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[3]},{\"label\":\"+\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":4,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[4]},{\"label\":\"?\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":5,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[5]},{\"label\":\"(\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":6,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[6]},{\"label\":\")\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":7,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[7]},{\"label\":\"[\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":8,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[8]},{\"label\":\"]\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":9,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[9]},{\"label\":\"ANY_CHAR\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":10,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[10]},{\"label\":\"ASCII_CODE\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":11,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[11]},{\"label\":\"ESCAPED_CHAR\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":12,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[12]},{\"label\":\"ANY\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":13,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[13]},{\"label\":\"Expression\",\"kind\":{},\"prods\":[2,3],\"nullable\":0,\"id\":14,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[6,11,12,13,8,10]},{\"label\":\"RegEx\",\"kind\":{},\"prods\":[1],\"nullable\":0,\"id\":15,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[6,11,12,13,8,10]},{\"label\":\"Catenation\",\"kind\":{},\"prods\":[4,5],\"nullable\":0,\"id\":16,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[6,11,12,13,8,10]},{\"label\":\"Factor\",\"kind\":{},\"prods\":[6,7,8,9],\"nullable\":0,\"id\":17,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[6,11,12,13,8,10]},{\"label\":\"Term\",\"kind\":{},\"prods\":[10,11,12],\"nullable\":0,\"id\":18,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[6,11,12,13,8,10]},{\"label\":\"Character\",\"kind\":{},\"prods\":[17,18,19],\"nullable\":0,\"id\":19,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[11,12,13]},{\"label\":\"CharacterSet\",\"kind\":{},\"prods\":[13,14],\"nullable\":0,\"id\":20,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[8,10]},{\"label\":\"CharClass\",\"kind\":{},\"prods\":[15,16],\"nullable\":1,\"id\":21,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[11,12,13]},{\"label\":\"$\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":22,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[22]}];\r\n\r\n\r\n\tvar ACTIONS = (function(){\r\n\t\tvar PCB = {};\r\n\t\tvar actions = [\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = new Param();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ first_nfa ].follow =  arguments[0] .start;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlast_nfa =  arguments[0] .end;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval = new Param(global.nfa_states.create(), global.nfa_states.create());\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].follow =  arguments[2] .start;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].follow2 =  arguments[0] .start;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[2] .end].follow = rval.end;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[0] .end].follow = rval.end;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar weight=global.nfa_states.value[ arguments[1] .end].weight;///SV: if weight unused - delete this\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[1] .end]=new Nfa(global.nfa_states.value[ arguments[0] .start]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[1] .end].weight=weight;///SV: if weight unused - delete this\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[0] .start].edge = EDGE.FREE;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t arguments[1] .end =  arguments[0] .end;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval =  arguments[1] ;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval = new Param(global.nfa_states.create(), global.nfa_states.create());\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].follow =  arguments[1] .start;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[1] .end].follow = rval.end;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].follow2 = rval.end;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[1] .end].follow2 =  arguments[1] .start;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval = new Param(global.nfa_states.create(), global.nfa_states.create());\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].follow =  arguments[1] .start;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[1] .end].follow = rval.end;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[1] .end].follow2 =  arguments[1] .start;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval = new Param(global.nfa_states.create(), global.nfa_states.create());\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].follow =  arguments[1] .start;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].follow2 = rval.end;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[ arguments[1] .end].follow = rval.end;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = new Param();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval.start = global.nfa_states.create();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval.end = global.nfa_states.value[rval.start].follow\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t= global.nfa_states.create();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].edge = EDGE.CHAR;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].ccl.set( arguments[0] .charCodeAt( 0 ), true );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval =  arguments[1] ; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\tvar negate = false;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar i = 0, j, start;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval = new Param();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval.start = global.nfa_states.create();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval.end = global.nfa_states.value[rval.start].follow\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t= global.nfa_states.create();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].edge = EDGE.CHAR;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(  arguments[1] .charAt( i ) == '^' ){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnegate = true;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor( j = global.MIN_CHAR; j < global.MAX_CHAR; j++ )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].ccl.set(j,true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor( ; i <  arguments[1] .length; i++ ){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif(  arguments[1] .charAt( i+1 ) == '-'\t&& i+2 <  arguments[1] .length ){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor( j =  arguments[1] .charCodeAt( i-1 );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tj <  arguments[1] .charCodeAt( i+1 );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tj++ )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].ccl.set(j, !negate);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].ccl.set( arguments[1] .charCodeAt(i), !negate);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = new Param();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval.start = global.nfa_states.create();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trval.end = global.nfa_states.value[rval.start].follow\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t= global.nfa_states.create();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].edge = EDGE.CHAR;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor( var i = global.MIN_CHAR; i < global.MAX_CHAR; i++ )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.nfa_states.value[rval.start].ccl.set(i, true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval =  arguments[1]  +  arguments[0] ; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = \"\"; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = String.fromCharCode(  arguments[0] .substr( 1 ) ); \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = {n:'\\n',r:'\\r',t:'\\t',a:'\\a'}[ arguments[0] .substr(1)]|| arguments[0] .substr(1); \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval =  arguments[0] ; \r\nreturn rval;},\r\n];\r\n\t\treturn function (/** number */ act, /** Array<*> */ vstack, /** !PcbClass */ pcb){\r\n\t\t\ttry{\r\n\t\t\t\tPCB = pcb;\r\n\t\t\t\treturn actions[act].apply(null,vstack);\r\n\t\t\t}catch(e){\r\n\t\t\t\tif(e instanceof ReturnValue)return e.valueOf();\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\t\t}\r\n\t})();\r\n\r\n\t/**\r\n\t * @param {number} top\r\n\t * @param {?number} la\r\n\t * @returns {?number}\r\n     */\r\n\tfunction get_act(top, la){\t\r\n\t\tfor(var i = 0; i < act_tab[top].length; i+=2)\r\n\t\t\tif(act_tab[top][i] === la)\r\n\t\t\t\treturn act_tab[top][i+1];\r\n\t\treturn null;\r\n\t}\r\n\tfunction get_goto(top, pop){\t\r\n\t\tfor(var i = 0; i < goto_tab[top].length; i+=2)\r\n\t\t\tif(goto_tab[top][i] === pop)\r\n\t\t\t\treturn goto_tab[top][i+1];\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {!string} src\r\n\t * @constructor\r\n     */\r\n\tvar PcbClass = function(src) {\r\n\t\tthis.src = src;\r\n\t};\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tPcbClass.prototype.line = 1;\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tPcbClass.prototype.column = 1;\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tPcbClass.prototype.offset = 0;\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tPcbClass.prototype.error_step = 0;\r\n\t/**\r\n\t * @type {string}\r\n     */\r\n\tPcbClass.prototype.src = \"\";\r\n\t/**\r\n\t * @type {string}\r\n     */\r\n\tPcbClass.prototype.att = \"\";\r\n\t/**\r\n\t * @type {?number}\r\n     */\r\n\tPcbClass.prototype.la = null;\r\n\t/**\r\n\t * @type {?number}\r\n     */\r\n\tPcbClass.prototype.act = null;\r\n\t/**\r\n\t * @returns {?number}\r\n     */\r\n\tPcbClass.prototype.lex = function() {\r\n        var /** number */ start, /** number */ pos, /** number */ chr, actionResult;\r\n\t\tvar dfa = new DfaLex();\r\n\t\tvar loop = true;\r\n\t\twhile(loop){\r\n\t\t\tdfa.match_pos = 0;\r\n\t\t\tpos = this.offset + 1;\r\n\t\t\tdo{\r\n\t\t\t\tpos--;\r\n\t\t\t\tdfa.state = 0;\r\n\t\t\t\tdfa.match = null;\r\n\t\t\t\tstart = pos;\r\n\t\t\t\tif(this.src.length <= start) {\r\n\t\t\t\t\tthis.la = eof;\r\n\t\t\t\t\treturn eof;\r\n\t\t\t\t}\r\n\t\t\t\tdo{\r\n\t\t\t\t\tchr = this.src.charCodeAt(pos);\r\n\t\t\t\t\tdfa.exec(chr,pos);\r\n\t\t\t\t\tif(dfa.state !== null)\r\n\t\t\t\t\t\tthis.accountChar(chr);\r\n\t\t\t\t\tpos++;\r\n\t\t\t\t}while(dfa.state !== null);\r\n\t\t\t}while(whitespace > -1 && dfa.match === whitespace);\r\n\t\t\tif(dfa.match !== null){\r\n\t\t\t\tthis.att = this.src.slice(start, dfa.match_pos);\r\n\t\t\t\tthis.offset = dfa.match_pos;\r\n\t\t\t\tactionResult = TERMINAL_ACTIONS(this,dfa.match);\r\n\t\t\t\tif(dfa.state !== null)\r\n\t\t\t\t\tthis.accountChar(chr);\r\n\t\t\t\tif(actionResult === Continue)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tthis.att = actionResult;\r\n\t\t\t}else {\r\n\t\t\t\tthis.att = \"\";\r\n\t\t\t}\r\n\t\t\tloop = false;\r\n\t\t}\r\n\t\tthis.la = dfa.match;\r\n\t\treturn this.la;\r\n\t};\r\n\t/**\r\n\t * @param {number} chr\r\n     */\r\n    PcbClass.prototype.accountChar = function(chr) {\r\n\t\tif( chr === 10 ){\r\n\t\t\tthis.line++;\r\n\t\t\tthis.column = 0;\r\n\t\t}\r\n\t\tthis.column++;\r\n\t};\r\n\tfunction parse(/** string */ src, err_off, err_la){\r\n\t\t/**\r\n\t\t * @type {!Array<number>}\r\n         */\r\n\t\tvar\t\tsstack\t\t\t= [0];\r\n\t\t/**\r\n\t\t * @type {!Array<*>}\r\n         */\r\n\t\tvar\t\tvstack\t\t\t= [0];\r\n\t\t/**\r\n\t\t * @type {number}\r\n         */\r\n\t\tvar \terr_cnt\t\t\t= 0;\r\n\t\t/**\r\n\t\t * @type {*}\r\n\t\t */\r\n\t\tvar\t\trval;\r\n\t\t/**\r\n\t\t * @type {?number}\r\n\t\t */\r\n\t\tvar\t\tact;\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t */\r\n\t\tvar i = 0;\r\n\r\n\t\tvar PCB\t= new PcbClass(src);\r\n\t\terr_off\t= err_off || [];\r\n\t\terr_la = err_la || [];\r\n\t\tPCB.lex();\r\n\t\twhile(true){\r\n\t\t\tPCB.act = get_act(sstack[0],PCB.la);\r\n\t\t\tif(PCB.act === null && defact_tab[sstack[0]] >= 0)\r\n\t\t\t\tPCB.act = -defact_tab[sstack[0]];\r\n\t\t\tif(PCB.act === null){//Parse error? Try to recover!\r\n\t\t\t\t//Report errors only when error_step is 0, and this is not a\r\n\t\t\t\t//subsequent error from a previous parse\r\n\t\t\t\tif(PCB.error_step === 0){\r\n\t\t\t\t\terr_cnt++;\r\n\t\t\t\t\terr_off.unshift(PCB.offset - PCB.att.length);\r\n\t\t\t\t\terr_la.unshift([]);\r\n\t\t\t\t\tfor(i = 0; i < act_tab[sstack[0]].length; i+=2)\r\n\t\t\t\t\t\terr_la[0].push(labels[act_tab[sstack[0]][i]]);\r\n\t\t\t\t}\r\n\t\t\t\t//Perform error recovery\t\t\t\r\n\t\t\t\twhile(sstack.length > 1 && PCB.act === null){\r\n\t\t\t\t\tsstack.shift();\r\n\t\t\t\t\tvstack.shift();\r\n\t\t\t\t\t//Try to shift on error token\r\n\t\t\t\t\tPCB.act = get_act(sstack[0],PCB.la);\r\n\t\t\t\t\tif(PCB.act === error_token){\r\n\t\t\t\t\t\tsstack.unshift(PCB.act);\r\n\t\t\t\t\t\tvstack.unshift(\"\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//Is it better to leave the parser now?\r\n\t\t\t\tif(sstack.length > 1 && PCB.act !== null){\r\n\t\t\t\t\t//Ok, now try to shift on the next tokens\r\n\t\t\t\t\twhile(PCB.la !== eof){\r\n\t\t\t\t\t\tPCB.act = act_tab[sstack[0]][i+1];\r\n\t\t\t\t\t\tif(PCB.act != null)break;\r\n\t\t\t\t\t\twhile(PCB.lex() != null)PCB.offset++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(PCB.act === null || PCB.la === eof){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t//Try to parse the next three tokens successfully...\r\n\t\t\t\tPCB.error_step = 3;\r\n\t\t\t}\r\n\t\t\tif(PCB.act > 0){//Shift\r\n\t\t\t\t//Parse tree generation\r\n\t\t\t\tsstack.unshift(PCB.act);\r\n\t\t\t\tvstack.unshift(PCB.att);\r\n\t\t\t\tPCB.lex();\r\n\t\t\t\t//Successfull shift and right beyond error recovery?\r\n\t\t\t\tif(PCB.error_step > 0)\r\n\t\t\t\t\tPCB.error_step--;\r\n\t\t\t}else{\t//Reduce\t\r\n\t\t\t\tact = -PCB.act;\r\n\t\t\t\t//vstack.unshift(vstack);\r\n\t\t\t\trval = ACTIONS(act,vstack,PCB);\r\n\t\t\t\t//vstack.shift();\r\n\t\t\t\tsstack.splice(0,pop_tab[act][1]);\r\n\t\t\t\tvstack.splice(0,pop_tab[act][1]);\r\n\t\t\t\t\r\n\t\t\t\tPCB.act = get_goto(sstack[0],pop_tab[act][0]);\r\n\t\t\t\t//Do some parse tree construction if desired\r\n\t\t\t\t//Goal symbol match?\r\n\t\t\t\tif(act === 0) break; //Don't use PCB.act here!\r\n\t\t\t\r\n\t\t\t\t//...and push it!\r\n\t\t\t\tsstack.unshift(PCB.act);\r\n\t\t\t\tvstack.unshift(rval);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn err_cnt;\r\n\t}\r\n\treturn parse;\r\n})(22,-1,1);\r\n\r\n\r\n/**\r\n * Compiles the given regex into a nondeterministic finite automata.\r\n * @param {string} str - The regex to compile.\r\n * @param {number} accept - The id of the symbol accepted.\r\n * @param {boolean} case_insensitive - Whether the regex is case insensitive.\r\n * @param {number} cur_line - The current line number being parsed.  Used in error\r\n * logging.\r\n * @module {jscc.regex} jscc/regex\r\n * @requires module:jscc/global\r\n * @requires module:jscc/log/log\r\n */\r\nfunction compile_regex( str, accept, case_insensitive, cur_line ){\r\n\tvar i, j;\r\n\tvar weight = 0;\r\n\tvar true_edges = 0;\r\n\tvar error_offsets = [];\r\n\tvar error_expects = [];\r\n\tvar error_count = 0;\r\n\r\n\tif( str == \"\" )\r\n\t\treturn;\r\n\r\n\tcur_line = cur_line || 0;\r\n\r\n\t//_print( \"str = >\" + str + \"< \" + case_insensitive );\r\n\r\n\tfirst_nfa = global.nfa_states.create();\r\n\tif( ( error_count = __parse( str, error_offsets, error_expects ) ) == 0 ){\r\n\t\t//If the symbol should be case-insensitive, manipulate the\r\n\t\t//character sets on the newly created items.\r\n\t\tif( case_insensitive ){\r\n\t\t\tfor( i = 0; i < global.nfa_states.value.length; i++ ){\r\n\t\t\t\tif( global.nfa_states.value[i].edge == EDGE.CHAR ){\r\n\t\t\t\t\tfor( j = global.MIN_CHAR; j < global.MAX_CHAR; j++ ){\r\n\t\t\t\t\t\tif( global.nfa_states.value[i].ccl.get( j ) ){\r\n\t\t\t\t\t\t\tglobal.nfa_states.value[i].ccl.set(String.fromCharCode( j ).toUpperCase().charCodeAt( 0 ), true );\r\n\t\t\t\t\t\t\tglobal.nfa_states.value[i].ccl.set(String.fromCharCode( j ).toLowerCase().charCodeAt( 0 ), true );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t\t2008-5-9\tRadim Cebis:\r\n\r\n\t\t\tI think that computing weight of the nfa_states.value is weird,\r\n\t\t\tIMHO nfa_state which accepts a symbol, should have\r\n\t\t\tweight according to the order...\r\n\t\t*/\r\n\t\tglobal.nfa_states.value[ last_nfa ].accept = accept;\r\n\t\tglobal.nfa_states.value[ last_nfa ].weight = global.regex_weight++;\r\n\r\n\t\tif( first_nfa > 0 ){\r\n\t\t\ti = 0;\r\n\t\t\twhile( global.nfa_states.value[i].follow2 != -1 )\r\n\t\t\t\ti = global.nfa_states.value[i].follow2;\r\n\r\n\t\t\tglobal.nfa_states.value[i].follow2 = first_nfa;\r\n\t\t}\r\n\t}else{\r\n\t\tfor( i = 0; i < error_count; i++ ){\r\n\t\t\tvar spaces = '';\r\n\t\t\tfor( j = 0; j < error_offsets[i]; j++ )\r\n\t\t\t\tspaces += \" \";\r\n\r\n\t\t\tlog.error( \"Regular expression:\\n\\t\" + str + \"\\n\\t\" +\r\n\t\t\t \t\tspaces + \"^ expecting \" + error_expects[i].join() + \" on line \" + cur_line );\r\n\t\t}\r\n\t}\r\n}\r\nreturn compile_regex;\r\n\r\n\r\n//TESTING AREA ;)\r\n//compile_regex( \"[A-Z][A-Z0-9]*\", 0 );\r\n//compile_regex( \"ab|c\", 1 );\r\n//compile_regex( \"[0-9]+\", 1 );\r\n//print_nfa();\r\n//var d = create_subset( nfa_states.value );\r\n//print_dfa( d );\r\n//d = minimize_dfa( d );\r\n//print_dfa( d );\r\n}));\r\n\r\n\r\n\n",
    "/*\r\n\tThis is the general, platform-independent part of every parser driver;\r\n\tInput-/Output and Feature-Functions are done by the particular drivers\r\n\tcreated for the particular platform.\r\n*/\r\n\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine('lib/jscc/parse',['require', './global', './regex', './tabgen', './log/log', './classes/Production', './enums/ASSOC', './enums/SYM', './enums/SPECIAL'], factory);\r\n\t} else if (typeof module === 'object' && module.exports) {\r\n\t\tmodule.exports = factory(require);\r\n\t} else {\r\n\t\troot.jsccparse = factory(function(mod) {\r\n\t\t    return root[\"jscc\" + mod.split(\"/\").pop()];\r\n\t\t});\r\n\t}\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {function(string, string=):number}\r\n   */\r\n  function(require, others) {\r\nvar log, global = /** @type {jscc.global} */ (require(\"./global\")),\r\n    compile_regex = /** @type {function(string, number, boolean, number)} */ (require(\"./regex\")),\r\n    tabgen = /** @type {jscc.tabgen} */ (require(\"./tabgen\")),\r\n    Production = /** @type {function(new:jscc.classes.Production, ?ProductionOptions=)} */ (require(\"./classes/Production\")),\r\n    ASSOC = require(\"./enums/ASSOC\"),\r\n    SYM = require(\"./enums/SYM\"),\r\n    SPECIAL = require(\"./enums/SPECIAL\");\r\n\r\n//>>excludeStart(\"closure\", pragmas.closure);\r\nvar has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n//>>excludeEnd(\"closure\");\r\n\r\n/**\r\n * @suppress {uselessCode}\r\n */\r\n(function() {\r\n    if (has(\"node\")) {\r\n        log = /** @type {jscc.log} */ (require(\"./log/logNode\"));\r\n    } else {\r\n        log = /** @type {jscc.log} */ (require(\"./log/log\"));\r\n    }\r\n})();\r\n\r\nvar\t\tfirst_lhs;\r\nvar\t\tcur_line;\r\n\r\n//Wrapper for semantic errors\r\nfunction line_error( line, txt ){\r\n\tlog.error( \"line \" + line + \": \" + txt );\r\n}\r\n\r\nvar __parse=(function(/** number */ eof, /** number */ whitespace, /** number */ error_token){\r\n\t\r\n/// there was \"continue\" in code, we must to replace it\r\nvar Continue = function(){throw Continue;};\r\n\r\n\t/**\r\n\t * @template T\r\n\t * @param {T} value\r\n\t * @constructor\r\n\t * @extends {Error}\r\n     */\r\n\tvar ReturnValue = function(value) {\r\n\t\tError.call(this);\r\n\t\tthis._value = value;\r\n\t};\r\n\tReturnValue.prototype = Object.create(Error.prototype);\r\n\tReturnValue.prototype.constructor = ReturnValue;\r\n\t/**\r\n\t * @type {T}\r\n\t * @private\r\n     */\r\n\tReturnValue.prototype._value = null;\r\n\t/**\r\n\t * @returns {T}\r\n     */\r\n\tReturnValue.prototype.valueOf = function() {\r\n\t\treturn this._value;\r\n\t};\r\n\r\n\t///can return value from any place of callback\r\n\tfunction Return(value){\r\n\t\tthrow new ReturnValue(value);\r\n\t}\r\n\r\n\tvar TERMINAL_ACTIONS = (function(){\r\n\t\tfunction emptyFn(PCB){return PCB.att;}\r\n\t\tvar actions = ({\r\n\t\"13\": /** @suppress {uselessCode} */ function(PCB){\t\t\treturn PCB.att.substr(2, PCB.att.length - 4 ); \r\n\t\treturn PCB.att;},\r\n\t\"17\": /** @suppress {uselessCode} */ function(PCB){\t\treturn Continue.apply(null, arguments);\r\n\t\treturn PCB.att;},\r\n\t\"18\": /** @suppress {uselessCode} */ function(PCB){\t\treturn Continue.apply(null, arguments);\r\n\t\treturn PCB.att;},\r\n\t\"19\": /** @suppress {uselessCode} */ function(PCB){\t\treturn Continue.apply(null, arguments);\r\n\t\treturn PCB.att;},\r\n\r\n})\r\n\t\treturn function(/** @type {!PcbClass} */ PCB, match){\r\n\t\t\ttry{\r\n\t\t\t\treturn (actions[match] || emptyFn)(PCB);\r\n\t\t\t}catch(e){\r\n\t\t\t\tif(e instanceof ReturnValue)return e.valueOf();\r\n\t\t\t\tif(e == Continue)return Continue;\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\t\t}\r\n\t})();\r\n\t/**\r\n\t * @constructor\r\n     */\r\n\tvar DfaLex = function() {\r\n\t\tthis._dfaData = [{line:[[[[[[null,\r\n\t[[[null,\r\n\t1],\r\n\t[2,\r\n\tnull]],\r\n\t[[null,\r\n\t1],\r\n\tnull]]],\r\n\tnull],\r\n\t[[[[[1,\r\n\t3],\r\n\t[19,\r\n\t22]],\r\n\t[null,\r\n\t[4,\r\n\t23]]],\r\n\t[null,\r\n\t[[null,\r\n\t5],\r\n\t[null,\r\n\t24]]]],\r\n\t[5,\r\n\t[[5,\r\n\t[6,\r\n\t7]],\r\n\t[[8,\r\n\t25],\r\n\t[9,\r\n\tnull]]]]]],\r\n\t[[[[[[null,\r\n\t5],\r\n\t5],\r\n\t5],\r\n\t5],\r\n\t[5,\r\n\t[[5,\r\n\t[5,\r\n\t26]],\r\n\t[null,\r\n\t[10,\r\n\t5]]]]],\r\n\t[[[[[null,\r\n\t5],\r\n\t5],\r\n\t5],\r\n\t5],\r\n\t[5,\r\n\t[[5,\r\n\t[5,\r\n\tnull]],\r\n\t[[11,\r\n\tnull],\r\n\t[12,\r\n\tnull]]]]]]],\r\n\tnull]],\r\n\taccept:-1},\r\n\t{line:[[[[[[null,\r\n\t[[[null,\r\n\t1],\r\n\tnull],\r\n\t[[null,\r\n\t1],\r\n\tnull]]],\r\n\tnull],\r\n\t[[[[[1,\r\n\tnull],\r\n\tnull],\r\n\tnull],\r\n\tnull],\r\n\tnull]],\r\n\tnull],\r\n\tnull]],\r\n\taccept:19},\r\n\t{line:[],\r\n\taccept:17},\r\n\t{line:[],\r\n\taccept:6},\r\n\t{line:[],\r\n\taccept:10},\r\n\t{line:[[[[null,\r\n\t[[null,\r\n\t[null,\r\n\t[[null,\r\n\t5],\r\n\tnull]]],\r\n\t[5,\r\n\t[[5,\r\n\tnull],\r\n\tnull]]]],\r\n\t[[[[[[null,\r\n\t5],\r\n\t5],\r\n\t5],\r\n\t5],\r\n\t[5,\r\n\t[[5,\r\n\t[5,\r\n\tnull]],\r\n\t[null,\r\n\t[null,\r\n\t5]]]]],\r\n\t[[[[[null,\r\n\t5],\r\n\t5],\r\n\t5],\r\n\t5],\r\n\t[5,\r\n\t[[5,\r\n\t[5,\r\n\tnull]],\r\n\tnull]]]]],\r\n\tnull]],\r\n\taccept:16},\r\n\t{line:[],\r\n\taccept:8},\r\n\t{line:[],\r\n\taccept:7},\r\n\t{line:[],\r\n\taccept:3},\r\n\t{line:[],\r\n\taccept:4},\r\n\t{line:[],\r\n\taccept:5},\r\n\t{line:[],\r\n\taccept:9},\r\n\t{line:[],\r\n\taccept:11},\r\n\t{line:[],\r\n\taccept:15},\r\n\t{line:[],\r\n\taccept:2},\r\n\t{line:[],\r\n\taccept:14},\r\n\t{line:[],\r\n\taccept:12},\r\n\t{line:[],\r\n\taccept:18},\r\n\t{line:[],\r\n\taccept:13},\r\n\t{line:[[[[19,\r\n\t[[[[19,\r\n\t[13,\r\n\t19]],\r\n\t19],\r\n\t19],\r\n\t19]],\r\n\t[[19,\r\n\t[19,\r\n\t[19,\r\n\t[[27,\r\n\t19],\r\n\t19]]]],\r\n\t19]],\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[[19,\r\n\t[[[[19,\r\n\t[13,\r\n\t19]],\r\n\t19],\r\n\t19],\r\n\t19]],\r\n\t[[19,\r\n\t[19,\r\n\t[19,\r\n\t[[27,\r\n\t19],\r\n\t19]]]],\r\n\t19]],\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\tnull]]]]]]]]],\r\n\taccept:15},\r\n\t{line:[[[[23,\r\n\t[[[23,\r\n\t[23,\r\n\t[23,\r\n\t15]]],\r\n\t23],\r\n\t23]],\r\n\t[[23,\r\n\t[23,\r\n\t[23,\r\n\t[[28,\r\n\t23],\r\n\t23]]]],\r\n\t23]],\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\tnull]]]]]]]]],\r\n\taccept:14},\r\n\t{line:[[[[null,\r\n\t[[[[null,\r\n\t[null,\r\n\t14]],\r\n\tnull],\r\n\tnull],\r\n\tnull]],\r\n\tnull],\r\n\tnull]],\r\n\taccept:-1},\r\n\t{line:[[[[23,\r\n\t[[[23,\r\n\t[23,\r\n\t[23,\r\n\t15]]],\r\n\t23],\r\n\t23]],\r\n\t[[23,\r\n\t[23,\r\n\t[23,\r\n\t[[28,\r\n\t23],\r\n\t23]]]],\r\n\t23]],\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[null,\r\n\t[null,\r\n\t[null,\r\n\t[null,\r\n\t[null,\r\n\t[null,\r\n\t[29,\r\n\tnull]]]]]]],\r\n\tnull]],\r\n\taccept:-1},\r\n\t{line:[[[[null,\r\n\t[null,\r\n\t[null,\r\n\t[null,\r\n\t[null,\r\n\t[16,\r\n\tnull]]]]]],\r\n\tnull],\r\n\tnull]],\r\n\taccept:-1},\r\n\t{line:[[[[null,\r\n\t[[null,\r\n\t[[null,\r\n\t[37,\r\n\tnull]],\r\n\tnull]],\r\n\tnull]],\r\n\tnull],\r\n\tnull]],\r\n\taccept:-1},\r\n\t{line:[[[[19,\r\n\t[[[[19,\r\n\t[20,\r\n\t19]],\r\n\t19],\r\n\t19],\r\n\t19]],\r\n\t[[19,\r\n\t[19,\r\n\t[19,\r\n\t[[27,\r\n\t19],\r\n\t19]]]],\r\n\t19]],\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\t[19,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[[23,\r\n\t[[[23,\r\n\t[23,\r\n\t[23,\r\n\t21]]],\r\n\t23],\r\n\t23]],\r\n\t[[23,\r\n\t[23,\r\n\t[23,\r\n\t[[28,\r\n\t23],\r\n\t23]]]],\r\n\t23]],\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\t[23,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[[38,\r\n\t[[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t30]]]],\r\n\t38]],\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[31,\r\n\t38]]]]]]],\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[[null,\r\n\t[[null,\r\n\t[null,\r\n\t[null,\r\n\t[null,\r\n\t29]]]],\r\n\tnull]],\r\n\tnull],\r\n\tnull]],\r\n\taccept:-1},\r\n\t{line:[[[[29,\r\n\t[[29,\r\n\t[29,\r\n\t[29,\r\n\t[29,\r\n\t17]]]],\r\n\t29]],\r\n\t29],\r\n\t[29,\r\n\t[29,\r\n\t[29,\r\n\t[29,\r\n\t[29,\r\n\t[29,\r\n\t[29,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[[32,\r\n\t[[32,\r\n\t[[32,\r\n\t[33,\r\n\t32]],\r\n\t32]],\r\n\t32]],\r\n\t32],\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[36,\r\n\t[[36,\r\n\t[36,\r\n\t[36,\r\n\t[[36,\r\n\t18],\r\n\t36]]]],\r\n\t36]],\r\n\t[36,\r\n\t[36,\r\n\t[36,\r\n\t[36,\r\n\t[36,\r\n\t[36,\r\n\t[36,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[null,\r\n\t[[null,\r\n\t[null,\r\n\t[null,\r\n\t[[null,\r\n\t36],\r\n\tnull]]]],\r\n\tnull]],\r\n\tnull]],\r\n\taccept:-1},\r\n\t{line:[[[[38,\r\n\t[[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t35]]]],\r\n\t38]],\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[31,\r\n\t38]]]]]]],\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[[32,\r\n\t[[32,\r\n\t[[32,\r\n\t[33,\r\n\t32]],\r\n\t32]],\r\n\t32]],\r\n\t[[32,\r\n\t[32,\r\n\t[32,\r\n\t[[32,\r\n\t34],\r\n\t32]]]],\r\n\t32]],\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[[32,\r\n\t[[32,\r\n\t[[32,\r\n\t[33,\r\n\t32]],\r\n\t32]],\r\n\t32]],\r\n\t[[32,\r\n\t[32,\r\n\t[32,\r\n\t[[32,\r\n\t34],\r\n\t32]]]],\r\n\t32]],\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\t[32,\r\n\tnull]]]]]]]]],\r\n\taccept:-1},\r\n\t{line:[[[[38,\r\n\t[[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t35]]]],\r\n\t38]],\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[31,\r\n\t38]]]]]]],\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\t[38,\r\n\tnull]]]]]]]]],\r\n\taccept:-1}];\r\n\t};\r\n\t/**\r\n\t * @type {!Array<!{line: !Array, accept: !number}>}\r\n\t * @private\r\n     */\r\n\tDfaLex.prototype._dfaData = [];\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tDfaLex.prototype.match_pos = 0;\r\n\t/**\r\n\t * @type {?number}\r\n     */\r\n\tDfaLex.prototype.state = 0;\r\n\t/**\r\n\t * @type {?number}\r\n     */\r\n\tDfaLex.prototype.match = null;\r\n\t/**\r\n\t * @param {number} chr\r\n\t * @param {number} pos\r\n     */\r\n\tDfaLex.prototype.exec = function(chr, pos) {\r\n\t\tif (this.state !== null) {\r\n\t\t    if ((typeof this.state !== \"number\") || this.state >= this._dfaData.length) {\r\n\t\t        this.state = null;\r\n\t\t        throw new Error(\"Invalid value for DfaLex.state at chr \" + chr + \" and pos \" + pos);\r\n\t\t    }\r\n\t\t\tvar line = this._dfaData[this.state].line;\r\n\t\t\tif (typeof line === \"undefined\" || line === null) {\r\n\t\t\t    var badState = this.state;\r\n\t\t\t    this.state = null;\r\n\t\t\t    throw new Error(\"At chr \" + chr + \" and pos \" + pos +\r\n\t\t\t                    \", DfaLex._dfaData[\" + badState +\r\n\t\t\t                    \"] appears to exist, but its line property is \" +\r\n\t\t\t                    (typeof line === \"undefined\" ? \"undefined.\" : \"null.\"));\r\n\t\t\t}\r\n\t\t\tvar p, st;\r\n\t\t\tfor (p = 1 << 8, st = line; p; p >>= 1) {\r\n\t\t\t\tif ((chr & p) !== 0) {\r\n\t\t\t\t\tst = st[1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tst = st[0];\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof st === \"undefined\") {\r\n\t\t\t\t    st = null;\r\n\t\t\t\t}\r\n\t\t\t\tif (st === null)break;\r\n\t\t\t\tif (Array.isArray(st))continue;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tvar ac = this._dfaData[this.state].accept;\r\n\t\t\tthis.state = /** @type {?number} */ (st);\r\n\t\t\tif (ac !== -1) {\r\n\t\t\t\tthis.match = /** @type{number} */ (ac);\r\n\t\t\t\tthis.match_pos = pos;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\nvar pop_tab =[[0,1],[24,5],[20,1],[23,1],[21,2],[21,1],[26,3],[26,3],[26,3],[26,2],[26,3],[27,2],[27,1],[30,3],[30,2],[22,2],[22,1],[32,4],[32,2],[33,3],[33,1],[34,3],[36,2],[36,2],[36,0],[35,1],[35,0],[37,2],[37,1],[38,1],[38,1],[38,1],[25,1],[25,2],[25,2],[25,0],[39,2],[39,1],[28,1],[28,1],[31,1],[29,1],[29,0]];\r\n\r\n/** @type {!Array<!Array<number>>} */\r\nvar act_tab =[[12,5,13,6],[],[3,9,4,10,5,11,6,13,14,16,15,17],[],[13,18],[13,19,16,21],[],[2,23,3,9,4,10,5,11,6,13,14,16,15,17],[],[14,16,15,17],[14,16,15,17],[14,16,15,17],[7,28,14,16,15,17],[14,16,15,17],[],[16,21,12,5,13,6],[],[],[],[],[],[],[],[1,35,16,21],[7,36,14,16,15,17],[7,37,14,16,15,17],[7,38,14,16,15,17],[],[],[7,40],[],[12,5,13,6],[1,35,12,5,16,21,13,6],[],[8,45],[7,46],[],[],[],[],[],[],[],[],[],[11,54,16,21,14,16,15,17],[],[9,55,7,56],[],[10,58],[11,54,16,21,14,16,15,17],[],[],[],[],[11,54,16,21,14,16,15,17],[],[12,5,13,6],[16,21,14,16,15,17],[],[],[],[],[]];\r\n\r\nvar goto_tab =[[24,1,20,2,25,3,39,4],[],[21,7,26,8,27,12,30,14,28,15],[],[],[31,20],[],[26,22,27,12,30,14,28,15],[],[27,24,30,14,28,15],[27,25,30,14,28,15],[27,26,30,14,28,15],[30,27,28,15],[28,29],[],[25,30,31,31,39,4],[],[],[],[],[],[],[],[22,32,32,33,31,34],[30,27,28,15],[30,27,28,15],[30,27,28,15],[],[],[29,39],[],[25,41,39,4],[32,42,23,43,25,44,31,34,39,4],[],[],[],[],[],[],[],[],[],[],[],[],[33,47,34,48,35,49,37,50,38,51,31,52,28,53],[],[],[],[36,57],[38,59,31,52,28,53],[],[],[],[],[34,60,35,49,37,50,38,51,31,52,28,53],[],[25,61,39,4],[28,62,31,63],[],[],[],[],[]];\r\n\r\nvar defact_tab =[35,0,-1,2,32,-1,37,-1,5,-1,-1,-1,-1,-1,12,35,38,39,36,34,33,40,4,-1,-1,-1,-1,11,9,42,14,35,35,16,-1,-1,6,7,8,10,41,13,15,1,3,26,18,-1,20,24,25,28,29,30,31,26,17,35,-1,27,19,21,23,22];\r\n\r\nvar labels = [{\"label\":\"def'\",\"kind\":{},\"prods\":[0],\"nullable\":0,\"id\":0,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[12,3,4,5,6,13,14,15]},{\"label\":\"ERROR_RESYNC\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":1,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[1]},{\"label\":\"##\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":2,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[2]},{\"label\":\"<\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":3,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[3]},{\"label\":\">\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":4,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[4]},{\"label\":\"^\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":5,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[5]},{\"label\":\"!\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":6,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[6]},{\"label\":\";\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":7,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[7]},{\"label\":\":\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":8,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[8]},{\"label\":\"|\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":9,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[9]},{\"label\":\"&\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":10,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[10]},{\"label\":\"~\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":11,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[11]},{\"label\":\"=>\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":12,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[12]},{\"label\":\"CODE\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":13,\"code\":\"\\treturn %match.substr(2, %match.length - 4 ); \",\"level\":0,\"special\":{},\"defined\":false,\"first\":[13]},{\"label\":\"STRING_SINGLE\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":14,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[14]},{\"label\":\"STRING_DOUBLE\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":15,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[15]},{\"label\":\"IDENT\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":16,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[16]},{\"label\":\"n\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":17,\"code\":\"return Continue.apply(null, arguments);\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[17]},{\"label\":\"/~([^~]/|~[^/]|[^~/])*~/\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":18,\"code\":\"return Continue.apply(null, arguments);\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[18]},{\"label\":\"[tr ]+\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":19,\"code\":\"return Continue.apply(null, arguments);\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[19]},{\"label\":\"header_code\",\"kind\":{},\"prods\":[2],\"nullable\":1,\"id\":20,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[12,13]},{\"label\":\"token_assocs\",\"kind\":{},\"prods\":[4,5],\"nullable\":0,\"id\":21,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[3,4,5,6,14,15]},{\"label\":\"grammar_defs\",\"kind\":{},\"prods\":[15,16],\"nullable\":0,\"id\":22,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[16,1]},{\"label\":\"footer_code\",\"kind\":{},\"prods\":[3],\"nullable\":1,\"id\":23,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[12,13]},{\"label\":\"def\",\"kind\":{},\"prods\":[1],\"nullable\":0,\"id\":24,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[12,3,4,5,6,13,14,15]},{\"label\":\"code_opt\",\"kind\":{},\"prods\":[32,33,34,35],\"nullable\":1,\"id\":25,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[12,13]},{\"label\":\"token_assoc\",\"kind\":{},\"prods\":[6,7,8,9,10],\"nullable\":0,\"id\":26,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[3,4,5,6,14,15]},{\"label\":\"token_defs\",\"kind\":{},\"prods\":[11,12],\"nullable\":0,\"id\":27,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[14,15]},{\"label\":\"string\",\"kind\":{},\"prods\":[38,39],\"nullable\":0,\"id\":28,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[14,15]},{\"label\":\"opt_semicolon\",\"kind\":{},\"prods\":[41,42],\"nullable\":1,\"id\":29,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[7]},{\"label\":\"token_def\",\"kind\":{},\"prods\":[13,14],\"nullable\":0,\"id\":30,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[14,15]},{\"label\":\"identifier\",\"kind\":{},\"prods\":[40],\"nullable\":0,\"id\":31,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[16]},{\"label\":\"grammar_def\",\"kind\":{},\"prods\":[17,18],\"nullable\":0,\"id\":32,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[16,1]},{\"label\":\"productions\",\"kind\":{},\"prods\":[19,20],\"nullable\":1,\"id\":33,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[10,12,13,9,16,14,15,11]},{\"label\":\"rhs\",\"kind\":{},\"prods\":[21],\"nullable\":1,\"id\":34,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[10,12,13,16,14,15,11]},{\"label\":\"sequence_opt\",\"kind\":{},\"prods\":[25,26],\"nullable\":1,\"id\":35,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[16,14,15,11]},{\"label\":\"rhs_prec\",\"kind\":{},\"prods\":[22,23,24],\"nullable\":1,\"id\":36,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[10]},{\"label\":\"sequence\",\"kind\":{},\"prods\":[27,28],\"nullable\":0,\"id\":37,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[16,14,15,11]},{\"label\":\"symbol\",\"kind\":{},\"prods\":[29,30,31],\"nullable\":0,\"id\":38,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[16,14,15,11]},{\"label\":\"code\",\"kind\":{},\"prods\":[36,37],\"nullable\":0,\"id\":39,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":true,\"first\":[13]},{\"label\":\"$\",\"kind\":{},\"prods\":[],\"nullable\":false,\"id\":40,\"code\":\"\",\"level\":0,\"special\":{},\"defined\":false,\"first\":[40]}];\r\n\r\n\r\n\tvar ACTIONS = (function(){\r\n\t\tvar PCB = {};\r\n\t\tvar actions = [\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[4] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; global.code_head +=  arguments[0] ; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; global.code_foot +=  arguments[0] ; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[1] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\tglobal.assoc_level++;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor( var i = 0; i <  arguments[1] .length; i++ ){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[  arguments[1] [i] ].level = global.assoc_level;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[  arguments[1] [i] ].assoc = ASSOC.LEFT;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\tglobal.assoc_level++;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor( var i = 0; i <  arguments[1] .length; i++ )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[  arguments[1] [i] ].level = global.assoc_level;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[  arguments[1] [i] ].assoc = ASSOC.RIGHT;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\tglobal.assoc_level++;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor( var i = 0; i <  arguments[1] .length; i++ ){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[  arguments[1] [i] ].level = global.assoc_level;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[  arguments[1] [i] ].assoc = ASSOC.NOASSOC;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[1] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\tif( global.whitespace_token == -1 ){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar regex =  arguments[1] .substr( 1,  arguments[1] .length - 2 );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.whitespace_token = tabgen.create_symbol( \"WHITESPACE\", SYM.TERM, SPECIAL.WHITESPACE );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcompile_regex( regex, global.whitespace_token,  arguments[1] [0] != '\\'', cur_line  );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tline_error( PCB.line, \"Multiple whitespace definition\" );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\t arguments[1] .push( arguments[0] ); rval =  arguments[1] ; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = [ arguments[0] ]; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = tabgen.create_symbol(  arguments[1] , SYM.TERM, SPECIAL.NONE );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar regex =  arguments[2] .substr( 1,  arguments[2] .length - 2 );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[rval].code =  arguments[0] ;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcompile_regex( regex, global.symbols[ rval ].id,  arguments[2] .charAt( 0 ) != '\\'', cur_line  );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\tvar regex =  arguments[1] .substr( 1,  arguments[1] .length - 2 );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trval = tabgen.create_symbol( regex.replace( /\\\\/g, \"\" ), SYM.TERM, SPECIAL.NONE );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[rval].code =  arguments[0] ;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcompile_regex( regex, global.symbols[ rval ].id,   arguments[1] .charAt( 0 ) != '\\'', cur_line );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[1] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar nonterm = tabgen.create_symbol(  arguments[3] , SYM.NONTERM, SPECIAL.NONE );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[nonterm].defined = true;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor( var i = 0; i <  arguments[1] .length; i++ ){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.productions[  arguments[1] [i] ].lhs = nonterm;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[nonterm].prods.push(  arguments[1] [i] );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( first_lhs ){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfirst_lhs = false;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[0].label = global.symbols[nonterm].label + \"\\'\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.productions[0].rhs.push( nonterm );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[1] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\t arguments[2] .push( arguments[0] ); rval =  arguments[2] ; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = [ arguments[0] ]; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar prod = new Production({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid:global.productions.length,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlhs:null,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trhs:/** @type {Array<number>} */ ( arguments[2] ),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlevel:/** @type {number} */ ( arguments[1] ),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcode:( arguments[0] ==\"\")?global.DEF_PROD_CODE:/** @type {string} */ ( arguments[0] )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t//Get level of the leftmost terminal\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t//as production level.\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( prod.level == 0 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( prod.rhs.length > 0 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor( var i = prod.rhs.length-1; i >= 0; i-- )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( global.symbols[prod.rhs[i]] &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.symbols[prod.rhs[i]].kind == SYM.TERM )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprod.level = global.symbols[prod.rhs[i]].level;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tglobal.productions.push( prod );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trval = prod.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; \tvar index;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( ( index = tabgen.find_symbol(  arguments[0] , SYM.TERM, SPECIAL.NONE ) ) > -1 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trval = global.symbols[index].level;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tline_error( PCB.line, \"Call to undefined terminal \\\"\" +  arguments[0]  + \"\\\"\" );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\tvar index;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( ( index = tabgen.find_symbol(  arguments[0] .substr( 1,  arguments[0] .length - 2).replace( /\\\\/g, \"\" ),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSYM.TERM, SPECIAL.NONE ) ) > -1 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trval = global.symbols[index].level;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tline_error(  PCB.line, \"Call to undefined terminal \\\"\" +  arguments[0]  + \"\\\"\" );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = 0; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\trval = []; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;  arguments[1] .push( arguments[0] ); rval =  arguments[1]  \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; rval = [ arguments[0] ]; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( ( rval = tabgen.find_symbol(  arguments[0] , SYM.TERM, SPECIAL.NONE ) ) <= -1 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trval = tabgen.create_symbol(  arguments[0] , SYM.NONTERM, SPECIAL.NONE );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( ( rval = tabgen.find_symbol(  arguments[0] .substr( 1,  arguments[0] .length - 2).replace( /\\\\/g, \"\" ), SYM.TERM, SPECIAL.NONE ) ) <= -1 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tline_error(  PCB.line, \"Call to undefined terminal \" +  arguments[0]  );\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; rval = tabgen.find_symbol( \"ERROR_RESYNC\", SYM.TERM,\tSPECIAL.ERROR ); \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; rval = \"return \" +  arguments[0]  + \".apply(null, arguments);\"; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; rval = \"(\" +  arguments[0]  + \").apply(null, arguments);\"; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; rval = \"\"; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; rval =  arguments[1]  +  arguments[0] ; \r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval;rval =  arguments[0] ;\r\nreturn rval;},\r\n\t\tfunction(){\r\nvar rval; rval = \"\"; \r\nreturn rval;},\r\n];\r\n\t\treturn function (/** number */ act, /** Array<*> */ vstack, /** !PcbClass */ pcb){\r\n\t\t\ttry{\r\n\t\t\t\tPCB = pcb;\r\n\t\t\t\treturn actions[act].apply(null,vstack);\r\n\t\t\t}catch(e){\r\n\t\t\t\tif(e instanceof ReturnValue)return e.valueOf();\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\t\t}\r\n\t})();\r\n\r\n\t/**\r\n\t * @param {number} top\r\n\t * @param {?number} la\r\n\t * @returns {?number}\r\n     */\r\n\tfunction get_act(top, la){\t\r\n\t\tfor(var i = 0; i < act_tab[top].length; i+=2)\r\n\t\t\tif(act_tab[top][i] === la)\r\n\t\t\t\treturn act_tab[top][i+1];\r\n\t\treturn null;\r\n\t}\r\n\tfunction get_goto(top, pop){\t\r\n\t\tfor(var i = 0; i < goto_tab[top].length; i+=2)\r\n\t\t\tif(goto_tab[top][i] === pop)\r\n\t\t\t\treturn goto_tab[top][i+1];\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {!string} src\r\n\t * @constructor\r\n     */\r\n\tvar PcbClass = function(src) {\r\n\t\tthis.src = src;\r\n\t};\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tPcbClass.prototype.line = 1;\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tPcbClass.prototype.column = 1;\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tPcbClass.prototype.offset = 0;\r\n\t/**\r\n\t * @type {number}\r\n     */\r\n\tPcbClass.prototype.error_step = 0;\r\n\t/**\r\n\t * @type {string}\r\n     */\r\n\tPcbClass.prototype.src = \"\";\r\n\t/**\r\n\t * @type {string}\r\n     */\r\n\tPcbClass.prototype.att = \"\";\r\n\t/**\r\n\t * @type {?number}\r\n     */\r\n\tPcbClass.prototype.la = null;\r\n\t/**\r\n\t * @type {?number}\r\n     */\r\n\tPcbClass.prototype.act = null;\r\n\t/**\r\n\t * @returns {?number}\r\n     */\r\n\tPcbClass.prototype.lex = function() {\r\n        var /** number */ start, /** number */ pos, /** number */ chr, actionResult;\r\n\t\tvar dfa = new DfaLex();\r\n\t\tvar loop = true;\r\n\t\twhile(loop){\r\n\t\t\tdfa.match_pos = 0;\r\n\t\t\tpos = this.offset + 1;\r\n\t\t\tdo{\r\n\t\t\t\tpos--;\r\n\t\t\t\tdfa.state = 0;\r\n\t\t\t\tdfa.match = null;\r\n\t\t\t\tstart = pos;\r\n\t\t\t\tif(this.src.length <= start) {\r\n\t\t\t\t\tthis.la = eof;\r\n\t\t\t\t\treturn eof;\r\n\t\t\t\t}\r\n\t\t\t\tdo{\r\n\t\t\t\t\tchr = this.src.charCodeAt(pos);\r\n\t\t\t\t\tdfa.exec(chr,pos);\r\n\t\t\t\t\tif(dfa.state !== null)\r\n\t\t\t\t\t\tthis.accountChar(chr);\r\n\t\t\t\t\tpos++;\r\n\t\t\t\t}while(dfa.state !== null);\r\n\t\t\t}while(whitespace > -1 && dfa.match === whitespace);\r\n\t\t\tif(dfa.match !== null){\r\n\t\t\t\tthis.att = this.src.slice(start, dfa.match_pos);\r\n\t\t\t\tthis.offset = dfa.match_pos;\r\n\t\t\t\tactionResult = TERMINAL_ACTIONS(this,dfa.match);\r\n\t\t\t\tif(dfa.state !== null)\r\n\t\t\t\t\tthis.accountChar(chr);\r\n\t\t\t\tif(actionResult === Continue)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tthis.att = actionResult;\r\n\t\t\t}else {\r\n\t\t\t\tthis.att = \"\";\r\n\t\t\t}\r\n\t\t\tloop = false;\r\n\t\t}\r\n\t\tthis.la = dfa.match;\r\n\t\treturn this.la;\r\n\t};\r\n\t/**\r\n\t * @param {number} chr\r\n     */\r\n    PcbClass.prototype.accountChar = function(chr) {\r\n\t\tif( chr === 10 ){\r\n\t\t\tthis.line++;\r\n\t\t\tthis.column = 0;\r\n\t\t}\r\n\t\tthis.column++;\r\n\t};\r\n\tfunction parse(/** string */ src, err_off, err_la){\r\n\t\t/**\r\n\t\t * @type {!Array<number>}\r\n         */\r\n\t\tvar\t\tsstack\t\t\t= [0];\r\n\t\t/**\r\n\t\t * @type {!Array<*>}\r\n         */\r\n\t\tvar\t\tvstack\t\t\t= [0];\r\n\t\t/**\r\n\t\t * @type {number}\r\n         */\r\n\t\tvar \terr_cnt\t\t\t= 0;\r\n\t\t/**\r\n\t\t * @type {*}\r\n\t\t */\r\n\t\tvar\t\trval;\r\n\t\t/**\r\n\t\t * @type {?number}\r\n\t\t */\r\n\t\tvar\t\tact;\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t */\r\n\t\tvar i = 0;\r\n\r\n\t\tvar PCB\t= new PcbClass(src);\r\n\t\terr_off\t= err_off || [];\r\n\t\terr_la = err_la || [];\r\n\t\tPCB.lex();\r\n\t\twhile(true){\r\n\t\t\tPCB.act = get_act(sstack[0],PCB.la);\r\n\t\t\tif(PCB.act === null && defact_tab[sstack[0]] >= 0)\r\n\t\t\t\tPCB.act = -defact_tab[sstack[0]];\r\n\t\t\tif(PCB.act === null){//Parse error? Try to recover!\r\n\t\t\t\t//Report errors only when error_step is 0, and this is not a\r\n\t\t\t\t//subsequent error from a previous parse\r\n\t\t\t\tif(PCB.error_step === 0){\r\n\t\t\t\t\terr_cnt++;\r\n\t\t\t\t\terr_off.unshift(PCB.offset - PCB.att.length);\r\n\t\t\t\t\terr_la.unshift([]);\r\n\t\t\t\t\tfor(i = 0; i < act_tab[sstack[0]].length; i+=2)\r\n\t\t\t\t\t\terr_la[0].push(labels[act_tab[sstack[0]][i]]);\r\n\t\t\t\t}\r\n\t\t\t\t//Perform error recovery\t\t\t\r\n\t\t\t\twhile(sstack.length > 1 && PCB.act === null){\r\n\t\t\t\t\tsstack.shift();\r\n\t\t\t\t\tvstack.shift();\r\n\t\t\t\t\t//Try to shift on error token\r\n\t\t\t\t\tPCB.act = get_act(sstack[0],PCB.la);\r\n\t\t\t\t\tif(PCB.act === error_token){\r\n\t\t\t\t\t\tsstack.unshift(PCB.act);\r\n\t\t\t\t\t\tvstack.unshift(\"\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//Is it better to leave the parser now?\r\n\t\t\t\tif(sstack.length > 1 && PCB.act !== null){\r\n\t\t\t\t\t//Ok, now try to shift on the next tokens\r\n\t\t\t\t\twhile(PCB.la !== eof){\r\n\t\t\t\t\t\tPCB.act = act_tab[sstack[0]][i+1];\r\n\t\t\t\t\t\tif(PCB.act != null)break;\r\n\t\t\t\t\t\twhile(PCB.lex() != null)PCB.offset++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(PCB.act === null || PCB.la === eof){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t//Try to parse the next three tokens successfully...\r\n\t\t\t\tPCB.error_step = 3;\r\n\t\t\t}\r\n\t\t\tif(PCB.act > 0){//Shift\r\n\t\t\t\t//Parse tree generation\r\n\t\t\t\tsstack.unshift(PCB.act);\r\n\t\t\t\tvstack.unshift(PCB.att);\r\n\t\t\t\tPCB.lex();\r\n\t\t\t\t//Successfull shift and right beyond error recovery?\r\n\t\t\t\tif(PCB.error_step > 0)\r\n\t\t\t\t\tPCB.error_step--;\r\n\t\t\t}else{\t//Reduce\t\r\n\t\t\t\tact = -PCB.act;\r\n\t\t\t\t//vstack.unshift(vstack);\r\n\t\t\t\trval = ACTIONS(act,vstack,PCB);\r\n\t\t\t\t//vstack.shift();\r\n\t\t\t\tsstack.splice(0,pop_tab[act][1]);\r\n\t\t\t\tvstack.splice(0,pop_tab[act][1]);\r\n\t\t\t\t\r\n\t\t\t\tPCB.act = get_goto(sstack[0],pop_tab[act][0]);\r\n\t\t\t\t//Do some parse tree construction if desired\r\n\t\t\t\t//Goal symbol match?\r\n\t\t\t\tif(act === 0) break; //Don't use PCB.act here!\r\n\t\t\t\r\n\t\t\t\t//...and push it!\r\n\t\t\t\tsstack.unshift(PCB.act);\r\n\t\t\t\tvstack.unshift(rval);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn err_cnt;\r\n\t}\r\n\treturn parse;\r\n})(40,-1,1);\r\n\r\n\r\n/**\r\n * Parses the specified grammar.\r\n * @module {jscc.parse} jscc/parse\r\n * @requires module:jscc/global\r\n * @requires module:jscc/regex\r\n * @requires module:jscc/tabgen\r\n * @requires module:jscc/log/log\r\n * @param {string} str - The grammar to parse.\r\n * @param {string=} filename - The filename being parsed.  Currently unused.\r\n * @returns {number} The number of parse errors.\r\n */\r\nfunction parse_grammar( str, filename ){\r\n\tvar error_offsets = [];\r\n\tvar error_expects = [];\r\n\tvar parse_error = 0;\r\n\r\n\tfirst_lhs = true;\r\n\tcur_line = 1;\r\n\r\n\t//_dbg_withstepbystep = true;\r\n\t//_dbg_withtrace = true;\r\n\r\n\tif( ( parse_error += __parse( str, error_offsets, error_expects ) ) > 0 )\r\n\t{\r\n\t\tfor( var i = 0; i < parse_error; i++ )\r\n\t\t\tline_error( ( str.substr( 0, error_offsets[i] ).match( /\\n/g ) ?\r\n\t\t\t\tstr.substr( 0, error_offsets[i] ).match( /\\n/g ).length : 1 ),\r\n\t\t\t\t\t\"Parse error near\\n\\t\"  + str.substr( error_offsets[i], 30 ) +\r\n\t\t\t\t\t\t( ( error_offsets[i] + 30 < str.substr( error_offsets[i] ).length ) ?\r\n\t\t\t\t\t\t\t\"...\" : \"\" ) + \"\\n\\t\" + error_expects[i].join() + \" expected\" );\r\n\t}\r\n\treturn parse_error;\r\n}\r\nreturn parse_grammar;\r\n}));\r\n\r\n\r\n\n",
    "/*\r\n * Universal module definition for module containing Dfa class.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/classes/Dfa',factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory();\r\n    } else {\r\n        root.jsccDfa = factory();\r\n    }\r\n}(this, function() {\r\n    //>>excludeStart(\"closure\", pragmas.closure)\r\n    var jscc = {\r\n        classes: {}\r\n    };\r\n    //>>excludeEnd(\"closure\");\r\n    /**\r\n     * Creates a new Dfa instance.\r\n     * @classdesc Represents a state in a deterministic finite automata.\r\n     * @param {DfaOptions=} o - Optional overrides for default property values.\r\n     * @constructor\r\n     */\r\n    jscc.classes.Dfa = function(o) {\r\n        var p = o || {};\r\n        if (typeof p.line !== 'undefined' && Array.isArray(p.line)) {\r\n            this.line = /** @type {!Array} */ (p.line);\r\n        }\r\n        if (typeof p.nfa_set !== 'undefined' && Array.isArray(p.nfa_set)) {\r\n            this.nfa_set = /** @type {!Array<!number>} */ (p.nfa_set);\r\n        }\r\n        if (typeof p.accept === 'number') {\r\n            this.accept = /** @type {!number} */ (p.accept);\r\n        }\r\n        if (typeof p.done === 'boolean') {\r\n            this.done = /** @type {!boolean} */ (p.done);\r\n        }\r\n        if (typeof p.group === 'number') {\r\n            this.group = /** @type {!number} */ (p.group);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * A multidimensional, generated array corresponding to this DFA state.\r\n     * @type {!Array}\r\n     */\r\n    jscc.classes.Dfa.prototype.line = [];\r\n    /**\r\n     * Indexes of NFA states represented in this DFA state.\r\n     * @type {!Array<!number>}\r\n     */\r\n    jscc.classes.Dfa.prototype.nfa_set = [];\r\n    /**\r\n     * Index of an accepting state.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Dfa.prototype.accept = -1;\r\n    /**\r\n     * Whether this DFA state has been fully processed.\r\n     * @type {!boolean}\r\n     */\r\n    jscc.classes.Dfa.prototype.done = false;\r\n    /**\r\n     * A group index for this DFA state.\r\n     * @type {!number}\r\n     */\r\n    jscc.classes.Dfa.prototype.group = -1;\r\n\r\n    /**\r\n     * The module containing the Dfa class.\r\n     * @module {function(new:jscc.classes.Dfa, DfaOptions=)} jscc/classes/Dfa\r\n     */\r\n    return jscc.classes.Dfa;\r\n}));\r\n\n",
    "/*\r\n * Universal module definition for lexdfa.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/lexdfa',['require', './global', './log/log', './enums/EDGE', './classes/Dfa'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jscclexdfa = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {jscc.lexdfa}\r\n   */\r\n  function(require, others) {\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var jscc = {};\r\n      var has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      var log, global = /** @type {jscc.global} */ (require(\"./global\")),\r\n          EDGE = require(\"./enums/EDGE\"),\r\n          Dfa = /** @type {function(new:jscc.classes.Dfa, ?DfaOptions=)} */ (require(\"./classes/Dfa\"));\r\n\r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              log = /** @type {jscc.log} */ (require(\"./log/logNode\"));\r\n          } else {\r\n              log = /** @type {jscc.log} */ (require(\"./log/log\"));\r\n          }\r\n      })();\r\n\r\n      /**\r\n       * @constructor\r\n       */\r\n      jscc.lexdfa = function() {\r\n      };\r\n      /**\r\n       * DFA-related functions.\r\n       * @module {jscc.lexdfa} jscc/lexdfa\r\n       * @requires module:jscc/global\r\n       * @requires module:jscc/log/log\r\n       */\r\n      jscc.lexdfa.prototype = {\r\n          /**\r\n           * Creates a new {@link jscc.global.Dfa} object and\r\n           * adds it to the provided array.\r\n           * @param {Array<!jscc.classes.Dfa>} where - The array to which to add the\r\n           * new Dfa object.\r\n           * @returns {number} The prior length of the provided array.\r\n           * @memberof jscc.lexdfa\r\n           */\r\n          create_dfa: function(where) {\r\n              var dfa = new Dfa({\r\n                  line: new Array(global.MAX_CHAR),\r\n                  accept: -1,\r\n                  nfa_set: [],\r\n                  done: false,\r\n                  group: -1\r\n              });\r\n              where.push(dfa);\r\n              return where.length - 1;\r\n          },\r\n\r\n          /**\r\n           * Determines whether the dfa_states array has a\r\n           * Dfa object whose {@link jscc.global.Dfa#nfa_set}\r\n           * property contains the same values as those in the\r\n           * items parameter.\r\n           * @param {Array<!jscc.classes.Dfa>} dfa_states - The array of Dfa\r\n           * objects to check.\r\n           * @param {Array<number>} items - The set to match.\r\n           * @returns {number} The index in dfa_states of the first\r\n           * matching item, or -1 if no match exists.\r\n           * @memberof jscc.lexdfa\r\n           */\r\n          same_nfa_items: function(dfa_states, items) {\r\n              var i, j;\r\n              for (i = 0; i < dfa_states.length; i++) {\r\n                  if (dfa_states[i].nfa_set.length == items.length) {\r\n                      for (j = 0; j < dfa_states[i].nfa_set.length; j++) {\r\n                          if (dfa_states[i].nfa_set[j] != items[j]) {\r\n                              break;\r\n                          }\r\n                      }\r\n                      if (j == dfa_states[i].nfa_set.length) {\r\n                          return i;\r\n                      }\r\n                  }\r\n              }\r\n              return -1;\r\n          },\r\n\r\n          /**\r\n           * Determines the next Dfa object in the provided array\r\n           * whose {@link jscc.classes.Dfa#done} value is false.\r\n           * @param {Array<!jscc.classes.Dfa>} dfa_states - The array to check.\r\n           * @returns {number} The index of the first array element for\r\n           * which done is false, or -1 if no such element exists.\r\n           * @memberof jscc.lexdfa\r\n           */\r\n          get_undone_dfa: function(dfa_states) {\r\n              for (var i = 0; i < dfa_states.length; i++) {\r\n                  if (!dfa_states[i].done) {\r\n                      return i;\r\n                  }\r\n              }\r\n              return -1;\r\n          },\r\n\r\n          /**\r\n           * Performs a move operation on a given input character from a\r\n           * set of NFA states.\r\n           * @param {Array<!number>} state_set - The set of epsilon-closure\r\n           * states on which base the move should be performed.\r\n           * @param {Array<!jscc.classes.Nfa>} machine - The NFA state machine.\r\n           * @param {number} ch - A character code to be moved on.\r\n           * @returns {Array<!number>} If there is a possible move, a new\r\n           * set of NFA-states is returned, else the returned array has a\r\n           * length of 0.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.lexdfa\r\n           */\r\n          move: function(state_set, machine, ch) {\r\n              var hits = [];\r\n              var tos = -1;\r\n              try {\r\n                  do {\r\n                      tos = state_set.pop();\r\n                      if (machine[tos].edge == EDGE.CHAR) {\r\n                          if (machine[tos].ccl.get(ch)) {\r\n                              hits.push(machine[tos].follow);\r\n                          }\r\n                      }\r\n                  } while (state_set.length > 0);\r\n              } catch (e) {\r\n                  log.error(\"\\n state_set= \" + state_set + \" machine= \" + machine + \" ch= \" + ch);\r\n                  throw e;\r\n              }\r\n              return hits;\r\n          },\r\n\r\n          /**\r\n           * Performs an epsilon closure from a set of NFA states.\r\n           * @param {Array<!number>} state_set - The set of states on which\r\n           * base the closure is started.  The whole epsilon closure will\r\n           * be appended to this parameter, so this parameter acts as\r\n           * input/output value.\r\n           * @param {Array<!jscc.classes.Nfa>} machine - The NFA state machine.\r\n           * @returns {Array<!number>} An array of accepting states, if\r\n           * available.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.lexdfa\r\n           */\r\n          epsilon_closure: function(state_set, machine) {\r\n              var stack = [];\r\n              var accept = [];\r\n              var tos = -1;\r\n              for (var i = 0; i < state_set.length; i++) {\r\n                  stack.push(state_set[i]);\r\n              }\r\n              do {\r\n                  tos = stack.pop();\r\n                  if (machine[tos].accept >= 0) {\r\n                      accept.push(machine[tos].accept);\r\n                  }\r\n                  if (machine[tos].edge == EDGE.EPSILON) {\r\n                      if (machine[tos].follow > -1) {\r\n                          for (var i = 0; i < state_set.length; i++) {\r\n                              if (state_set[i] == machine[tos].follow) {\r\n                                  break;\r\n                              }\r\n                          }\r\n                          if (i == state_set.length) {\r\n                              state_set.push(machine[tos].follow);\r\n                              stack.push(machine[tos].follow);\r\n                          }\r\n                      }\r\n                      if (machine[tos].follow2 > -1) {\r\n                          for (var i = 0; i < state_set.length; i++) {\r\n                              if (state_set[i] == machine[tos].follow2) {\r\n                                  break;\r\n                              }\r\n                          }\r\n                          if (i == state_set.length) {\r\n                              state_set.push(machine[tos].follow2);\r\n                              stack.push(machine[tos].follow2);\r\n                          }\r\n                      }\r\n                  }\r\n              } while (stack.length > 0);\r\n              return accept.sort();\r\n          },\r\n\r\n          /**\r\n           * Constructs a deterministic finite automata (DFA) from a\r\n           * nondeterministic finite automata, by using the subset\r\n           * construction algorithm.\r\n           * @param {!Array<!jscc.classes.Nfa>} nfa_states - The NFA-state machine\r\n           * on which base the DFA will be constructed.\r\n           * @returns {!Array<!jscc.classes.Dfa>} An array of DFA-objects forming the\r\n           * new DFA-state machine.  This machine is not minimized here.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.lexdfa\r\n           */\r\n          create_subset: function(nfa_states) {\r\n              var dfa_states = [];\r\n              var stack = [0];\r\n              var current = this.create_dfa(dfa_states);\r\n              var trans;\r\n              var next = -1;\r\n              var lowest_weight;\r\n\r\n              if (nfa_states.length == 0) {\r\n                  return dfa_states;\r\n              }\r\n              this.epsilon_closure(stack, nfa_states);\r\n              dfa_states[current].nfa_set = dfa_states[current].nfa_set.concat(stack);\r\n              while ((current = this.get_undone_dfa(dfa_states)) > -1) {\r\n                  dfa_states[current].done = true;\r\n                  lowest_weight = -1;\r\n                  for (var i = 0; i < dfa_states[current].nfa_set.length; i++) {\r\n                      if (nfa_states[dfa_states[current].nfa_set[i]].accept > -1\r\n                          && nfa_states[dfa_states[current].nfa_set[i]].weight < lowest_weight\r\n                          || lowest_weight == -1) {\r\n                          dfa_states[current].accept = nfa_states[dfa_states[current].nfa_set[i]].accept;\r\n                          lowest_weight = nfa_states[dfa_states[current].nfa_set[i]].weight;\r\n                      }\r\n                  }\r\n                  for (var i = global.MIN_CHAR; i < global.MAX_CHAR; i++) {\r\n                      trans = [].concat(dfa_states[current].nfa_set);\r\n                      trans = this.move(trans, nfa_states, i);\r\n\r\n                      if (trans.length > 0) {\r\n                          this.epsilon_closure(trans, nfa_states);\r\n                      }\r\n\r\n                      if (trans.length == 0) {\r\n                          next = -1;\r\n                      } else if ((next = this.same_nfa_items(dfa_states, trans)) == -1) {\r\n                          next = this.create_dfa(dfa_states);\r\n                          dfa_states[next].nfa_set = trans;\r\n                      }\r\n                      dfa_states[current].line[i] = next;\r\n                  }\r\n              }\r\n              return dfa_states;\r\n          },\r\n\r\n          /**\r\n           * Minimizes a DFA, by grouping equivalent states together.\r\n           * These groups form the new, minimized dfa-states.\r\n           * @param {!Array<!jscc.classes.Dfa>} dfa_states - The DFA-state machine on\r\n           * which base the minimized DFA is constructed.\r\n           * @returns {!Array<!jscc.classes.Dfa>} An array of DFA-objects forming the\r\n           * minimized DFA-state machine.\r\n           * @author Jan Max Meyer\r\n           * @memberof jscc.lexdfa\r\n           */\r\n          minimize_dfa: function(dfa_states) {\r\n              var groups = [[]];\r\n              var accept_groups = [];\r\n              var min_dfa_states = [];\r\n              var old_cnt = 0;\r\n              var cnt = 0;\r\n              var new_group;\r\n              var i, j, k;\r\n\r\n              if (dfa_states.length == 0) {\r\n                  return min_dfa_states;\r\n              }\r\n              // Forming a general starting state:\r\n              // Accepting and non-accepting states are pushed in separate groups first\r\n              for (i = 0; i < dfa_states.length; i++) {\r\n                  if (dfa_states[i].accept > -1) {\r\n                      for (j = 0; j < accept_groups.length; j++) {\r\n                          if (accept_groups[j] == dfa_states[i].accept) {\r\n                              break;\r\n                          }\r\n                      }\r\n                      if (j == accept_groups.length) {\r\n                          accept_groups.push(dfa_states[i].accept);\r\n                          groups.push([]);\r\n                      }\r\n                      groups[j + 1].push(i);\r\n                      dfa_states[i].group = j + 1;\r\n                  } else {\r\n                      groups[0].push(i);\r\n                      dfa_states[i].group = 0;\r\n                  }\r\n              }\r\n\r\n              // Now the minimization is performed on base of these default groups\r\n              do {\r\n                  old_cnt = cnt;\r\n                  for (i = 0; i < groups.length; i++) {\r\n                      new_group = [];\r\n                      if (groups[i].length > 0) {\r\n                          for (j = 1; j < groups[i].length; j++) {\r\n                              for (k = global.MIN_CHAR; k < global.MAX_CHAR; k++) {\r\n                                  // This verifies the equality of the first state\r\n                                  // in this group with its successors\r\n                                  var groupZeroLineK = dfa_states[groups[i][0]].line[k];\r\n                                  var groupJLineK = dfa_states[groups[i][j]].line[k];\r\n                                  if (groupZeroLineK != groupJLineK &&\r\n                                      (groupZeroLineK == -1 ||\r\n                                       groupJLineK == -1) ||\r\n                                      (groupZeroLineK > -1 &&\r\n                                       groupJLineK > -1 &&\r\n                                       dfa_states[groupZeroLineK].group\r\n                                       != dfa_states[groupJLineK].group)) {\r\n                                      // If this item does not match, put it to a new group\r\n                                      dfa_states[groups[i][j]].group = groups.length;\r\n                                      new_group = new_group.concat(groups[i].splice(j, 1));\r\n                                      j--;\r\n                                      break;\r\n                                  }\r\n                              }\r\n                          }\r\n                      }\r\n                      if (new_group.length > 0) {\r\n                          groups[groups.length] = [];\r\n                          groups[groups.length - 1] = groups[groups.length - 1].concat(new_group);\r\n                          cnt += new_group.length;\r\n                      }\r\n                  }\r\n              } while (old_cnt != cnt);\r\n\r\n              // Updating the dfa-state transitions; each group forms a new state.\r\n              for (i = 0; i < dfa_states.length; i++) {\r\n                  for (j = global.MIN_CHAR; j < global.MAX_CHAR; j++) {\r\n                      if (dfa_states[i].line[j] > -1) {\r\n                          dfa_states[i].line[j] = dfa_states[dfa_states[i].line[j]].group;\r\n                      }\r\n                  }\r\n              }\r\n              for (i = 0; i < groups.length; i++) {\r\n                  min_dfa_states.push(dfa_states[groups[i][0]]);\r\n              }\r\n              return min_dfa_states;\r\n          }\r\n      };\r\n      return new jscc.lexdfa();\r\n  }));\r\n\n",
    "/*\r\n * Universal module definition for main entry point of JS/CC.\r\n */\r\n(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('lib/jscc/main',['require', './global', './io/io', './first',\r\n                './printtab', './tabgen', './util',\r\n                './integrity', './lexdbg',\r\n                './parse', './log/log', './enums/LOG_LEVEL', './enums/EXEC', './lexdfa',\r\n                './enums/MODE_GEN'], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jscc = factory(function(mod) {\r\n            return root[\"jscc\" + mod.split(\"/\").pop()];\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {function(?mainOptions=)}\r\n   */\r\n  function(require, others) {\r\n    var io, log, global = /** @type {jscc.global} */ (require(\"./global\")),\r\n        first = /** @type {jscc.first} */ (require(\"./first\")),\r\n        printtab = /** @type {jscc.printtab} */ (require(\"./printtab\")),\r\n        tabgen = /** @type {jscc.tabgen} */ (require(\"./tabgen\")),\r\n        util = /** @type {jscc.util} */ (require(\"./util\")),\r\n        integrity = /** @type {jscc.integrity} */ (require(\"./integrity\")),\r\n        lexdbg = /** @type {jscc.lexdbg} */ (require(\"./lexdbg\")),\r\n        parse = /** @type {function(string, string=):number} */ (require(\"./parse\")),\r\n        LOG_LEVEL = require(\"./enums/LOG_LEVEL\"),\r\n        EXEC = require(\"./enums/EXEC\"),\r\n        lexdfa = /** @type {jscc.lexdfa} */ (require(\"./lexdfa\")),\r\n        MODE_GEN = require(\"./enums/MODE_GEN\");\r\n\r\n      //>>excludeStart(\"closure\", pragmas.closure);\r\n      var has = /** @type {hasObject} */ (require(\"./localHas\"));\r\n      //>>excludeEnd(\"closure\");\r\n      /**\r\n       * @suppress {uselessCode}\r\n       */\r\n      (function() {\r\n          if (has(\"node\")) {\r\n              io = /** @type {jscc.io} */ (require(\"./io/ioNode\"));\r\n              log = /** @type {jscc.log} */ (require(\"./log/logNode\"));\r\n          } else {\r\n              io = /** @type {jscc.io} */ (require(\"./io/io\"));\r\n              log = /** @type {jscc.log} */ (require(\"./log/log\"));\r\n          }\r\n      })();\r\n    \r\n    /**\r\n     * The main entry point of JS/CC.  Call this module as a function to\r\n     * process a grammar specification.\r\n     * @module jscc\r\n     * @requires module:jscc/global\r\n     * @requires module:jscc/io/io\r\n     * @requires module:jscc/first\r\n     * @requires module:jscc/printtab\r\n     * @requires module:jscc/tabgen\r\n     * @requires module:jscc/util\r\n     * @requires module:jscc/integrity\r\n     * @requires module:jscc/lexdbg\r\n     * @requires module:jscc/parse\r\n     * @requires module:jscc/log/log\r\n     * @param {?mainOptions=} options - Configuration options for the jscc module.\r\n     */\r\n    var main =\r\n        function(options) {\r\n            var opt = options || {};\r\n            var logLevel = /** jscc.enums.LOG_LEVEL */ (LOG_LEVEL.WARN);\r\n            if (typeof opt['logLevel'] === 'string') {\r\n                logLevel = util.log_level_value(opt['logLevel']);\r\n            } else if (opt['logLevel']) {\r\n                logLevel = /** jscc.enums.LOG_LEVEL */ (opt['logLevel']);\r\n            }\r\n            log.setLevel(logLevel);\r\n            log.trace(\"jscc main: processing options\");\r\n            var out_file = (typeof opt['out_file'] === 'string') ? opt['out_file'] : \"\";\r\n            var src_file = (typeof opt['src_file'] === 'string') ? opt['src_file'] : \"\";\r\n            var tpl_file = (typeof opt['tpl_file'] === 'string') ? opt['tpl_file'] : \"\";\r\n            var dump_nfa = (typeof opt['dump_nfa'] === 'boolean') ? opt['dump_nfa'] : false;\r\n            var dump_dfa = (typeof opt['dump_dfa'] === 'boolean') ? opt['dump_dfa'] : false;\r\n            var verbose = (typeof opt['verbose'] === 'boolean') ? opt['verbose'] : false;\r\n            var inputString = /** @type {string} */ ((typeof opt['input'] === 'string') ? opt['input'] : \"\");\r\n            var inputFunction = (typeof opt['input'] === 'function') ? opt['input'] : null;\r\n            var templateString = (typeof opt['template'] === 'string') ? opt['template'] : global.DEFAULT_DRIVER;\r\n            var templateFunction = (typeof opt['template'] === 'function') ? opt['template'] : null;\r\n            var outputCallback = (typeof opt['outputCallback'] === 'function') ? opt['outputCallback'] : null;\r\n            var throwIfErrors = (typeof opt['throwIfErrors'] === 'boolean') ? opt['throwIfErrors'] : false;\r\n            var exitIfErrors = (typeof opt['exitIfErrors'] === 'boolean') ? opt['exitIfErrors'] : false;\r\n\r\n            // Only relevant to browsers, but include anyway\r\n            if (inputString !== \"\") {\r\n                global.read_all_input_function = function() {\r\n                    return inputString;\r\n                }\r\n            } else if (inputFunction) {\r\n                global.read_all_input_function = inputFunction;\r\n            }\r\n\r\n            if (templateString !== \"\") {\r\n                global.read_template_function = function() {\r\n                    return templateString;\r\n                }\r\n            } else if (templateFunction) {\r\n                global.read_template_function = templateFunction;\r\n            }\r\n\r\n            if (outputCallback) {\r\n                global.write_output_function = outputCallback;\r\n            }\r\n\r\n            global.file = (src_file || \"\") === \"\" ? \"[input]\" : src_file;\r\n            global.dump_nfa = dump_nfa;\r\n            global.dump_dfa = dump_dfa;\r\n\r\n            log.trace(\"jscc main: reading source\");\r\n            var src = inputString;\r\n            if (src === \"\") {\r\n                if (inputFunction) {\r\n                    src = inputFunction();\r\n                } else if (src_file !== \"\") {\r\n                    src = /** @type {string} */ (io.read_all_input(src_file));\r\n                } else {\r\n                    // TODO: read standard input\r\n                    log.error(\"No input.  Specify input or src_file in the options parameter.\");\r\n                }\r\n            }\r\n            if (src !== \"\") {\r\n                log.trace(\"jscc main: parse\");\r\n                parse(src, global.file);\r\n\r\n                if (global.errors == 0) {\r\n                    log.trace(\"jscc main: integrity.undef()\");\r\n                    integrity.undef();\r\n                    log.trace(\"jscc main: integrity.unreachable()\");\r\n                    integrity.unreachable();\r\n\r\n                    if (global.errors == 0) {\r\n                        log.trace(\"jscc main: first.first()\");\r\n                        first.first();\r\n                        log.trace(\"jscc main: tabgen.lalr1_parse_table(false)\");\r\n                        tabgen.lalr1_parse_table(false);\r\n                        log.trace(\"jscc main: integrity.check_empty_states()\");\r\n                        integrity.check_empty_states();\r\n\r\n                        if (global.errors == 0) {\r\n                            if (global.dump_dfa) {\r\n                                lexdbg.print_dfa(global.dfa_states);\r\n                            }\r\n                            log.trace(\"jscc main: lexdfa.create_subset(global.nfa_states.value)\");\r\n                            global.dfa_states = lexdfa.create_subset(global.nfa_states.value);\r\n                            log.trace(\"jscc main: lexdfa.minimize_dfa(global.dfa_states)\");\r\n                            global.dfa_states = lexdfa.minimize_dfa(global.dfa_states);\r\n                            log.trace(\"jscc main: read template\");\r\n                            /**\r\n                             * @type {string}\r\n                             */\r\n                            var driver = templateString;\r\n                            if (templateFunction) {\r\n                                driver = templateFunction();\r\n                            } else if (tpl_file !== \"\") {\r\n                                driver = /** @type {string} */ (io.read_template(tpl_file));\r\n                            }\r\n\r\n                            log.trace(\"jscc main: replace template strings\");\r\n                            driver = driver.replace(/##HEADER##/gi, global.code_head);\r\n                            driver = driver.replace(/##TABLES##/gi, printtab.print_parse_tables(MODE_GEN.JS));\r\n                            driver = driver.replace(/##DFA##/gi, printtab.print_dfa_table(global.dfa_states));\r\n                            driver = driver.replace(/##TERMINAL_ACTIONS##/gi, printtab.print_term_actions());\r\n                            driver = driver.replace(/##LABELS##/gi, printtab.print_symbol_labels());\r\n                            driver = driver.replace(/##ACTIONS##/gi, printtab.print_actions());\r\n                            driver = driver.replace(/##FOOTER##/gi, global.code_foot);\r\n                            driver = driver.replace(/##ERROR_TOKEN##/gi, printtab.get_error_symbol_id().toString());\r\n                            driver = driver.replace(/##EOF##/gi, printtab.get_eof_symbol_id().toString());\r\n                            driver = /** @type {string} */\r\n                                (driver.replace(/##WHITESPACE##/gi, printtab.get_whitespace_symbol_id().toString()));\r\n\r\n                            log.trace(\"jscc main: output\");\r\n                            if (global.errors == 0) {\r\n                                if (outputCallback) {\r\n                                    outputCallback(driver);\r\n                                } else if (out_file != \"\") {\r\n                                    io.write_output({\r\n                                                        text: driver,\r\n                                                        destination: out_file\r\n                                                    });\r\n                                } else {\r\n                                    io.write_output(driver);\r\n                                }\r\n                            }\r\n\r\n                            if (verbose) {\r\n                                log.info(\"\\\"\" + src_file + \"\\\" produced \" + global.states.length + \" states (\" +\r\n                                         global.shifts + \" shifts,\" +\r\n                                         global.reduces + \" reductions, \" + global.gotos + \" gotos)\");\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (verbose) {\r\n                    log.info(global.warnings + \" warning\" + (global.warnings > 1 ? \"s\" : \"\") + \", \" +\r\n                             global.errors + \" error\" + (global.errors > 1 ? \"s\" : \"\"));\r\n                }\r\n\r\n            }\r\n\r\n            if (exitIfErrors && global.errors > 0) {\r\n                io.exit(1);\r\n            }\r\n\r\n            if (throwIfErrors && global.errors > 0) {\r\n                throw new Error(\"There were one or more compilation errors.  See the log output for more information.\");\r\n            }\r\n        };\r\n    return main;\r\n}));\r\n\n",
    "(function(root, factory) {\r\n    /* istanbul ignore next */\r\n    if (typeof define === 'function' && define.amd) {\r\n        define('main',[\"require\", \"./lib/jscc/main\"], factory);\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        module.exports = factory(require);\r\n    } else {\r\n        root.jsccmain = factory(function() {\r\n            return root.jscc;\r\n        });\r\n    }\r\n}(this,\r\n  /**\r\n   * @param {reqParameter} require\r\n   * @param {...*} others\r\n   * @returns {function(?mainOptions=)}\r\n   */\r\n  function(require, others) {\r\n    var main = /** @type {function(?mainOptions=)} */ (require(\"./lib/jscc/main\"));\r\n    return main;\r\n}));\r\n\n",
    "/*\r\n * Export statements for Closure's use.\r\n */\r\njscc['enums'] = jscc.enums;\r\n//noinspection ThisExpressionReferencesGlobalObjectJS\r\n/** @suppress {globalThis} */\r\n(this['jscc'] = jscc);\r\n//>>includeStart(\"amdclean\", pragmas.amdclean);\r\n//noinspection ThisExpressionReferencesGlobalObjectJS\r\n/** @suppress {globalThis|checkVars} */\r\n(function(root) {\r\n    if (typeof main !== \"undefined\") {\r\n        (root['main'] = main);\r\n    }\r\n})(this);\r\n//>>includeEnd(\"amdclean\");\r\n"
  ]
}