{
    "ARGLIST": [
        "EXPR ',' ARGLIST",
        "EXPR",
        "EXPR ',' ARGLIST",
        "EXPR"
    ],
    "ARGS": [
        "'()'",
        "'(' ARGLIST ')'",
        "'()'",
        "'(' ARGLIST ')'"
    ],
    "ARITHMETICOPERATION": [
        "EXPR '/' EXPR",
        "EXPR '*' EXPR",
        "EXPR '+' EXPR",
        "EXPR '-' EXPR",
        "EXPR '%' EXPR",
        "EXPR '**' EXPR",
        "EXPR '++'"
    ],
    "ARRAY": [
        "'[' ARRAYCONTENT ']'",
        "'[]'"
    ],
    "ARRAYCONTENT": [
        "EXPR ',' ARRAYCONTENT",
        "EXPR"
    ],
    "BOOLEAN": [
        "'true'",
        "'false'"
    ],
    "BYTEWISEOPERATION": [
        "EXPR '&' EXPR",
        "EXPR '|' EXPR"
    ],
    "COMPARISONOPERATION": [
        "EXPR '<' EXPR"
    ],
    "DECIMALDIGITS": [
        "'20'",
        "'1234'",
        "'66'",
        "'234_9'",
        "'99999999999999999999'"
    ],
    "DECIMALNUMBER": [
        "DECIMALDIGITS"
    ],
    "EXPR": [
        "'(' EXPR ')'",
        "VAR",
        "'delete' SP EXPR",
        "'new' SP IDENTIFIER ARGS",
        "LITERAL",
        "IDENTIFIER",
        "METHODCALL",
        "'(' ARITHMETICOPERATION ')'",
        "'(' COMPARISONOPERATION ')'",
        "'(' BYTEWISEOPERATION ')'",
        "'(' LOGICALOPERATION ')'"
    ],
    "IDENTIFIER": [
        "'Object'",
        "VAR",
        "'Function'",
        "'main'",
        "'opt'",
        "'Boolean'",
        "'Symbol'",
        "'JSON'",
        "'Error'",
        "'EvalError'",
        "'RangeError'",
        "'ReferenceError'",
        "'SyntaxError'",
        "'TypeError'",
        "'URIError'",
        "'this'",
        "'Number'",
        "'Math'",
        "'Date'",
        "'String'",
        "'RegExp'",
        "'Array'",
        "'Int8Array'",
        "'Uint8Array'",
        "'Uint8ClampedArray'",
        "'Int16Array'",
        "'Uint16Array'",
        "'Int32Array'",
        "'Uint32Array'",
        "'Float32Array'",
        "'Float64Array'",
        "'DataView'",
        "'ArrayBuffer'",
        "'Map'",
        "'Set'",
        "'WeakMap'",
        "'WeakSet'",
        "'Promise'",
        "'AsyncFunction'",
        "'asyncGenerator'",
        "'Reflect'",
        "'Proxy'",
        "'Intl'",
        "'Intl.Collator'",
        "'Intl.DateTimeFormat'",
        "'Intl.NumberFormat'",
        "'Intl.PluralRules'",
        "'WebAssembly'",
        "'WebAssembly.Module'",
        "'WebAssembly.Instance'",
        "'WebAssembly.Memory'",
        "'WebAssembly.Table'",
        "'WebAssembly.CompileError'",
        "'WebAssembly.LinkError'",
        "'WebAssembly.RuntimeError'",
        "'arguments'",
        "'Infinity'",
        "'NaN'",
        "'undefined'",
        "'null'",
        "'console'",
        "' '"
    ],
    "IDENTIFIERLIST": [
        "IDENTIFIER ',' IDENTIFIERLIST",
        "'(' IDENTIFIERLIST '),' IDENTIFIERLIST",
        "IDENTIFIER"
    ],
    "JSBLOCK": [
        "JSSTATEMENT",
        "JSSTATEMENT JSBLOCK"
    ],
    "JSSTATEMENT": [
        "STATEMENT NEWLINE"
    ],
    "LITERAL": [
        "'null'",
        "BOOLEAN",
        "NUMBER",
        "ARRAY"
    ],
    "LOGICALOPERATION": [
        "EXPR '&&' EXPR",
        "EXPR '||' EXPR"
    ],
    "METHODCALL": [
        "OBJECT PROPERTY METHODCALL1"
    ],
    "METHODCALL1": [
        "'.' METHOD_NAME ARGS METHODCALL1",
        "' '"
    ],
    "METHOD_NAME": [
        "IDENTIFIER",
        "'print'",
        "'eval'",
        "'uneval'",
        "'isFinite'",
        "'isNaN'",
        "'parseFloat'",
        "'parseInt'",
        "'decodeURI'",
        "'decodeURIComponent'",
        "'encodeURI'",
        "'encodeURIComponent'",
        "'escape'",
        "'unescape'",
        "'assign'",
        "'create'",
        "'defineProperty'",
        "'defineProperties'",
        "'entries'",
        "'freeze'",
        "'getOwnPropertyDescriptor'",
        "'getOwnPropertyDescriptors'",
        "'getOwnPropertyNames'",
        "'getOwnPropertySymbols'",
        "'getPrototypeOf'",
        "'is'",
        "'isExtensible'",
        "'isFrozen'",
        "'isSealed'",
        "'keys'",
        "'preventExtensions'",
        "'seal'",
        "'setPrototypeOf'",
        "'values'",
        "'__defineGetter__'",
        "'__defineSetter__'",
        "'__lookupGetter__'",
        "'__lookupSetter__'",
        "'hasOwnProperty'",
        "'isPrototypeOf'",
        "'propertyIsEnumerable'",
        "'toSource'",
        "'toLocaleString'",
        "'toString'",
        "'unwatch'",
        "'valueOf'",
        "'watch'",
        "'apply'",
        "'bind'",
        "'call'",
        "'isGenerator'",
        "'valueOf'",
        "'for'",
        "'keyFor'",
        "'stringify'",
        "'isInteger'",
        "'isSafeInteger'",
        "'toInteger'",
        "'toExponential'",
        "'toFixed'",
        "'toLocaleString'",
        "'toPrecision'",
        "'abs'",
        "'acos'",
        "'acosh'",
        "'asin'",
        "'asinh'",
        "'atan'",
        "'atanh'",
        "'atan2'",
        "'cbrt'",
        "'ceil'",
        "'clz32'",
        "'cos'",
        "'cosh'",
        "'exp'",
        "'expm1'",
        "'floor'",
        "'fround'",
        "'hypot'",
        "'imul'",
        "'log'",
        "'log1p'",
        "'log10'",
        "'log2'",
        "'max'",
        "'min'",
        "'pow'",
        "'random'",
        "'round'",
        "'sign'",
        "'sin'",
        "'sinh'",
        "'sqrt'",
        "'tan'",
        "'tanh'",
        "'trunc'",
        "'now'",
        "'parse'",
        "'UTC'",
        "'getDate'",
        "'getDay'",
        "'getFullYear'",
        "'getHours'",
        "'getMilliseconds'",
        "'getMinutes'",
        "'getMonth'",
        "'getSeconds'",
        "'getTime'",
        "'getTimezoneOffset'",
        "'getUTCDate'",
        "'getUTCDay'",
        "'getUTCFullYear'",
        "'getUTCHours'",
        "'getUTCMilliseconds'",
        "'getUTCMinutes'",
        "'getUTCMonth'",
        "'getUTCSeconds'",
        "'getYear'",
        "'setDate'",
        "'setFullYear'",
        "'setHours'",
        "'setMilliseconds'",
        "'setMinutes'",
        "'setMonth'",
        "'setSeconds'",
        "'setTime'",
        "'setUTCDate'",
        "'setUTCFullYear'",
        "'setUTCHours'",
        "'setUTCMilliseconds'",
        "'setUTCMinutes'",
        "'setUTCMonth'",
        "'setUTCSeconds'",
        "'setYear'",
        "'toDateString'",
        "'toISOString'",
        "'toJSON'",
        "'toGMTString'",
        "'toLocaleDateString'",
        "'toLocaleFormat'",
        "'toLocaleString'",
        "'toLocaleTimeString'",
        "'toTimeString'",
        "'toUTCString'",
        "'indexOf'",
        "'substring'",
        "'charAt'",
        "'strcmp'",
        "'fromCharCode'",
        "'fromCodePoint'",
        "'raw'",
        "'charCodeAt'",
        "'slice'",
        "'codePointAt'",
        "'concat'",
        "'includes'",
        "'endsWith'",
        "'lastIndexOf'",
        "'localeCompare'",
        "'match'",
        "'normalize'",
        "'padEnd'",
        "'padStart'",
        "'quote'",
        "'repeat'",
        "'replace'",
        "'search'",
        "'split'",
        "'startsWith'",
        "'substr'",
        "'toLocaleLowerCase'",
        "'toLocaleUpperCase'",
        "'toLowerCase'",
        "'toUpperCase'",
        "'trim'",
        "'trimleft'",
        "'trimright'",
        "'anchor'",
        "'big'",
        "'blink'",
        "'bold'",
        "'fixed'",
        "'fontcolor'",
        "'fontsize'",
        "'italics'",
        "'link'",
        "'small'",
        "'strike'",
        "'sub'",
        "'sup'",
        "'compile'",
        "'exec'",
        "'test'",
        "'from'",
        "'isArray'",
        "'of'",
        "'copyWithin'",
        "'fill'",
        "'pop'",
        "'push'",
        "'reverse'",
        "'shift'",
        "'sort'",
        "'splice'",
        "'unshift'",
        "'concat'",
        "'join'",
        "'every'",
        "'filter'",
        "'findIndex'",
        "'forEach'",
        "'map'",
        "'reduce'",
        "'reduceRight'",
        "'some'",
        "'move'",
        "'getInt8'",
        "'getUint8'",
        "'getInt16'",
        "'getUint16'",
        "'getInt32'",
        "'getUint32'",
        "'getFloat32'",
        "'getFloat64'",
        "'setInt8'",
        "'setUint8'",
        "'setInt16'",
        "'setUint16'",
        "'setInt32'",
        "'setUint32'",
        "'setFloat32'",
        "'setFloat64'",
        "'isView'",
        "'transfer'",
        "'clear'",
        "'get'",
        "'has'",
        "'set'",
        "'add'",
        "'splat'",
        "'check'",
        "'extractLane'",
        "'replaceLane'",
        "'load'",
        "'load1'",
        "'load2'",
        "'load3'",
        "'store'",
        "'store1'",
        "'store2'",
        "'store3'",
        "'addSaturate'",
        "'div'",
        "'mul'",
        "'neg'",
        "'reciprocalApproximation'",
        "'reciprocalSqrtApproximation'",
        "'subSaturate'",
        "'shuffle'",
        "'swizzle'",
        "'maxNum'",
        "'minNum'",
        "'select'",
        "'equal'",
        "'notEqual'",
        "'lessThan'",
        "'lessThanOrEqual'",
        "'greaterThan'",
        "'greaterThanOrEqual'",
        "'and'",
        "'or'",
        "'xor'",
        "'not'",
        "'shiftLeftByScalar'",
        "'shiftRightByScalar'",
        "'allTrue'",
        "'anyTrue'",
        "'fromFloat32x4'",
        "'fromFloat32x4Bits'",
        "'fromFloat64x2Bits'",
        "'fromInt32x4'",
        "'fromInt32x4Bits'",
        "'fromInt16x8Bits'",
        "'fromInt8x16Bits'",
        "'fromUint32x4'",
        "'fromUint32x4Bits'",
        "'fromUint16x8Bits'",
        "'fromUint8x16Bits'",
        "'neg'",
        "'compareExchange'",
        "'exchange'",
        "'wait'",
        "'wake'",
        "'isLockFree'",
        "'all'",
        "'race'",
        "'reject'",
        "'resolve'",
        "'catch'",
        "'then'",
        "'finally'",
        "'next'",
        "'throw'",
        "'close'",
        "'send'",
        "'apply'",
        "'construct'",
        "'deleteProperty'",
        "'ownKeys'",
        "'getCanonicalLocales'",
        "'supportedLocalesOf'",
        "'resolvedOptions'",
        "'formatToParts'",
        "'resolvedOptions'",
        "'instantiate'",
        "'instantiateStreaming'",
        "'compileStreaming'",
        "'validate'",
        "'customSections'",
        "'exports'",
        "'imports'",
        "'grow'",
        "'super'",
        "'in'",
        "'instanceof'",
        "' '"
    ],
    "NEWLINE": [
        "'\\n'"
    ],
    "NUMBER": [
        "'1/2'",
        "'1E2'",
        "'1E02'",
        "'1E+02'",
        "'-1'",
        "'-1.00'",
        "'-1/2'",
        "'-1E2'",
        "'-1E02'",
        "'-1E+02'",
        "'1/0'",
        "'0/0'",
        "'-2147483648/-1'",
        "'-9223372036854775808/-1'",
        "'-0'",
        "'-0.0'",
        "'+0'"
    ],
    "OBJECT": [
        "IDENTIFIER"
    ],
    "PROGRAM": [
        "JSBLOCK"
    ],
    "PROPERTY": [
        "'.length' PROPERTY",
        "'.prototype' PROPERTY",
        "'.constructor' PROPERTY",
        "'.__proto__' PROPERTY",
        "'.__noSuchMethod__' PROPERTY",
        "'.__count__' PROPERTY",
        "'.__parent__' PROPERTY",
        "'.arguments' PROPERTY",
        "'.arity' PROPERTY",
        "'.caller' PROPERTY",
        "'.name' PROPERTY",
        "'.displayName' PROPERTY",
        "'.iterator' PROPERTY",
        "'.asyncIterator' PROPERTY",
        "'.match' PROPERTY",
        "'.replace' PROPERTY",
        "'.search' PROPERTY",
        "'.split' PROPERTY",
        "'.hasInstance' PROPERTY",
        "'.isConcatSpreadable' PROPERTY",
        "'.unscopables' PROPERTY",
        "'.species' PROPERTY",
        "'.toPrimitive' PROPERTY",
        "'.toStringTag' PROPERTY",
        "'.fileName' PROPERTY",
        "'.lineNumber' PROPERTY",
        "'.columnNumber' PROPERTY",
        "'.message' PROPERTY",
        "'.name' PROPERTY",
        "'.EPSILON' PROPERTY",
        "'.MAX_SAFE_INTEGER' PROPERTY",
        "'.MAX_VALUE' PROPERTY",
        "'.MIN_SAFE_INTEGER' PROPERTY",
        "'.MIN_VALUE' PROPERTY",
        "'.NaN' PROPERTY",
        "'.NEGATIVE_INFINITY' PROPERTY",
        "'.POSITIVE_INFINITY' PROPERTY",
        "'.E' PROPERTY",
        "'.LN2' PROPERTY",
        "'.LN10' PROPERTY",
        "'.LOG2E' PROPERTY",
        "'.LOG10E' PROPERTY",
        "'.PI' PROPERTY",
        "'.SQRT1_2' PROPERTY",
        "'.SQRT2' PROPERTY",
        "'.flags' PROPERTY",
        "'.global' PROPERTY",
        "'.ignoreCase' PROPERTY",
        "'.multiline' PROPERTY",
        "'.source' PROPERTY",
        "'.sticky' PROPERTY",
        "'.unicode' PROPERTY",
        "'.buffer' PROPERTY",
        "'.byteLength' PROPERTY",
        "'.byteOffset' PROPERTY",
        "'.BYTES_PER_ELEMENT' PROPERTY",
        "'.compare' PROPERTY",
        "'.format' PROPERTY",
        "'.callee' PROPERTY",
        "'.caller' PROPERTY",
        "'.memory' PROPERTY",
        "'.exports' PROPERTY",
        "' '"
    ],
    "SP": [
        "' '"
    ],
    "STATEMENT": [
        "EXPR ';'",
        "'var' SP VAR '=' EXPR ';'",
        "'let' SP VAR '=' EXPR ';'",
        "VAR '=' EXPR ';'",
        "VAR PROPERTY '=' EXPR ';'",
        "VAR '[' DECIMALNUMBER ']' '=' EXPR ';'",
        "'const' SP VAR '=' EXPR ';'",
        "'typeof' SP EXPR ';'",
        "'void' SP EXPR ';'",
        "'return' SP EXPR ';'",
        "VAR ':'"
    ],
    "VAR": [
        "'a'",
        "'b'",
        "'c'",
        "'d'",
        "'e'",
        "'f'",
        "'g'",
        "'h'"
    ]
}
