@galacean/engine-shaderlab 1.5.14 → 1.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"browser.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../src/common/ShaderRange.ts","../src/common/Keywords.ts","../src/common/types.ts","../src/GSError.ts","../src/lalr/types.ts","../src/parser/symbolTable/SymbolInfo.ts","../src/parser/GrammarSymbol.ts","../src/parser/AST.ts","../src/preprocessor/constants.ts","../src/common/Enums.ts","../src/common/ShaderPosition.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../src/ShaderLabUtils.ts","../src/common/BaseToken.ts","../src/lexer/Utils.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../src/common/BaseScanner.ts","../src/lexer/Lexer.ts","../src/parser/ShaderInfo.ts","../src/parser/symbolTable/SymbolDataType.ts","../src/parser/symbolTable/FnSymbol.ts","../src/parser/symbolTable/StructSymbol.ts","../src/common/BaseSymbolTable.ts","../src/parser/symbolTable/TargetSymbolTable.ts","../src/parser/symbolTable/VarSymbol.ts","../src/parser/SemanticAnalyzer.ts","../src/lalr/Production.ts","../src/parser/Grammar.ts","../src/parser/types.ts","../src/lalr/Utils.ts","../src/lalr/CFG.ts","../src/lalr/StateItem.ts","../src/lalr/State.ts","../src/lalr/LALR1.ts","../src/parser/ShaderTargetParser.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_type_of.js","../src/preprocessor/MacroDefine.ts","../src/preprocessor/Utils.ts","../src/preprocessor/PpScanner.ts","../src/preprocessor/PpParser.ts","../src/preprocessor/Preprocessor.ts","../src/ParserUtils.ts","../src/codeGen/VisitorContext.ts","../src/TempArray.ts","../src/codeGen/CodeGenVisitor.ts","../src/codeGen/GLESVisitor.ts","../src/codeGen/GLES100.ts","../src/codeGen/GLES300.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/contentParser/KeywordMap.ts","../src/contentParser/Scanner.ts","../src/contentParser/ContentSymbolTable.ts","../src/contentParser/ShaderContentParser.ts","../src/ShaderLab.ts","../src/index.ts"],"sourcesContent":["function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { IPoolElement } from \"@galacean/engine\";\nimport { ShaderPosition } from \"./ShaderPosition\";\n\nexport class ShaderRange implements IPoolElement {\n public start: ShaderPosition;\n public end: ShaderPosition;\n\n set(start: ShaderPosition, end: ShaderPosition) {\n this.start = start;\n this.end = end;\n }\n\n dispose(): void {\n this.start.dispose();\n this.end.dispose();\n }\n}\n","export enum EKeyword {\n ATTRIBUTE = 0,\n CONST,\n BOOL,\n FLOAT,\n DOUBLE,\n INT,\n UINT,\n BREAK,\n CONTINUE,\n DO,\n ELSE,\n FOR,\n IF,\n WHILE,\n DISCARD,\n RETURN,\n BVEC2,\n BVEC3,\n BVEC4,\n IVEC2,\n IVEC3,\n IVEC4,\n UVEC2,\n UVEC3,\n UVEC4,\n VEC2,\n VEC3,\n VEC4,\n VEC4_ARRAY,\n MAT2,\n MAT3,\n MAT4,\n MAT2X3,\n MAT2X4,\n MAT3X2,\n MAT3X4,\n MAT4X2,\n MAT4X3,\n IN,\n OUT,\n INOUT,\n CENTROID,\n SAMPLER2D,\n SAMPLER3D,\n SAMPLER_CUBE,\n SAMPLER2D_SHADOW,\n SAMPLER_CUBE_SHADOW,\n SAMPLER2D_ARRAY,\n SAMPLER2D_ARRAY_SHADOW,\n I_SAMPLER2D,\n I_SAMPLER3D,\n I_SAMPLER_CUBE,\n I_SAMPLER2D_ARRAY,\n U_SAMPLER2D,\n U_SAMPLER3D,\n U_SAMPLER_CUBE,\n U_SAMPLER2D_ARRAY,\n STRUCT,\n LAYOUT,\n LOCATION,\n VOID,\n TRUE,\n FALSE,\n PRECISION,\n PRECISE,\n HIGHP,\n MEDIUMP,\n LOWP,\n INVARIANT,\n SMOOTH,\n FLAT,\n NOPERSPECTIVE,\n\n // galacean internals\n GS_RenderQueueType,\n GS_BlendState,\n GS_DepthState,\n GS_StencilState,\n GS_RasterState,\n GS_EditorProperties,\n GS_EditorMacros,\n GS_Editor,\n GS_Tags,\n GS_ReplacementTag,\n GS_LightMode,\n GS_PipelineStage,\n GS_VertexShader,\n GS_FragmentShader,\n GS_SubShader,\n GS_Pass,\n GS_BlendFactor,\n GS_BlendOperation,\n GS_Bool,\n GS_Number,\n GS_Color,\n GS_CompareFunction,\n GS_StencilOperation,\n GS_CullMode,\n GS_UsePass\n}\n","import { EKeyword } from \"./Keywords\";\n\nexport const KeywordTable = new Map<string, EKeyword>([\n [\"attribute\", EKeyword.ATTRIBUTE],\n [\"const\", EKeyword.CONST],\n [\"bool\", EKeyword.BOOL],\n [\"float\", EKeyword.FLOAT],\n [\"double\", EKeyword.DOUBLE],\n [\"int\", EKeyword.INT],\n [\"uint\", EKeyword.UINT],\n [\"break\", EKeyword.BREAK],\n [\"continue\", EKeyword.CONTINUE],\n [\"do\", EKeyword.DO],\n [\"else\", EKeyword.ELSE],\n [\"for\", EKeyword.FOR],\n [\"if\", EKeyword.IF],\n [\"while\", EKeyword.WHILE],\n [\"discard\", EKeyword.DISCARD],\n [\"return\", EKeyword.RETURN],\n [\"bvec2\", EKeyword.BVEC2],\n [\"bvec3\", EKeyword.BVEC3],\n [\"bvec4\", EKeyword.BVEC4],\n [\"ivec2\", EKeyword.IVEC2],\n [\"ivec3\", EKeyword.IVEC3],\n [\"ivec4\", EKeyword.IVEC4],\n [\"uvec2\", EKeyword.UVEC2],\n [\"uvec3\", EKeyword.UVEC3],\n [\"uvec4\", EKeyword.UVEC4],\n [\"vec2\", EKeyword.VEC2],\n [\"vec3\", EKeyword.VEC3],\n [\"vec4\", EKeyword.VEC4],\n [\"mat2\", EKeyword.MAT2],\n [\"mat3\", EKeyword.MAT3],\n [\"mat4\", EKeyword.MAT4],\n [\"in\", EKeyword.IN],\n [\"out\", EKeyword.OUT],\n [\"inout\", EKeyword.INOUT],\n [\"sampler2D\", EKeyword.SAMPLER2D],\n [\"samplerCube\", EKeyword.SAMPLER_CUBE],\n [\"sampler3D\", EKeyword.SAMPLER3D],\n [\"sampler2DShadow\", EKeyword.SAMPLER2D_SHADOW],\n [\"samplerCubeShadow\", EKeyword.SAMPLER_CUBE_SHADOW],\n [\"sampler2DArray\", EKeyword.SAMPLER2D_ARRAY],\n [\"sampler2DArrayShadow\", EKeyword.SAMPLER2D_ARRAY_SHADOW],\n [\"isampler2D\", EKeyword.I_SAMPLER2D],\n [\"isampler3D\", EKeyword.I_SAMPLER3D],\n [\"isamplerCube\", EKeyword.I_SAMPLER_CUBE],\n [\"isampler2DArray\", EKeyword.I_SAMPLER2D_ARRAY],\n [\"usampler2D\", EKeyword.U_SAMPLER2D],\n [\"usampler3D\", EKeyword.U_SAMPLER3D],\n [\"usamplerCube\", EKeyword.U_SAMPLER_CUBE],\n [\"usampler2DArray\", EKeyword.U_SAMPLER2D_ARRAY],\n [\"struct\", EKeyword.STRUCT],\n [\"void\", EKeyword.VOID],\n [\"true\", EKeyword.TRUE],\n [\"false\", EKeyword.FALSE],\n [\"precision\", EKeyword.PRECISION],\n [\"precise\", EKeyword.PRECISE],\n [\"highp\", EKeyword.HIGHP],\n [\"mediump\", EKeyword.MEDIUMP],\n [\"lowp\", EKeyword.LOWP],\n [\"invariant\", EKeyword.INVARIANT],\n [\"flat\", EKeyword.FLAT],\n [\"smooth\", EKeyword.SMOOTH],\n [\"noperspective\", EKeyword.NOPERSPECTIVE],\n [\"centroid\", EKeyword.CENTROID],\n [\"layout\", EKeyword.LAYOUT],\n [\"location\", EKeyword.LOCATION]\n]);\n\nexport enum ETokenType {\n ID = 1000,\n FLOAT_CONSTANT,\n INT_CONSTANT,\n STRING_CONST,\n /** << */\n LEFT_OP,\n /** \\>> */\n RIGHT_OP,\n /** ++ */\n INC_OP,\n /** -- */\n DEC_OP,\n /** <= */\n LE_OP,\n /** \\>= */\n GE_OP,\n /** == */\n EQ_OP,\n /** != */\n NE_OP,\n /** && */\n AND_OP,\n /** || */\n OR_OP,\n /** ^^ */\n XOR_OP,\n /** *= */\n MUL_ASSIGN,\n /** /= */\n DIV_ASSIGN,\n /** += */\n ADD_ASSIGN,\n /** -= */\n SUB_ASSIGN,\n /** %= */\n MOD_ASSIGN,\n /** <<= */\n LEFT_ASSIGN,\n /** >>= */\n RIGHT_ASSIGN,\n /** &= */\n AND_ASSIGN,\n /** ^= */\n XOR_ASSIGN,\n /** |= */\n OR_ASSIGN,\n /** ( */\n LEFT_PAREN,\n /** ) */\n RIGHT_PAREN,\n /** [ */\n LEFT_BRACKET,\n /** ] */\n RIGHT_BRACKET,\n /** { */\n LEFT_BRACE,\n /** } */\n RIGHT_BRACE,\n /** . */\n DOT,\n /** , */\n COMMA,\n COLON,\n /** = */\n EQUAL,\n /** ; */\n SEMICOLON,\n /** ! */\n BANG,\n /** \\- */\n DASH,\n /** ~ */\n TILDE,\n PLUS,\n /** \\* */\n STAR,\n /** / */\n SLASH,\n /** % */\n PERCENT,\n /** < */\n LEFT_ANGLE,\n /** \\> */\n RIGHT_ANGLE,\n VERTICAL_BAR,\n /** ^ */\n CARET,\n /** & */\n AMPERSAND,\n /** ? */\n QUESTION,\n\n NOT_WORD,\n\n /** ε */\n EPSILON = 1998,\n EOF = 1999\n}\n\nexport const TypeAny = 3000;\n\nexport type GalaceanDataType =\n | EKeyword.VOID\n | EKeyword.FLOAT\n | EKeyword.BOOL\n | EKeyword.INT\n | EKeyword.UINT\n | EKeyword.VEC2\n | EKeyword.VEC3\n | EKeyword.VEC4\n | EKeyword.BVEC2\n | EKeyword.BVEC3\n | EKeyword.BVEC4\n | EKeyword.IVEC2\n | EKeyword.IVEC3\n | EKeyword.IVEC4\n | EKeyword.UVEC2\n | EKeyword.UVEC3\n | EKeyword.UVEC4\n | EKeyword.MAT2\n | EKeyword.MAT3\n | EKeyword.MAT4\n | EKeyword.MAT2X3\n | EKeyword.MAT2X4\n | EKeyword.MAT3X2\n | EKeyword.MAT3X4\n | EKeyword.MAT4X2\n | EKeyword.MAT4X3\n | EKeyword.SAMPLER2D\n | EKeyword.SAMPLER3D\n | EKeyword.SAMPLER_CUBE\n | EKeyword.SAMPLER2D_SHADOW\n | EKeyword.SAMPLER_CUBE_SHADOW\n | EKeyword.SAMPLER2D_ARRAY\n | EKeyword.SAMPLER2D_ARRAY_SHADOW\n | EKeyword.I_SAMPLER2D\n | EKeyword.I_SAMPLER3D\n | EKeyword.I_SAMPLER_CUBE\n | EKeyword.I_SAMPLER2D_ARRAY\n | EKeyword.U_SAMPLER2D\n | EKeyword.U_SAMPLER3D\n | EKeyword.U_SAMPLER_CUBE\n | EKeyword.U_SAMPLER2D_ARRAY\n | EKeyword.VEC4_ARRAY\n | typeof TypeAny\n | string;\n\nexport type TokenType = ETokenType | EKeyword;\n","// #if _VERBOSE\nimport { ShaderPosition } from \"./common/ShaderPosition\";\nimport { ShaderRange } from \"./common/ShaderRange\";\n\nexport class GSError extends Error {\n static wrappingLineCount = 2;\n\n constructor(\n name: GSErrorName,\n message: string,\n public readonly location: ShaderRange | ShaderPosition,\n public readonly source: string,\n public readonly file?: string\n ) {\n super(message);\n this.name = name;\n }\n\n override toString(): string {\n let start: ShaderPosition, end: ShaderPosition;\n const { message, location, source } = this;\n if (!source) {\n return message;\n }\n\n if (location instanceof ShaderPosition) {\n start = end = location;\n } else {\n start = location.start;\n end = location.end;\n }\n const lines = source.split(\"\\n\");\n\n let diagnosticMessage = `${this.name}: ${message}\\n\\n`;\n const lineSplit = \"|···\";\n\n const wrappingLineCount = GSError.wrappingLineCount;\n for (let i = start.line - wrappingLineCount, n = end.line + wrappingLineCount; i <= n; i++) {\n const line = lines[i];\n diagnosticMessage += lineSplit + `${line}\\n`;\n\n if (i < start.line || i > end.line) continue;\n\n let remarkStart = 0;\n let remarkEnd = line.length;\n let paddingLength = lineSplit.length;\n if (i === start.line) {\n remarkStart = start.column;\n paddingLength += start.column;\n }\n if (i === end.line) {\n remarkEnd = end.column;\n }\n const remarkLength = Math.max(remarkEnd - remarkStart, 1);\n\n diagnosticMessage += \" \".repeat(paddingLength) + \"^\".repeat(remarkLength) + \"\\n\";\n }\n\n return diagnosticMessage;\n }\n}\n\n// #endif\nexport enum GSErrorName {\n PreprocessorError = \"PreprocessorError\",\n CompilationError = \"CompilationError\",\n ScannerError = \"ScannerError\"\n}\n","import { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\n\nexport type StateActionTable = Map<number /** state ID */, ActionTable>;\nexport type ActionTable = Map<Terminal, ActionInfo>;\nexport type StateGotoTable = Map<number /** state ID */, GotoTable>;\nexport type GotoTable = Map<NoneTerminal, number /** state ID */>;\n\nexport enum EAction {\n Shift = 0,\n Reduce,\n Accept\n}\n\nexport interface ActionInfo {\n action: EAction;\n target?: number;\n}\n","import { IBaseSymbol } from \"../../common/BaseSymbolTable\";\nimport { GalaceanDataType } from \"../../common/types\";\nimport { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\n\nexport enum ESymbolType {\n VAR,\n FN,\n STRUCT\n}\n\nexport type SymbolAstNode =\n | ASTNode.Initializer\n | ASTNode.StructSpecifier\n | ASTNode.FunctionDefinition\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\nexport class SymbolInfo implements IBaseSymbol {\n constructor(\n public readonly ident: string,\n public readonly symbolType: ESymbolType,\n public readonly astNode?: SymbolAstNode,\n public readonly dataType?: SymbolDataType,\n public readonly signature?: GalaceanDataType[]\n ) {}\n}\n","import { TokenType } from \"../common\";\n\nexport type Terminal = TokenType;\n\nexport enum NoneTerminal {\n START = 2000,\n // galacean\n gs_shader_program,\n\n // glsl\n global_declaration,\n variable_declaration,\n variable_declaration_list,\n variable_declaration_statement,\n array_specifier_list,\n array_specifier,\n ext_builtin_type_specifier_nonarray,\n precision_specifier,\n variable_identifier,\n variable_identifier_node,\n primary_expression,\n postfix_expression,\n integer_expression,\n function_call,\n function_call_generic,\n function_call_header_no_parameters,\n function_call_header_with_parameters,\n function_call_parameter_list,\n function_call_header,\n function_identifier,\n constructor_identifier,\n unary_expression,\n unary_operator,\n multiplicative_expression,\n additive_expression,\n shift_expression,\n relational_expression,\n equality_expression,\n and_expression,\n inclusive_or_expression,\n exclusive_or_expression,\n logical_and_expression,\n logical_xor_expression,\n logical_or_expression,\n conditional_expression,\n assignment_expression,\n assignment_operator,\n expression,\n integer_constant_expression,\n integer_constant_expression_operator,\n declaration,\n function_prototype,\n function_declarator,\n function_header_with_parameters,\n function_header,\n function_parameter_list,\n parameter_declarator,\n parameter_declaration,\n parameter_qualifier,\n parameter_type_specifier,\n init_declarator_list,\n single_declaration,\n fully_specified_type,\n type_qualifier,\n single_type_qualifier,\n storage_qualifier,\n precision_qualifier,\n interpolation_qualifier,\n invariant_qualifier,\n type_specifier,\n type_specifier_nonarray,\n type_specifier_no_prec,\n basic_type,\n struct_specifier,\n struct_declaration_list,\n struct_declaration,\n layout_qualifier,\n struct_declarator_list,\n struct_declarator,\n identifier_list,\n decl_identifier,\n initializer,\n initializer_list,\n declaration_statement,\n simple_statement,\n compound_statement_no_scope,\n statement_with_scope,\n compound_statement,\n statement,\n statement_list,\n iteration_statement_no_new_scope,\n expression_statement,\n selection_statement,\n selection_rest_statement,\n condition,\n conditionopt,\n iteration_statement,\n for_init_statement,\n for_rest_statement,\n jump_statement,\n external_declaration,\n function_definition,\n field_selection,\n bool_constant,\n function_identifier_node,\n typename_identifier_node,\n scope_brace,\n scope_end_brace,\n\n _ignore\n}\n\nexport type GrammarSymbol = Terminal | NoneTerminal;\n\nexport type Derivation = GrammarSymbol[];\n","// #if _VERBOSE\nimport { BuiltinFunction, BuiltinVariable, NonGenericGalaceanType } from \"./builtin\";\n// #endif\nimport { ClearableObjectPool, IPoolElement } from \"@galacean/engine\";\nimport { CodeGenVisitor } from \"../codeGen\";\nimport { EKeyword, ETokenType, GalaceanDataType, ShaderRange, TokenType, TypeAny } from \"../common\";\nimport { BaseToken, BaseToken as Token } from \"../common/BaseToken\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { NoneTerminal } from \"./GrammarSymbol\";\nimport SemanticAnalyzer from \"./SemanticAnalyzer\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, VarSymbol } from \"./symbolTable\";\nimport { IParamInfo, NodeChild, StructProp, SymbolType } from \"./types\";\n\nfunction ASTNodeDecorator(nonTerminal: NoneTerminal) {\n return function <T extends { new (): TreeNode }>(ASTNode: T) {\n ASTNode.prototype.nt = nonTerminal;\n (<any>ASTNode).pool = ShaderLabUtils.createObjectPool(ASTNode);\n };\n}\n\nexport abstract class TreeNode implements IPoolElement {\n static pool: ClearableObjectPool<TreeNode & { set: (loc: ShaderRange, children: NodeChild[]) => void }>;\n\n /** The non-terminal in grammar. */\n nt: NoneTerminal;\n private _children: NodeChild[];\n private _location: ShaderRange;\n\n get children() {\n return this._children;\n }\n\n get location() {\n return this._location;\n }\n\n set(loc: ShaderRange, children: NodeChild[]): void {\n this._location = loc;\n this._children = children;\n this.init();\n }\n\n init() {}\n\n dispose(): void {}\n\n // Visitor pattern interface for code generation\n codeGen(visitor: CodeGenVisitor) {\n return visitor.defaultCodeGen(this.children);\n }\n\n /**\n * Do semantic analyze right after the ast node is generated.\n */\n semanticAnalyze(sa: SemanticAnalyzer) {}\n}\n\nexport namespace ASTNode {\n export type ASTNodePool = ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >;\n\n export function _unwrapToken(node: NodeChild) {\n if (node instanceof Token) {\n return node;\n }\n throw \"not token\";\n }\n\n export function get(pool: ASTNodePool, sa: SemanticAnalyzer, loc: ShaderRange, children: NodeChild[]) {\n const node = pool.get();\n node.set(loc, children);\n node.semanticAnalyze(sa);\n sa.semanticStack.push(node);\n }\n\n @ASTNodeDecorator(NoneTerminal._ignore)\n export class TrivialNode extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.scope_brace)\n export class ScopeBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.newScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.scope_end_brace)\n export class ScopeEndBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.dropScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.jump_statement)\n export class JumpStatement extends TreeNode {\n isFragReturnStatement: boolean;\n\n override init(): void {\n this.isFragReturnStatement = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (ASTNode._unwrapToken(this.children![0]).type === EKeyword.RETURN) {\n sa.curFunctionInfo.returnStatement = this;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitJumpStatement(this);\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.conditionopt)\n export class ConditionOpt extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_rest_statement)\n export class ForRestStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.condition)\n export class Condition extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_init_statement)\n export class ForInitStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.iteration_statement)\n export class IterationStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.selection_statement)\n export class SelectionStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.expression_statement)\n export class ExpressionStatement extends TreeNode {}\n // #endif\n\n export abstract class ExpressionAstNode extends TreeNode {\n protected _type?: GalaceanDataType;\n set type(t: GalaceanDataType | undefined) {\n this._type = t;\n }\n get type() {\n return this._type ?? TypeAny;\n }\n\n override init(): void {\n this._type = undefined;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.initializer_list)\n export class InitializerList extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const init = this.children[0] as Initializer | InitializerList;\n this.type = init.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.initializer)\n export class Initializer extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AssignmentExpression>this.children[0]).type;\n } else {\n this.type = (<InitializerList>this.children[1]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.single_declaration)\n export class SingleDeclaration extends TreeNode {\n typeSpecifier: TypeSpecifier;\n arraySpecifier?: ArraySpecifier;\n\n override init(): void {\n this.typeSpecifier = undefined;\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const childrenLen = children.length;\n const fullyType = children[0] as FullySpecifiedType;\n const typeSpecifier = fullyType.typeSpecifier;\n this.typeSpecifier = typeSpecifier;\n this.arraySpecifier = typeSpecifier.arraySpecifier;\n\n const id = children[1] as Token;\n\n let sm: VarSymbol;\n if (childrenLen === 2 || childrenLen === 4) {\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[3] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n } else {\n const arraySpecifier = children[2] as ArraySpecifier;\n // #if _VERBOSE\n if (arraySpecifier && this.arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n this.arraySpecifier = arraySpecifier;\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[4] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n }\n sa.symbolTableStack.insert(sm);\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitSingleDeclaration(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.fully_specified_type)\n export class FullySpecifiedType extends TreeNode {\n typeSpecifier: TypeSpecifier;\n type: GalaceanDataType;\n\n override semanticAnalyze(_: SemanticAnalyzer): void {\n const children = this.children;\n this.typeSpecifier = (children.length === 1 ? children[0] : children[1]) as TypeSpecifier;\n this.type = this.typeSpecifier.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_qualifier)\n export class TypeQualifier extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.single_type_qualifier)\n export class SingleTypeQualifier extends TreeNode {\n qualifier: EKeyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0];\n if (child instanceof Token) {\n this.qualifier = child.type as EKeyword;\n this.lexeme = child.lexeme;\n } else {\n this.qualifier = (<BasicTypeQualifier>child).qualifier;\n this.lexeme = (<BasicTypeQualifier>child).lexeme;\n }\n }\n }\n\n abstract class BasicTypeQualifier extends TreeNode {\n qualifier: EKeyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const token = this.children[0] as Token;\n this.qualifier = token.type as EKeyword;\n this.lexeme = token.lexeme;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.storage_qualifier)\n export class StorageQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.precision_qualifier)\n export class PrecisionQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.interpolation_qualifier)\n export class InterpolationQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.invariant_qualifier)\n export class InvariantQualifier extends BasicTypeQualifier {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.type_specifier)\n export class TypeSpecifier extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n arraySize?: number;\n isCustom: boolean;\n\n override init(): void {\n this.arraySize = undefined;\n }\n get arraySpecifier(): ArraySpecifier {\n return this.children[1] as ArraySpecifier;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const firstChild = children[0] as TypeSpecifierNonArray;\n this.type = firstChild.type;\n this.lexeme = firstChild.lexeme;\n this.arraySize = (children?.[1] as ArraySpecifier)?.size;\n this.isCustom = typeof this.type === \"string\";\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.array_specifier)\n export class ArraySpecifier extends TreeNode {\n size: number | undefined;\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const integerConstantExpr = this.children[1] as IntegerConstantExpression;\n this.size = integerConstantExpr.value;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression_operator)\n export class IntegerConstantExpressionOperator extends TreeNode {\n compute: (a: number, b: number) => number;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const operator = this.children[0] as Token;\n this.lexeme = operator.lexeme;\n switch (operator.type) {\n case ETokenType.PLUS:\n this.compute = (a, b) => a + b;\n break;\n case ETokenType.DASH:\n this.compute = (a, b) => a - b;\n break;\n case ETokenType.STAR:\n this.compute = (a, b) => a * b;\n break;\n case ETokenType.SLASH:\n this.compute = (a, b) => a / b;\n break;\n case ETokenType.PERCENT:\n this.compute = (a, b) => a % b;\n break;\n default:\n sa.reportError(operator.location, `not implemented operator ${operator.lexeme}`);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression)\n export class IntegerConstantExpression extends TreeNode {\n value?: number;\n\n override init(): void {\n this.value = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const child = this.children[0];\n if (child instanceof Token) {\n this.value = Number(child.lexeme);\n }\n // #if _VERBOSE\n else {\n const id = child as VariableIdentifier;\n if (!id.symbolInfo) {\n sa.reportError(id.location, `Undeclared symbol: ${id.lexeme}`);\n }\n if (!ParserUtils.typeCompatible(EKeyword.INT, id.typeInfo)) {\n sa.reportError(id.location, \"Invalid integer.\");\n return;\n }\n }\n // #endif\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_specifier_nonarray)\n export class TypeSpecifierNonArray extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n\n override init(): void {\n const tt = this.children[0];\n if (tt instanceof Token) {\n this.type = tt.lexeme;\n this.lexeme = tt.lexeme;\n } else {\n this.type = (tt as ExtBuiltinTypeSpecifierNonArray).type as GalaceanDataType;\n this.lexeme = (tt as ExtBuiltinTypeSpecifierNonArray).lexeme;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.ext_builtin_type_specifier_nonarray)\n export class ExtBuiltinTypeSpecifierNonArray extends TreeNode {\n type: TokenType;\n lexeme: string;\n\n override init(): void {\n const token = this.children[0] as Token;\n this.type = token.type;\n this.lexeme = token.lexeme;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.init_declarator_list)\n export class InitDeclaratorList extends TreeNode {\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n let sm: VarSymbol;\n const children = this.children;\n const childrenLength = children.length;\n if (childrenLength === 1) {\n const { typeSpecifier, arraySpecifier } = children[0] as SingleDeclaration;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n } else {\n const initDeclList = children[0] as InitDeclaratorList;\n this.typeInfo = initDeclList.typeInfo;\n }\n\n if (childrenLength === 3 || childrenLength === 5) {\n const id = children[2] as Token;\n sm = new VarSymbol(id.lexeme, this.typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n } else if (childrenLength === 4 || childrenLength === 6) {\n const typeInfo = this.typeInfo;\n const arraySpecifier = this.children[3] as ArraySpecifier;\n // #if _VERBOSE\n if (typeInfo.arraySpecifier && arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n typeInfo.arraySpecifier = arraySpecifier;\n const id = children[2] as Token;\n sm = new VarSymbol(id.lexeme, typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.identifier_list)\n export class IdentifierList extends TreeNode {\n idList: Token[] = [];\n\n override init(): void {\n this.idList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, idList: curIdList } = this;\n if (children.length === 2) {\n curIdList.push(children[1] as Token);\n } else {\n const list = children[0] as IdentifierList;\n const id = children[2] as Token;\n const listIdLength = list.idList.length;\n curIdList.length = listIdLength + 1;\n\n for (let i = 0; i < listIdLength; i++) {\n curIdList[i] = list.idList[i];\n }\n curIdList[listIdLength] = id;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.declaration)\n export class Declaration extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitDeclaration(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_prototype)\n export class FunctionProtoType extends TreeNode {\n ident: Token;\n returnType: FullySpecifiedType;\n parameterList: IParamInfo[];\n paramSig: GalaceanDataType[];\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const declarator = this.children[0] as FunctionDeclarator;\n this.ident = declarator.ident;\n this.returnType = declarator.returnType;\n this.parameterList = declarator.parameterInfoList;\n this.paramSig = declarator.paramSig;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionProtoType(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_declarator)\n export class FunctionDeclarator extends TreeNode {\n ident: Token;\n returnType: FullySpecifiedType;\n parameterInfoList: IParamInfo[] | undefined;\n paramSig: GalaceanDataType[] | undefined;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.curFunctionInfo.returnStatement = null;\n sa.curFunctionInfo.header = this;\n\n const children = this.children;\n const header = children[0] as FunctionHeader;\n const parameterList = children[1] as FunctionParameterList | undefined;\n this.ident = header.ident;\n this.returnType = header.returnType;\n this.parameterInfoList = parameterList?.parameterInfoList;\n this.paramSig = parameterList?.paramSig;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_header)\n export class FunctionHeader extends TreeNode {\n ident: Token;\n returnType: FullySpecifiedType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.newScope();\n const children = this.children;\n this.ident = children[1] as Token;\n this.returnType = children[0] as FullySpecifiedType;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionHeader(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_parameter_list)\n export class FunctionParameterList extends TreeNode {\n parameterInfoList: IParamInfo[] = [];\n paramSig: GalaceanDataType[] = [];\n\n override init(): void {\n this.parameterInfoList.length = 0;\n this.paramSig.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const childrenLength = children.length;\n const { parameterInfoList, paramSig } = this;\n if (childrenLength === 1) {\n const decl = children[0] as ParameterDeclaration;\n parameterInfoList.push({ ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl });\n paramSig.push(decl.typeInfo.type);\n } else {\n const list = children[0] as FunctionParameterList;\n const decl = children[2] as ParameterDeclaration;\n const listParamLength = list.parameterInfoList.length;\n parameterInfoList.length = listParamLength + 1;\n paramSig.length = listParamLength + 1;\n\n for (let i = 0; i < listParamLength; i++) {\n parameterInfoList[i] = list.parameterInfoList[i];\n paramSig[i] = list.paramSig[i];\n }\n parameterInfoList[listParamLength] = { ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl };\n paramSig[listParamLength] = decl.typeInfo.type;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionParameterList(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.parameter_declaration)\n export class ParameterDeclaration extends TreeNode {\n typeQualifier: TypeQualifier | undefined;\n typeInfo: SymbolType;\n ident: Token;\n\n override init(): void {\n this.typeQualifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const childrenLength = children.length;\n let parameterDeclarator: ParameterDeclarator;\n if (childrenLength === 1) {\n parameterDeclarator = children[0] as ParameterDeclarator;\n } else {\n parameterDeclarator = children[1] as ParameterDeclarator;\n }\n if (childrenLength === 2) {\n this.typeQualifier = children[0] as TypeQualifier;\n }\n this.typeInfo = parameterDeclarator.typeInfo;\n this.ident = parameterDeclarator.ident;\n\n const varSymbol = new VarSymbol(parameterDeclarator.ident.lexeme, parameterDeclarator.typeInfo, false, this);\n sa.symbolTableStack.insert(varSymbol);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.parameter_declarator)\n export class ParameterDeclarator extends TreeNode {\n ident: Token;\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[1] as Token;\n const typeSpecifier = children[0] as TypeSpecifier;\n const arraySpecifier = children[2] as ArraySpecifier;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.simple_statement)\n export class SimpleStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.compound_statement)\n export class CompoundStatement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.compound_statement_no_scope)\n export class CompoundStatementNoScope extends TreeNode {}\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.statement)\n export class Statement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.statement_list)\n export class StatementList extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitStatementList(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_definition)\n export class FunctionDefinition extends TreeNode {\n returnStatement?: ASTNode.JumpStatement;\n protoType: FunctionProtoType;\n statements: CompoundStatementNoScope;\n\n override init(): void {\n this.returnStatement = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.protoType = children[0] as FunctionProtoType;\n this.statements = children[1] as CompoundStatementNoScope;\n\n sa.dropScope();\n const sm = new FnSymbol(this.protoType.ident.lexeme, this);\n sa.symbolTableStack.insert(sm);\n\n const { curFunctionInfo } = sa;\n const { header, returnStatement } = curFunctionInfo;\n if (header.returnType.type === EKeyword.VOID) {\n if (returnStatement) {\n sa.reportError(header.returnType.location, \"Return in void function.\");\n }\n } else {\n if (!returnStatement) {\n sa.reportError(header.returnType.location, `No return statement found.`);\n } else {\n this.returnStatement = returnStatement;\n }\n }\n curFunctionInfo.header = undefined;\n curFunctionInfo.returnStatement = undefined;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionDefinition(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call)\n export class FunctionCall extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.type = (this.children[0] as FunctionCallGeneric).type;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionCall(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_generic)\n export class FunctionCallGeneric extends ExpressionAstNode {\n fnSymbol: FnSymbol | StructSymbol | undefined;\n\n override init(): void {\n super.init();\n this.fnSymbol = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const functionIdentifier = this.children[0] as FunctionIdentifier;\n if (functionIdentifier.isBuiltin) {\n this.type = functionIdentifier.ident;\n } else {\n const fnIdent = <string>functionIdentifier.ident;\n\n let paramSig: NonGenericGalaceanType[] | undefined;\n if (this.children.length === 4) {\n const paramList = this.children[2];\n if (paramList instanceof FunctionCallParameterList) {\n paramSig = paramList.paramSig as any;\n }\n }\n // #if _VERBOSE\n const builtinFn = BuiltinFunction.getFn(fnIdent, paramSig);\n if (builtinFn) {\n this.type = builtinFn.realReturnType;\n return;\n }\n // #endif\n\n const fnSymbol = sa.lookupSymbolBy(fnIdent, ESymbolType.FN, paramSig);\n if (!fnSymbol) {\n // #if _VERBOSE\n sa.reportError(this.location, `No overload function type found: ${functionIdentifier.ident}`);\n // #endif\n return;\n }\n this.type = fnSymbol?.dataType?.type;\n this.fnSymbol = fnSymbol as FnSymbol;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_parameter_list)\n export class FunctionCallParameterList extends TreeNode {\n paramSig: GalaceanDataType[] = [];\n paramNodes: AssignmentExpression[] = [];\n\n override init(): void {\n this.paramSig.length = 0;\n this.paramNodes.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, paramSig, paramNodes } = this;\n if (children.length === 1) {\n const expr = children[0] as AssignmentExpression;\n if (expr.type == undefined) {\n paramSig.push(TypeAny);\n } else {\n paramSig.push(expr.type);\n }\n\n this.paramNodes.push(expr);\n } else {\n const list = children[0] as FunctionCallParameterList;\n const decl = children[2] as AssignmentExpression;\n if (list.paramSig.length === 0 || decl.type == undefined) {\n this.paramSig.push(TypeAny);\n } else {\n const listParamLength = list.paramSig.length;\n paramSig.length = listParamLength + 1;\n paramNodes.length = listParamLength + 1;\n\n for (let i = 0; i < listParamLength; i++) {\n paramSig[i] = list.paramSig[i];\n paramNodes[i] = list.paramNodes[i];\n }\n paramSig[listParamLength] = decl.type;\n paramNodes[listParamLength] = decl;\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.precision_specifier)\n export class PrecisionSpecifier extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.shaderData.globalPrecisions.push(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_identifier)\n export class FunctionIdentifier extends TreeNode {\n ident: GalaceanDataType;\n lexeme: string;\n isBuiltin: boolean;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const typeSpecifier = this.children[0] as TypeSpecifier;\n this.ident = typeSpecifier.type;\n this.lexeme = typeSpecifier.lexeme;\n this.isBuiltin = typeof this.ident !== \"string\";\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionIdentifier(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.assignment_expression)\n export class AssignmentExpression extends ExpressionAstNode {\n // #if _VERBOSE\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as ConditionalExpression;\n this.type = expr.type ?? TypeAny;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type ?? TypeAny;\n }\n }\n // #endif\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.assignment_operator)\n export class AssignmentOperator extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.expression)\n export class Expression extends ExpressionAstNode {\n // #if _VERBOSE\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as AssignmentExpression;\n this.type = expr.type;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type;\n }\n }\n // #endif\n }\n\n @ASTNodeDecorator(NoneTerminal.primary_expression)\n export class PrimaryExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const id = this.children[0];\n if (id instanceof VariableIdentifier) {\n this.type = id.typeInfo ?? TypeAny;\n } else {\n switch ((<Token>id).type) {\n case ETokenType.INT_CONSTANT:\n this._type = EKeyword.INT;\n break;\n case ETokenType.FLOAT_CONSTANT:\n this.type = EKeyword.FLOAT;\n break;\n case EKeyword.TRUE:\n case EKeyword.FALSE:\n this.type = EKeyword.BOOL;\n break;\n }\n }\n } else {\n const expression = this.children[1] as Expression;\n this.type = expression.type;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.postfix_expression)\n export class PostfixExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n const child = this.children[0] as PrimaryExpression | FunctionCall;\n this.type = child.type;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitPostfixExpression(this);\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.unary_operator)\n export class UnaryOperator extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.unary_expression)\n export class UnaryExpression extends ExpressionAstNode {\n override init(): void {\n this.type = (this.children[0] as PostfixExpression).type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.multiplicative_expression)\n export class MultiplicativeExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as UnaryExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as MultiplicativeExpression;\n // const exp2 = this.children[2] as UnaryExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.additive_expression)\n export class AdditiveExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as MultiplicativeExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as AdditiveExpression;\n // const exp2 = this.children[2] as MultiplicativeExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.shift_expression)\n export class ShiftExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const expr = this.children[0] as ExpressionAstNode;\n this.type = expr.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.relational_expression)\n export class RelationalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ShiftExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.equality_expression)\n export class EqualityExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<RelationalExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.and_expression)\n export class AndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.exclusive_or_expression)\n export class ExclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.inclusive_or_expression)\n export class InclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ExclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_and_expression)\n export class LogicalAndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<InclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_xor_expression)\n export class LogicalXorExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalAndExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_or_expression)\n export class LogicalOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalXorExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.conditional_expression)\n export class ConditionalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalOrExpression>this.children[0]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.struct_specifier)\n export class StructSpecifier extends TreeNode {\n ident?: Token;\n propList: StructProp[];\n\n override init(): void {\n this.ident = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n if (children.length === 6) {\n this.ident = children[1] as Token;\n sa.symbolTableStack.insert(new StructSymbol(this.ident.lexeme, this));\n\n this.propList = (children[3] as StructDeclarationList).propList;\n } else {\n this.propList = (children[2] as StructDeclarationList).propList;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration_list)\n export class StructDeclarationList extends TreeNode {\n propList: StructProp[] = [];\n\n override init(): void {\n this.propList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, propList } = this;\n\n if (children.length === 1) {\n const props = (children[0] as StructDeclaration).props;\n const propsLength = props.length;\n propList.length = propsLength;\n for (let i = 0; i < propsLength; i++) {\n propList[i] = props[i];\n }\n } else {\n const listProps = (children[0] as StructDeclarationList).propList;\n const declProps = (children[1] as StructDeclaration).props;\n const listPropLength = listProps.length;\n const declPropLength = declProps.length;\n propList.length = listPropLength + declPropLength;\n\n for (let i = 0; i < listPropLength; i++) {\n propList[i] = listProps[i];\n }\n for (let i = 0; i < declPropLength; i++) {\n propList[i + listPropLength] = declProps[i];\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration)\n export class StructDeclaration extends TreeNode {\n typeSpecifier: TypeSpecifier;\n declaratorList: StructDeclaratorList;\n props: StructProp[] = [];\n\n override init(): void {\n this.typeSpecifier = undefined;\n this.declaratorList = undefined;\n this.props.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, props } = this;\n if (children.length === 3) {\n this.typeSpecifier = children[0] as TypeSpecifier;\n this.declaratorList = children[1] as StructDeclaratorList;\n } else {\n this.typeSpecifier = children[1] as TypeSpecifier;\n this.declaratorList = children[2] as StructDeclaratorList;\n }\n\n const firstChild = children[0];\n const { type, lexeme } = this.typeSpecifier;\n if (firstChild instanceof LayoutQualifier) {\n const declarator = children[2] as StructDeclarator;\n const typeInfo = new SymbolType(type, lexeme);\n const prop = new StructProp(typeInfo, declarator.ident, firstChild.index);\n props.push(prop);\n } else {\n const declaratorList = this.declaratorList.declaratorList;\n const declaratorListLength = declaratorList.length;\n props.length = declaratorListLength;\n for (let i = 0; i < declaratorListLength; i++) {\n const declarator = declaratorList[i];\n const typeInfo = new SymbolType(type, lexeme, declarator.arraySpecifier);\n const prop = new StructProp(typeInfo, declarator.ident);\n props[i] = prop;\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.layout_qualifier)\n export class LayoutQualifier extends TreeNode {\n index: number;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.index = Number((<BaseToken>this.children[4]).lexeme);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator_list)\n export class StructDeclaratorList extends TreeNode {\n declaratorList: StructDeclarator[] = [];\n\n override init(): void {\n this.declaratorList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, declaratorList } = this;\n if (children.length === 1) {\n declaratorList.push(children[0] as StructDeclarator);\n } else {\n const list = children[0] as StructDeclaratorList;\n const declarator = children[1] as StructDeclarator;\n const listLength = list.declaratorList.length;\n declaratorList.length = listLength + 1;\n for (let i = 0; i < listLength; i++) {\n declaratorList[i] = list.declaratorList[i];\n }\n declaratorList[listLength] = declarator;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator)\n export class StructDeclarator extends TreeNode {\n ident: Token;\n arraySpecifier: ArraySpecifier | undefined;\n\n override init(): void {\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[0] as Token;\n this.arraySpecifier = children[1] as ArraySpecifier;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration)\n export class VariableDeclaration extends TreeNode {\n type: FullySpecifiedType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const type = children[0] as FullySpecifiedType;\n const ident = children[1] as Token;\n this.type = type;\n const sm = new VarSymbol(ident.lexeme, new SymbolType(type.type, type.typeSpecifier.lexeme), true, this);\n\n sa.symbolTableStack.insert(sm);\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitGlobalVariableDeclaration(this) + \";\";\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration_list)\n export class VariableDeclarationList extends TreeNode {\n type: FullySpecifiedType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children } = this;\n const length = children.length;\n const variableDeclaration = children[0] as VariableDeclaration;\n const type = variableDeclaration.type;\n this.type = type;\n\n if (length === 1) {\n return;\n }\n\n const ident = children[2] as Token;\n\n const newVariable = VariableDeclaration.pool.get();\n if (length === 3) {\n // variable_declaration_list ',' id\n newVariable.set(ident.location, [type, ident]);\n } else {\n // variable_declaration_list ',' id array_specifier\n newVariable.set(ident.location, [type, ident, children[3] as ArraySpecifier]);\n }\n newVariable.semanticAnalyze(sa);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_identifier)\n export class VariableIdentifier extends TreeNode {\n symbolInfo:\n | VarSymbol\n // #if _VERBOSE\n | BuiltinVariable\n // #endif\n | null;\n\n lexeme: string;\n typeInfo: GalaceanDataType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const token = this.children[0] as Token;\n this.lexeme = token.lexeme;\n\n // #if _VERBOSE\n const builtinVar = BuiltinVariable.getVar(token.lexeme);\n if (builtinVar) {\n this.symbolInfo = builtinVar;\n this.typeInfo = builtinVar.type;\n return;\n }\n // #endif\n\n this.symbolInfo = sa.lookupSymbolBy(token.lexeme, ESymbolType.VAR) as VarSymbol;\n // #if _VERBOSE\n if (!this.symbolInfo) {\n sa.reportError(this.location, `undeclared identifier: ${token.lexeme}`);\n }\n // #endif\n this.typeInfo = this.symbolInfo?.dataType?.type;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitVariableIdentifier(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.gs_shader_program)\n export class GLShaderProgram extends TreeNode {\n shaderData: ShaderData;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.shaderData = sa.shaderData;\n this.shaderData.symbolTable = sa.symbolTableStack._scope;\n }\n }\n}\n","export enum EPpToken {\n id,\n line_remain,\n chunk,\n int_constant,\n string_const,\n /** \\>> */\n right_op,\n /** << */\n left_op,\n left_paren,\n right_paren,\n /** \\>= */\n ge,\n /** <= */\n le,\n /** == */\n eq,\n /** != */\n neq,\n /** && */\n and,\n /** || */\n or,\n /** < */\n left_angle,\n /** \\> */\n right_angle,\n /** \\* */\n star,\n /** + */\n plus,\n /** \\- */\n dash,\n /** ! */\n bang,\n /** \\/ */\n slash,\n /** % */\n percent,\n\n EOF = 100\n}\n\nexport enum EPpKeyword {\n define = 101,\n undef,\n if,\n ifdef,\n ifndef,\n else,\n elif,\n endif,\n include,\n\n defined\n}\n\nexport const PpKeyword = new Map<string, EPpKeyword>([\n [\"#define\", EPpKeyword.define],\n [\"#undef\", EPpKeyword.undef],\n [\"#if\", EPpKeyword.if],\n [\"#ifdef\", EPpKeyword.ifdef],\n [\"#ifndef\", EPpKeyword.ifndef],\n [\"#else\", EPpKeyword.else],\n [\"#elif\", EPpKeyword.elif],\n [\"#endif\", EPpKeyword.endif],\n [\"#include\", EPpKeyword.include],\n [\"defined\", EPpKeyword.defined]\n]);\n\nexport type PpConstant = boolean | number;\n","export enum EShaderStage {\n VERTEX,\n FRAGMENT,\n ALL\n}\n","import { IPoolElement } from \"@galacean/engine\";\n\nexport class ShaderPosition implements IPoolElement {\n index: number;\n // #if _VERBOSE\n line: number;\n column: number;\n // #endif\n\n set(\n index: number,\n // #if _VERBOSE\n line: number,\n column: number\n // #endif\n ) {\n this.index = index;\n // #if _VERBOSE\n this.line = line;\n this.column = column;\n // #endif\n }\n\n dispose(): void {\n this.index = 0;\n // #if _VERBOSE\n this.line = 0;\n this.column = 0;\n // #endif\n }\n}\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","import { ClearableObjectPool, IPoolElement, Logger } from \"@galacean/engine\";\nimport { GSErrorName } from \"./GSError\";\nimport { ShaderRange } from \"./common/ShaderRange\";\nimport { ShaderPosition } from \"./common/ShaderPosition\";\n// #if _VERBOSE\nimport { GSError } from \"./GSError\";\n// #endif\n\nexport class ShaderLabUtils {\n private static _shaderLabObjectPoolSet: ClearableObjectPool<IPoolElement>[] = [];\n\n static createObjectPool<T extends IPoolElement>(type: new () => T) {\n const pool = new ClearableObjectPool<T>(type);\n ShaderLabUtils._shaderLabObjectPoolSet.push(pool);\n return pool;\n }\n\n static clearAllShaderLabObjectPool() {\n for (let i = 0, n = ShaderLabUtils._shaderLabObjectPoolSet.length; i < n; i++) {\n ShaderLabUtils._shaderLabObjectPoolSet[i].clear();\n }\n }\n\n static createGSError(\n message: string,\n errorName: GSErrorName,\n source: string,\n location: ShaderRange | ShaderPosition,\n file?: string\n ): Error | undefined {\n // #if _VERBOSE\n return new GSError(errorName, message, location, source, file);\n // #else\n Logger.error(message);\n // #endif\n }\n}\n","import { ETokenType } from \"./types\";\nimport { ShaderRange, ShaderPosition } from \".\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { IPoolElement } from \"@galacean/engine\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\nexport class BaseToken<T extends number = number> implements IPoolElement {\n static pool = ShaderLabUtils.createObjectPool(BaseToken);\n\n type: T;\n lexeme: string;\n location: ShaderRange;\n\n set(type: T, lexeme: string, start?: ShaderPosition);\n set(type: T, lexeme: string, location?: ShaderRange);\n set(type: T, lexeme: string, arg?: ShaderRange | ShaderPosition) {\n this.type = type;\n this.lexeme = lexeme;\n if (arg) {\n if (arg instanceof ShaderRange) {\n this.location = arg as ShaderRange;\n } else {\n const end = ShaderLab.createPosition(\n arg.index + lexeme.length,\n // #if _VERBOSE\n arg.line,\n arg.column + lexeme.length\n // #endif\n );\n this.location = ShaderLab.createRange(arg, end);\n }\n }\n }\n\n dispose(): void {}\n}\n\nexport const EOF = new BaseToken();\nEOF.set(ETokenType.EOF, \"/EOF\");\n","export default class LexerUtils {\n static isNum(charCode: number) {\n return charCode >= 48 && charCode <= 57;\n }\n\n static isLetter(charCode: number) {\n return (\n charCode === 95 || // _\n (charCode >= 48 && charCode <= 57) || // 0 - 9\n (charCode >= 65 && charCode <= 90) || // A - Z\n (charCode >= 97 && charCode <= 122) // a - z\n );\n }\n\n static isAlpha(charCode: number) {\n return (\n charCode === 95 || // _\n (charCode >= 65 && charCode <= 90) || // A - Z\n (charCode >= 97 && charCode <= 122) // a - z\n );\n }\n\n static isPpCharacters(charCode: number) {\n return (\n charCode === 35 || // #\n charCode === 95 || // _\n (charCode >= 48 && charCode <= 57) || // 0 - 9\n (charCode >= 65 && charCode <= 90) || // A - Z\n (charCode >= 97 && charCode <= 122) // a - z\n );\n }\n\n static isSpace(charCode: number) {\n return (\n charCode === 9 || // Tab\n charCode === 10 || // Line break - /n\n charCode === 13 || // Carriage return -/r\n charCode === 32 // Space\n );\n }\n}\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","import { ETokenType, ShaderRange, ShaderPosition } from \".\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { BaseToken } from \"./BaseToken\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { Logger } from \"@galacean/engine\";\n\nexport type OnToken = (token: BaseToken, scanner: BaseScanner) => void;\n\n/**\n * @internal\n */\nexport default class BaseScanner {\n private static _spaceCharsWithBreak = [\" \", \"\\t\", \"\\n\", \"\\r\"];\n private static _spaceChars = [\" \", \"\\t\"];\n private static _checkIsIn(checked: string, chars: string[]): boolean {\n for (let i = 0; i < chars.length; i++) {\n if (checked === chars[i]) {\n return true;\n }\n continue;\n }\n return false;\n }\n\n protected _currentIndex = 0;\n protected _source: string;\n\n // #if _VERBOSE\n protected _column = 0;\n protected _line = 0;\n // #endif\n\n get current(): number {\n return this._currentIndex;\n }\n\n get source(): string {\n return this._source;\n }\n\n getCurPosition(): ShaderPosition {\n return ShaderLab.createPosition(\n this._currentIndex,\n // #if _VERBOSE\n this._line,\n this._column\n // #endif\n );\n }\n\n // #if _VERBOSE\n get line() {\n return this._line;\n }\n\n get column() {\n return this._column;\n }\n // #endif\n\n protected readonly _keywordsMap: Map<string, number>;\n\n constructor(source: string, kws: Map<string, number> = new Map()) {\n this._source = source;\n this._keywordsMap = kws;\n }\n\n isEnd(): boolean {\n return this._currentIndex >= this._source.length;\n }\n\n getCurChar(): string {\n return this._source[this._currentIndex];\n }\n\n getCurCharCode(): number {\n return this._source.charCodeAt(this._currentIndex);\n }\n\n advance(count = 1): void {\n // #if _VERBOSE\n for (let i = 0; i < count; i++) {\n this._advance();\n }\n // #else\n this._currentIndex += count;\n // #endif\n }\n\n _advance(): void {\n // #if _VERBOSE\n if (this.getCurChar() === \"\\n\") {\n this._line += 1;\n this._column = 0;\n } else {\n this._column += 1;\n }\n // #endif\n\n this._currentIndex++;\n }\n\n skipSpace(includeLineBreak: boolean): void {\n const spaceChars = includeLineBreak ? BaseScanner._spaceCharsWithBreak : BaseScanner._spaceChars;\n let curChar = this.getCurChar();\n\n while (BaseScanner._checkIsIn(curChar, spaceChars)) {\n this._advance();\n curChar = this.getCurChar();\n }\n }\n\n skipCommentsAndSpace(): ShaderRange | undefined {\n this.skipSpace(true);\n if (this.peek(2) === \"//\") {\n const start = this.getCurPosition();\n this.advance(2);\n // single line comments\n let curChar = this.getCurChar();\n while (curChar !== \"\\n\" && curChar !== \"\\r\" && !this.isEnd()) {\n this._advance();\n curChar = this.getCurChar();\n }\n this.skipCommentsAndSpace();\n return ShaderLab.createRange(start, this.getCurPosition());\n } else if (this.peek(2) === \"/*\") {\n const start = this.getCurPosition();\n this.advance(2);\n // multi-line comments\n while (this.peek(2) !== \"*/\" && !this.isEnd()) this._advance();\n this.advance(2);\n this.skipCommentsAndSpace();\n return ShaderLab.createRange(start, this.getCurPosition());\n }\n }\n\n peek(to: number): string {\n const offset = this._currentIndex;\n return this._source.substring(offset, offset + to);\n }\n\n scanText(text: string) {\n this.skipCommentsAndSpace();\n const peek = this.peek(text.length);\n if (peek !== text) {\n this.throwError(this.getCurPosition(), `Expect text \"${text}\", but got \"${peek}\"`);\n }\n this.advance(text.length);\n }\n\n throwError(pos: ShaderPosition | ShaderRange, ...msgs: any[]) {\n const error = ShaderLabUtils.createGSError(msgs.join(\" \"), GSErrorName.ScannerError, this._source, pos);\n // #if _VERBOSE\n Logger.error(error!.toString());\n // #endif\n throw error;\n }\n\n scanPairedText(left: string, right: string, balanced = false, skipLeading = false) {\n if (!skipLeading) {\n this.scanText(left);\n }\n const start = this._currentIndex;\n let level = balanced ? 1 : 0;\n while (this.peek(right.length) !== right || level !== 0) {\n if (this.isEnd()) return;\n if (balanced) {\n if (this.peek(left.length) === left) {\n level += 1;\n this.advance(left.length);\n continue;\n } else if (this.peek(right.length) === right) {\n level -= 1;\n if (level === 0) break;\n this.advance(right.length);\n continue;\n }\n }\n this.advance(right.length);\n }\n this.advance(right.length);\n return this._source.substring(start, this._currentIndex - right.length);\n }\n\n scanToken(onToken?: OnToken, splitCharRegex = /\\w/) {\n this.skipCommentsAndSpace();\n const start = this.getCurPosition();\n if (this.isEnd()) return;\n while (splitCharRegex.test(this.getCurChar()) && !this.isEnd()) this._advance();\n const end = this.getCurPosition();\n\n if (start.index === end.index) {\n this._advance();\n const token = BaseToken.pool.get();\n token.set(ETokenType.NOT_WORD, this._source[start.index], start);\n onToken?.(token, this);\n return token;\n }\n\n const lexeme = this._source.substring(start.index, end.index);\n const tokenType = this._keywordsMap.get(lexeme) ?? ETokenType.ID;\n const range = ShaderLab.createRange(start, end);\n const token = BaseToken.pool.get();\n token.set(tokenType, lexeme, range);\n onToken?.(token, this);\n return token;\n }\n}\n","import { ETokenType, KeywordTable } from \"../common\";\nimport { EOF, BaseToken } from \"../common/BaseToken\";\nimport LexerUtils from \"./Utils\";\nimport BaseScanner from \"../common/BaseScanner\";\nimport { ShaderLab } from \"../ShaderLab\";\n\n/**\n * The Lexer of ShaderLab Compiler\n */\nexport class Lexer extends BaseScanner {\n reset(source: string) {\n this._source = source;\n this._currentIndex = 0;\n // #if _VERBOSE\n this._line = this._column = 0;\n // #endif\n }\n\n *tokenize() {\n while (!this.isEnd()) {\n yield this.scanToken();\n }\n return EOF;\n }\n\n override skipSpace() {\n while (LexerUtils.isSpace(this.getCurCharCode())) {\n this._advance();\n }\n }\n\n override scanToken(): BaseToken {\n this.skipCommentsAndSpace();\n if (this.isEnd()) {\n return EOF;\n }\n\n if (LexerUtils.isAlpha(this.getCurCharCode())) {\n return this._scanWord();\n }\n if (LexerUtils.isNum(this.getCurCharCode())) {\n return this._scanNum();\n }\n\n const start = this._getPosition();\n const token = BaseToken.pool.get();\n let curChar: string;\n\n switch (this.getCurChar()) {\n case \"<\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"<\") {\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.LEFT_ASSIGN, \"<<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_OP, \"<<\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.LE_OP, \"<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_ANGLE, \"<\", start);\n break;\n\n case \">\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \">\") {\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.RIGHT_ASSIGN, \">>=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_OP, \">>\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.GE_OP, \">=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_ANGLE, \">\", start);\n break;\n\n case \"+\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"+\") {\n this._advance();\n token.set(ETokenType.INC_OP, \"++\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.ADD_ASSIGN, \"+=\", start);\n break;\n }\n token.set(ETokenType.PLUS, \"+\", start);\n break;\n\n case \"-\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"-\") {\n this._advance();\n token.set(ETokenType.DEC_OP, \"--\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.SUB_ASSIGN, \"-=\", start);\n break;\n }\n token.set(ETokenType.DASH, \"-\", start);\n break;\n\n case \"=\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.EQ_OP, \"==\", start);\n break;\n }\n token.set(ETokenType.EQUAL, \"=\", start);\n break;\n\n case \"!\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.NE_OP, \"!=\", start);\n break;\n }\n token.set(ETokenType.BANG, \"!\", start);\n break;\n\n case \"&\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"&\") {\n this._advance();\n token.set(ETokenType.AND_OP, \"&&\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.ADD_ASSIGN, \"&=\", start);\n break;\n }\n token.set(ETokenType.AMPERSAND, \"&\", start);\n break;\n\n case \"|\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"|\") {\n this._advance();\n token.set(ETokenType.OR_OP, \"||\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.OR_ASSIGN, \"|=\", start);\n break;\n }\n token.set(ETokenType.VERTICAL_BAR, \"|\", start);\n break;\n\n case \"^\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"^\") {\n this._advance();\n token.set(ETokenType.XOR_OP, \"^^\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.XOR_ASSIGN, \"^=\", start);\n break;\n }\n token.set(ETokenType.CARET, \"^\", start);\n break;\n\n case \"*\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.MUL_ASSIGN, \"*=\", start);\n break;\n }\n\n token.set(ETokenType.STAR, \"*\", start);\n break;\n\n case \"/\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n\n token.set(ETokenType.DIV_ASSIGN, \"/=\", start);\n break;\n }\n\n token.set(ETokenType.SLASH, \"/\", start);\n break;\n\n case \"%\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n\n token.set(ETokenType.MOD_ASSIGN, \"%=\", start);\n break;\n }\n\n token.set(ETokenType.PERCENT, \"%\", start);\n break;\n\n case \"(\":\n this._advance();\n\n token.set(ETokenType.LEFT_PAREN, \"(\", start);\n break;\n case \")\":\n this._advance();\n\n token.set(ETokenType.RIGHT_PAREN, \")\", start);\n break;\n case \"{\":\n this._advance();\n\n token.set(ETokenType.LEFT_BRACE, \"{\", start);\n break;\n case \"}\":\n this._advance();\n\n token.set(ETokenType.RIGHT_BRACE, \"}\", start);\n break;\n case \"[\":\n this._advance();\n\n token.set(ETokenType.LEFT_BRACKET, \"[\", start);\n break;\n case \"]\":\n this._advance();\n\n token.set(ETokenType.RIGHT_BRACKET, \"]\", start);\n break;\n case \".\":\n this._advance();\n if (LexerUtils.isNum(this.getCurCharCode())) {\n return this._scanNumAfterDot();\n }\n\n token.set(ETokenType.DOT, \".\", start);\n break;\n case \",\":\n this._advance();\n\n token.set(ETokenType.COMMA, \",\", start);\n break;\n case \":\":\n this._advance();\n\n token.set(ETokenType.COLON, \":\", start);\n return token;\n case \";\":\n this._advance();\n\n token.set(ETokenType.SEMICOLON, \";\", start);\n break;\n case \"~\":\n this._advance();\n\n token.set(ETokenType.TILDE, \"~\", start);\n break;\n case \"?\":\n this._advance();\n\n token.set(ETokenType.QUESTION, \"?\", start);\n break;\n case '\"':\n this._advance();\n return this._scanStringConst();\n\n default:\n this.throwError(this.getCurPosition(), `Unexpected character ${this.getCurChar()}`);\n }\n return token;\n }\n\n private _scanStringConst() {\n const start = this._getPosition();\n const buffer: string[] = [];\n while (this.getCurChar() !== '\"') {\n buffer.push(this.getCurChar());\n this._advance();\n }\n this._advance();\n const range = ShaderLab.createRange(start, this._getPosition());\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.STRING_CONST, buffer.join(\"\"), range);\n return token;\n }\n\n private _scanNumAfterDot() {\n const buffer = [\".\"];\n while (LexerUtils.isNum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this._getPosition(1));\n return token;\n }\n\n private _getPosition(offset /** offset from starting point */ = 0) {\n return ShaderLab.createPosition(\n this.current - offset,\n // #if _VERBOSE\n this._line,\n this._column - offset\n // #endif\n );\n }\n\n private _scanWord() {\n const buffer: string[] = [this.getCurChar()];\n const start = this._getPosition();\n this._advance();\n while (LexerUtils.isLetter(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n const word = buffer.join(\"\");\n const kt = KeywordTable.get(word);\n if (kt) {\n const token = BaseToken.pool.get();\n token.set(kt, word, start);\n return token;\n }\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.ID, word, start);\n return token;\n }\n\n private _scanNum() {\n const buffer: string[] = [];\n while (LexerUtils.isNum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n if (this.getCurChar() === \".\") {\n buffer.push(this.getCurChar());\n this._advance();\n while (LexerUtils.isNum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this._getPosition(buffer.length));\n return token;\n } else {\n if (this.getCurChar() === \"e\" || this.getCurChar() === \"E\") {\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this._getPosition(buffer.length));\n return token;\n } else {\n this._scanIntegerSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.INT_CONSTANT, buffer.join(\"\"), this._getPosition(buffer.length));\n return token;\n }\n }\n }\n\n private _scanFloatSuffix(buffer: string[]) {\n if (this.getCurChar() === \"e\" || this.getCurChar() === \"E\") {\n buffer.push(this.getCurChar());\n this._advance();\n if (this.getCurChar() === \"+\" || this.getCurChar() === \"-\") {\n buffer.push(this.getCurChar());\n this._advance();\n }\n if (!LexerUtils.isNum(this.getCurCharCode()))\n this.throwError(this.getCurPosition(), \"lexing error, invalid exponent suffix.\");\n while (LexerUtils.isNum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n }\n if (this.getCurChar() === \"f\" || this.getCurChar() === \"F\") {\n buffer.push(this.getCurChar());\n this._advance();\n }\n }\n\n private _scanIntegerSuffix(buffer: string[]) {\n if (this.getCurChar() === \"u\" || this.getCurChar() === \"U\") {\n buffer.push(this.getCurChar());\n this._advance();\n }\n }\n}\n","import { ASTNode } from \"./AST\";\nimport { TargetSymbolTable } from \"../parser/symbolTable\";\n\nexport class ShaderData {\n symbolTable: TargetSymbolTable;\n\n vertexMain: ASTNode.FunctionDefinition;\n fragmentMain: ASTNode.FunctionDefinition;\n\n globalPrecisions: ASTNode.PrecisionSpecifier[] = [];\n}\n","import { GalaceanDataType } from \"../../common\";\nimport { ASTNode } from \"../AST\";\n\nexport class SymbolDataType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class FnSymbol extends SymbolInfo {\n declare astNode: ASTNode.FunctionDefinition;\n\n constructor(lexeme: string, astNode: ASTNode.FunctionDefinition) {\n const type = new SymbolDataType(\n astNode.protoType.returnType.type,\n astNode.protoType.returnType.typeSpecifier.lexeme\n );\n super(lexeme, ESymbolType.FN, astNode, type);\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class StructSymbol extends SymbolInfo {\n declare astNode: ASTNode.StructSpecifier;\n\n constructor(lexeme: string, astNode: ASTNode.StructSpecifier) {\n super(lexeme, ESymbolType.STRUCT, astNode);\n }\n}\n","import { Logger } from \"@galacean/engine\";\n\nexport interface IBaseSymbol {\n readonly ident: string;\n}\n\n/**\n * The base class of `SymbolTable`\n */\nexport abstract class BaseSymbolTable<T extends IBaseSymbol = IBaseSymbol> {\n protected _table: Map<string, T[]> = new Map();\n\n abstract insert(sm: T): void;\n}\n\nexport class SymbolTableStack<S extends IBaseSymbol, T extends BaseSymbolTable<S>> {\n stack: T[] = [];\n\n get _scope() {\n return this.stack[this.stack.length - 1];\n }\n\n newScope(scope: T) {\n this.stack.push(scope);\n }\n\n clear() {\n this.stack.length = 0;\n }\n\n dropScope() {\n this.stack.pop();\n }\n\n insert(sm: S) {\n this._scope.insert(sm);\n }\n}\n","import { Logger } from \"@galacean/engine\";\nimport { GalaceanDataType, TypeAny } from \"../../common\";\nimport { BaseSymbolTable } from \"../../common/BaseSymbolTable\";\nimport { ASTNode } from \"../AST\";\nimport { FnSymbol } from \"./FnSymbol\";\nimport { StructSymbol } from \"./StructSymbol\";\nimport { ESymbolType, SymbolAstNode, SymbolInfo } from \"./SymbolInfo\";\nimport { VarSymbol } from \"./VarSymbol\";\n\nexport class TargetSymbolTable extends BaseSymbolTable<SymbolInfo> {\n override insert(sm: SymbolInfo): void {\n const entry = this._table.get(sm.ident) ?? [];\n for (let i = 0; i < entry.length; i++) {\n if (this._compareWith(entry[i], sm.symbolType, sm.signature, sm.astNode)) {\n Logger.warn(\"replace symbol:\", sm.ident);\n entry[i] = sm;\n return;\n }\n }\n entry.push(sm);\n this._table.set(sm.ident, entry);\n }\n\n lookup<T extends ESymbolType>(\n ident: string,\n symbolType: T,\n signature?: GalaceanDataType[],\n astNode?: ASTNode.FunctionDefinition\n ): T extends ESymbolType.FN\n ? FnSymbol\n : T extends ESymbolType.STRUCT\n ? StructSymbol\n : T extends ESymbolType.VAR\n ? VarSymbol\n : SymbolInfo {\n const entry = this._table.get(ident);\n if (entry) {\n for (let length = entry.length, i = 0; i < length; i++) {\n const item = entry[i];\n if (this._compareWith(item, symbolType, signature, astNode)) return <any>item;\n }\n }\n }\n\n getAllFnSymbols(fnIdent: string): FnSymbol[] {\n const entries = this._table.get(fnIdent) ?? [];\n return entries.filter((item) => item.symbolType === ESymbolType.FN) as FnSymbol[];\n }\n\n private _compareWith(\n item: SymbolInfo,\n symbolType: ESymbolType,\n signature?: GalaceanDataType[],\n astNode?: SymbolAstNode\n ): boolean {\n if (item.symbolType !== symbolType) return false;\n if (item.symbolType === ESymbolType.FN) {\n if (!astNode && !signature) return true;\n\n const params = (<ASTNode.FunctionDefinition>item.astNode).protoType.paramSig;\n const comparedParams = signature ?? (<ASTNode.FunctionDefinition>astNode).protoType.paramSig;\n const length = params.length;\n if (length !== comparedParams.length) return false;\n for (let i = 0; i < length; i++) {\n const t1 = params[i],\n t2 = comparedParams[i];\n if (t1 === TypeAny || t2 === TypeAny) continue;\n if (t1 !== t2) return false;\n }\n return true;\n }\n return true;\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class VarSymbol extends SymbolInfo {\n declare astNode:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\n readonly isGlobalVariable: boolean;\n\n constructor(\n ident: string,\n dataType: SymbolDataType,\n isGlobalVariable: boolean,\n initAst:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration\n ) {\n super(ident, ESymbolType.VAR, initAst, dataType);\n this.isGlobalVariable = isGlobalVariable;\n }\n}\n","import { ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { ESymbolType, SymbolInfo, TargetSymbolTable } from \"../parser/symbolTable\";\nimport { NodeChild } from \"./types\";\nimport { SymbolTableStack } from \"../common/BaseSymbolTable\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { NonGenericGalaceanType } from \"./builtin\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #else\nimport { Logger } from \"@galacean/engine\";\n// #endif\n\nexport type TranslationRule<T = any> = (sa: SemanticAnalyzer, ...tokens: NodeChild[]) => T;\n\n/**\n * @internal\n * The semantic analyzer of `ShaderLab` compiler.\n * - Build symbol table\n * - Static analysis\n */\nexport default class SemanticAnalyzer {\n semanticStack: TreeNode[] = [];\n acceptRule?: TranslationRule = undefined;\n symbolTableStack: SymbolTableStack<SymbolInfo, TargetSymbolTable> = new SymbolTableStack();\n curFunctionInfo: {\n header?: ASTNode.FunctionDeclarator;\n returnStatement?: ASTNode.JumpStatement;\n } = {};\n private _shaderData = new ShaderData();\n private _translationRuleTable: Map<number /** production id */, TranslationRule> = new Map();\n\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n get shaderData() {\n return this._shaderData;\n }\n\n constructor() {\n this.newScope();\n }\n\n reset() {\n this.semanticStack.length = 0;\n this._shaderData = new ShaderData();\n this.symbolTableStack.clear();\n this.newScope();\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n }\n\n newScope() {\n const scope = new TargetSymbolTable();\n this.symbolTableStack.newScope(scope);\n }\n\n dropScope() {\n return this.symbolTableStack.dropScope();\n }\n\n addTranslationRule(pid: number, rule: TranslationRule) {\n this._translationRuleTable.set(pid, rule);\n }\n\n getTranslationRule(pid: number) {\n return this._translationRuleTable.get(pid);\n }\n\n lookupSymbolBy(\n ident: string,\n symbolType: ESymbolType,\n signature?: NonGenericGalaceanType[],\n astNode?: ASTNode.FunctionDefinition\n ): SymbolInfo | undefined {\n const stack = this.symbolTableStack.stack;\n for (let length = stack.length, i = length - 1; i >= 0; i--) {\n const symbolTable = stack[i];\n const ret = symbolTable.lookup(ident, symbolType, signature, astNode);\n if (ret) return ret;\n }\n }\n\n reportError(loc: ShaderRange, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderLab._processingPassText));\n // #else\n Logger.error(message);\n // #endif\n }\n}\n","import { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\n\nexport default class Production {\n private static _id = 0;\n static pool: Map<number, Production> = new Map();\n\n readonly goal: NoneTerminal;\n readonly derivation: GrammarSymbol[];\n readonly id: number;\n\n constructor(goal: NoneTerminal, derivation: GrammarSymbol[]) {\n this.goal = goal;\n this.derivation = derivation;\n this.id = Production._id++;\n Production.pool.set(this.id, this);\n }\n}\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, GrammarSymbol } from \"./GrammarSymbol\";\nimport Production from \"../lalr/Production\";\n\nexport class Grammar {\n readonly productions: Production[];\n\n readonly startSymbol: NoneTerminal;\n\n static create(start: NoneTerminal, productions: GrammarSymbol[][]) {\n const _ps = productions.map((gsl) => {\n return new Production(<NoneTerminal>gsl[0], gsl.slice(1));\n });\n return new Grammar(start, _ps);\n }\n\n constructor(start: NoneTerminal, productions: Production[]) {\n this.startSymbol = start;\n productions.unshift(new Production(NoneTerminal.START, [start]));\n this.productions = productions;\n }\n\n getProductionList(nonTerminal: NoneTerminal) {\n return this.productions.filter((item) => item.goal === nonTerminal);\n }\n\n isNullableNT(NT: NoneTerminal) {\n return this.productions.find((item) => item.goal === NT && item.derivation[0] === ETokenType.EPSILON);\n }\n\n getProductionByID(pid: number) {\n return Production.pool.get(pid);\n }\n}\n","import { NoneTerminal } from \"./GrammarSymbol\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { GalaceanDataType, ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"./AST\";\n\nexport type TraceStackItem = NoneTerminal | BaseToken;\n\nexport class SymbolType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n\nexport class StructProp implements IParamInfo {\n constructor(\n public typeInfo: SymbolType,\n public ident: BaseToken,\n public mrtIndex?: number\n ) {}\n}\n\nexport type NodeChild = TreeNode | BaseToken;\n\nexport type IParamInfo = { ident: BaseToken; typeInfo: SymbolType; astNode?: TreeNode };\n","import { EKeyword, ETokenType, ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport { ActionInfo, EAction } from \"./types\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ClearableObjectPool, IPoolElement } from \"@galacean/engine\";\nimport { NodeChild } from \"../parser/types\";\n\nexport default class GrammarUtils {\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? EKeyword[sm];\n }\n return NoneTerminal[sm];\n }\n\n static createProductionWithOptions(\n goal: NoneTerminal,\n options: GrammarSymbol[][],\n /** the ast node */\n astTypePool?: ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >\n ) {\n const ret: [GrammarSymbol[], TranslationRule | undefined][] = [];\n for (const opt of options) {\n ret.push([\n [goal, ...opt],\n function (sa, ...children) {\n if (!children[0]) return;\n const start = children[0].location.start;\n const end = children[children.length - 1].location.end;\n const location = ShaderLab.createRange(start, end);\n ASTNode.get(astTypePool ?? ASTNode.TrivialNode.pool, sa, location, children);\n }\n ]);\n }\n return ret;\n }\n\n static addMapSetItem<K, T>(map: Map<K, Set<T>>, k: K, v: T) {\n const set = map.get(k) ?? new Set();\n set.add(v);\n map.set(k, set);\n }\n\n static isSubSet<T>(sa: Set<T>, sb: Set<T>) {\n for (const item of sa) {\n if (!sb.has(item)) return false;\n }\n return true;\n }\n\n static isActionEqual(a: ActionInfo, b: ActionInfo) {\n return a.action === b.action && a.target === b.target;\n }\n\n // #if _VERBOSE\n static printAction(actionInfo: ActionInfo) {\n return `<Action: ${EAction[actionInfo.action]} -> ${\n actionInfo.action === EAction.Reduce ? Production.pool.get(actionInfo.target!) : `State ${actionInfo.target!}`\n }>`;\n }\n\n static printProduction(production: Production) {\n const deriv = production.derivation.map((gs) => GrammarUtils.toString(gs)).join(\"|\");\n return `${NoneTerminal[production.goal]} :=> ${deriv}`;\n }\n // #endif\n}\n","// Context Free Grammar of Galacean ShaderLab\n\nimport { Grammar } from \"../parser/Grammar\";\nimport { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\nimport GrammarUtils from \"./Utils\";\nimport { EKeyword, ETokenType } from \"../common\";\nimport SemanticAnalyzer, { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport { ASTNode } from \"../parser/AST\";\n\nconst productionAndRules: [GrammarSymbol[], TranslationRule | undefined][] = [\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.gs_shader_program,\n [[NoneTerminal.global_declaration], [NoneTerminal.gs_shader_program, NoneTerminal.global_declaration]],\n ASTNode.GLShaderProgram.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(NoneTerminal.global_declaration, [\n [NoneTerminal.precision_specifier],\n [NoneTerminal.variable_declaration_statement],\n [NoneTerminal.struct_specifier],\n [NoneTerminal.function_definition]\n ]),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.VariableDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration_list,\n [\n [NoneTerminal.variable_declaration],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.VariableDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_statement, [\n [NoneTerminal.variable_declaration_list, ETokenType.SEMICOLON]\n ]),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n [\n [EKeyword.VOID],\n [EKeyword.FLOAT],\n [EKeyword.BOOL],\n [EKeyword.INT],\n [EKeyword.UINT],\n [EKeyword.VEC2],\n [EKeyword.VEC3],\n [EKeyword.VEC4],\n [EKeyword.BVEC2],\n [EKeyword.BVEC3],\n [EKeyword.BVEC4],\n [EKeyword.IVEC2],\n [EKeyword.IVEC3],\n [EKeyword.IVEC4],\n [EKeyword.UVEC2],\n [EKeyword.UVEC3],\n [EKeyword.UVEC4],\n [EKeyword.MAT2],\n [EKeyword.MAT3],\n [EKeyword.MAT4],\n [EKeyword.MAT2X3],\n [EKeyword.MAT2X4],\n [EKeyword.MAT3X2],\n [EKeyword.MAT3X4],\n [EKeyword.MAT4X2],\n [EKeyword.MAT4X3],\n [EKeyword.SAMPLER2D],\n [EKeyword.SAMPLER3D],\n [EKeyword.SAMPLER_CUBE],\n [EKeyword.SAMPLER2D_SHADOW],\n [EKeyword.SAMPLER_CUBE_SHADOW],\n [EKeyword.SAMPLER2D_ARRAY],\n [EKeyword.SAMPLER2D_ARRAY_SHADOW],\n [EKeyword.I_SAMPLER2D],\n [EKeyword.I_SAMPLER3D],\n [EKeyword.I_SAMPLER_CUBE],\n [EKeyword.I_SAMPLER2D_ARRAY],\n [EKeyword.U_SAMPLER2D],\n [EKeyword.U_SAMPLER3D],\n [EKeyword.U_SAMPLER_CUBE],\n [EKeyword.U_SAMPLER2D_ARRAY]\n ],\n ASTNode.ExtBuiltinTypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier_nonarray,\n [[ETokenType.ID], [NoneTerminal.ext_builtin_type_specifier_nonarray]],\n ASTNode.TypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.fully_specified_type,\n [[NoneTerminal.type_specifier], [NoneTerminal.type_qualifier, NoneTerminal.type_specifier]],\n ASTNode.FullySpecifiedType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier,\n [\n [NoneTerminal.type_specifier_nonarray],\n [NoneTerminal.ext_builtin_type_specifier_nonarray, NoneTerminal.array_specifier]\n ],\n ASTNode.TypeSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_qualifier,\n [[NoneTerminal.single_type_qualifier], [NoneTerminal.type_qualifier, NoneTerminal.single_type_qualifier]],\n ASTNode.TypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_type_qualifier,\n [\n [NoneTerminal.storage_qualifier],\n [NoneTerminal.precision_qualifier],\n [NoneTerminal.interpolation_qualifier],\n [NoneTerminal.invariant_qualifier],\n [EKeyword.PRECISE]\n ],\n ASTNode.SingleTypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.storage_qualifier,\n [[EKeyword.CONST], [EKeyword.IN], [EKeyword.INOUT], [EKeyword.OUT], [EKeyword.CENTROID]],\n // #if _VERBOSE\n ASTNode.StorageQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.interpolation_qualifier,\n [[EKeyword.SMOOTH], [EKeyword.FLAT]],\n // #if _VERBOSE\n ASTNode.InterpolationQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.invariant_qualifier,\n [[EKeyword.INVARIANT]],\n // #if _VERBOSE\n ASTNode.InvariantQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_qualifier,\n [[EKeyword.HIGHP], [EKeyword.MEDIUMP], [EKeyword.LOWP]],\n // #if _VERBOSE\n ASTNode.PrecisionQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_specifier,\n [\n [\n EKeyword.STRUCT,\n ETokenType.ID,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ],\n [\n EKeyword.STRUCT,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.StructSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration_list,\n [[NoneTerminal.struct_declaration], [NoneTerminal.struct_declaration_list, NoneTerminal.struct_declaration]],\n ASTNode.StructDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration,\n [\n [NoneTerminal.type_specifier, NoneTerminal.struct_declarator_list, ETokenType.SEMICOLON],\n [\n NoneTerminal.type_qualifier,\n NoneTerminal.type_specifier,\n NoneTerminal.struct_declarator_list,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.layout_qualifier, NoneTerminal.type_specifier, NoneTerminal.struct_declarator, ETokenType.SEMICOLON]\n ],\n ASTNode.StructDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.layout_qualifier,\n [\n [\n EKeyword.LAYOUT,\n ETokenType.LEFT_PAREN,\n EKeyword.LOCATION,\n ETokenType.EQUAL,\n ETokenType.INT_CONSTANT,\n ETokenType.RIGHT_PAREN\n ]\n ],\n ASTNode.LayoutQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator_list,\n [\n [NoneTerminal.struct_declarator],\n [NoneTerminal.struct_declarator_list, ETokenType.COMMA, NoneTerminal.struct_declarator]\n ],\n ASTNode.StructDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator,\n [[ETokenType.ID], [ETokenType.ID, NoneTerminal.array_specifier]],\n ASTNode.StructDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.array_specifier,\n [\n [ETokenType.LEFT_BRACKET, ETokenType.RIGHT_BRACKET],\n [ETokenType.LEFT_BRACKET, NoneTerminal.integer_constant_expression, ETokenType.RIGHT_BRACKET]\n ],\n ASTNode.ArraySpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.STAR], [ETokenType.SLASH], [ETokenType.PERCENT]],\n ASTNode.IntegerConstantExpressionOperator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n ETokenType.INT_CONSTANT\n ],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n NoneTerminal.variable_identifier\n ]\n ],\n ASTNode.IntegerConstantExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditional_expression,\n [\n [NoneTerminal.logical_or_expression],\n [\n NoneTerminal.logical_or_expression,\n ETokenType.QUESTION,\n NoneTerminal.expression,\n ETokenType.COLON,\n NoneTerminal.assignment_expression\n ]\n ],\n // #if _VERBOSE\n ASTNode.ConditionalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_or_expression,\n [\n [NoneTerminal.logical_xor_expression],\n [NoneTerminal.logical_or_expression, ETokenType.OR_OP, NoneTerminal.logical_xor_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_xor_expression,\n [\n [NoneTerminal.logical_and_expression],\n [NoneTerminal.logical_xor_expression, ETokenType.XOR_OP, NoneTerminal.logical_and_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalXorExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_and_expression,\n [\n [NoneTerminal.inclusive_or_expression],\n [NoneTerminal.logical_and_expression, ETokenType.AND_OP, NoneTerminal.inclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalAndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.inclusive_or_expression,\n [\n [NoneTerminal.exclusive_or_expression],\n [NoneTerminal.inclusive_or_expression, ETokenType.VERTICAL_BAR, NoneTerminal.exclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.InclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.exclusive_or_expression,\n [\n [NoneTerminal.and_expression],\n [NoneTerminal.exclusive_or_expression, ETokenType.CARET, NoneTerminal.and_expression]\n ],\n // #if _VERBOSE\n ASTNode.ExclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.and_expression,\n [\n [NoneTerminal.equality_expression],\n [NoneTerminal.and_expression, ETokenType.AMPERSAND, NoneTerminal.equality_expression]\n ],\n // #if _VERBOSE\n ASTNode.AndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.equality_expression,\n [\n [NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.EQ_OP, NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.NE_OP, NoneTerminal.relational_expression]\n ],\n // #if _VERBOSE\n ASTNode.EqualityExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.relational_expression,\n [\n [NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LEFT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.RIGHT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LE_OP, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.GE_OP, NoneTerminal.shift_expression]\n ],\n // #if _VERBOSE\n ASTNode.RelationalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.shift_expression,\n [\n [NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.LEFT_OP, NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.RIGHT_OP, NoneTerminal.additive_expression]\n ],\n // #if _VERBOSE\n ASTNode.ShiftExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.additive_expression,\n [\n [NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.PLUS, NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.DASH, NoneTerminal.multiplicative_expression]\n ],\n // #if _VERBOSE\n ASTNode.AdditiveExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.multiplicative_expression,\n [\n [NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.STAR, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.SLASH, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.PERCENT, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.MultiplicativeExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_expression,\n [\n [NoneTerminal.postfix_expression],\n [ETokenType.INC_OP, NoneTerminal.unary_expression],\n [ETokenType.DEC_OP, NoneTerminal.unary_expression],\n [NoneTerminal.unary_operator, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.UnaryExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.BANG], [ETokenType.TILDE]],\n // #if _VERBOSE\n ASTNode.UnaryOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.postfix_expression,\n [\n [NoneTerminal.primary_expression],\n [NoneTerminal.postfix_expression, ETokenType.LEFT_BRACKET, NoneTerminal.expression, ETokenType.RIGHT_BRACKET],\n [NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.DOT, ETokenType.ID],\n [NoneTerminal.postfix_expression, ETokenType.DOT, NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.INC_OP],\n [NoneTerminal.postfix_expression, ETokenType.DEC_OP]\n ],\n ASTNode.PostfixExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.primary_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [ETokenType.FLOAT_CONSTANT],\n [EKeyword.TRUE],\n [EKeyword.FALSE],\n [ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.PrimaryExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.expression, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.Expression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_expression,\n [\n [NoneTerminal.conditional_expression],\n [NoneTerminal.unary_expression, NoneTerminal.assignment_operator, NoneTerminal.assignment_expression]\n ],\n ASTNode.AssignmentExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_operator,\n [\n [ETokenType.EQUAL],\n [ETokenType.MUL_ASSIGN],\n [ETokenType.DIV_ASSIGN],\n [ETokenType.MOD_ASSIGN],\n [ETokenType.ADD_ASSIGN],\n [ETokenType.SUB_ASSIGN],\n [ETokenType.LEFT_ASSIGN],\n [ETokenType.RIGHT_ASSIGN],\n [ETokenType.AND_ASSIGN],\n [ETokenType.XOR_ASSIGN],\n [ETokenType.OR_ASSIGN]\n ],\n // #if _VERBOSE\n ASTNode.AssignmentOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call,\n [[NoneTerminal.function_call_generic]],\n ASTNode.FunctionCall.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_generic,\n [\n [\n NoneTerminal.function_identifier,\n ETokenType.LEFT_PAREN,\n NoneTerminal.function_call_parameter_list,\n ETokenType.RIGHT_PAREN\n ],\n [NoneTerminal.function_identifier, ETokenType.LEFT_PAREN, ETokenType.RIGHT_PAREN],\n [NoneTerminal.function_identifier, EKeyword.VOID, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.FunctionCallGeneric.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_parameter_list,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.function_call_parameter_list, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.FunctionCallParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_identifier,\n [[NoneTerminal.type_specifier]],\n ASTNode.FunctionIdentifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_definition,\n [[NoneTerminal.function_prototype, NoneTerminal.compound_statement_no_scope]],\n ASTNode.FunctionDefinition.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_prototype,\n [[NoneTerminal.function_declarator, ETokenType.RIGHT_PAREN]],\n ASTNode.FunctionProtoType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_declarator,\n [[NoneTerminal.function_header], [NoneTerminal.function_header, NoneTerminal.function_parameter_list]],\n ASTNode.FunctionDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_header,\n [[NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.LEFT_PAREN]],\n ASTNode.FunctionHeader.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_parameter_list,\n [\n [NoneTerminal.parameter_declaration],\n [NoneTerminal.function_parameter_list, ETokenType.COMMA, NoneTerminal.parameter_declaration]\n ],\n ASTNode.FunctionParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declaration,\n [[NoneTerminal.type_qualifier, NoneTerminal.parameter_declarator], [NoneTerminal.parameter_declarator]],\n ASTNode.ParameterDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declarator,\n [\n [NoneTerminal.type_specifier, ETokenType.ID],\n [NoneTerminal.type_specifier, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.ParameterDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement_list,\n [[NoneTerminal.statement], [NoneTerminal.statement_list, NoneTerminal.statement]],\n ASTNode.StatementList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement,\n [[NoneTerminal.compound_statement], [NoneTerminal.simple_statement]],\n // #if _VERBOSE\n ASTNode.Statement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement_no_scope,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [ETokenType.LEFT_BRACE, NoneTerminal.statement_list, ETokenType.RIGHT_BRACE]\n ],\n ASTNode.CompoundStatementNoScope.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [NoneTerminal.scope_brace, NoneTerminal.statement_list, NoneTerminal.scope_end_brace]\n ],\n // #if _VERBOSE\n ASTNode.CompoundStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.simple_statement,\n [\n [NoneTerminal.declaration],\n [NoneTerminal.expression_statement],\n [NoneTerminal.selection_statement],\n [NoneTerminal.iteration_statement],\n [NoneTerminal.jump_statement]\n ],\n // #if _VERBOSE\n ASTNode.SimpleStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.declaration,\n [\n [NoneTerminal.function_prototype, ETokenType.SEMICOLON],\n [NoneTerminal.init_declarator_list, ETokenType.SEMICOLON],\n [\n EKeyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.type_qualifier, ETokenType.ID, ETokenType.SEMICOLON],\n [NoneTerminal.type_qualifier, ETokenType.ID, NoneTerminal.identifier_list, ETokenType.SEMICOLON]\n ],\n ASTNode.Declaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.identifier_list,\n [\n [ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.identifier_list, ETokenType.COMMA, ETokenType.ID]\n ],\n ASTNode.IdentifierList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.init_declarator_list,\n [\n [NoneTerminal.single_declaration],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.init_declarator_list,\n ETokenType.COMMA,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.InitDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.fully_specified_type,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.SingleDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer,\n [\n [NoneTerminal.assignment_expression],\n [ETokenType.LEFT_BRACE, NoneTerminal.initializer_list, ETokenType.RIGHT_BRACE]\n ],\n // #if _VERBOSE\n ASTNode.Initializer.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer_list,\n [[NoneTerminal.initializer], [NoneTerminal.initializer_list, ETokenType.COMMA, NoneTerminal.initializer]],\n // #if _VERBOSE\n ASTNode.InitializerList.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression_statement,\n [[ETokenType.SEMICOLON], [NoneTerminal.expression, ETokenType.SEMICOLON]],\n // #if _VERBOSE\n ASTNode.ExpressionStatement.pool\n // #endif\n ),\n\n // dangling else ambiguity\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.selection_statement,\n [\n [EKeyword.IF, ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n EKeyword.IF,\n ETokenType.LEFT_PAREN,\n NoneTerminal.expression,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement,\n EKeyword.ELSE,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.SelectionStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.iteration_statement,\n [\n [EKeyword.WHILE, ETokenType.LEFT_PAREN, NoneTerminal.condition, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n EKeyword.FOR,\n ETokenType.LEFT_PAREN,\n NoneTerminal.for_init_statement,\n NoneTerminal.for_rest_statement,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.IterationStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_specifier,\n [\n [\n EKeyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.PrecisionSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_init_statement,\n [[NoneTerminal.expression_statement], [NoneTerminal.declaration]],\n // #if _VERBOSE\n ASTNode.ForInitStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.condition,\n [\n [NoneTerminal.expression],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n // #if _VERBOSE\n ASTNode.Condition.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_rest_statement,\n [\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON],\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON, NoneTerminal.expression]\n ],\n // #if _VERBOSE\n ASTNode.ForRestStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditionopt,\n [[ETokenType.EPSILON], [NoneTerminal.condition]],\n // #if _VERBOSE\n ASTNode.ConditionOpt.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.jump_statement,\n [\n [EKeyword.CONTINUE, ETokenType.SEMICOLON],\n [EKeyword.BREAK, ETokenType.SEMICOLON],\n [EKeyword.RETURN, ETokenType.SEMICOLON],\n [EKeyword.RETURN, NoneTerminal.expression, ETokenType.SEMICOLON],\n [EKeyword.DISCARD, ETokenType.SEMICOLON]\n ],\n ASTNode.JumpStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_brace,\n [[ETokenType.LEFT_BRACE]],\n ASTNode.ScopeBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_end_brace,\n [[ETokenType.RIGHT_BRACE]],\n ASTNode.ScopeEndBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_identifier,\n [[ETokenType.ID]],\n ASTNode.VariableIdentifier.pool\n )\n];\n\nconst createGrammar = () =>\n Grammar.create(\n NoneTerminal.gs_shader_program,\n productionAndRules.map((item) => item[0])\n );\n\nconst addTranslationRule = (sa: SemanticAnalyzer) => {\n for (let i = 0; i < productionAndRules.length; i++) {\n const rule = productionAndRules[i][1];\n if (rule) {\n sa.addTranslationRule(i, rule);\n }\n }\n};\n\nexport { createGrammar, addTranslationRule };\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport GrammarUtils from \"./Utils\";\n\nexport default class StateItem {\n static _id = 0;\n\n readonly production: Production;\n readonly position: number;\n readonly lookaheadSet: Set<Terminal>;\n readonly id: number;\n\n _needReInfer = true;\n get needReInfer() {\n return this._needReInfer;\n }\n set needReInfer(v: boolean) {\n this._needReInfer = v;\n }\n\n get curSymbol() {\n return this.production.derivation[this.position];\n }\n get nextSymbol() {\n return this.production.derivation[this.position + 1];\n }\n\n constructor(production: Production, position: number, lookahead: Iterable<Terminal>) {\n this.production = production;\n this.position = position;\n this.lookaheadSet = new Set();\n for (const la of lookahead) {\n this.lookaheadSet.add(la);\n }\n this.id = StateItem._id++;\n }\n\n addLookahead(ts: Iterable<Terminal>) {\n for (const t of ts) {\n if (this.lookaheadSet.has(t)) continue;\n this.lookaheadSet.add(t);\n this.needReInfer = true;\n }\n }\n\n symbolByOffset(offset: number) {\n return this.production.derivation[this.position + offset];\n }\n\n canReduce() {\n if (this.position > this.production.derivation.length - 1) return true;\n else {\n for (let i = this.position; i < this.production.derivation.length; i++) {\n if (this.production.derivation[i] !== ETokenType.EPSILON) return false;\n }\n return true;\n }\n }\n\n advance() {\n // #if _VERBOSE\n if (this.canReduce()) throw `Error: advance reduce-able parsing state item`;\n // #endif\n return new StateItem(this.production, this.position + 1, this.lookaheadSet);\n }\n\n // #if _VERBOSE\n toString() {\n const coreItem = this.production.derivation.map((item) => GrammarUtils.toString(item));\n coreItem[this.position] = \".\" + (coreItem[this.position] ?? \"\");\n\n return `${NoneTerminal[this.production.goal]} :=> ${coreItem.join(\"|\")} ;${Array.from(this.lookaheadSet)\n .map((item) => GrammarUtils.toString(item))\n .join(\"/\")}`;\n }\n // #endif\n}\n","import { Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport StateItem from \"./StateItem\";\n\nexport default class State {\n static closureMap: Map<string /** state mapKey */, State> = new Map();\n static pool: Map<number, State> = new Map();\n static _id = 0;\n\n readonly id: number;\n readonly cores: Set<StateItem>;\n private _items: Set<StateItem>;\n get items() {\n return this._items;\n }\n\n closured = false;\n get needReInfer() {\n for (const core of this.cores) {\n if (core.needReInfer) return true;\n }\n return false;\n }\n\n private _stateItemPool: Map<string /** Map ID */, StateItem> = new Map();\n\n static create(cores: StateItem[]) {\n const cacheKey = this.getMapKey(cores);\n const state = this.closureMap.get(cacheKey);\n if (state) {\n for (const core of cores) {\n // merge lookahead\n state.createStateItem(core.production, core.position, core.lookaheadSet);\n }\n return state;\n }\n\n const newState = new State(cores);\n this.closureMap.set(cacheKey, newState);\n return newState;\n }\n\n // TODO: any optimization?\n static getMapKey(cores: StateItem[]) {\n return cores.map((item) => `${item.production.id},${item.position}`).join(\";\");\n }\n\n private constructor(cores: Iterable<StateItem>) {\n this.id = State._id++;\n this._items = new Set([...cores]);\n this.cores = new Set([...cores]);\n for (const it of cores) {\n const itemMapKey = this.getStateItemMapKey(it.production, it.position);\n this._stateItemPool.set(itemMapKey, it);\n }\n State.pool.set(this.id, this);\n }\n\n // TODO: any optimization?\n getStateItemMapKey(production: Production, position: number) {\n return `${production.id},${position}`;\n }\n\n createStateItem(production: Production, position: number, lookaheadSet: Iterable<Terminal> = new Set()) {\n const mapId = this.getStateItemMapKey(production, position);\n const item = this._stateItemPool.get(mapId);\n if (item) {\n for (const la of lookaheadSet) {\n if (item.lookaheadSet.has(la)) continue;\n item.lookaheadSet.add(la);\n item.needReInfer = true;\n }\n return item;\n }\n const newItem = new StateItem(production, position, lookaheadSet);\n this._stateItemPool.set(mapId, newItem);\n return newItem;\n }\n}\n","import { Grammar } from \"../parser/Grammar\";\nimport { NoneTerminal, GrammarSymbol, Terminal } from \"../parser/GrammarSymbol\";\nimport State from \"./State\";\nimport StateItem from \"./StateItem\";\nimport GrammarUtils from \"./Utils\";\nimport { EKeyword, ETokenType } from \"../common\";\nimport Utils from \"./Utils\";\nimport { ActionInfo, ActionTable, EAction, GotoTable, StateActionTable, StateGotoTable } from \"./types\";\n\n/**\n * The [LALR1](https://web.stanford.edu/class/archive/cs/cs143/cs143.1128/handouts/140%20LALR%20Parsing.pdf) Parser generator\n */\nexport class LALR1 {\n readonly firstSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n readonly followSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n\n readonly actionTable: StateActionTable = new Map();\n readonly gotoTable: StateGotoTable = new Map();\n private grammar: Grammar;\n\n /** For circle detect */\n private _firstSetNTStack: NoneTerminal[] = [];\n\n constructor(grammar: Grammar) {\n this.grammar = grammar;\n }\n\n generate() {\n this.computeFirstSet();\n this.buildStateTable();\n }\n\n private buildStateTable() {\n const startStateItemCore = [new StateItem(this.grammar.productions[0], 0, [ETokenType.EOF])];\n const startState = State.create(startStateItemCore);\n this._extendState(startState);\n }\n\n private _extendState(state: State) {\n if (!state.needReInfer) return;\n this._closure(state);\n const newStates = this._inferNextState(state);\n for (const ns of newStates) {\n this._extendState(ns);\n }\n }\n\n private _closure(state: State) {\n for (const core of state.cores) {\n if (!core.canReduce()) {\n this._extendStateItem(state, core);\n }\n }\n state.closured = true;\n return state;\n }\n\n private _extendStateItem(state: State, item: StateItem) {\n if (GrammarUtils.isTerminal(item.curSymbol)) return;\n\n const productionList = this.grammar.getProductionList(<NoneTerminal>item.curSymbol);\n\n if (item.nextSymbol) {\n let newLookaheadSet = new Set<Terminal>();\n let lastFirstSet: Set<Terminal> | undefined;\n let terminalExist = false;\n // when A :=> a.BC, a; ==》 B :=> .xy, First(Ca)\n // newLookAhead = First(Ca)\n for (let i = 1, nextSymbol = item.symbolByOffset(1); !!nextSymbol; nextSymbol = item.symbolByOffset(++i)) {\n if (GrammarUtils.isTerminal(nextSymbol)) {\n newLookaheadSet.add(<Terminal>nextSymbol);\n terminalExist = true;\n break;\n }\n lastFirstSet = this.firstSetMap.get(<NoneTerminal>nextSymbol)!;\n for (const t of lastFirstSet) {\n newLookaheadSet.add(t);\n }\n if (!lastFirstSet.has(ETokenType.EPSILON)) break;\n }\n if (!terminalExist && lastFirstSet?.has(ETokenType.EPSILON)) {\n for (const t of item.lookaheadSet) {\n newLookaheadSet.add(t);\n }\n }\n\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(newLookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(newLookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n } else {\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(item.lookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(item.lookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n }\n }\n\n private _inferNextState(state: State): Set<State> {\n const coreMap: Map<GrammarSymbol, Set<StateItem>> = new Map();\n const stateActionTable: ActionTable = this.actionTable.get(state.id) ?? new Map();\n const stateGotoTable: GotoTable = this.gotoTable.get(state.id) ?? new Map();\n\n this.actionTable.set(state.id, stateActionTable);\n this.gotoTable.set(state.id, stateGotoTable);\n\n for (const stateItem of state.items) {\n if (stateItem.canReduce()) {\n let action: ActionInfo;\n if (stateItem.production.goal !== NoneTerminal.START) {\n action = {\n action: EAction.Reduce,\n target: stateItem.production.id\n };\n } else {\n action = { action: EAction.Accept };\n }\n\n for (const t of stateItem.lookaheadSet) {\n this._addAction(stateActionTable, t, action);\n }\n } else {\n const nextItem = stateItem.advance();\n Utils.addMapSetItem(coreMap, stateItem.curSymbol, nextItem);\n }\n\n stateItem.needReInfer = false;\n }\n\n const newStates = new Set<State>();\n for (const [gs, cores] of coreMap.entries()) {\n const newState = State.create(Array.from(cores));\n if (GrammarUtils.isTerminal(gs)) {\n this._addAction(stateActionTable, <Terminal>gs, {\n action: EAction.Shift,\n target: newState.id\n });\n } else {\n stateGotoTable.set(<NoneTerminal>gs, newState.id);\n }\n\n newStates.add(newState);\n }\n\n return newStates;\n }\n\n /** Resolve shift-reduce/reduce-reduce conflict detect */\n private _addAction(table: ActionTable, terminal: Terminal, action: ActionInfo) {\n const exist = table.get(terminal);\n if (exist && !Utils.isActionEqual(exist, action)) {\n // Resolve dangling else ambiguity\n if (terminal === EKeyword.ELSE && exist.action === EAction.Shift && action.action === EAction.Reduce) {\n return;\n } else {\n // #if _VERBOSE\n console.warn(\n `conflict detect: <Terminal ${GrammarUtils.toString(terminal)}>`,\n Utils.printAction(exist),\n \" -> \",\n Utils.printAction(action)\n );\n // #endif\n }\n }\n table.set(terminal, action);\n }\n\n // https://people.cs.pitt.edu/~jmisurda/teaching/cs1622/handouts/cs1622-first_and_follow.pdf\n private computeFirstSet() {\n for (const production of this.grammar.productions.slice(1)) {\n this._computeFirstSetForNT(production.goal);\n }\n }\n\n private _computeFirstSetForNT(NT: NoneTerminal) {\n // circle detect\n const idx = this._firstSetNTStack.findIndex((item) => item === NT);\n if (idx !== -1) {\n const computingFS = this.firstSetMap.get(NT)!;\n const len = this._firstSetNTStack.length;\n for (let i = len - 1; i > idx; i--) {\n const curNT = this._firstSetNTStack[i];\n this.firstSetMap.set(curNT, computingFS);\n }\n return computingFS;\n }\n this._firstSetNTStack.push(NT);\n\n const productionList = this.grammar.getProductionList(NT);\n const firstSet = new Set<Terminal>();\n this.firstSetMap.set(NT, firstSet);\n if (this.grammar.isNullableNT(NT)) firstSet.add(ETokenType.EPSILON);\n\n for (const production of productionList) {\n let i = 0;\n for (; i < production.derivation.length; i++) {\n const gs = production.derivation[i];\n if (GrammarUtils.isTerminal(gs)) {\n firstSet.add(<Terminal>gs);\n break;\n }\n\n const succeedFirstSet = this._computeFirstSetForNT(<NoneTerminal>gs);\n\n for (const item of succeedFirstSet) {\n if (item !== ETokenType.EPSILON) firstSet.add(item);\n }\n if (!this.grammar.isNullableNT(<NoneTerminal>gs)) break;\n }\n if (i === production.derivation.length) firstSet.add(ETokenType.EPSILON);\n }\n\n this._firstSetNTStack.pop();\n return firstSet;\n }\n}\n","import { Grammar } from \"./Grammar\";\nimport { NoneTerminal, GrammarSymbol } from \"./GrammarSymbol\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { ETokenType } from \"../common\";\nimport { EAction, StateActionTable, StateGotoTable } from \"../lalr/types\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport SematicAnalyzer from \"./SemanticAnalyzer\";\nimport { TraceStackItem } from \"./types\";\nimport { addTranslationRule, createGrammar } from \"../lalr/CFG\";\nimport { LALR1 } from \"../lalr\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { Logger } from \"@galacean/engine\";\nimport { GSError, GSErrorName } from \"../GSError\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\n/**\n * The syntax parser and sematic analyzer of `ShaderLab` compiler\n */\nexport class ShaderTargetParser {\n readonly actionTable: StateActionTable;\n readonly gotoTable: StateGotoTable;\n readonly grammar: Grammar;\n readonly sematicAnalyzer: SematicAnalyzer;\n private _traceBackStack: (TraceStackItem | number)[] = [];\n\n private get curState() {\n return this._traceBackStack[this._traceBackStack.length - 1] as number;\n }\n private get stateActionTable() {\n return this.actionTable.get(this.curState)!;\n }\n private get stateGotoTable() {\n return this.gotoTable.get(this.curState);\n }\n\n // #if _VERBOSE\n /** @internal */\n get errors() {\n return this.sematicAnalyzer.errors;\n }\n // #endif\n\n static _singleton: ShaderTargetParser;\n\n static create() {\n if (!this._singleton) {\n const grammar = createGrammar();\n const generator = new LALR1(grammar);\n generator.generate();\n this._singleton = new ShaderTargetParser(generator.actionTable, generator.gotoTable, grammar);\n addTranslationRule(this._singleton.sematicAnalyzer);\n }\n\n return this._singleton;\n }\n\n private constructor(actionTable: StateActionTable, gotoTable: StateGotoTable, grammar: Grammar) {\n this.actionTable = actionTable;\n this.gotoTable = gotoTable;\n this.grammar = grammar;\n this.sematicAnalyzer = new SematicAnalyzer();\n }\n\n parse(tokens: Generator<BaseToken, BaseToken>): ASTNode.GLShaderProgram | null {\n this.sematicAnalyzer.reset();\n const start = performance.now();\n const { _traceBackStack: traceBackStack, sematicAnalyzer } = this;\n traceBackStack.push(0);\n\n let nextToken = tokens.next();\n let loopCount = 0;\n while (true) {\n loopCount += 1;\n const token = nextToken.value;\n\n const actionInfo = this.stateActionTable.get(token.type);\n if (actionInfo?.action === EAction.Shift) {\n traceBackStack.push(token, actionInfo.target!);\n nextToken = tokens.next();\n } else if (actionInfo?.action === EAction.Accept) {\n Logger.info(\n `[pass compilation - parser] Accept! State automata run ${loopCount} times! cost time ${\n performance.now() - start\n }ms`\n );\n sematicAnalyzer.acceptRule?.(sematicAnalyzer);\n return sematicAnalyzer.semanticStack.pop() as ASTNode.GLShaderProgram;\n } else if (actionInfo?.action === EAction.Reduce) {\n const target = actionInfo.target!;\n const reduceProduction = this.grammar.getProductionByID(target)!;\n const translationRule = sematicAnalyzer.getTranslationRule(reduceProduction.id);\n\n const values: (TreeNode | BaseToken)[] = [];\n\n for (let i = reduceProduction.derivation.length - 1; i >= 0; i--) {\n if (reduceProduction.derivation[i] === ETokenType.EPSILON) continue;\n traceBackStack.pop();\n const token = traceBackStack.pop();\n if (token instanceof BaseToken) {\n values.unshift(token);\n } else {\n const astNode = sematicAnalyzer.semanticStack.pop()!;\n values.unshift(astNode);\n }\n }\n translationRule?.(sematicAnalyzer, ...values);\n\n const gotoTable = this.stateGotoTable;\n traceBackStack.push(reduceProduction.goal);\n\n const nextState = gotoTable?.get(reduceProduction.goal)!;\n traceBackStack.push(nextState);\n continue;\n } else {\n const error = ShaderLabUtils.createGSError(\n `Unexpected token ${token.lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n token.location\n );\n // #if _VERBOSE\n this.sematicAnalyzer.errors.push(<GSError>error);\n // #endif\n return null;\n }\n }\n }\n\n // #if _VERBOSE\n private _printStack(nextToken: BaseToken) {\n let str = \"\";\n for (let i = 0; i < this._traceBackStack.length - 1; i++) {\n const state = <NoneTerminal>this._traceBackStack[i++];\n const token = this._traceBackStack[i];\n str += `State${state} - ${(<BaseToken>token).lexeme ?? ParserUtils.toString(token as GrammarSymbol)}; `;\n }\n str += `State${this._traceBackStack[this._traceBackStack.length - 1]} --- ${nextToken.lexeme}`;\n Logger.info(str);\n }\n // #endif\n}\n","function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of as _ };\n","import { BaseToken } from \"../common/BaseToken\";\nimport { ShaderRange } from \"../common\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n// #if _VERBOSE\nimport { GSErrorName } from \"../GSError\";\n// #endif\n\nexport class MacroDefine {\n private _replaceRegex?: RegExp;\n private readonly _argsLexemes: string[];\n\n get isFunction(): boolean {\n return !!this.args?.length;\n }\n\n constructor(\n public readonly macro: BaseToken,\n public readonly body?: BaseToken,\n public readonly location?: ShaderRange,\n public readonly args?: BaseToken[]\n ) {\n if (args) {\n this._argsLexemes = this.args.map((item) => item.lexeme);\n this._replaceRegex = new RegExp(`\\\\b(${this._argsLexemes.join(\"|\")})\\\\b`, \"g\");\n }\n }\n\n expandFunctionBody(args: string[]): string {\n if (args.length !== this.args?.length) {\n throw ShaderLabUtils.createGSError(\"mismatched function macro\", GSErrorName.PreprocessorError, \"\", this.location);\n }\n\n return this.body.lexeme.replace(this._replaceRegex, (m) => {\n return args[this._argsLexemes.indexOf(m)];\n });\n }\n}\n","import { ShaderRange } from \"../common\";\nimport { ExpandSegment } from \"./PpParser\";\n// #if _VERBOSE\nimport PpSourceMap, { MapRange } from \"./sourceMap\";\n// #endif\n\nexport class PpUtils {\n static expand(\n segments: ExpandSegment[],\n source: string,\n // #if _VERBOSE\n sourceMap?: PpSourceMap\n //#endif\n ) {\n const ret: string[] = [];\n let startIdx = 0;\n let generatedIdx = 0;\n\n for (const seg of segments) {\n const originSlice = source.slice(startIdx, seg.rangeInBlock.start.index);\n ret.push(originSlice, seg.replace);\n\n const generatedIdxEnd = generatedIdx + originSlice.length + seg.replace.length;\n\n // #if _VERBOSE\n const mapRange = new MapRange(seg.block, seg.rangeInBlock, {\n start: generatedIdx + originSlice.length,\n end: generatedIdxEnd\n });\n sourceMap?.addMapRange(mapRange);\n // #endif\n\n startIdx = seg.rangeInBlock.end.index;\n generatedIdx = generatedIdxEnd;\n }\n ret.push(source.slice(startIdx));\n return ret.join(\"\");\n }\n\n static assembleSegments(\n segments: {\n range: ShaderRange;\n replace: string;\n }[],\n source: string\n ) {\n const ret: string[] = [];\n let startIdx = 0;\n for (const seg of segments) {\n const originSlice = source.slice(startIdx, seg.range.start.index);\n ret.push(originSlice, seg.replace);\n startIdx = seg.range.end.index;\n }\n ret.push(source.slice(startIdx));\n return ret.join(\"\");\n }\n}\n","import { ShaderRange, ShaderPosition } from \"../common\";\nimport LexerUtils from \"../lexer/Utils\";\n// #if _VERBOSE\nimport PpSourceMap from \"./sourceMap\";\n// #endif\nimport BaseScanner from \"../common/BaseScanner\";\nimport { BaseToken, EOF } from \"../common/BaseToken\";\nimport { EPpKeyword, EPpToken, PpKeyword } from \"./constants\";\nimport { PpUtils } from \"./Utils\";\nimport { ShaderLab } from \"../ShaderLab\";\n\nexport type OnToken = (token: BaseToken, scanner: PpScanner) => void;\n\nexport default class PpScanner extends BaseScanner {\n private macroLvl = 0;\n\n // #if _VERBOSE\n readonly sourceMap = new PpSourceMap();\n readonly file: string;\n readonly blockRange?: ShaderRange;\n // #endif\n\n constructor(\n source: string,\n // #if _VERBOSE\n file = \"__main__\",\n blockRange?: ShaderRange\n // #endif\n ) {\n super(source);\n // #if _VERBOSE\n this.file = file;\n this.blockRange = blockRange;\n // #endif\n }\n\n /**\n * Advance to directive\n * @param expandOnToken callback on encountering token.\n */\n scanDirective(expandOnToken?: OnToken): BaseToken<number> {\n const directive = this._advanceToDirective(expandOnToken);\n if ([EPpKeyword.if, EPpKeyword.ifdef, EPpKeyword.ifndef].includes(<any>directive?.type)) {\n this.macroLvl += 1;\n } else if (<any>directive?.type === EPpKeyword.endif) {\n this.macroLvl -= 1;\n }\n return directive;\n }\n\n /**\n * @param nonLetterChar should not be space\n */\n scanWordsUntilChar(nonLetterChar: string): BaseToken[] {\n const ret: BaseToken[] = [];\n while (true) {\n this.skipSpace(true);\n if (LexerUtils.isLetter(this.getCurCharCode())) {\n ret.push(this.scanWord());\n } else if (this.getCurChar() === nonLetterChar) {\n this._advance();\n return ret;\n } else {\n this._advance();\n }\n }\n }\n\n scanWord(skipNonLetter = false): BaseToken {\n if (skipNonLetter) {\n while (!LexerUtils.isLetter(this.getCurCharCode()) && !this.isEnd()) {\n this._advance();\n }\n } else {\n this.skipSpace(true);\n }\n\n if (this.isEnd()) return EOF;\n\n const start = this._currentIndex;\n while (LexerUtils.isLetter(this.getCurCharCode()) && !this.isEnd()) {\n this._advance();\n }\n const end = this._currentIndex;\n const word = this._source.slice(start, end);\n if (end === start) {\n this.throwError(this.getShaderPosition(0), \"no word found.\");\n }\n const kw = PpKeyword.get(word);\n if (kw) {\n const token = BaseToken.pool.get();\n token.set(kw, word, this.getShaderPosition(0));\n return token;\n }\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.id, word, this.getShaderPosition(word.length));\n return token;\n }\n\n /**\n * @param offset - Offset from starting point\n */\n getShaderPosition(offset: number) {\n return ShaderLab.createPosition(\n this._currentIndex - offset,\n // #if _VERBOSE\n this.line,\n this.column - offset\n // #endif\n );\n }\n\n /**\n * @param onToken callback when encounter a token\n * @returns token split by space\n */\n override scanToken(onToken?: OnToken): BaseToken | undefined {\n this.skipCommentsAndSpace();\n if (this.isEnd()) {\n return;\n }\n const { _source: source } = this;\n let start = this._currentIndex;\n let found = false;\n for (var n = source.length; this._currentIndex < n; ) {\n if (LexerUtils.isPpCharacters(source.charCodeAt(this._currentIndex))) {\n this._advance();\n found = true;\n } else {\n if (found) {\n break;\n }\n this._advance();\n this.skipCommentsAndSpace();\n start = this._currentIndex;\n }\n }\n\n const lexeme = source.slice(start, this._currentIndex);\n const ret = BaseToken.pool.get();\n const tokenType = PpKeyword.get(lexeme);\n ret.set(tokenType ?? EPpToken.id, lexeme, this.getShaderPosition(this._currentIndex - start));\n onToken?.(ret, this);\n return ret;\n }\n\n scanQuotedString(): BaseToken<EPpToken.string_const> {\n this.skipSpace(true);\n if (this.getCurChar() !== '\"') {\n this.throwError(this.getShaderPosition(0), \"unexpected char, expected '\\\"'\");\n }\n const ShaderPosition = this.getShaderPosition(0);\n this._advance();\n const start = this._currentIndex;\n while (this.getCurChar() !== '\"' && !this.isEnd()) this._advance();\n if (this.isEnd()) {\n this.throwError(this.getShaderPosition(0), \"unexpected char, expected '\\\"'\");\n }\n const word = this._source.slice(start, this._currentIndex);\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.string_const, word, ShaderPosition);\n return token;\n }\n\n scanToChar(char: string) {\n const source = this._source;\n while (source[this._currentIndex] !== char && !this.isEnd()) {\n this._advance();\n }\n }\n\n scanMacroBranchChunk(): {\n token: BaseToken<EPpToken.chunk>;\n nextDirective: BaseToken;\n } {\n const start = this._currentIndex;\n const ShaderPosition = this.getShaderPosition(0);\n\n const startLvl = this.macroLvl;\n let directive = this.scanDirective()!;\n\n while (true) {\n if (directive.type === EPpKeyword.endif && startLvl - 1 === this.macroLvl) break;\n else if ([EPpKeyword.elif, EPpKeyword.else].includes(<EPpKeyword>directive.type) && startLvl === this.macroLvl)\n break;\n directive = this.scanDirective()!;\n }\n\n const chunk = this._source.slice(start, this._currentIndex - directive.lexeme.length - 1);\n const token = BaseToken.pool.get();\n token.set(EPpToken.chunk, chunk, ShaderPosition);\n return { token, nextDirective: directive };\n }\n\n scanPairedBlock(lc: string, rc: string): void {\n this.scanToChar(lc);\n let level = 0;\n const source = this._source;\n\n do {\n const curChar = source[this._currentIndex];\n\n if (curChar === lc) {\n level++;\n } else if (curChar === rc) {\n level--;\n }\n this._advance();\n } while (level > 0);\n }\n\n /**\n * @returns end ShaderPosition\n */\n scanRemainMacro(): ShaderPosition {\n const startLvl = this.macroLvl;\n let directive = this.scanDirective()!;\n while (!this.isEnd() && (directive.type !== EPpKeyword.endif || startLvl - 1 !== this.macroLvl)) {\n directive = this.scanDirective()!;\n }\n return this.getShaderPosition(0);\n }\n\n peekNonSpace() {\n let current = this._currentIndex;\n while (/\\s/.test(this._source[current])) {\n current += 1;\n }\n return this._source[current];\n }\n\n scanInteger() {\n const start = this._currentIndex;\n while (LexerUtils.isNum(this.getCurCharCode())) {\n this._advance();\n }\n if (this._currentIndex === start) {\n this.throwError(this.getShaderPosition(0), \"no integer found\");\n }\n const integer = this._source.slice(start, this._currentIndex);\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.int_constant, integer, this.getShaderPosition(0));\n return token;\n }\n\n /**\n * Skip comments\n */\n scanLineRemain() {\n this.skipSpace(false);\n const start = this._currentIndex;\n\n const comments: ShaderRange[] = [];\n\n while (this.getCurChar() !== \"\\n\") {\n if (this.isEnd()) {\n const line = this._source.slice(start, this._currentIndex);\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.line_remain, line, this.getShaderPosition(line.length));\n return token;\n }\n this._advance();\n const commentRange = this._skipComments();\n if (commentRange) {\n commentRange.start.index -= start;\n commentRange.end.index -= start;\n comments.push(commentRange);\n }\n }\n let line = this._source.slice(start, this._currentIndex);\n if (comments.length) {\n // filter comments\n line = PpUtils.assembleSegments(\n comments.map((item) => ({ range: item, replace: \"\" })),\n line\n );\n }\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.line_remain, line, this.getShaderPosition(line.length));\n return token;\n }\n\n private _advanceToDirective(onToken?: OnToken): BaseToken | undefined {\n while (true) {\n const token = this.scanToken(onToken);\n if (token?.lexeme.startsWith(\"#\")) return token;\n if (this.isEnd()) return;\n }\n }\n\n private _skipComments(): ShaderRange | undefined {\n if (this.peek(2) === \"//\") {\n const start = this.getShaderPosition(0);\n // single line comments\n while (this.getCurChar() !== \"\\n\" && !this.isEnd()) {\n this._advance();\n }\n return ShaderLab.createRange(start, this.getCurPosition());\n } else if (this.peek(2) === \"/*\") {\n const start = this.getShaderPosition(0);\n // multi-line comments\n this.advance(2);\n while (this.peek(2) !== \"*/\" && !this.isEnd()) {\n this._advance();\n }\n this.advance(2);\n return ShaderLab.createRange(start, this.getShaderPosition(0));\n }\n }\n}\n","import { ShaderPosition, ShaderRange } from \"../common\";\nimport LexerUtils from \"../lexer/Utils\";\nimport { MacroDefine } from \"./MacroDefine\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { EPpKeyword, EPpToken, PpConstant } from \"./constants\";\nimport PpScanner from \"./PpScanner\";\nimport { PpUtils } from \"./Utils\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderPass } from \"@galacean/engine\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { GSErrorName } from \"../GSError\";\n// #if _VERBOSE\nimport PpSourceMap, { BlockInfo } from \"./sourceMap\";\n// #endif\n\nexport interface ExpandSegment {\n // #if _VERBOSE\n block?: BlockInfo;\n // #endif\n rangeInBlock: ShaderRange;\n replace: string;\n}\n\n/** @internal */\nexport class PpParser {\n private static _definedMacros: Map<string, MacroDefine> = new Map();\n private static _expandSegmentsStack: ExpandSegment[][] = [[]];\n\n /** Referenced by branch macro or defined operator */\n private static _branchMacros: Set<string> = new Set();\n\n private static _includeMap: Record<string, string>;\n private static _basePathForIncludeKey: string;\n\n // #if _VERBOSE\n static _errors: Error[] = [];\n // #endif\n\n static reset(includeMap: Record<string, string>, basePathForIncludeKey: string) {\n this._definedMacros.clear();\n this._expandSegmentsStack.length = 0;\n this._expandSegmentsStack.push([]);\n this._branchMacros.clear();\n this.addPredefinedMacro(\"GL_ES\");\n this._includeMap = includeMap;\n this._basePathForIncludeKey = basePathForIncludeKey;\n // #if _VERBOSE\n this._errors.length = 0;\n // #endif\n }\n\n static addPredefinedMacro(macro: string, value?: string) {\n const tk = BaseToken.pool.get();\n tk.set(EPpToken.id, macro);\n\n let macroBody: BaseToken | undefined;\n if (value) {\n macroBody = BaseToken.pool.get();\n macroBody.set(EPpToken.id, value);\n }\n\n this._definedMacros.set(macro, new MacroDefine(tk, macroBody));\n }\n\n static parse(scanner: PpScanner): string | null {\n while (!scanner.isEnd()) {\n const directive = scanner.scanDirective(this._onToken.bind(this))!;\n if (scanner.isEnd()) break;\n switch (directive.type) {\n case EPpKeyword.define:\n this._parseDefine(scanner);\n break;\n\n case EPpKeyword.undef:\n this._parseUndef(scanner);\n break;\n\n case EPpKeyword.if:\n this._parseIf(scanner);\n break;\n\n case EPpKeyword.ifndef:\n this._parseIfNdef(scanner);\n break;\n\n case EPpKeyword.ifdef:\n this._parseIfDef(scanner);\n break;\n\n case EPpKeyword.include:\n this._parseInclude(scanner);\n break;\n }\n }\n // #if _VERBOSE\n if (this._errors.length > 0) return null;\n // #endif\n\n return PpUtils.expand(this.expandSegments, scanner.source, scanner.sourceMap);\n }\n\n private static get expandSegments() {\n return this._expandSegmentsStack[this._expandSegmentsStack.length - 1];\n }\n\n private static reportError(loc: ShaderRange | ShaderPosition, message: string, source: string, file: string) {\n const error = ShaderLabUtils.createGSError(message, GSErrorName.PreprocessorError, source, loc, file);\n // #if _VERBOSE\n this._errors.push(error);\n // #endif\n }\n\n private static _parseInclude(scanner: PpScanner) {\n const start = scanner.getShaderPosition(8);\n\n scanner.skipSpace(true);\n const id = scanner.scanQuotedString();\n let includedPath: string;\n // builtin path\n if (id.lexeme[0] !== \".\") {\n includedPath = id.lexeme;\n } else {\n // relative path\n // @ts-ignore\n includedPath = new URL(id.lexeme, this._basePathForIncludeKey).href.substring(ShaderPass._shaderRootPath.length);\n }\n\n scanner.scanToChar(\"\\n\");\n const end = scanner.getShaderPosition(0);\n const chunk = this._includeMap[includedPath];\n if (!chunk) {\n this.reportError(id.location, `Shader slice \"${includedPath}\" not founded.`, scanner.source, scanner.file);\n return;\n }\n\n const range = ShaderLab.createRange(start, end);\n const expanded = this._expandMacroChunk(chunk, range, id.lexeme);\n // #if _VERBOSE\n const block = new BlockInfo(id.lexeme, undefined, expanded.sourceMap);\n // #endif\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n }\n\n private static _parseIfDef(scanner: PpScanner) {\n const start = scanner.current - 6;\n\n const id = scanner.scanWord();\n this._addEmptyReplace(scanner, start);\n this._branchMacros.add(id.lexeme);\n\n const macro = this._definedMacros.get(id.lexeme);\n scanner.skipSpace(true);\n\n const { token: bodyChunk, nextDirective } = scanner.scanMacroBranchChunk();\n if (!!macro) {\n const end = nextDirective.type === EPpKeyword.endif ? scanner.getShaderPosition(0) : scanner.scanRemainMacro();\n\n const expanded = this._expandMacroChunk(bodyChunk.lexeme, bodyChunk.location, scanner);\n\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const range = ShaderLab.createRange(bodyChunk.location.start, end);\n\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n\n return;\n }\n\n this.expandSegments.pop();\n this._addEmptyReplace(scanner, start);\n\n this._parseMacroBranch(<any>nextDirective.type, scanner);\n }\n\n private static _parseMacroBranch(\n directive: EPpKeyword.elif | EPpKeyword.else | EPpKeyword.endif,\n scanner: PpScanner\n ) {\n if (directive === EPpKeyword.endif) {\n return;\n }\n\n const start = scanner.current;\n\n if (directive === EPpKeyword.else) {\n const { token: elseChunk } = scanner.scanMacroBranchChunk();\n const expanded = this._expandMacroChunk(elseChunk.lexeme, elseChunk.location, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const range = ShaderLab.createRange(startPosition, scanner.getShaderPosition(0));\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n } else if (directive === EPpKeyword.elif) {\n const constantExpr = this._parseConstantExpression(scanner);\n const { token: bodyChunk, nextDirective } = scanner.scanMacroBranchChunk();\n if (!!constantExpr) {\n const end = nextDirective.type === EPpKeyword.endif ? scanner.current : scanner.scanRemainMacro().index;\n const expanded = this._expandMacroChunk(bodyChunk.lexeme, bodyChunk.location, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const endPosition = ShaderLab.createPosition(end);\n const range = ShaderLab.createRange(startPosition, endPosition);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n } else {\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const endPosition = ShaderLab.createPosition(scanner.current);\n const range = ShaderLab.createRange(startPosition, endPosition);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: \"\"\n });\n this._parseMacroBranch(<any>nextDirective.type, scanner);\n }\n }\n }\n\n private static _parseConstantExpression(scanner: PpScanner) {\n scanner.skipSpace(true);\n return this._parseLogicalOrExpression(scanner);\n }\n\n private static _parseLogicalOrExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseLogicalAndExpression(scanner);\n const operator = scanner.peek(2);\n if (operator && operator === \"||\") {\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseLogicalOrExpression(scanner);\n return operand1 || operand2;\n }\n return operand1;\n }\n\n private static _parseLogicalAndExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseEqualityExpression(scanner);\n const operator = scanner.peek(2);\n if (operator && operator === \"&&\") {\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseLogicalAndExpression(scanner);\n return operand1 && operand2;\n }\n return operand1;\n }\n\n private static _parseEqualityExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseRelationalExpression(scanner);\n const operator = scanner.peek(2);\n if (operator && [\"==\", \"!=\"].includes(operator)) {\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseEqualityExpression(scanner);\n switch (operator) {\n case \"==\":\n return operand1 === operand2;\n case \"!=\":\n return operand1 !== operand2;\n }\n }\n return operand1;\n }\n\n private static _parseRelationalExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseShiftExpression(scanner) as number;\n let operator = scanner.peek(2);\n if (operator[1] !== \"=\") operator = operator[0];\n if (operator && [\">\", \"<\", \">=\", \"<=\"].includes(operator)) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance(operator.length);\n scanner.skipSpace(false);\n const operand2 = this._parseRelationalExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this.reportError(opPos, \"invalid operator in relation expression.\", scanner.source, scanner.file);\n return;\n }\n switch (operator) {\n case \">\":\n return operand1 > operand2;\n case \"<\":\n return operand1 < operand2;\n case \">=\":\n return operand1 >= operand2;\n case \"<=\":\n return operand1 <= operand2;\n }\n }\n return operand1;\n }\n\n private static _parseShiftExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseAdditiveExpression(scanner) as number;\n const operator = scanner.peek(2);\n if (operator && [\">>\", \"<<\"].includes(operator)) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseShiftExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this.reportError(opPos, \"invalid operator in shift expression.\", scanner.source, scanner.file);\n return;\n }\n switch (operator) {\n case \">>\":\n return operand1 >> operand2;\n case \"<<\":\n return operand1 << operand2;\n }\n }\n\n return operand1;\n }\n\n private static _parseAdditiveExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseMulticativeExpression(scanner) as number;\n if ([\">\", \"<\"].includes(scanner.getCurChar())) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance();\n\n const operator = scanner.getCurChar();\n scanner.skipSpace(false);\n const operand2 = this._parseAdditiveExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this.reportError(opPos, \"invalid operator.\", scanner.source, scanner.file);\n return false;\n }\n switch (operator) {\n case \"+\":\n return operand1 + operand2;\n case \"-\":\n return operand1 - operand2;\n }\n }\n return operand1;\n }\n\n private static _parseMulticativeExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseUnaryExpression(scanner) as number;\n scanner.skipSpace(false);\n if ([\"*\", \"/\", \"%\"].includes(scanner.getCurChar())) {\n const opPos = scanner.getShaderPosition(0);\n const operator = scanner.getCurChar();\n scanner.skipSpace(false);\n const operand2 = this._parseMulticativeExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this.reportError(opPos, \"invalid operator.\", scanner.source, scanner.file);\n return;\n }\n switch (operator) {\n case \"*\":\n return operand1 * operand2;\n case \"/\":\n return operand1 / operand2;\n case \"%\":\n return operand1 % operand2;\n }\n }\n return operand1;\n }\n\n private static _parseUnaryExpression(scanner: PpScanner) {\n const operator = scanner.getCurChar();\n if ([\"+\", \"-\", \"!\"].includes(operator)) {\n scanner.advance();\n const opPos = scanner.getShaderPosition(0);\n const parenExpr = this._parseParenthesisExpression(scanner);\n if ((operator === \"!\" && typeof parenExpr !== \"boolean\") || (operator !== \"!\" && typeof parenExpr !== \"number\")) {\n this.reportError(opPos, \"invalid operator.\", scanner.source, scanner.file);\n }\n\n switch (operator) {\n case \"+\":\n return parenExpr;\n case \"-\":\n return -parenExpr;\n case \"!\":\n return !parenExpr;\n }\n }\n return this._parseParenthesisExpression(scanner);\n }\n\n private static _parseParenthesisExpression(scanner: PpScanner): PpConstant {\n if (scanner.getCurChar() === \"(\") {\n scanner._advance();\n scanner.skipSpace(false);\n const ret = this._parseConstantExpression(scanner);\n scanner.scanToChar(\")\");\n scanner._advance();\n return ret;\n }\n return this._parseConstant(scanner);\n }\n\n private static _parseConstant(scanner: PpScanner): PpConstant {\n if (LexerUtils.isAlpha(scanner.getCurCharCode())) {\n const id = scanner.scanWord();\n if (id.type === EPpKeyword.defined) {\n const withParen = scanner.peekNonSpace() === \"(\";\n const macro = scanner.scanWord(true);\n if (withParen) {\n scanner.scanToChar(\")\");\n scanner._advance();\n }\n this._branchMacros.add(macro.lexeme);\n return !!this._definedMacros.get(macro.lexeme);\n } else {\n const macro = this._definedMacros.get(id.lexeme);\n if (!macro || !macro.body) {\n return false;\n }\n if (macro.isFunction) {\n this.reportError(id.location, \"invalid function macro usage\", scanner.source, scanner.file);\n }\n const value = Number(macro.body.lexeme);\n if (!Number.isInteger(value)) {\n this.reportError(id.location, `invalid const macro: ${id.lexeme}`, scanner.source, scanner.file);\n }\n this._branchMacros.add(id.lexeme);\n return value;\n }\n } else if (LexerUtils.isNum(scanner.getCurCharCode())) {\n const integer = scanner.scanInteger();\n return Number(integer.lexeme);\n } else {\n this.reportError(\n scanner.getShaderPosition(0),\n `invalid token: ${scanner.getCurChar()}`,\n scanner.source,\n scanner.file\n );\n }\n }\n\n /**\n * Recursively expand macro body and expansion.\n */\n private static _expandMacroChunk(\n chunk: string,\n loc: ShaderRange,\n parentScanner: PpScanner\n ): {\n content: string;\n // #if _VERBOSE\n sourceMap: PpSourceMap;\n // #endif\n };\n private static _expandMacroChunk(\n chunk: string,\n loc: ShaderRange,\n file: string\n ): {\n content: string;\n // #if _VERBOSE\n sourceMap: PpSourceMap;\n // #endif\n };\n private static _expandMacroChunk(\n chunk: string,\n loc: ShaderRange,\n scannerOrFile: PpScanner | string\n ): {\n content: string;\n // #if _VERBOSE\n sourceMap: PpSourceMap;\n // #endif\n } {\n this._expandSegmentsStack.push([]);\n let scanner: PpScanner;\n if (typeof scannerOrFile === \"string\") {\n scanner = new PpScanner(chunk, scannerOrFile);\n } else {\n scanner = new PpScanner(chunk, scannerOrFile.file, loc);\n }\n const ret = this.parse(scanner);\n this._expandSegmentsStack.pop();\n return {\n content: ret,\n // #if _VERBOSE\n sourceMap: scanner.sourceMap\n // #endif\n };\n }\n\n private static _parseIfNdef(scanner: PpScanner) {\n const start = scanner.current - 7;\n\n const id = scanner.scanWord();\n this._addEmptyReplace(scanner, start);\n this._branchMacros.add(id.lexeme);\n\n const macro = this._definedMacros.get(id.lexeme);\n const { token: bodyChunk, nextDirective } = scanner.scanMacroBranchChunk();\n if (!macro) {\n const end = nextDirective.type === EPpKeyword.endif ? scanner.getShaderPosition(0) : scanner.scanRemainMacro();\n\n const expanded = this._expandMacroChunk(bodyChunk.lexeme, bodyChunk.location, scanner);\n // #if _VERBOSE\n const blockInfo = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const range = ShaderLab.createRange(bodyChunk.location.start, end);\n this.expandSegments.push({\n // #if _VERBOSE\n block: blockInfo,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n return;\n }\n\n this.expandSegments.pop();\n this._addEmptyReplace(scanner, start);\n this._parseMacroBranch(<any>nextDirective.type, scanner);\n }\n\n private static _addEmptyReplace(scanner: PpScanner, start: number) {\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const endPosition = scanner.getCurPosition();\n const range = ShaderLab.createRange(startPosition, endPosition);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: \"\"\n });\n }\n\n private static _parseIf(scanner: PpScanner) {\n const start = scanner.current - 3;\n\n const constantExpr = this._parseConstantExpression(scanner);\n this._addEmptyReplace(scanner, start);\n\n const { token: bodyChunk, nextDirective } = scanner.scanMacroBranchChunk();\n if (!!constantExpr) {\n const end = nextDirective.type === EPpKeyword.endif ? scanner.getShaderPosition(0) : scanner.scanRemainMacro();\n const expanded = this._expandMacroChunk(bodyChunk.lexeme, bodyChunk.location, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const range = ShaderLab.createRange(bodyChunk.location.start, end);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n return;\n }\n\n this.expandSegments.pop();\n this._addEmptyReplace(scanner, start);\n this._parseMacroBranch(<any>nextDirective.type, scanner);\n }\n\n private static _parseDefine(scanner: PpScanner) {\n const start = scanner.getShaderPosition(7);\n const macro = scanner.scanWord();\n\n let end = macro.location.end;\n if (this._definedMacros.get(macro.lexeme) && macro.lexeme.startsWith(\"GL_\")) {\n this.reportError(macro.location, `redefined macro: ${macro.lexeme}`, scanner.source, scanner.file);\n }\n\n let macroArgs: BaseToken[] | undefined;\n if (scanner.getCurChar() === \"(\") {\n macroArgs = scanner.scanWordsUntilChar(\")\");\n end = scanner.getShaderPosition(0);\n }\n const macroBody = scanner.scanLineRemain();\n const range = ShaderLab.createRange(start, end);\n const macroDefine = new MacroDefine(macro, macroBody, range, macroArgs);\n this._definedMacros.set(macro.lexeme, macroDefine);\n\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange);\n // #endif\n\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: ShaderLab.createRange(start, scanner.getCurPosition()),\n replace: \"\"\n });\n }\n\n private static _parseUndef(scanner: PpScanner) {\n const start = scanner.current - 6;\n const macro = scanner.scanWord();\n\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const range = ShaderLab.createRange(startPosition, scanner.getCurPosition());\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: \"\"\n });\n this._definedMacros.delete(macro.lexeme);\n }\n\n private static _onToken(token: BaseToken, scanner: PpScanner) {\n const macro = this._definedMacros.get(token.lexeme);\n if (macro) {\n let replace = macro.body.lexeme;\n if (macro.isFunction) {\n scanner.scanToChar(\"(\");\n scanner._advance();\n\n // extract parameters\n const args: string[] = [];\n let curLvl = 1;\n let curIdx = scanner.current;\n while (true) {\n if (scanner.getCurChar() === \"(\") curLvl += 1;\n else if (scanner.getCurChar() === \")\") {\n curLvl -= 1;\n if (curLvl === 0) break;\n } else if (scanner.getCurChar() === \",\" && curLvl === 1) {\n args.push(scanner.source.slice(curIdx, scanner.current));\n curIdx = scanner.current + 1;\n }\n scanner._advance();\n }\n args.push(scanner.source.slice(curIdx, scanner.current));\n\n scanner._advance();\n const range = ShaderLab.createRange(token.location!.start, scanner.getCurPosition());\n replace = macro.expandFunctionBody(args);\n const expanded = this._expandMacroChunk(replace, range, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const blockRange = ShaderLab.createRange(token.location!.start, scanner.getCurPosition());\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: blockRange,\n replace: expanded.content\n });\n } else {\n const expanded = this._expandMacroChunk(replace, token.location, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const range = ShaderLab.createRange(token.location.start, token.location.end);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n }\n }\n }\n}\n","import { PpParser } from \"./PpParser\";\nimport PpScanner from \"./PpScanner\";\n\n/** @internal */\nexport class Preprocessor {\n static baseScanner: PpScanner;\n\n /**\n * Reset the parser of `Preprocessor`\n * @param basePathForIncludeKey - the base path to resolve the relative path of `#include` directive\n */\n static reset(includeMap: Record<string, string>, basePathForIncludeKey: string): void {\n PpParser.reset(includeMap, basePathForIncludeKey);\n }\n\n /**\n * Should call it after reset.\n */\n static process(source: string): string | null {\n this.baseScanner = new PpScanner(source);\n return PpParser.parse(this.baseScanner);\n }\n\n static addPredefinedMacro(macro: string, value?: string): void {\n PpParser.addPredefinedMacro(macro, value);\n }\n\n // #if _VERBOSE\n static convertSourceIndex(index: number) {\n return this.baseScanner.sourceMap.map(index);\n }\n // #endif\n}\n","import { NoneTerminal, GrammarSymbol } from \"./parser/GrammarSymbol\";\nimport { BaseToken as Token } from \"./common/BaseToken\";\nimport { EKeyword, ETokenType, GalaceanDataType } from \"./common\";\nimport { TreeNode } from \"./parser/AST\";\n// #if _VERBOSE\nimport State from \"./lalr/State\";\n// #endif\n\nexport class ParserUtils {\n static unwrapNodeByType<T = TreeNode>(node: TreeNode, type: NoneTerminal): T | undefined {\n const child = node.children[0];\n if (child instanceof Token) return;\n if (child.nt === type) return child as T;\n return ParserUtils.unwrapNodeByType(child, type);\n }\n\n // #if _VERBOSE\n /**\n * Check if type `tb` is compatible with type `ta`.\n */\n static typeCompatible(ta: GalaceanDataType, tb: GalaceanDataType | undefined) {\n if (tb == undefined) return true;\n if (ta === EKeyword.INT) {\n return ta === tb || tb === EKeyword.UINT;\n }\n return ta === tb;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? EKeyword[sm];\n }\n return NoneTerminal[sm];\n }\n // #endif\n\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n /**\n * @internal\n */\n // #if _VERBOSE\n static printStatePool(logPath: string) {\n let output = \"\";\n\n console.log(\"========== Parser Pool ==========\");\n\n let count = 0;\n for (const state of State.pool.values()) {\n count++;\n let tmp = \"\";\n tmp += `${state.id}: \\n`.padEnd(4);\n for (const psItem of state.items) {\n tmp += \" \" + psItem.toString() + \"\\n\";\n }\n output += tmp;\n }\n\n console.log(\"state count:\", count);\n console.log(output);\n }\n // #endif\n}\n","import { EShaderStage } from \"../common/Enums\";\nimport { ASTNode } from \"../parser/AST\";\nimport { ESymbolType, TargetSymbolTable, SymbolInfo } from \"../parser/symbolTable\";\nimport { IParamInfo, StructProp } from \"../parser/types\";\nimport { GSErrorName } from \"../GSError\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\n/** @internal */\nexport class VisitorContext {\n private static _singleton: VisitorContext;\n static get context() {\n return this._singleton;\n }\n\n static reset() {\n if (!this._singleton) {\n this._singleton = new VisitorContext();\n }\n this._singleton.reset();\n }\n\n attributeList: IParamInfo[] = [];\n attributeStructs: ASTNode.StructSpecifier[] = [];\n varyingStruct?: ASTNode.StructSpecifier;\n mrtStruct?: ASTNode.StructSpecifier;\n\n stage: EShaderStage;\n\n _referencedAttributeList: Record<string, IParamInfo & { qualifier?: string }> = Object.create(null);\n _referencedGlobals: Record<string, SymbolInfo | ASTNode.PrecisionSpecifier> = Object.create(null);\n _referencedVaryingList: Record<string, IParamInfo & { qualifier?: string }> = Object.create(null);\n _referencedMRTList: Record<string, StructProp | string> = Object.create(null);\n\n _curFn?: ASTNode.FunctionProtoType;\n\n _passSymbolTable: TargetSymbolTable;\n\n private constructor() {}\n\n get passSymbolTable() {\n return this._passSymbolTable;\n }\n\n reset() {\n this.attributeList.length = 0;\n this.attributeStructs.length = 0;\n this._referencedAttributeList = Object.create(null);\n this._referencedGlobals = Object.create(null);\n this._referencedVaryingList = Object.create(null);\n this._referencedMRTList = Object.create(null);\n this.mrtStruct = undefined;\n }\n\n isAttributeStruct(type: string) {\n return this.attributeStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isVaryingStruct(type: string) {\n return this.varyingStruct?.ident?.lexeme === type;\n }\n\n isMRTStruct(type: string) {\n return this.mrtStruct?.ident?.lexeme === type;\n }\n\n referenceAttribute(ident: BaseToken): Error | void {\n if (this._referencedAttributeList[ident.lexeme]) return;\n\n const prop = this.attributeList.find((item) => item.ident.lexeme === ident.lexeme);\n if (!prop) {\n return ShaderLabUtils.createGSError(\n `referenced attribute not found: ${ident.lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n ident.location\n );\n }\n this._referencedAttributeList[ident.lexeme] = prop;\n }\n\n referenceVarying(ident: BaseToken): Error | void {\n if (this._referencedVaryingList[ident.lexeme]) return;\n\n const prop = this.varyingStruct?.propList.find((item) => item.ident.lexeme === ident.lexeme);\n if (!prop) {\n return ShaderLabUtils.createGSError(\n `referenced varying not found: ${ident.lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n ident.location\n );\n }\n this._referencedVaryingList[ident.lexeme] = prop;\n }\n\n referenceMRTProp(ident: BaseToken): Error | void {\n if (this._referencedMRTList[ident.lexeme]) return;\n\n const prop = this.mrtStruct?.propList.find((item) => item.ident.lexeme === ident.lexeme);\n if (!prop) {\n return ShaderLabUtils.createGSError(\n `referenced mrt not found: ${ident.lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n ident.location\n );\n }\n this._referencedMRTList[ident.lexeme] = prop;\n }\n\n referenceGlobal(ident: string, type: ESymbolType) {\n if (this._referencedGlobals[ident]) return;\n\n if (type === ESymbolType.FN) {\n const fnEntries = this._passSymbolTable.getAllFnSymbols(ident);\n for (let i = 0; i < fnEntries.length; i++) {\n const key = i === 0 ? ident : ident + i;\n this._referencedGlobals[key] = fnEntries[i];\n }\n return;\n }\n const sm = this._passSymbolTable.lookup(ident, type);\n if (sm) {\n this._referencedGlobals[ident] = sm;\n }\n }\n}\n","import { IPoolElement } from \"@galacean/engine\";\n\nexport class TempArray<T> implements IPoolElement {\n array: Array<T> = new Array();\n\n dispose(): void {\n this.array.length = 0;\n }\n}\n","import { NoneTerminal } from \"../parser/GrammarSymbol\";\nimport { BaseToken as Token } from \"../common/BaseToken\";\nimport { EKeyword, ShaderPosition, ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { ESymbolType, FnSymbol, VarSymbol } from \"../parser/symbolTable\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { NodeChild } from \"../parser/types\";\nimport { VisitorContext } from \"./VisitorContext\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { GSErrorName } from \"../GSError\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { Logger, ReturnableObjectPool } from \"@galacean/engine\";\nimport { TempArray } from \"../TempArray\";\n\nexport const V3_GL_FragColor = \"GS_glFragColor\";\nexport const V3_GL_FragData = \"GS_glFragData\";\n\n/**\n * @internal\n * The code generator\n */\nexport abstract class CodeGenVisitor {\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n abstract getFragDataCodeGen(index: string | number): string;\n abstract getReferencedMRTPropText(index: string | number, ident: string): string;\n\n protected static _tmpArrayPool = new ReturnableObjectPool(TempArray<string>, 10);\n\n defaultCodeGen(children: NodeChild[]) {\n const pool = CodeGenVisitor._tmpArrayPool;\n let ret = pool.get();\n ret.dispose();\n for (const child of children) {\n if (child instanceof Token) {\n ret.array.push(child.lexeme);\n } else {\n ret.array.push(child.codeGen(this));\n }\n }\n pool.return(ret);\n return ret.array.join(\" \");\n }\n\n visitPostfixExpression(node: ASTNode.PostfixExpression) {\n const children = node.children;\n const derivationLength = children.length;\n const context = VisitorContext.context;\n\n if (derivationLength === 3) {\n const postExpr = children[0] as ASTNode.PostfixExpression;\n const prop = children[2];\n\n if (prop instanceof Token) {\n if (context.isAttributeStruct(<string>postExpr.type)) {\n const error = context.referenceAttribute(prop);\n // #if _VERBOSE\n if (error) {\n this.errors.push(<GSError>error);\n }\n // #endif\n return prop.lexeme;\n } else if (context.isVaryingStruct(<string>postExpr.type)) {\n const error = context.referenceVarying(prop);\n // #if _VERBOSE\n if (error) {\n this.errors.push(<GSError>error);\n }\n // #endif\n return prop.lexeme;\n } else if (context.isMRTStruct(<string>postExpr.type)) {\n const error = context.referenceMRTProp(prop);\n // #if _VERBOSE\n if (error) {\n this.errors.push(<GSError>error);\n }\n // #endif\n return prop.lexeme;\n }\n\n return `${postExpr.codeGen(this)}.${prop.lexeme}`;\n } else {\n return `${postExpr.codeGen(this)}.${prop.codeGen(this)}`;\n }\n } else if (derivationLength === 4) {\n const identNode = children[0] as ASTNode.PostfixExpression;\n const indexNode = children[2] as ASTNode.Expression;\n const identLexeme = identNode.codeGen(this);\n const indexLexeme = indexNode.codeGen(this);\n if (identLexeme === \"gl_FragData\") {\n // #if _VERBOSE\n if (context._referencedVaryingList[V3_GL_FragColor]) {\n this._reportError(identNode.location, \"cannot use both gl_FragData and gl_FragColor\");\n }\n // #endif\n const mrtLexeme = this.getFragDataCodeGen(indexLexeme);\n context._referencedMRTList[mrtLexeme] = this.getReferencedMRTPropText(indexLexeme, mrtLexeme);\n return mrtLexeme;\n }\n return `${identLexeme}[${indexLexeme}]`;\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n if (node.symbolInfo instanceof VarSymbol && node.symbolInfo.isGlobalVariable) {\n VisitorContext.context.referenceGlobal(node.lexeme, ESymbolType.VAR);\n }\n return node.lexeme;\n }\n\n visitFunctionCall(node: ASTNode.FunctionCall): string {\n const call = node.children[0] as ASTNode.FunctionCallGeneric;\n if (call.fnSymbol instanceof FnSymbol) {\n VisitorContext.context.referenceGlobal(call.fnSymbol.ident, ESymbolType.FN);\n\n const paramList = call.children[2];\n const paramInfoList = call.fnSymbol.astNode.protoType.parameterList;\n\n if (paramList instanceof ASTNode.FunctionCallParameterList) {\n const plainParams: string[] = [];\n const params = paramList.paramNodes;\n\n for (let i = 0; i < params.length; i++) {\n if (\n !VisitorContext.context.isAttributeStruct(paramInfoList[i].typeInfo.typeLexeme) &&\n !VisitorContext.context.isVaryingStruct(paramInfoList[i].typeInfo.typeLexeme)\n ) {\n plainParams.push(params[i].codeGen(this));\n }\n }\n return `${call.fnSymbol.ident}(${plainParams.join(\", \")})`;\n }\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitStatementList(node: ASTNode.StatementList): string {\n const children = node.children as TreeNode[];\n if (children.length === 1) {\n return children[0].codeGen(this);\n } else {\n return `${children[0].codeGen(this)}\\n${children[1].codeGen(this)}`;\n }\n }\n\n visitSingleDeclaration(node: ASTNode.SingleDeclaration): string {\n const type = node.typeSpecifier.type;\n if (typeof type === \"string\") {\n VisitorContext.context.referenceGlobal(type, ESymbolType.STRUCT);\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitGlobalVariableDeclaration(node: ASTNode.VariableDeclaration): string {\n const children = node.children;\n const fullType = children[0];\n if (fullType instanceof ASTNode.FullySpecifiedType && fullType.typeSpecifier.isCustom) {\n VisitorContext.context.referenceGlobal(<string>fullType.type, ESymbolType.STRUCT);\n }\n return this.defaultCodeGen(children);\n }\n\n visitDeclaration(node: ASTNode.Declaration): string {\n const { context } = VisitorContext;\n const children = node.children;\n const child = children[0];\n\n if (child instanceof ASTNode.InitDeclaratorList) {\n const typeLexeme = child.typeInfo.typeLexeme;\n if (context.isVaryingStruct(typeLexeme) || context.isMRTStruct(typeLexeme)) return \"\";\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionProtoType(node: ASTNode.FunctionProtoType): string {\n VisitorContext.context._curFn = node;\n return this.defaultCodeGen(node.children);\n }\n\n visitFunctionDefinition(node: ASTNode.FunctionDefinition): string {\n VisitorContext.context._curFn = undefined;\n return this.defaultCodeGen(node.children);\n }\n\n visitFunctionParameterList(node: ASTNode.FunctionParameterList): string {\n const params = node.parameterInfoList;\n return params\n .filter(\n (item) =>\n !VisitorContext.context.isAttributeStruct(item.typeInfo.typeLexeme) &&\n !VisitorContext.context.isVaryingStruct(item.typeInfo.typeLexeme)\n )\n .map((item) => item.astNode.codeGen(this))\n .join(\", \");\n }\n\n visitFunctionHeader(node: ASTNode.FunctionHeader): string {\n const returnType = node.returnType.typeSpecifier.lexeme;\n if (VisitorContext.context.isAttributeStruct(returnType) || VisitorContext.context.isVaryingStruct(returnType))\n return `void ${node.ident.lexeme}(`;\n return this.defaultCodeGen(node.children);\n }\n\n visitJumpStatement(node: ASTNode.JumpStatement): string {\n const children = node.children;\n const cmd = children[0] as Token;\n if (cmd.type === EKeyword.RETURN) {\n const expr = children[1];\n if (expr instanceof ASTNode.Expression) {\n const returnVar = ParserUtils.unwrapNodeByType<ASTNode.VariableIdentifier>(\n expr,\n NoneTerminal.variable_identifier\n );\n if (returnVar?.typeInfo === VisitorContext.context.varyingStruct?.ident?.lexeme) {\n return \"\";\n }\n const returnFnCall = ParserUtils.unwrapNodeByType<ASTNode.FunctionCall>(expr, NoneTerminal.function_call);\n if (returnFnCall?.type === VisitorContext.context.varyingStruct?.ident?.lexeme) {\n return `${expr.codeGen(this)};`;\n }\n }\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n return this.defaultCodeGen(node.children);\n }\n\n protected _reportError(loc: ShaderRange | ShaderPosition, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderLab._processingPassText));\n // #else\n Logger.error(message);\n // #endif\n }\n}\n","import { CodeGenVisitor } from \"./CodeGenVisitor\";\nimport { ASTNode } from \"../parser/AST\";\nimport { ShaderData } from \"../parser/ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, SymbolInfo } from \"../parser/symbolTable\";\nimport { EShaderStage } from \"../common/Enums\";\nimport { IShaderInfo } from \"@galacean/engine-design\";\nimport { ICodeSegment } from \"./types\";\nimport { VisitorContext } from \"./VisitorContext\";\nimport { EKeyword } from \"../common\";\n\nconst defaultPrecision = `\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n precision highp int;\n#else\n precision mediump float;\n precision mediump int;\n#endif\n`;\n\n/**\n * @internal\n */\nexport abstract class GLESVisitor extends CodeGenVisitor {\n protected _versionText: string = \"\";\n protected _extensions: string = \"\";\n private _globalCodeArray: ICodeSegment[] = [];\n\n abstract getAttributeDeclare(out: ICodeSegment[]): void;\n abstract getVaryingDeclare(out: ICodeSegment[]): void;\n abstract getMRTDeclare(out: ICodeSegment[]): void;\n\n visitShaderProgram(node: ASTNode.GLShaderProgram, vertexEntry: string, fragmentEntry: string): IShaderInfo {\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n VisitorContext.reset();\n VisitorContext.context._passSymbolTable = node.shaderData.symbolTable;\n\n return {\n vertex: this.vertexMain(vertexEntry, node.shaderData),\n fragment: this._fragmentMain(fragmentEntry, node.shaderData)\n };\n }\n\n vertexMain(entry: string, data: ShaderData): string {\n const { symbolTable } = data;\n const fnSymbol = symbolTable.lookup(entry, ESymbolType.FN);\n if (!fnSymbol?.astNode) throw `no entry function found: ${entry}`;\n\n const fnNode = fnSymbol.astNode;\n VisitorContext.context.stage = EShaderStage.VERTEX;\n\n const returnType = fnNode.protoType.returnType;\n if (typeof returnType.type === \"string\") {\n const varyStruct = symbolTable.lookup(returnType.type, ESymbolType.STRUCT);\n if (!varyStruct) {\n this._reportError(returnType.location, `invalid varying struct: ${returnType.type}`);\n } else {\n VisitorContext.context.varyingStruct = varyStruct.astNode;\n }\n } else if (returnType.type !== EKeyword.VOID) {\n this._reportError(returnType.location, \"vertex main entry can only return struct or void.\");\n }\n\n const paramList = fnNode.protoType.parameterList;\n if (paramList?.length) {\n for (const paramInfo of paramList) {\n if (typeof paramInfo.typeInfo.type === \"string\") {\n const structSymbol = symbolTable.lookup(paramInfo.typeInfo.type, ESymbolType.STRUCT);\n if (!structSymbol) {\n this._reportError(paramInfo.astNode.location, `Not found attribute struct \"${paramInfo.typeInfo.type}\".`);\n continue;\n }\n VisitorContext.context.attributeStructs.push(structSymbol.astNode);\n for (const prop of structSymbol.astNode.propList) {\n VisitorContext.context.attributeList.push(prop);\n }\n } else {\n VisitorContext.context.attributeList.push(paramInfo);\n }\n }\n }\n\n const statements = fnNode.statements.codeGen(this);\n\n const { _globalCodeArray: globalCodeArray } = this;\n globalCodeArray.length = 0;\n\n this._getGlobalText(data, globalCodeArray);\n this.getAttributeDeclare(globalCodeArray);\n this.getVaryingDeclare(globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n VisitorContext.context.reset();\n\n return `${this._versionText}\\n${globalCode}\\n\\nvoid main() ${statements}`;\n }\n\n private _fragmentMain(entry: string, data: ShaderData): string {\n const { symbolTable } = data;\n const fnSymbol = symbolTable.lookup(entry, ESymbolType.FN);\n if (!fnSymbol?.astNode) throw `no entry function found: ${entry}`;\n const fnNode = fnSymbol.astNode;\n\n const { returnStatement } = fnNode;\n if (returnStatement) {\n returnStatement.isFragReturnStatement = true;\n }\n\n const { context } = VisitorContext;\n context.stage = EShaderStage.FRAGMENT;\n\n const { type: returnDataType, location: returnLocation } = fnNode.protoType.returnType;\n if (typeof returnDataType === \"string\") {\n const mrtStruct = symbolTable.lookup(returnDataType, ESymbolType.STRUCT);\n if (!mrtStruct) {\n this._reportError(returnLocation, `invalid mrt struct: ${returnDataType}`);\n } else {\n context.mrtStruct = mrtStruct.astNode;\n }\n } else if (returnDataType !== EKeyword.VOID && returnDataType !== EKeyword.VEC4) {\n this._reportError(returnLocation, \"fragment main entry can only return struct or vec4.\");\n }\n\n const statements = fnNode.statements.codeGen(this);\n const { _globalCodeArray: globalCodeArray } = this;\n globalCodeArray.length = 0;\n\n this._getGlobalText(data, globalCodeArray);\n this.getVaryingDeclare(globalCodeArray);\n this.getMRTDeclare(globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n context.reset();\n return `${this._versionText}\\n${this._extensions}\\n${defaultPrecision}\\n${globalCode}\\n\\nvoid main() ${statements}`;\n }\n\n private _getGlobalText(\n data: ShaderData,\n textList: ICodeSegment[],\n lastLength: number = 0,\n _serialized: Set<string> = new Set()\n ): ICodeSegment[] {\n const { _referencedGlobals } = VisitorContext.context;\n\n if (lastLength === Object.keys(_referencedGlobals).length) {\n for (const precision of data.globalPrecisions) {\n textList.push({ text: precision.codeGen(this), index: precision.location.start.index });\n }\n return textList;\n }\n\n lastLength = Object.keys(_referencedGlobals).length;\n for (const ident in _referencedGlobals) {\n const sm = _referencedGlobals[ident];\n\n if (_serialized.has(ident)) continue;\n _serialized.add(ident);\n\n if (sm instanceof SymbolInfo) {\n if (sm.symbolType === ESymbolType.VAR) {\n textList.push({ text: `uniform ${sm.astNode.codeGen(this)}`, index: sm.astNode.location.start.index });\n } else {\n textList.push({ text: sm.astNode!.codeGen(this), index: sm.astNode!.location.start.index });\n }\n } else {\n textList.push({ text: sm.codeGen(this), index: sm.location.start.index });\n }\n }\n return this._getGlobalText(data, textList, lastLength, _serialized);\n }\n}\n","import { BaseToken } from \"../common/BaseToken\";\nimport { ASTNode } from \"../parser/AST\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { VisitorContext } from \"./VisitorContext\";\nimport { ICodeSegment } from \"./types\";\n\nexport class GLES100Visitor extends GLESVisitor {\n override _versionText: string = `#version 100`;\n override _extensions: string = [\n \"GL_EXT_shader_texture_lod\",\n \"GL_OES_standard_derivatives\",\n \"GL_EXT_draw_buffers\",\n \"GL_EXT_frag_depth\"\n ]\n .map((e) => `#extension ${e} : enable\\n`)\n .join(\"\");\n\n private static _singleton: GLES100Visitor;\n static getVisitor(): GLES100Visitor {\n if (!this._singleton) {\n this._singleton = new GLES100Visitor();\n }\n return this._singleton;\n }\n\n override getFragDataCodeGen(index: string | number): string {\n return `gl_FragData[${index}]`;\n }\n\n override getReferencedMRTPropText(index: string | number, ident: string): string {\n return \"\";\n }\n\n override getAttributeDeclare(out: ICodeSegment[]): void {\n for (const item of Object.values(VisitorContext.context._referencedAttributeList)) {\n out.push({\n text: `attribute ${item.typeInfo.typeLexeme} ${item.ident.lexeme};`,\n index: item.ident.location.start.index\n });\n }\n }\n\n override getVaryingDeclare(out: ICodeSegment[]): void {\n for (const item of Object.values(VisitorContext.context._referencedVaryingList)) {\n out.push({\n text: `varying ${item.typeInfo.typeLexeme} ${item.ident.lexeme};`,\n index: item.ident.location.start.index\n });\n }\n }\n\n override getMRTDeclare(out: ICodeSegment[]): void {\n return;\n }\n\n override visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const { children } = node;\n const postExpr = children[0];\n const { context } = VisitorContext;\n if (postExpr instanceof ASTNode.PostfixExpression && context.isMRTStruct(<string>postExpr.type)) {\n const propReferenced = children[2] as BaseToken;\n const prop = context.mrtStruct!.propList.find((item) => item.ident.lexeme === propReferenced.lexeme);\n if (!prop) {\n this._reportError(propReferenced.location, `not found mrt property: ${propReferenced.lexeme}`);\n return \"\";\n }\n return `gl_FragData[${prop.mrtIndex!}]`;\n }\n return super.visitPostfixExpression(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n const expression = node.children[1] as ASTNode.Expression;\n return `gl_FragColor = ${expression.codeGen(this)}`;\n }\n return super.visitJumpStatement(node);\n }\n}\n","import { ASTNode, TreeNode } from \"../parser/AST\";\nimport { SymbolType } from \"../parser/types\";\nimport { BaseToken as Token } from \"../common/BaseToken\";\nimport { EKeyword, ETokenType } from \"../common\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { EShaderStage } from \"../common/Enums\";\nimport { ICodeSegment } from \"./types\";\nimport { VisitorContext } from \"./VisitorContext\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { V3_GL_FragColor, V3_GL_FragData } from \"./CodeGenVisitor\";\n\nexport class GLES300Visitor extends GLESVisitor {\n override _versionText: string = \"#version 300 es\";\n\n private static _singleton: GLES300Visitor;\n static getVisitor(): GLES300Visitor {\n if (!this._singleton) {\n this._singleton = new GLES300Visitor();\n }\n return this._singleton;\n }\n\n override getFragDataCodeGen(index: string | number): string {\n return `${V3_GL_FragData}_${index}`;\n }\n\n override getReferencedMRTPropText(index: string | number, ident: string): string {\n return `layout(location = ${index}) out vec4 ${ident};`;\n }\n\n override getAttributeDeclare(out: ICodeSegment[]): void {\n for (const item of Object.values(VisitorContext.context._referencedAttributeList)) {\n out.push({\n text: `in ${item.typeInfo.typeLexeme} ${item.ident.lexeme};`,\n index: item.ident.location.start.index\n });\n }\n }\n\n override getVaryingDeclare(out: ICodeSegment[]): void {\n const qualifier = VisitorContext.context.stage === EShaderStage.FRAGMENT ? \"in\" : \"out\";\n const values = Object.values(VisitorContext.context._referencedVaryingList);\n for (let i = 0; i < values.length; i++) {\n const item = values[i];\n out.push({\n text: `${item.qualifier ?? qualifier} ${item.typeInfo.typeLexeme} ${item.ident.lexeme};`,\n index: item.ident.location.start.index\n });\n }\n }\n\n override getMRTDeclare(out: ICodeSegment[]): void {\n const referencedMRTList = VisitorContext.context._referencedMRTList;\n for (let ident in referencedMRTList) {\n const info = referencedMRTList[ident];\n if (typeof info === \"string\") {\n out.push({\n text: info,\n index: Number.MAX_SAFE_INTEGER\n });\n } else {\n out.push({\n text: this.getReferencedMRTPropText(info.mrtIndex, ident),\n index: info.ident.location.start.index\n });\n }\n }\n }\n\n override visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n const children = node.children;\n const typeSpecifier = children[0] as ASTNode.TypeSpecifier;\n if (typeSpecifier.children.length !== 1) {\n return this.defaultCodeGen(children);\n }\n let ident = node.lexeme;\n if (node.ident === \"texture2D\" || node.ident === \"textureCube\") {\n ident = \"texture\";\n } else if (node.ident === \"texture2DProj\") {\n ident = \"textureProj\";\n } else if (VisitorContext.context.stage === EShaderStage.FRAGMENT) {\n switch (node.ident) {\n case \"texture2DLodEXT\":\n case \"textureCubeLodEXT\":\n ident = \"textureLod\";\n break;\n case \"texture2DGradEXT\":\n case \"textureCubeGradEXT\":\n ident = \"textureGrad\";\n break;\n case \"texture2DProjLodEXT\":\n ident = \"textureProjLod\";\n break;\n case \"texture2DProjGradEXT\":\n ident = \"textureProjGrad\";\n break;\n case \"gl_FragDepthEXT\":\n ident = \"gl_FragDepth\";\n break;\n }\n }\n return ident;\n }\n\n override visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n const { context } = VisitorContext;\n if (context.stage === EShaderStage.FRAGMENT && node.lexeme === \"gl_FragColor\") {\n // #if _VERBOSE\n if (context._referencedMRTList[\"gl_FragData\"]) {\n this._reportError(node.location, \"cannot use both gl_FragData and gl_FragColor\");\n }\n if (context.mrtStruct) {\n this._reportError(node.location, \"gl_FragColor cannot be used with MRT (Multiple Render Targets).\");\n }\n // #endif\n this._registerFragColorVariable(node);\n return V3_GL_FragColor;\n }\n return super.visitVariableIdentifier(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n const { mrtStruct } = VisitorContext.context;\n if (mrtStruct) {\n return \"\";\n }\n this._registerFragColorVariable(node);\n\n const expression = node.children[1] as ASTNode.Expression;\n return `${V3_GL_FragColor} = ${expression.codeGen(this)};`;\n }\n return super.visitJumpStatement(node);\n }\n\n private _registerFragColorVariable(node: TreeNode) {\n const { _referencedVaryingList } = VisitorContext.context;\n if (!_referencedVaryingList[V3_GL_FragColor]) {\n const token = Token.pool.get();\n token.set(ETokenType.ID, V3_GL_FragColor, ShaderLab.createPosition(0, 0, 0));\n _referencedVaryingList[V3_GL_FragColor] = {\n ident: token,\n typeInfo: new SymbolType(EKeyword.VEC4, \"vec4\"),\n qualifier: \"out\",\n astNode: node\n };\n }\n }\n}\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","import { EKeyword } from \"../common\";\n\nexport const KeywordMap = new Map([\n [\"RenderQueueType\", EKeyword.GS_RenderQueueType],\n [\"BlendState\", EKeyword.GS_BlendState],\n [\"DepthState\", EKeyword.GS_DepthState],\n [\"StencilState\", EKeyword.GS_StencilState],\n [\"RasterState\", EKeyword.GS_RasterState],\n [\"EditorProperties\", EKeyword.GS_EditorProperties],\n [\"EditorMacros\", EKeyword.GS_EditorMacros],\n [\"Editor\", EKeyword.GS_Editor],\n [\"Tags\", EKeyword.GS_Tags],\n [\"VertexShader\", EKeyword.GS_VertexShader],\n [\"FragmentShader\", EKeyword.GS_FragmentShader],\n [\"SubShader\", EKeyword.GS_SubShader],\n [\"Pass\", EKeyword.GS_Pass],\n [\"BlendFactor\", EKeyword.GS_BlendFactor],\n [\"BlendOperation\", EKeyword.GS_BlendOperation],\n [\"Bool\", EKeyword.GS_Bool],\n [\"Number\", EKeyword.GS_Number],\n [\"CompareFunction\", EKeyword.GS_CompareFunction],\n [\"StencilOperation\", EKeyword.GS_StencilOperation],\n [\"CullMode\", EKeyword.GS_CullMode],\n [\"true\", EKeyword.TRUE],\n [\"false\", EKeyword.FALSE],\n [\"UsePass\", EKeyword.GS_UsePass],\n [\"Color\", EKeyword.GS_Color]\n]);\n","import BaseScanner from \"../common/BaseScanner\";\n\nexport default class Scanner extends BaseScanner {\n constructor(source: string, kws: Map<string, number> = new Map()) {\n super(source, kws);\n }\n\n /**\n * split by space\n */\n scanWord(): string {\n this.skipCommentsAndSpace();\n const start = this._currentIndex;\n while (/\\S/.test(this.getCurChar()) && !this.isEnd()) this._advance();\n return this._source.substring(start, this._currentIndex);\n }\n\n scanNumber(): number {\n this.skipCommentsAndSpace();\n const start = this._currentIndex;\n while (/[0-9]/.test(this.getCurChar())) this._advance();\n if (this.getCurChar() === \".\") {\n this._advance();\n while (/[0-9]/.test(this.getCurChar())) this._advance();\n }\n return Number(this._source.substring(start, this._currentIndex));\n }\n\n // #if _VERBOSE\n scanToCharacter(char: string): void {\n while (this.getCurChar() !== char && !this.isEnd()) {\n this._advance();\n }\n this._advance();\n }\n // #endif\n}\n","import { Logger } from \"@galacean/engine\";\nimport { TokenType } from \"../common\";\nimport { BaseSymbolTable, IBaseSymbol } from \"../common/BaseSymbolTable\";\n\nexport interface ISymbol extends IBaseSymbol {\n type: number;\n value?: any;\n}\n\nexport default class ContentSymbolTable extends BaseSymbolTable<ISymbol> {\n override insert(sm: ISymbol): void {\n const entry = this._table.get(sm.ident) ?? [];\n for (let i = 0; i < entry.length; i++) {\n if (entry[i].type === sm.type) {\n Logger.warn(\"replace symbol:\", sm.ident);\n entry[i] = sm;\n return;\n }\n }\n entry.push(sm);\n this._table.set(sm.ident, entry);\n }\n\n lookup(ident: string, type: TokenType): ISymbol | undefined {\n const entry = this._table.get(ident);\n if (entry) {\n for (let length = entry.length, i = 0; i < length; i++) {\n const item = entry[i];\n if (item.type === type) return item;\n }\n }\n }\n}\n","import { SymbolTableStack } from \"../common/BaseSymbolTable\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { EKeyword, ETokenType, TokenType } from \"../common\";\nimport { ShaderPosition } from \"../common\";\nimport { KeywordMap } from \"./KeywordMap\";\nimport Scanner from \"./Scanner\";\nimport ContentSymbolTable, { ISymbol } from \"./ContentSymbolTable\";\nimport {\n RenderStateDataKey,\n Color,\n RenderQueueType,\n CompareFunction,\n StencilOperation,\n BlendOperation,\n BlendFactor,\n CullMode,\n Logger\n} from \"@galacean/engine\";\nimport {\n IStatement,\n IShaderContent,\n ISubShaderContent,\n IShaderPassContent,\n IRenderStates\n} from \"@galacean/engine-design\";\nimport { GSErrorName } from \"../GSError\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\nconst EngineType = [\n EKeyword.GS_RenderQueueType,\n EKeyword.GS_BlendFactor,\n EKeyword.GS_BlendOperation,\n EKeyword.GS_Bool,\n EKeyword.GS_Number,\n EKeyword.GS_Color,\n EKeyword.GS_CompareFunction,\n EKeyword.GS_StencilOperation,\n EKeyword.GS_CullMode\n];\n\nconst RenderStateType = [\n EKeyword.GS_BlendState,\n EKeyword.GS_DepthState,\n EKeyword.GS_RasterState,\n EKeyword.GS_StencilState\n];\n\n/**\n * @internal\n */\nexport class ShaderContentParser {\n static _engineType = { RenderQueueType, CompareFunction, StencilOperation, BlendOperation, BlendFactor, CullMode };\n\n static _errors: GSError[] = [];\n\n private static _symbolTableStack: SymbolTableStack<ISymbol, ContentSymbolTable> = new SymbolTableStack();\n\n static reset() {\n this._errors.length = 0;\n this._symbolTableStack.clear();\n this._newScope();\n }\n\n static parse(source: string): IShaderContent {\n const start = performance.now();\n\n const scanner = new Scanner(source, KeywordMap);\n const ret = {\n subShaders: [],\n globalContents: [],\n renderStates: { constantMap: {}, variableMap: {} }\n } as IShaderContent;\n\n scanner.scanText(\"Shader\");\n ret.name = scanner.scanPairedText('\"', '\"');\n scanner.scanText(\"{\");\n\n scanner.skipCommentsAndSpace();\n this._parseShaderStatements(ret, scanner);\n\n const shaderGlobalStatements = ret.globalContents;\n const shaderRenderStates = ret.renderStates;\n for (let i = 0; i < ret.subShaders.length; i++) {\n const subShader = ret.subShaders[i];\n const curSubShaderGlobalStatements = shaderGlobalStatements.concat(subShader.globalContents);\n const constMap = { ...shaderRenderStates.constantMap, ...subShader.renderStates.constantMap };\n const variableMap = { ...shaderRenderStates.variableMap, ...subShader.renderStates.variableMap };\n\n for (let i = 0; i < subShader.passes.length; i++) {\n const pass = subShader.passes[i];\n Object.assign(pass.renderStates.constantMap, constMap);\n Object.assign(pass.renderStates.variableMap, variableMap);\n if (pass.isUsePass) continue;\n // @ts-ignore\n const passGlobalStatements = curSubShaderGlobalStatements.concat(pass.globalContents);\n pass.contents = passGlobalStatements.map((item) => item.content).join(\"\\n\");\n }\n }\n\n Logger.info(`[content compilation] cost time ${performance.now() - start}ms`);\n\n return ret;\n }\n\n private static _isRenderStateDeclarator(token: BaseToken) {\n return RenderStateType.includes(token.type);\n }\n\n private static _isEngineType(token: BaseToken) {\n return EngineType.includes(token.type);\n }\n\n private static _lookupSymbolByType(ident: string, type: TokenType): ISymbol | undefined {\n const stack = ShaderContentParser._symbolTableStack.stack;\n for (let length = stack.length, i = length - 1; i >= 0; i--) {\n const symbolTable = stack[i];\n const ret = symbolTable.lookup(ident, type);\n if (ret) return ret;\n }\n }\n\n private static _parseShaderStatements(ret: IShaderContent, scanner: Scanner) {\n let braceLevel = 1;\n let start = scanner.getCurPosition();\n\n while (true) {\n const word = scanner.scanToken();\n switch (word.type) {\n case EKeyword.GS_SubShader:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n const subShader = this._parseSubShader(scanner);\n ret.subShaders.push(subShader);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_EditorProperties:\n case EKeyword.GS_EditorMacros:\n case EKeyword.GS_Editor:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n scanner.scanPairedText(\"{\", \"}\", true);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_RenderQueueType:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderQueueAssignment(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case ETokenType.NOT_WORD:\n if (word.lexeme === \"{\") braceLevel += 1;\n else if (word.lexeme === \"}\") {\n braceLevel -= 1;\n if (braceLevel === 0) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._symbolTableStack.dropScope();\n return;\n }\n }\n\n default:\n if (ShaderContentParser._isRenderStateDeclarator(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderStateDeclarationOrAssignment(ret, word, scanner);\n start = scanner.getCurPosition();\n break;\n } else if (ShaderContentParser._isEngineType(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseVariableDeclaration(word.type, scanner);\n start = scanner.getCurPosition();\n break;\n }\n }\n }\n }\n\n private static _parseRenderStateDeclarationOrAssignment(\n ret: { renderStates: IRenderStates },\n stateToken: BaseToken,\n scanner: Scanner\n ) {\n const ident = scanner.scanToken();\n let isDeclaration: boolean;\n if (ident.type === ETokenType.ID) {\n isDeclaration = true;\n scanner.scanText(\"{\");\n } else if (ident.lexeme === \"{\") {\n isDeclaration = false;\n } else if (ident.lexeme === \"=\") {\n const variable = scanner.scanToken();\n scanner.scanText(\";\");\n const sm = ShaderContentParser._lookupSymbolByType(variable.lexeme, stateToken.type);\n if (!sm?.value) {\n const error = ShaderLabUtils.createGSError(\n `Invalid \"${stateToken.lexeme}\" variable: ${variable.lexeme}`,\n GSErrorName.CompilationError,\n scanner.source,\n variable.location\n );\n // #if _VERBOSE\n this._errors.push(<GSError>error);\n return;\n // #endif\n }\n const renderState = sm.value as IRenderStates;\n Object.assign(ret.renderStates.constantMap, renderState.constantMap);\n Object.assign(ret.renderStates.variableMap, renderState.variableMap);\n return;\n }\n\n const renderState = this._parseRenderStatePropList(stateToken.lexeme, scanner);\n if (isDeclaration) {\n this._symbolTableStack.insert({ ident: ident.lexeme, type: stateToken.type, value: renderState });\n } else {\n Object.assign(ret.renderStates.constantMap, renderState.constantMap);\n Object.assign(ret.renderStates.variableMap, renderState.variableMap);\n }\n }\n\n private static _parseVariableDeclaration(type: number, scanner: Scanner) {\n const token = scanner.scanToken();\n scanner.scanText(\";\");\n this._symbolTableStack.insert({ type: token.type, ident: token.lexeme });\n }\n\n private static _newScope() {\n const symbolTable = new ContentSymbolTable();\n this._symbolTableStack.newScope(symbolTable);\n }\n\n private static _dropScope() {\n this._symbolTableStack.dropScope();\n }\n\n private static _parseRenderStatePropList(state: string, scanner: Scanner): IRenderStates {\n const ret: IRenderStates = { constantMap: {}, variableMap: {} };\n while (scanner.getCurChar() !== \"}\") {\n this._parseRenderStatePropItem(ret, state, scanner);\n scanner.skipCommentsAndSpace();\n }\n scanner._advance();\n return ret;\n }\n\n private static _parseRenderStatePropItem(ret: IRenderStates, state: string, scanner: Scanner) {\n let renderStateProp = scanner.scanToken().lexeme;\n const op = scanner.scanToken();\n if (state === \"BlendState\" && renderStateProp !== \"BlendColor\" && renderStateProp !== \"AlphaToCoverage\") {\n let idx = 0;\n if (op.lexeme === \"[\") {\n idx = scanner.scanNumber();\n scanner.scanText(\"]\");\n scanner.scanText(\"=\");\n } else if (op.lexeme !== \"=\") {\n const error = ShaderLabUtils.createGSError(\n `Invalid syntax, expect character '=', but got ${op.lexeme}`,\n GSErrorName.CompilationError,\n scanner.source,\n scanner.getCurPosition()\n );\n // #if _VERBOSE\n this._errors.push(<GSError>error);\n scanner.scanToCharacter(\";\");\n return;\n // #endif\n }\n renderStateProp += idx;\n }\n\n renderStateProp = state + renderStateProp;\n const renderStateElementKey = RenderStateDataKey[renderStateProp];\n if (renderStateElementKey == undefined) {\n const error = ShaderLabUtils.createGSError(\n `Invalid render state element ${renderStateProp}`,\n GSErrorName.CompilationError,\n scanner.source,\n scanner.getCurPosition()\n );\n // #if _VERBOSE\n this._errors.push(<GSError>error);\n scanner.scanToCharacter(\";\");\n return;\n // #endif\n }\n\n scanner.skipCommentsAndSpace();\n let value: any;\n if (/[0-9.]/.test(scanner.getCurChar())) {\n value = scanner.scanNumber();\n } else {\n const token = scanner.scanToken();\n if (token.type === EKeyword.TRUE) value = true;\n else if (token.type === EKeyword.FALSE) value = false;\n else if (token.type === EKeyword.GS_Color) {\n scanner.scanText(\"(\");\n const args: number[] = [];\n while (true) {\n args.push(scanner.scanNumber());\n scanner.skipCommentsAndSpace();\n const peek = scanner.peek(1);\n if (peek === \")\") {\n scanner._advance();\n break;\n }\n scanner.scanText(\",\");\n }\n value = new Color(...args);\n } else if (scanner.getCurChar() === \".\") {\n scanner._advance();\n const engineTypeProp = scanner.scanToken();\n value = ShaderContentParser._engineType[token.lexeme]?.[engineTypeProp.lexeme];\n if (value == undefined) {\n const error = ShaderLabUtils.createGSError(\n `Invalid engine constant: ${token.lexeme}.${engineTypeProp.lexeme}`,\n GSErrorName.CompilationError,\n scanner.source,\n engineTypeProp.location\n );\n // #if _VERBOSE\n this._errors.push(<GSError>error);\n scanner.scanToCharacter(\";\");\n return;\n // #endif\n }\n } else {\n value = token.lexeme;\n }\n }\n scanner.scanText(\";\");\n if (typeof value === \"string\") {\n ret.variableMap[renderStateElementKey] = value;\n } else {\n ret.constantMap[renderStateElementKey] = value;\n }\n }\n\n private static _parseRenderQueueAssignment(ret: { renderStates: IRenderStates }, scanner: Scanner) {\n scanner.scanText(\"=\");\n const word = scanner.scanToken();\n scanner.scanText(\";\");\n const value = ShaderContentParser._engineType.RenderQueueType[word.lexeme];\n const key = RenderStateDataKey.RenderQueueType;\n if (value == undefined) {\n ret.renderStates.variableMap[key] = word.lexeme;\n } else {\n ret.renderStates.constantMap[key] = value;\n }\n }\n\n private static _addGlobalStatement(\n ret: { globalContents: IStatement[] },\n scanner: Scanner,\n start: ShaderPosition,\n offset: number\n ) {\n if (scanner.current > start.index + offset) {\n ret.globalContents.push({\n range: { start, end: { ...scanner.getCurPosition(), index: scanner.current - offset - 1 } },\n content: scanner.source.substring(start.index, scanner.current - offset - 1)\n });\n }\n }\n\n private static _parseSubShader(scanner: Scanner): ISubShaderContent {\n this._newScope();\n const ret = {\n passes: [],\n globalContents: [],\n renderStates: { constantMap: {}, variableMap: {} },\n tags: {}\n } as ISubShaderContent;\n let braceLevel = 1;\n ret.name = scanner.scanPairedText('\"', '\"');\n scanner.scanText(\"{\");\n\n scanner.skipCommentsAndSpace();\n let start = scanner.getCurPosition();\n\n while (true) {\n const word = scanner.scanToken();\n switch (word.type) {\n case EKeyword.GS_Pass:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n const pass = this._parsePass(scanner);\n ret.passes.push(pass);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_RenderQueueType:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderQueueAssignment(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_UsePass:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n const name = scanner.scanPairedText('\"', '\"');\n // @ts-ignore\n ret.passes.push({ name, isUsePass: true, renderStates: { constantMap: {}, variableMap: {} }, tags: {} });\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_Tags:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseTags(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case ETokenType.NOT_WORD:\n if (word.lexeme === \"{\") braceLevel += 1;\n else if (word.lexeme === \"}\") {\n braceLevel -= 1;\n if (braceLevel === 0) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._dropScope();\n return ret;\n }\n }\n\n default:\n if (ShaderContentParser._isRenderStateDeclarator(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderStateDeclarationOrAssignment(ret, word, scanner);\n start = scanner.getCurPosition();\n break;\n } else if (ShaderContentParser._isEngineType(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseVariableDeclaration(word.type, scanner);\n start = scanner.getCurPosition();\n break;\n }\n }\n }\n }\n\n private static _parseTags(ret: { tags?: Record<string, number | string | boolean> }, scanner: Scanner) {\n scanner.scanText(\"{\");\n while (true) {\n const ident = scanner.scanToken();\n scanner.scanText(\"=\");\n const value = scanner.scanPairedText('\"', '\"');\n scanner.skipCommentsAndSpace();\n\n ret.tags[ident.lexeme] = value;\n\n if (scanner.peek(1) === \"}\") {\n scanner._advance();\n return;\n }\n scanner.scanText(\",\");\n }\n }\n\n private static _parsePass(scanner: Scanner): IShaderPassContent {\n this._newScope();\n const ret = {\n globalContents: [],\n renderStates: { constantMap: {}, variableMap: {} },\n tags: {}\n } as IShaderPassContent & {\n globalContents: IStatement[];\n };\n ret.name = scanner.scanPairedText('\"', '\"');\n scanner.scanText(\"{\");\n let braceLevel = 1;\n\n scanner.skipCommentsAndSpace();\n let start = scanner.getCurPosition();\n\n while (true) {\n const word = scanner.scanToken();\n switch (word.type) {\n case EKeyword.GS_RenderQueueType:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderQueueAssignment(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_Tags:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseTags(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_VertexShader:\n case EKeyword.GS_FragmentShader:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n scanner.scanText(\"=\");\n const entry = scanner.scanToken();\n if (ret[word.lexeme]) {\n const error = ShaderLabUtils.createGSError(\n \"reassign main entry\",\n GSErrorName.CompilationError,\n scanner.source,\n scanner.getCurPosition()\n );\n // #if _VERBOSE\n Logger.error(error.toString());\n throw error;\n // #endif\n }\n const key = word.type === EKeyword.GS_VertexShader ? \"vertexEntry\" : \"fragmentEntry\";\n ret[key] = entry.lexeme;\n scanner.scanText(\";\");\n start = scanner.getCurPosition();\n break;\n\n case ETokenType.NOT_WORD:\n if (word.lexeme === \"{\") braceLevel += 1;\n else if (word.lexeme === \"}\") {\n braceLevel -= 1;\n if (braceLevel === 0) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._dropScope();\n return ret;\n }\n }\n\n default:\n if (ShaderContentParser._isRenderStateDeclarator(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderStateDeclarationOrAssignment(ret, word, scanner);\n start = scanner.getCurPosition();\n break;\n } else if (ShaderContentParser._isEngineType(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseVariableDeclaration(word.type, scanner);\n start = scanner.getCurPosition();\n break;\n }\n }\n }\n }\n}\n","import { Lexer } from \"./lexer\";\nimport { ShaderTargetParser } from \"./parser\";\nimport { Preprocessor } from \"./preprocessor\";\nimport { GLES100Visitor, GLES300Visitor } from \"./codeGen\";\nimport { IShaderContent, IShaderLab } from \"@galacean/engine-design\";\nimport { ShaderContentParser } from \"./contentParser\";\n// @ts-ignore\nimport { Logger, ShaderLib, ShaderMacro, ShaderPlatformTarget } from \"@galacean/engine\";\nimport { ShaderPosition, ShaderRange } from \"./common\";\n// #if _VERBOSE\nimport { GSError } from \"./GSError\";\n// #endif\nimport { PpParser } from \"./preprocessor/PpParser\";\nimport { ShaderLabUtils } from \"./ShaderLabUtils\";\nimport { IShaderProgramSource } from \"@galacean/engine-design/types/shader-lab/IShaderProgramSource\";\n\n/** @internal */\nexport class ShaderLab implements IShaderLab {\n private static _parser = ShaderTargetParser.create();\n private static _shaderPositionPool = ShaderLabUtils.createObjectPool(ShaderPosition);\n private static _shaderRangePool = ShaderLabUtils.createObjectPool(ShaderRange);\n\n // #if _VERBOSE\n static _processingPassText?: string;\n // #endif\n\n static createPosition(index: number, line?: number, column?: number): ShaderPosition {\n const position = this._shaderPositionPool.get();\n position.set(\n index,\n // #if _VERBOSE\n line,\n column\n // #endif\n );\n return position;\n }\n\n static createRange(start: ShaderPosition, end: ShaderPosition): ShaderRange {\n const range = this._shaderRangePool.get();\n range.set(start, end);\n return range;\n }\n\n // #if _VERBOSE\n /** Retrieve the compilation errors */\n readonly errors: Error[] = [];\n // #endif\n\n _parseShaderPass(\n source: string,\n vertexEntry: string,\n fragmentEntry: string,\n macros: ShaderMacro[],\n backend: ShaderPlatformTarget,\n platformMacros: string[],\n basePathForIncludeKey: string\n ): IShaderProgramSource | undefined {\n Preprocessor.reset(ShaderLib, basePathForIncludeKey);\n for (const macro of macros) {\n Preprocessor.addPredefinedMacro(macro.name, macro.value);\n }\n\n for (let i = 0; i < platformMacros.length; i++) {\n Preprocessor.addPredefinedMacro(platformMacros[i]);\n }\n\n const preprocessorStart = performance.now();\n const ppdContent = Preprocessor.process(source);\n // #if _VERBOSE\n if (PpParser._errors.length > 0) {\n for (const err of PpParser._errors) {\n this.errors.push(<GSError>err);\n }\n this._logErrors();\n return undefined;\n }\n // #endif\n\n Logger.info(`[pass compilation - preprocessor] cost time ${performance.now() - preprocessorStart}ms`);\n\n const lexer = new Lexer(ppdContent);\n const tokens = lexer.tokenize();\n\n const { _parser: parser } = ShaderLab;\n\n ShaderLab._processingPassText = ppdContent;\n const program = parser.parse(tokens);\n\n // #if _VERBOSE\n for (const err of parser.errors) {\n this.errors.push(err);\n }\n // #endif\n if (!program) {\n // #if _VERBOSE\n this._logErrors();\n // #endif\n return undefined;\n }\n\n const codeGen =\n backend === ShaderPlatformTarget.GLES100 ? GLES100Visitor.getVisitor() : GLES300Visitor.getVisitor();\n\n const start = performance.now();\n const ret = codeGen.visitShaderProgram(program, vertexEntry, fragmentEntry);\n Logger.info(`[CodeGen] cost time: ${performance.now() - start}ms`);\n ShaderLab._processingPassText = undefined;\n\n // #if _VERBOSE\n for (const err of codeGen.errors) {\n this.errors.push(err);\n }\n this._logErrors();\n // #endif\n\n return ret;\n }\n\n _parseShaderContent(shaderSource: string): IShaderContent {\n ShaderLabUtils.clearAllShaderLabObjectPool();\n ShaderContentParser.reset();\n const ret = ShaderContentParser.parse(shaderSource);\n\n // #if _VERBOSE\n this.errors.length = 0;\n for (const error of ShaderContentParser._errors) {\n this.errors.push(error);\n }\n // #endif\n\n return ret;\n }\n\n // #if _VERBOSE\n /**\n * @internal\n */\n _logErrors() {\n const errors = this.errors;\n if (errors.length === 0 || !Logger.isEnabled) return;\n Logger.error(`${errors.length} errors occur!`);\n for (const err of errors) {\n Logger.error(err.toString());\n }\n }\n // #endif\n}\n","export { ShaderLab } from \"./ShaderLab\";\n\n// #if _VERBOSE\nexport { Preprocessor } from \"./preprocessor\";\nexport * from \"./GSError\";\n// #endif\n\n//@ts-ignore\nexport const version = `__buildVersion`;\n\nlet mode = \"Release\";\n// #if _VERBOSE\nmode = \"Verbose\";\n// #endif\n\nconsole.log(`Galacean Engine ShaderLab Version: ${version} | Mode: ${mode}`);\n"],"names":["_array_like_to_array","arr","len","length","i","arr2","Array","_create_for_of_iterator_helper_loose","o","allowArrayLike","it","Symbol","iterator","call","next","bind","isArray","_unsupported_iterable_to_array","minLen","n","Object","prototype","toString","slice","constructor","name","from","test","done","value","TypeError","_set_prototype_of","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","create","writable","configurable","__decorate","decorators","target","key","desc","d","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SuppressedError","EKeyword","ETokenType","GSErrorName","EAction","ESymbolType","NoneTerminal","ASTNode","TrivialNode","ScopeBrace","ScopeEndBrace","JumpStatement","ExpressionAstNode","SingleDeclaration","FullySpecifiedType","TypeQualifier","SingleTypeQualifier","TypeSpecifier","ArraySpecifier","IntegerConstantExpressionOperator","IntegerConstantExpression","TypeSpecifierNonArray","ExtBuiltinTypeSpecifierNonArray","InitDeclaratorList","IdentifierList","Declaration","FunctionProtoType","FunctionDeclarator","FunctionHeader","FunctionParameterList","ParameterDeclaration","ParameterDeclarator","CompoundStatementNoScope","StatementList","FunctionDefinition","FunctionCall","FunctionCallGeneric","FunctionCallParameterList","PrecisionSpecifier","FunctionIdentifier","AssignmentExpression","Expression","PrimaryExpression","PostfixExpression","StructSpecifier","StructDeclarationList","StructDeclaration","LayoutQualifier","StructDeclaratorList","StructDeclarator","VariableDeclaration","VariableDeclarationList","VariableIdentifier","GLShaderProgram","EPpToken","EPpKeyword","EShaderStage","ShaderRange","set","start","end","dispose","ShaderPosition","index","KeywordTable","Map","ATTRIBUTE","CONST","BOOL","FLOAT","DOUBLE","INT","UINT","BREAK","CONTINUE","DO","ELSE","FOR","IF","WHILE","DISCARD","RETURN","BVEC2","BVEC3","BVEC4","IVEC2","IVEC3","IVEC4","UVEC2","UVEC3","UVEC4","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","IN","OUT","INOUT","SAMPLER2D","SAMPLER_CUBE","SAMPLER3D","SAMPLER2D_SHADOW","SAMPLER_CUBE_SHADOW","SAMPLER2D_ARRAY","SAMPLER2D_ARRAY_SHADOW","I_SAMPLER2D","I_SAMPLER3D","I_SAMPLER_CUBE","I_SAMPLER2D_ARRAY","U_SAMPLER2D","U_SAMPLER3D","U_SAMPLER_CUBE","U_SAMPLER2D_ARRAY","STRUCT","VOID","TRUE","FALSE","PRECISION","PRECISE","HIGHP","MEDIUMP","LOWP","INVARIANT","FLAT","SMOOTH","NOPERSPECTIVE","CENTROID","LAYOUT","LOCATION","_instanceof","left","right","hasInstance","ShaderLabUtils","createObjectPool","type","pool","ClearableObjectPool","_shaderLabObjectPoolSet","push","clearAllShaderLabObjectPool","clear","createGSError","message","errorName","source","location","file","Logger","error","BaseToken","lexeme","arg","ShaderLab","createPosition","createRange","EOF","LexerUtils","isNum","charCode","isLetter","isAlpha","isPpCharacters","isSpace","_defineProperties","props","descriptor","enumerable","_create_class","Constructor","protoProps","staticProps","BaseScanner","kws","_currentIndex","_source","_keywordsMap","getCurPosition","isEnd","getCurChar","getCurCharCode","charCodeAt","advance","count","_advance","skipSpace","includeLineBreak","spaceChars","_spaceCharsWithBreak","_spaceChars","curChar","_checkIsIn","skipCommentsAndSpace","peek","to","offset","substring","scanText","text","throwError","pos","_len","msgs","_key","join","ScannerError","scanPairedText","balanced","skipLeading","level","scanToken","onToken","splitCharRegex","_this__keywordsMap_get","token","get","NOT_WORD","tokenType","ID","range","checked","chars","current","Lexer","reset","_proto","tokenize","thisArg","body","f","y","t","_","label","sent","trys","ops","g","Iterator","verb","v","step","op","pop","e","_state","_scanWord","_scanNum","_getPosition","LEFT_ASSIGN","LEFT_OP","LE_OP","LEFT_ANGLE","RIGHT_ASSIGN","RIGHT_OP","GE_OP","RIGHT_ANGLE","INC_OP","ADD_ASSIGN","PLUS","DEC_OP","SUB_ASSIGN","DASH","EQ_OP","EQUAL","NE_OP","BANG","AND_OP","AMPERSAND","OR_OP","OR_ASSIGN","VERTICAL_BAR","XOR_OP","XOR_ASSIGN","CARET","MUL_ASSIGN","STAR","DIV_ASSIGN","SLASH","MOD_ASSIGN","PERCENT","LEFT_PAREN","RIGHT_PAREN","LEFT_BRACE","RIGHT_BRACE","LEFT_BRACKET","RIGHT_BRACKET","_scanNumAfterDot","DOT","COMMA","COLON","SEMICOLON","TILDE","QUESTION","_scanStringConst","buffer","STRING_CONST","FLOAT_CONSTANT","word","kt","_scanFloatSuffix","_scanIntegerSuffix","INT_CONSTANT","ShaderData","globalPrecisions","SymbolDataType","typeLexeme","arraySpecifier","SymbolInfo","ident","symbolType","astNode","dataType","signature","FnSymbol","protoType","returnType","typeSpecifier","FN","StructSymbol","BaseSymbolTable","_table","SymbolTableStack","stack","newScope","scope","dropScope","insert","sm","_scope","TargetSymbolTable","_this__table_get","entry","_compareWith","warn","lookup","item","getAllFnSymbols","fnIdent","entries","filter","params","paramSig","comparedParams","t1","t2","VarSymbol","isGlobalVariable","initAst","_this","VAR","SemanticAnalyzer","semanticStack","acceptRule","undefined","symbolTableStack","curFunctionInfo","_shaderData","_translationRuleTable","addTranslationRule","pid","rule","getTranslationRule","lookupSymbolBy","ret","symbolTable","reportError","loc","shaderData","Production","goal","derivation","id","_id","Grammar","productions","startSymbol","unshift","START","getProductionList","nonTerminal","isNullableNT","NT","find","EPSILON","getProductionByID","map","gsl","SymbolType","StructProp","typeInfo","mrtIndex","ASTNodeDecorator","nt","TreeNode","children","_location","_children","init","codeGen","visitor","defaultCodeGen","semanticAnalyze","sa","_unwrapToken","node","Token","_ignore","scope_brace","scope_end_brace","isFragReturnStatement","returnStatement","visitJumpStatement","jump_statement","_type","_this__type","childrenLen","fullyType","initializer","visitSingleDeclaration","single_declaration","fully_specified_type","type_qualifier","child","qualifier","single_type_qualifier","arraySize","firstChild","_children_","size","isCustom","type_specifier","integerConstantExpr","array_specifier","operator","compute","a","b","integer_constant_expression_operator","Number","integer_constant_expression","tt","type_specifier_nonarray","ext_builtin_type_specifier_nonarray","childrenLength","initDeclList","init_declarator_list","idList","curIdList","list","listIdLength","identifier_list","visitDeclaration","declaration","declarator","parameterList","parameterInfoList","visitFunctionProtoType","function_prototype","header","function_declarator","visitFunctionHeader","function_header","decl","listParamLength","visitFunctionParameterList","function_parameter_list","typeQualifier","parameterDeclarator","varSymbol","parameter_declaration","parameter_declarator","compound_statement_no_scope","visitStatementList","statement_list","statements","visitFunctionDefinition","function_definition","visitFunctionCall","function_call","fnSymbol","functionIdentifier","isBuiltin","paramList","function_call_generic","paramNodes","expr","function_call_parameter_list","precision_specifier","visitFunctionIdentifier","function_identifier","assignment_expression","expression","primary_expression","visitPostfixExpression","postfix_expression","propList","struct_specifier","propsLength","listProps","declProps","listPropLength","declPropLength","struct_declaration_list","declaratorList","_this_typeSpecifier","prop","declaratorListLength","struct_declaration","layout_qualifier","listLength","struct_declarator_list","struct_declarator","visitGlobalVariableDeclaration","variable_declaration","variableDeclaration","newVariable","variable_declaration_list","_this_symbolInfo_dataType","_this_symbolInfo","symbolInfo","visitVariableIdentifier","variable_identifier","gs_shader_program","GrammarUtils","isTerminal","createProductionWithOptions","options","astTypePool","_step","_iterator","opt","addMapSetItem","k","Set","add","isSubSet","sb","has","isActionEqual","action","productionAndRules","global_declaration","variable_declaration_statement","MAT2X3","MAT2X4","MAT3X2","MAT3X4","MAT4X2","MAT4X3","storage_qualifier","precision_qualifier","interpolation_qualifier","invariant_qualifier","conditional_expression","logical_or_expression","logical_xor_expression","logical_and_expression","inclusive_or_expression","exclusive_or_expression","and_expression","equality_expression","relational_expression","shift_expression","additive_expression","multiplicative_expression","unary_expression","unary_operator","assignment_operator","AND_ASSIGN","statement","compound_statement","simple_statement","expression_statement","selection_statement","iteration_statement","initializer_list","condition","for_init_statement","for_rest_statement","conditionopt","StateItem","production","position","lookahead","_needReInfer","lookaheadSet","la","addLookahead","ts","needReInfer","symbolByOffset","canReduce","curSymbol","nextSymbol","State","cores","closured","_stateItemPool","_items","itemMapKey","getStateItemMapKey","createStateItem","mapId","newItem","cacheKey","getMapKey","state","closureMap","core","newState","items","LALR1","grammar","firstSetMap","followSetMap","actionTable","gotoTable","_firstSetNTStack","generate","computeFirstSet","buildStateTable","startStateItemCore","startState","_extendState","_closure","newStates","_inferNextState","ns","_extendStateItem","productionList","newLookaheadSet","terminalExist","lastFirstSet","_step1","_iterator1","_step2","_iterator2","Utils","_step3","_iterator3","coreMap","stateActionTable","_this_actionTable_get","stateGotoTable","_this_gotoTable_get","stateItem","Reduce","Accept","_addAction","nextItem","gs","Shift","table","terminal","exist","_computeFirstSetForNT","idx","findIndex","computingFS","curNT","firstSet","succeedFirstSet","ShaderTargetParser","_traceBackStack","sematicAnalyzer","SematicAnalyzer","parse","tokens","performance","now","traceBackStack","nextToken","loopCount","actionInfo","info","CompilationError","_processingPassText","reduceProduction","translationRule","values","nextState","_singleton","generator","curState","_type_of","obj","MacroDefine","macro","args","_argsLexemes","_replaceRegex","RegExp","expandFunctionBody","_this_args","PreprocessorError","replace","m","indexOf","isFunction","PpKeyword","PpUtils","expand","segments","startIdx","generatedIdx","seg","originSlice","rangeInBlock","generatedIdxEnd","assembleSegments","PpScanner","macroLvl","scanDirective","expandOnToken","directive","_advanceToDirective","if","ifdef","ifndef","includes","endif","scanWordsUntilChar","nonLetterChar","scanWord","skipNonLetter","getShaderPosition","kw","found","scanQuotedString","string_const","scanToChar","char","scanMacroBranchChunk","startLvl","elif","else","chunk","nextDirective","scanPairedBlock","lc","rc","scanRemainMacro","peekNonSpace","scanInteger","integer","int_constant","scanLineRemain","comments","line","line_remain","commentRange","_skipComments","startsWith","PpParser","includeMap","basePathForIncludeKey","_definedMacros","_expandSegmentsStack","_branchMacros","addPredefinedMacro","_includeMap","_basePathForIncludeKey","macroBody","tk","scanner","_onToken","define","_parseDefine","undef","_parseUndef","_parseIf","_parseIfNdef","_parseIfDef","include","_parseInclude","expandSegments","sourceMap","includedPath","URL","href","ShaderPass","_shaderRootPath","expanded","_expandMacroChunk","content","_addEmptyReplace","bodyChunk","_parseMacroBranch","elseChunk","startPosition","constantExpr","_parseConstantExpression","endPosition","_parseLogicalOrExpression","operand1","_parseLogicalAndExpression","operand2","_parseEqualityExpression","_parseRelationalExpression","_parseShiftExpression","opPos","_parseAdditiveExpression","_parseMulticativeExpression","_parseUnaryExpression","parenExpr","_parseParenthesisExpression","_parseConstant","defined","withParen","isInteger","scannerOrFile","macroArgs","macroDefine","delete","curLvl","curIdx","blockRange","Preprocessor","process","baseScanner","ParserUtils","unwrapNodeByType","VisitorContext","attributeList","attributeStructs","_referencedAttributeList","_referencedGlobals","_referencedVaryingList","_referencedMRTList","mrtStruct","isAttributeStruct","isVaryingStruct","_this_varyingStruct_ident","_this_varyingStruct","varyingStruct","isMRTStruct","_this_mrtStruct_ident","_this_mrtStruct","referenceAttribute","referenceVarying","referenceMRTProp","referenceGlobal","fnEntries","_passSymbolTable","passSymbolTable","context","TempArray","array","V3_GL_FragColor","CodeGenVisitor","_tmpArrayPool","return","derivationLength","postExpr","identNode","indexNode","identLexeme","indexLexeme","mrtLexeme","getFragDataCodeGen","getReferencedMRTPropText","paramInfoList","plainParams","fullType","_curFn","cmd","returnVar","returnFnCall","_reportError","ReturnableObjectPool","GLESVisitor","_versionText","_extensions","_globalCodeArray","visitShaderProgram","vertexEntry","fragmentEntry","vertex","vertexMain","fragment","_fragmentMain","data","fnNode","stage","VERTEX","varyStruct","paramInfo","structSymbol","globalCodeArray","_getGlobalText","getAttributeDeclare","getVaryingDeclare","globalCode","sort","FRAGMENT","returnDataType","returnLocation","getMRTDeclare","textList","lastLength","_serialized","keys","precision","GLES100Visitor","out","propReferenced","getVisitor","GLES300Visitor","V3_GL_FragData","referencedMRTList","MAX_SAFE_INTEGER","_registerFragColorVariable","_is_native_reflect_construct","result","Boolean","valueOf","construct","_construct","Parent","Class","apply","instance","Function","_extends","assign","hasOwnProperty","KeywordMap","GS_RenderQueueType","GS_BlendState","GS_DepthState","GS_StencilState","GS_RasterState","GS_EditorProperties","GS_EditorMacros","GS_Editor","GS_Tags","GS_VertexShader","GS_FragmentShader","GS_SubShader","GS_Pass","GS_BlendFactor","GS_BlendOperation","GS_Bool","GS_Number","GS_CompareFunction","GS_StencilOperation","GS_CullMode","GS_UsePass","GS_Color","Scanner","scanNumber","ContentSymbolTable","EngineType","RenderStateType","ShaderContentParser","_errors","_symbolTableStack","_newScope","subShaders","globalContents","renderStates","constantMap","variableMap","_parseShaderStatements","shaderGlobalStatements","shaderRenderStates","subShader","curSubShaderGlobalStatements","concat","constMap","passes","pass","isUsePass","passGlobalStatements","contents","_isRenderStateDeclarator","_isEngineType","_lookupSymbolByType","braceLevel","_addGlobalStatement","_parseSubShader","_parseRenderQueueAssignment","_parseRenderStateDeclarationOrAssignment","_parseVariableDeclaration","stateToken","isDeclaration","variable","renderState","_parseRenderStatePropList","_dropScope","_parseRenderStatePropItem","renderStateProp","renderStateElementKey","RenderStateDataKey","Color","engineTypeProp","_engineType","RenderQueueType","tags","_parsePass","_parseTags","CompareFunction","StencilOperation","BlendOperation","BlendFactor","CullMode","_parseShaderPass","macros","backend","platformMacros","ShaderLib","preprocessorStart","ppdContent","lexer","parser","_parser","program","ShaderPlatformTarget","GLES100","_parseShaderContent","shaderSource","column","_shaderPositionPool","_shaderRangePool","version","console","log"],"mappings":"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"}
1
+ {"version":3,"file":"browser.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../src/common/ShaderRange.ts","../src/common/Keywords.ts","../src/common/types.ts","../src/GSError.ts","../src/lalr/types.ts","../src/parser/symbolTable/SymbolInfo.ts","../src/parser/GrammarSymbol.ts","../src/parser/AST.ts","../src/preprocessor/constants.ts","../src/common/Enums.ts","../src/common/ShaderPosition.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../src/ShaderLabUtils.ts","../src/common/BaseToken.ts","../src/lexer/Utils.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../src/common/BaseScanner.ts","../src/lexer/Lexer.ts","../src/parser/ShaderInfo.ts","../src/parser/symbolTable/SymbolDataType.ts","../src/parser/symbolTable/FnSymbol.ts","../src/parser/symbolTable/StructSymbol.ts","../src/common/BaseSymbolTable.ts","../src/parser/symbolTable/TargetSymbolTable.ts","../src/parser/symbolTable/VarSymbol.ts","../src/parser/SemanticAnalyzer.ts","../src/lalr/Production.ts","../src/parser/Grammar.ts","../src/parser/types.ts","../src/lalr/Utils.ts","../src/lalr/CFG.ts","../src/lalr/StateItem.ts","../src/lalr/State.ts","../src/lalr/LALR1.ts","../src/parser/ShaderTargetParser.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_type_of.js","../src/preprocessor/MacroDefine.ts","../src/preprocessor/Utils.ts","../src/preprocessor/PpScanner.ts","../src/preprocessor/PpParser.ts","../src/preprocessor/Preprocessor.ts","../src/ParserUtils.ts","../src/codeGen/VisitorContext.ts","../src/TempArray.ts","../src/codeGen/CodeGenVisitor.ts","../src/codeGen/GLESVisitor.ts","../src/codeGen/GLES100.ts","../src/codeGen/GLES300.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/contentParser/KeywordMap.ts","../src/contentParser/Scanner.ts","../src/contentParser/ContentSymbolTable.ts","../src/contentParser/ShaderContentParser.ts","../src/ShaderLab.ts","../src/index.ts"],"sourcesContent":["function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { IPoolElement } from \"@galacean/engine\";\nimport { ShaderPosition } from \"./ShaderPosition\";\n\nexport class ShaderRange implements IPoolElement {\n public start: ShaderPosition;\n public end: ShaderPosition;\n\n set(start: ShaderPosition, end: ShaderPosition) {\n this.start = start;\n this.end = end;\n }\n\n dispose(): void {\n this.start.dispose();\n this.end.dispose();\n }\n}\n","export enum EKeyword {\n ATTRIBUTE = 0,\n CONST,\n BOOL,\n FLOAT,\n DOUBLE,\n INT,\n UINT,\n BREAK,\n CONTINUE,\n DO,\n ELSE,\n FOR,\n IF,\n WHILE,\n DISCARD,\n RETURN,\n BVEC2,\n BVEC3,\n BVEC4,\n IVEC2,\n IVEC3,\n IVEC4,\n UVEC2,\n UVEC3,\n UVEC4,\n VEC2,\n VEC3,\n VEC4,\n VEC4_ARRAY,\n MAT2,\n MAT3,\n MAT4,\n MAT2X3,\n MAT2X4,\n MAT3X2,\n MAT3X4,\n MAT4X2,\n MAT4X3,\n IN,\n OUT,\n INOUT,\n CENTROID,\n SAMPLER2D,\n SAMPLER3D,\n SAMPLER_CUBE,\n SAMPLER2D_SHADOW,\n SAMPLER_CUBE_SHADOW,\n SAMPLER2D_ARRAY,\n SAMPLER2D_ARRAY_SHADOW,\n I_SAMPLER2D,\n I_SAMPLER3D,\n I_SAMPLER_CUBE,\n I_SAMPLER2D_ARRAY,\n U_SAMPLER2D,\n U_SAMPLER3D,\n U_SAMPLER_CUBE,\n U_SAMPLER2D_ARRAY,\n STRUCT,\n LAYOUT,\n LOCATION,\n VOID,\n TRUE,\n FALSE,\n PRECISION,\n PRECISE,\n HIGHP,\n MEDIUMP,\n LOWP,\n INVARIANT,\n SMOOTH,\n FLAT,\n NOPERSPECTIVE,\n\n // galacean internals\n GS_RenderQueueType,\n GS_BlendState,\n GS_DepthState,\n GS_StencilState,\n GS_RasterState,\n GS_EditorProperties,\n GS_EditorMacros,\n GS_Editor,\n GS_Tags,\n GS_ReplacementTag,\n GS_LightMode,\n GS_PipelineStage,\n GS_VertexShader,\n GS_FragmentShader,\n GS_SubShader,\n GS_Pass,\n GS_BlendFactor,\n GS_BlendOperation,\n GS_Bool,\n GS_Number,\n GS_Color,\n GS_CompareFunction,\n GS_StencilOperation,\n GS_CullMode,\n GS_UsePass\n}\n","import { EKeyword } from \"./Keywords\";\n\nexport const KeywordTable = new Map<string, EKeyword>([\n [\"attribute\", EKeyword.ATTRIBUTE],\n [\"const\", EKeyword.CONST],\n [\"bool\", EKeyword.BOOL],\n [\"float\", EKeyword.FLOAT],\n [\"double\", EKeyword.DOUBLE],\n [\"int\", EKeyword.INT],\n [\"uint\", EKeyword.UINT],\n [\"break\", EKeyword.BREAK],\n [\"continue\", EKeyword.CONTINUE],\n [\"do\", EKeyword.DO],\n [\"else\", EKeyword.ELSE],\n [\"for\", EKeyword.FOR],\n [\"if\", EKeyword.IF],\n [\"while\", EKeyword.WHILE],\n [\"discard\", EKeyword.DISCARD],\n [\"return\", EKeyword.RETURN],\n [\"bvec2\", EKeyword.BVEC2],\n [\"bvec3\", EKeyword.BVEC3],\n [\"bvec4\", EKeyword.BVEC4],\n [\"ivec2\", EKeyword.IVEC2],\n [\"ivec3\", EKeyword.IVEC3],\n [\"ivec4\", EKeyword.IVEC4],\n [\"uvec2\", EKeyword.UVEC2],\n [\"uvec3\", EKeyword.UVEC3],\n [\"uvec4\", EKeyword.UVEC4],\n [\"vec2\", EKeyword.VEC2],\n [\"vec3\", EKeyword.VEC3],\n [\"vec4\", EKeyword.VEC4],\n [\"mat2\", EKeyword.MAT2],\n [\"mat3\", EKeyword.MAT3],\n [\"mat4\", EKeyword.MAT4],\n [\"in\", EKeyword.IN],\n [\"out\", EKeyword.OUT],\n [\"inout\", EKeyword.INOUT],\n [\"sampler2D\", EKeyword.SAMPLER2D],\n [\"samplerCube\", EKeyword.SAMPLER_CUBE],\n [\"sampler3D\", EKeyword.SAMPLER3D],\n [\"sampler2DShadow\", EKeyword.SAMPLER2D_SHADOW],\n [\"samplerCubeShadow\", EKeyword.SAMPLER_CUBE_SHADOW],\n [\"sampler2DArray\", EKeyword.SAMPLER2D_ARRAY],\n [\"sampler2DArrayShadow\", EKeyword.SAMPLER2D_ARRAY_SHADOW],\n [\"isampler2D\", EKeyword.I_SAMPLER2D],\n [\"isampler3D\", EKeyword.I_SAMPLER3D],\n [\"isamplerCube\", EKeyword.I_SAMPLER_CUBE],\n [\"isampler2DArray\", EKeyword.I_SAMPLER2D_ARRAY],\n [\"usampler2D\", EKeyword.U_SAMPLER2D],\n [\"usampler3D\", EKeyword.U_SAMPLER3D],\n [\"usamplerCube\", EKeyword.U_SAMPLER_CUBE],\n [\"usampler2DArray\", EKeyword.U_SAMPLER2D_ARRAY],\n [\"struct\", EKeyword.STRUCT],\n [\"void\", EKeyword.VOID],\n [\"true\", EKeyword.TRUE],\n [\"false\", EKeyword.FALSE],\n [\"precision\", EKeyword.PRECISION],\n [\"precise\", EKeyword.PRECISE],\n [\"highp\", EKeyword.HIGHP],\n [\"mediump\", EKeyword.MEDIUMP],\n [\"lowp\", EKeyword.LOWP],\n [\"invariant\", EKeyword.INVARIANT],\n [\"flat\", EKeyword.FLAT],\n [\"smooth\", EKeyword.SMOOTH],\n [\"noperspective\", EKeyword.NOPERSPECTIVE],\n [\"centroid\", EKeyword.CENTROID],\n [\"layout\", EKeyword.LAYOUT],\n [\"location\", EKeyword.LOCATION]\n]);\n\nexport enum ETokenType {\n ID = 1000,\n FLOAT_CONSTANT,\n INT_CONSTANT,\n STRING_CONST,\n /** << */\n LEFT_OP,\n /** \\>> */\n RIGHT_OP,\n /** ++ */\n INC_OP,\n /** -- */\n DEC_OP,\n /** <= */\n LE_OP,\n /** \\>= */\n GE_OP,\n /** == */\n EQ_OP,\n /** != */\n NE_OP,\n /** && */\n AND_OP,\n /** || */\n OR_OP,\n /** ^^ */\n XOR_OP,\n /** *= */\n MUL_ASSIGN,\n /** /= */\n DIV_ASSIGN,\n /** += */\n ADD_ASSIGN,\n /** -= */\n SUB_ASSIGN,\n /** %= */\n MOD_ASSIGN,\n /** <<= */\n LEFT_ASSIGN,\n /** >>= */\n RIGHT_ASSIGN,\n /** &= */\n AND_ASSIGN,\n /** ^= */\n XOR_ASSIGN,\n /** |= */\n OR_ASSIGN,\n /** ( */\n LEFT_PAREN,\n /** ) */\n RIGHT_PAREN,\n /** [ */\n LEFT_BRACKET,\n /** ] */\n RIGHT_BRACKET,\n /** { */\n LEFT_BRACE,\n /** } */\n RIGHT_BRACE,\n /** . */\n DOT,\n /** , */\n COMMA,\n COLON,\n /** = */\n EQUAL,\n /** ; */\n SEMICOLON,\n /** ! */\n BANG,\n /** \\- */\n DASH,\n /** ~ */\n TILDE,\n PLUS,\n /** \\* */\n STAR,\n /** / */\n SLASH,\n /** % */\n PERCENT,\n /** < */\n LEFT_ANGLE,\n /** \\> */\n RIGHT_ANGLE,\n VERTICAL_BAR,\n /** ^ */\n CARET,\n /** & */\n AMPERSAND,\n /** ? */\n QUESTION,\n\n NOT_WORD,\n\n /** ε */\n EPSILON = 1998,\n EOF = 1999\n}\n\nexport const TypeAny = 3000;\n\nexport type GalaceanDataType =\n | EKeyword.VOID\n | EKeyword.FLOAT\n | EKeyword.BOOL\n | EKeyword.INT\n | EKeyword.UINT\n | EKeyword.VEC2\n | EKeyword.VEC3\n | EKeyword.VEC4\n | EKeyword.BVEC2\n | EKeyword.BVEC3\n | EKeyword.BVEC4\n | EKeyword.IVEC2\n | EKeyword.IVEC3\n | EKeyword.IVEC4\n | EKeyword.UVEC2\n | EKeyword.UVEC3\n | EKeyword.UVEC4\n | EKeyword.MAT2\n | EKeyword.MAT3\n | EKeyword.MAT4\n | EKeyword.MAT2X3\n | EKeyword.MAT2X4\n | EKeyword.MAT3X2\n | EKeyword.MAT3X4\n | EKeyword.MAT4X2\n | EKeyword.MAT4X3\n | EKeyword.SAMPLER2D\n | EKeyword.SAMPLER3D\n | EKeyword.SAMPLER_CUBE\n | EKeyword.SAMPLER2D_SHADOW\n | EKeyword.SAMPLER_CUBE_SHADOW\n | EKeyword.SAMPLER2D_ARRAY\n | EKeyword.SAMPLER2D_ARRAY_SHADOW\n | EKeyword.I_SAMPLER2D\n | EKeyword.I_SAMPLER3D\n | EKeyword.I_SAMPLER_CUBE\n | EKeyword.I_SAMPLER2D_ARRAY\n | EKeyword.U_SAMPLER2D\n | EKeyword.U_SAMPLER3D\n | EKeyword.U_SAMPLER_CUBE\n | EKeyword.U_SAMPLER2D_ARRAY\n | EKeyword.VEC4_ARRAY\n | typeof TypeAny\n | string;\n\nexport type TokenType = ETokenType | EKeyword;\n","// #if _VERBOSE\nimport { ShaderPosition } from \"./common/ShaderPosition\";\nimport { ShaderRange } from \"./common/ShaderRange\";\n\nexport class GSError extends Error {\n static wrappingLineCount = 2;\n\n constructor(\n name: GSErrorName,\n message: string,\n public readonly location: ShaderRange | ShaderPosition,\n public readonly source: string,\n public readonly file?: string\n ) {\n super(message);\n this.name = name;\n }\n\n override toString(): string {\n let start: ShaderPosition, end: ShaderPosition;\n const { message, location, source } = this;\n if (!source) {\n return message;\n }\n\n if (location instanceof ShaderPosition) {\n start = end = location;\n } else {\n start = location.start;\n end = location.end;\n }\n const lines = source.split(\"\\n\");\n\n let diagnosticMessage = `${this.name}: ${message}\\n\\n`;\n const lineSplit = \"|···\";\n\n const wrappingLineCount = GSError.wrappingLineCount;\n for (let i = start.line - wrappingLineCount, n = end.line + wrappingLineCount; i <= n; i++) {\n const line = lines[i];\n diagnosticMessage += lineSplit + `${line}\\n`;\n\n if (i < start.line || i > end.line) continue;\n\n let remarkStart = 0;\n let remarkEnd = line.length;\n let paddingLength = lineSplit.length;\n if (i === start.line) {\n remarkStart = start.column;\n paddingLength += start.column;\n }\n if (i === end.line) {\n remarkEnd = end.column;\n }\n const remarkLength = Math.max(remarkEnd - remarkStart, 1);\n\n diagnosticMessage += \" \".repeat(paddingLength) + \"^\".repeat(remarkLength) + \"\\n\";\n }\n\n return diagnosticMessage;\n }\n}\n\n// #endif\nexport enum GSErrorName {\n PreprocessorError = \"PreprocessorError\",\n CompilationError = \"CompilationError\",\n ScannerError = \"ScannerError\"\n}\n","import { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\n\nexport type StateActionTable = Map<number /** state ID */, ActionTable>;\nexport type ActionTable = Map<Terminal, ActionInfo>;\nexport type StateGotoTable = Map<number /** state ID */, GotoTable>;\nexport type GotoTable = Map<NoneTerminal, number /** state ID */>;\n\nexport enum EAction {\n Shift = 0,\n Reduce,\n Accept\n}\n\nexport interface ActionInfo {\n action: EAction;\n target?: number;\n}\n","import { IBaseSymbol } from \"../../common/BaseSymbolTable\";\nimport { GalaceanDataType } from \"../../common/types\";\nimport { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\n\nexport enum ESymbolType {\n VAR,\n FN,\n STRUCT\n}\n\nexport type SymbolAstNode =\n | ASTNode.Initializer\n | ASTNode.StructSpecifier\n | ASTNode.FunctionDefinition\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\nexport class SymbolInfo implements IBaseSymbol {\n constructor(\n public readonly ident: string,\n public readonly symbolType: ESymbolType,\n public readonly astNode?: SymbolAstNode,\n public readonly dataType?: SymbolDataType,\n public readonly signature?: GalaceanDataType[]\n ) {}\n}\n","import { TokenType } from \"../common\";\n\nexport type Terminal = TokenType;\n\nexport enum NoneTerminal {\n START = 2000,\n // galacean\n gs_shader_program,\n\n // glsl\n global_declaration,\n variable_declaration,\n variable_declaration_list,\n variable_declaration_statement,\n array_specifier_list,\n array_specifier,\n ext_builtin_type_specifier_nonarray,\n precision_specifier,\n variable_identifier,\n variable_identifier_node,\n primary_expression,\n postfix_expression,\n integer_expression,\n function_call,\n function_call_generic,\n function_call_header_no_parameters,\n function_call_header_with_parameters,\n function_call_parameter_list,\n function_call_header,\n function_identifier,\n constructor_identifier,\n unary_expression,\n unary_operator,\n multiplicative_expression,\n additive_expression,\n shift_expression,\n relational_expression,\n equality_expression,\n and_expression,\n inclusive_or_expression,\n exclusive_or_expression,\n logical_and_expression,\n logical_xor_expression,\n logical_or_expression,\n conditional_expression,\n assignment_expression,\n assignment_operator,\n expression,\n integer_constant_expression,\n integer_constant_expression_operator,\n declaration,\n function_prototype,\n function_declarator,\n function_header_with_parameters,\n function_header,\n function_parameter_list,\n parameter_declarator,\n parameter_declaration,\n parameter_qualifier,\n parameter_type_specifier,\n init_declarator_list,\n single_declaration,\n fully_specified_type,\n type_qualifier,\n single_type_qualifier,\n storage_qualifier,\n precision_qualifier,\n interpolation_qualifier,\n invariant_qualifier,\n type_specifier,\n type_specifier_nonarray,\n type_specifier_no_prec,\n basic_type,\n struct_specifier,\n struct_declaration_list,\n struct_declaration,\n layout_qualifier,\n struct_declarator_list,\n struct_declarator,\n identifier_list,\n decl_identifier,\n initializer,\n initializer_list,\n declaration_statement,\n simple_statement,\n compound_statement_no_scope,\n statement_with_scope,\n compound_statement,\n statement,\n statement_list,\n iteration_statement_no_new_scope,\n expression_statement,\n selection_statement,\n selection_rest_statement,\n condition,\n conditionopt,\n iteration_statement,\n for_init_statement,\n for_rest_statement,\n jump_statement,\n external_declaration,\n function_definition,\n field_selection,\n bool_constant,\n function_identifier_node,\n typename_identifier_node,\n scope_brace,\n scope_end_brace,\n\n _ignore\n}\n\nexport type GrammarSymbol = Terminal | NoneTerminal;\n\nexport type Derivation = GrammarSymbol[];\n","// #if _VERBOSE\nimport { BuiltinFunction, BuiltinVariable, NonGenericGalaceanType } from \"./builtin\";\n// #endif\nimport { ClearableObjectPool, IPoolElement } from \"@galacean/engine\";\nimport { CodeGenVisitor } from \"../codeGen\";\nimport { EKeyword, ETokenType, GalaceanDataType, ShaderRange, TokenType, TypeAny } from \"../common\";\nimport { BaseToken, BaseToken as Token } from \"../common/BaseToken\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { NoneTerminal } from \"./GrammarSymbol\";\nimport SemanticAnalyzer from \"./SemanticAnalyzer\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, VarSymbol } from \"./symbolTable\";\nimport { IParamInfo, NodeChild, StructProp, SymbolType } from \"./types\";\n\nfunction ASTNodeDecorator(nonTerminal: NoneTerminal) {\n return function <T extends { new (): TreeNode }>(ASTNode: T) {\n ASTNode.prototype.nt = nonTerminal;\n (<any>ASTNode).pool = ShaderLabUtils.createObjectPool(ASTNode);\n };\n}\n\nexport abstract class TreeNode implements IPoolElement {\n static pool: ClearableObjectPool<TreeNode & { set: (loc: ShaderRange, children: NodeChild[]) => void }>;\n\n /** The non-terminal in grammar. */\n nt: NoneTerminal;\n private _children: NodeChild[];\n private _location: ShaderRange;\n\n get children() {\n return this._children;\n }\n\n get location() {\n return this._location;\n }\n\n set(loc: ShaderRange, children: NodeChild[]): void {\n this._location = loc;\n this._children = children;\n this.init();\n }\n\n init() {}\n\n dispose(): void {}\n\n // Visitor pattern interface for code generation\n codeGen(visitor: CodeGenVisitor) {\n return visitor.defaultCodeGen(this.children);\n }\n\n /**\n * Do semantic analyze right after the ast node is generated.\n */\n semanticAnalyze(sa: SemanticAnalyzer) {}\n}\n\nexport namespace ASTNode {\n export type ASTNodePool = ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >;\n\n export function _unwrapToken(node: NodeChild) {\n if (node instanceof Token) {\n return node;\n }\n throw \"not token\";\n }\n\n export function get(pool: ASTNodePool, sa: SemanticAnalyzer, loc: ShaderRange, children: NodeChild[]) {\n const node = pool.get();\n node.set(loc, children);\n node.semanticAnalyze(sa);\n sa.semanticStack.push(node);\n }\n\n @ASTNodeDecorator(NoneTerminal._ignore)\n export class TrivialNode extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.scope_brace)\n export class ScopeBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.newScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.scope_end_brace)\n export class ScopeEndBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.dropScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.jump_statement)\n export class JumpStatement extends TreeNode {\n isFragReturnStatement: boolean;\n\n override init(): void {\n this.isFragReturnStatement = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (ASTNode._unwrapToken(this.children![0]).type === EKeyword.RETURN) {\n sa.curFunctionInfo.returnStatement = this;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitJumpStatement(this);\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.conditionopt)\n export class ConditionOpt extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_rest_statement)\n export class ForRestStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.condition)\n export class Condition extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_init_statement)\n export class ForInitStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.iteration_statement)\n export class IterationStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.selection_statement)\n export class SelectionStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.expression_statement)\n export class ExpressionStatement extends TreeNode {}\n // #endif\n\n export abstract class ExpressionAstNode extends TreeNode {\n protected _type?: GalaceanDataType;\n set type(t: GalaceanDataType | undefined) {\n this._type = t;\n }\n get type() {\n return this._type ?? TypeAny;\n }\n\n override init(): void {\n this._type = undefined;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.initializer_list)\n export class InitializerList extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const init = this.children[0] as Initializer | InitializerList;\n this.type = init.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.initializer)\n export class Initializer extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AssignmentExpression>this.children[0]).type;\n } else {\n this.type = (<InitializerList>this.children[1]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.single_declaration)\n export class SingleDeclaration extends TreeNode {\n typeSpecifier: TypeSpecifier;\n arraySpecifier?: ArraySpecifier;\n\n override init(): void {\n this.typeSpecifier = undefined;\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const childrenLen = children.length;\n const fullyType = children[0] as FullySpecifiedType;\n const typeSpecifier = fullyType.typeSpecifier;\n this.typeSpecifier = typeSpecifier;\n this.arraySpecifier = typeSpecifier.arraySpecifier;\n\n const id = children[1] as Token;\n\n let sm: VarSymbol;\n if (childrenLen === 2 || childrenLen === 4) {\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[3] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n } else {\n const arraySpecifier = children[2] as ArraySpecifier;\n // #if _VERBOSE\n if (arraySpecifier && this.arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n this.arraySpecifier = arraySpecifier;\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[4] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n }\n sa.symbolTableStack.insert(sm);\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitSingleDeclaration(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.fully_specified_type)\n export class FullySpecifiedType extends TreeNode {\n typeSpecifier: TypeSpecifier;\n type: GalaceanDataType;\n\n override semanticAnalyze(_: SemanticAnalyzer): void {\n const children = this.children;\n this.typeSpecifier = (children.length === 1 ? children[0] : children[1]) as TypeSpecifier;\n this.type = this.typeSpecifier.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_qualifier)\n export class TypeQualifier extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.single_type_qualifier)\n export class SingleTypeQualifier extends TreeNode {\n qualifier: EKeyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0];\n if (child instanceof Token) {\n this.qualifier = child.type as EKeyword;\n this.lexeme = child.lexeme;\n } else {\n this.qualifier = (<BasicTypeQualifier>child).qualifier;\n this.lexeme = (<BasicTypeQualifier>child).lexeme;\n }\n }\n }\n\n abstract class BasicTypeQualifier extends TreeNode {\n qualifier: EKeyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const token = this.children[0] as Token;\n this.qualifier = token.type as EKeyword;\n this.lexeme = token.lexeme;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.storage_qualifier)\n export class StorageQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.precision_qualifier)\n export class PrecisionQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.interpolation_qualifier)\n export class InterpolationQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.invariant_qualifier)\n export class InvariantQualifier extends BasicTypeQualifier {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.type_specifier)\n export class TypeSpecifier extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n arraySize?: number;\n isCustom: boolean;\n\n override init(): void {\n this.arraySize = undefined;\n }\n get arraySpecifier(): ArraySpecifier {\n return this.children[1] as ArraySpecifier;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const firstChild = children[0] as TypeSpecifierNonArray;\n this.type = firstChild.type;\n this.lexeme = firstChild.lexeme;\n this.arraySize = (children?.[1] as ArraySpecifier)?.size;\n this.isCustom = typeof this.type === \"string\";\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.array_specifier)\n export class ArraySpecifier extends TreeNode {\n size: number | undefined;\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const integerConstantExpr = this.children[1] as IntegerConstantExpression;\n this.size = integerConstantExpr.value;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression_operator)\n export class IntegerConstantExpressionOperator extends TreeNode {\n compute: (a: number, b: number) => number;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const operator = this.children[0] as Token;\n this.lexeme = operator.lexeme;\n switch (operator.type) {\n case ETokenType.PLUS:\n this.compute = (a, b) => a + b;\n break;\n case ETokenType.DASH:\n this.compute = (a, b) => a - b;\n break;\n case ETokenType.STAR:\n this.compute = (a, b) => a * b;\n break;\n case ETokenType.SLASH:\n this.compute = (a, b) => a / b;\n break;\n case ETokenType.PERCENT:\n this.compute = (a, b) => a % b;\n break;\n default:\n sa.reportError(operator.location, `not implemented operator ${operator.lexeme}`);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression)\n export class IntegerConstantExpression extends TreeNode {\n value?: number;\n\n override init(): void {\n this.value = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const child = this.children[0];\n if (child instanceof Token) {\n this.value = Number(child.lexeme);\n }\n // #if _VERBOSE\n else {\n const id = child as VariableIdentifier;\n if (!id.symbolInfo) {\n sa.reportError(id.location, `Undeclared symbol: ${id.lexeme}`);\n }\n if (!ParserUtils.typeCompatible(EKeyword.INT, id.typeInfo)) {\n sa.reportError(id.location, \"Invalid integer.\");\n return;\n }\n }\n // #endif\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_specifier_nonarray)\n export class TypeSpecifierNonArray extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n\n override init(): void {\n const tt = this.children[0];\n if (tt instanceof Token) {\n this.type = tt.lexeme;\n this.lexeme = tt.lexeme;\n } else {\n this.type = (tt as ExtBuiltinTypeSpecifierNonArray).type as GalaceanDataType;\n this.lexeme = (tt as ExtBuiltinTypeSpecifierNonArray).lexeme;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.ext_builtin_type_specifier_nonarray)\n export class ExtBuiltinTypeSpecifierNonArray extends TreeNode {\n type: TokenType;\n lexeme: string;\n\n override init(): void {\n const token = this.children[0] as Token;\n this.type = token.type;\n this.lexeme = token.lexeme;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.init_declarator_list)\n export class InitDeclaratorList extends TreeNode {\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n let sm: VarSymbol;\n const children = this.children;\n const childrenLength = children.length;\n if (childrenLength === 1) {\n const { typeSpecifier, arraySpecifier } = children[0] as SingleDeclaration;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n } else {\n const initDeclList = children[0] as InitDeclaratorList;\n this.typeInfo = initDeclList.typeInfo;\n }\n\n if (childrenLength === 3 || childrenLength === 5) {\n const id = children[2] as Token;\n sm = new VarSymbol(id.lexeme, this.typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n } else if (childrenLength === 4 || childrenLength === 6) {\n const typeInfo = this.typeInfo;\n const arraySpecifier = this.children[3] as ArraySpecifier;\n // #if _VERBOSE\n if (typeInfo.arraySpecifier && arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n typeInfo.arraySpecifier = arraySpecifier;\n const id = children[2] as Token;\n sm = new VarSymbol(id.lexeme, typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.identifier_list)\n export class IdentifierList extends TreeNode {\n idList: Token[] = [];\n\n override init(): void {\n this.idList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, idList: curIdList } = this;\n if (children.length === 2) {\n curIdList.push(children[1] as Token);\n } else {\n const list = children[0] as IdentifierList;\n const id = children[2] as Token;\n const listIdLength = list.idList.length;\n curIdList.length = listIdLength + 1;\n\n for (let i = 0; i < listIdLength; i++) {\n curIdList[i] = list.idList[i];\n }\n curIdList[listIdLength] = id;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.declaration)\n export class Declaration extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitDeclaration(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_prototype)\n export class FunctionProtoType extends TreeNode {\n ident: Token;\n returnType: FullySpecifiedType;\n parameterList: IParamInfo[];\n paramSig: GalaceanDataType[];\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const declarator = this.children[0] as FunctionDeclarator;\n this.ident = declarator.ident;\n this.returnType = declarator.returnType;\n this.parameterList = declarator.parameterInfoList;\n this.paramSig = declarator.paramSig;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionProtoType(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_declarator)\n export class FunctionDeclarator extends TreeNode {\n ident: Token;\n returnType: FullySpecifiedType;\n parameterInfoList: IParamInfo[] | undefined;\n paramSig: GalaceanDataType[] | undefined;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.curFunctionInfo.returnStatement = null;\n sa.curFunctionInfo.header = this;\n\n const children = this.children;\n const header = children[0] as FunctionHeader;\n const parameterList = children[1] as FunctionParameterList | undefined;\n this.ident = header.ident;\n this.returnType = header.returnType;\n this.parameterInfoList = parameterList?.parameterInfoList;\n this.paramSig = parameterList?.paramSig;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_header)\n export class FunctionHeader extends TreeNode {\n ident: Token;\n returnType: FullySpecifiedType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.newScope();\n const children = this.children;\n this.ident = children[1] as Token;\n this.returnType = children[0] as FullySpecifiedType;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionHeader(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_parameter_list)\n export class FunctionParameterList extends TreeNode {\n parameterInfoList: IParamInfo[] = [];\n paramSig: GalaceanDataType[] = [];\n\n override init(): void {\n this.parameterInfoList.length = 0;\n this.paramSig.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const childrenLength = children.length;\n const { parameterInfoList, paramSig } = this;\n if (childrenLength === 1) {\n const decl = children[0] as ParameterDeclaration;\n parameterInfoList.push({ ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl });\n paramSig.push(decl.typeInfo.type);\n } else {\n const list = children[0] as FunctionParameterList;\n const decl = children[2] as ParameterDeclaration;\n const listParamLength = list.parameterInfoList.length;\n parameterInfoList.length = listParamLength + 1;\n paramSig.length = listParamLength + 1;\n\n for (let i = 0; i < listParamLength; i++) {\n parameterInfoList[i] = list.parameterInfoList[i];\n paramSig[i] = list.paramSig[i];\n }\n parameterInfoList[listParamLength] = { ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl };\n paramSig[listParamLength] = decl.typeInfo.type;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionParameterList(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.parameter_declaration)\n export class ParameterDeclaration extends TreeNode {\n typeQualifier: TypeQualifier | undefined;\n typeInfo: SymbolType;\n ident: Token;\n\n override init(): void {\n this.typeQualifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const childrenLength = children.length;\n let parameterDeclarator: ParameterDeclarator;\n if (childrenLength === 1) {\n parameterDeclarator = children[0] as ParameterDeclarator;\n } else {\n parameterDeclarator = children[1] as ParameterDeclarator;\n }\n if (childrenLength === 2) {\n this.typeQualifier = children[0] as TypeQualifier;\n }\n this.typeInfo = parameterDeclarator.typeInfo;\n this.ident = parameterDeclarator.ident;\n\n const varSymbol = new VarSymbol(parameterDeclarator.ident.lexeme, parameterDeclarator.typeInfo, false, this);\n sa.symbolTableStack.insert(varSymbol);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.parameter_declarator)\n export class ParameterDeclarator extends TreeNode {\n ident: Token;\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[1] as Token;\n const typeSpecifier = children[0] as TypeSpecifier;\n const arraySpecifier = children[2] as ArraySpecifier;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.simple_statement)\n export class SimpleStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.compound_statement)\n export class CompoundStatement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.compound_statement_no_scope)\n export class CompoundStatementNoScope extends TreeNode {}\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.statement)\n export class Statement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.statement_list)\n export class StatementList extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitStatementList(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_definition)\n export class FunctionDefinition extends TreeNode {\n returnStatement?: ASTNode.JumpStatement;\n protoType: FunctionProtoType;\n statements: CompoundStatementNoScope;\n\n override init(): void {\n this.returnStatement = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.protoType = children[0] as FunctionProtoType;\n this.statements = children[1] as CompoundStatementNoScope;\n\n sa.dropScope();\n const sm = new FnSymbol(this.protoType.ident.lexeme, this);\n sa.symbolTableStack.insert(sm);\n\n const { curFunctionInfo } = sa;\n const { header, returnStatement } = curFunctionInfo;\n if (header.returnType.type === EKeyword.VOID) {\n if (returnStatement) {\n sa.reportError(header.returnType.location, \"Return in void function.\");\n }\n } else {\n if (!returnStatement) {\n sa.reportError(header.returnType.location, `No return statement found.`);\n } else {\n this.returnStatement = returnStatement;\n }\n }\n curFunctionInfo.header = undefined;\n curFunctionInfo.returnStatement = undefined;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionDefinition(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call)\n export class FunctionCall extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.type = (this.children[0] as FunctionCallGeneric).type;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionCall(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_generic)\n export class FunctionCallGeneric extends ExpressionAstNode {\n fnSymbol: FnSymbol | StructSymbol | undefined;\n\n override init(): void {\n super.init();\n this.fnSymbol = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const functionIdentifier = this.children[0] as FunctionIdentifier;\n if (functionIdentifier.isBuiltin) {\n this.type = functionIdentifier.ident;\n } else {\n const fnIdent = <string>functionIdentifier.ident;\n\n let paramSig: NonGenericGalaceanType[] | undefined;\n if (this.children.length === 4) {\n const paramList = this.children[2];\n if (paramList instanceof FunctionCallParameterList) {\n paramSig = paramList.paramSig as any;\n }\n }\n // #if _VERBOSE\n const builtinFn = BuiltinFunction.getFn(fnIdent, paramSig);\n if (builtinFn) {\n this.type = builtinFn.realReturnType;\n return;\n }\n // #endif\n\n const fnSymbol = sa.lookupSymbolBy(fnIdent, ESymbolType.FN, paramSig);\n if (!fnSymbol) {\n // #if _VERBOSE\n sa.reportError(this.location, `No overload function type found: ${functionIdentifier.ident}`);\n // #endif\n return;\n }\n this.type = fnSymbol?.dataType?.type;\n this.fnSymbol = fnSymbol as FnSymbol;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_parameter_list)\n export class FunctionCallParameterList extends TreeNode {\n paramSig: GalaceanDataType[] = [];\n paramNodes: AssignmentExpression[] = [];\n\n override init(): void {\n this.paramSig.length = 0;\n this.paramNodes.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, paramSig, paramNodes } = this;\n if (children.length === 1) {\n const expr = children[0] as AssignmentExpression;\n if (expr.type == undefined) {\n paramSig.push(TypeAny);\n } else {\n paramSig.push(expr.type);\n }\n\n this.paramNodes.push(expr);\n } else {\n const list = children[0] as FunctionCallParameterList;\n const decl = children[2] as AssignmentExpression;\n if (list.paramSig.length === 0 || decl.type == undefined) {\n this.paramSig.push(TypeAny);\n } else {\n const listParamLength = list.paramSig.length;\n paramSig.length = listParamLength + 1;\n paramNodes.length = listParamLength + 1;\n\n for (let i = 0; i < listParamLength; i++) {\n paramSig[i] = list.paramSig[i];\n paramNodes[i] = list.paramNodes[i];\n }\n paramSig[listParamLength] = decl.type;\n paramNodes[listParamLength] = decl;\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.precision_specifier)\n export class PrecisionSpecifier extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.shaderData.globalPrecisions.push(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_identifier)\n export class FunctionIdentifier extends TreeNode {\n ident: GalaceanDataType;\n lexeme: string;\n isBuiltin: boolean;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const typeSpecifier = this.children[0] as TypeSpecifier;\n this.ident = typeSpecifier.type;\n this.lexeme = typeSpecifier.lexeme;\n this.isBuiltin = typeof this.ident !== \"string\";\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitFunctionIdentifier(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.assignment_expression)\n export class AssignmentExpression extends ExpressionAstNode {\n // #if _VERBOSE\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as ConditionalExpression;\n this.type = expr.type ?? TypeAny;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type ?? TypeAny;\n }\n }\n // #endif\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.assignment_operator)\n export class AssignmentOperator extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.expression)\n export class Expression extends ExpressionAstNode {\n // #if _VERBOSE\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as AssignmentExpression;\n this.type = expr.type;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type;\n }\n }\n // #endif\n }\n\n @ASTNodeDecorator(NoneTerminal.primary_expression)\n export class PrimaryExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const id = this.children[0];\n if (id instanceof VariableIdentifier) {\n this.type = id.typeInfo ?? TypeAny;\n } else {\n switch ((<Token>id).type) {\n case ETokenType.INT_CONSTANT:\n this._type = EKeyword.INT;\n break;\n case ETokenType.FLOAT_CONSTANT:\n this.type = EKeyword.FLOAT;\n break;\n case EKeyword.TRUE:\n case EKeyword.FALSE:\n this.type = EKeyword.BOOL;\n break;\n }\n }\n } else {\n const expression = this.children[1] as Expression;\n this.type = expression.type;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.postfix_expression)\n export class PostfixExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n const child = this.children[0] as PrimaryExpression | FunctionCall;\n this.type = child.type;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitPostfixExpression(this);\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.unary_operator)\n export class UnaryOperator extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.unary_expression)\n export class UnaryExpression extends ExpressionAstNode {\n override init(): void {\n this.type = (this.children[0] as PostfixExpression).type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.multiplicative_expression)\n export class MultiplicativeExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as UnaryExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as MultiplicativeExpression;\n // const exp2 = this.children[2] as UnaryExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.additive_expression)\n export class AdditiveExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as MultiplicativeExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as AdditiveExpression;\n // const exp2 = this.children[2] as MultiplicativeExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.shift_expression)\n export class ShiftExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const expr = this.children[0] as ExpressionAstNode;\n this.type = expr.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.relational_expression)\n export class RelationalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ShiftExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.equality_expression)\n export class EqualityExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<RelationalExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.and_expression)\n export class AndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.exclusive_or_expression)\n export class ExclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.inclusive_or_expression)\n export class InclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ExclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_and_expression)\n export class LogicalAndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<InclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_xor_expression)\n export class LogicalXorExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalAndExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_or_expression)\n export class LogicalOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalXorExpression>this.children[0]).type;\n } else {\n this.type = EKeyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.conditional_expression)\n export class ConditionalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalOrExpression>this.children[0]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.struct_specifier)\n export class StructSpecifier extends TreeNode {\n ident?: Token;\n propList: StructProp[];\n\n override init(): void {\n this.ident = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n if (children.length === 6) {\n this.ident = children[1] as Token;\n sa.symbolTableStack.insert(new StructSymbol(this.ident.lexeme, this));\n\n this.propList = (children[3] as StructDeclarationList).propList;\n } else {\n this.propList = (children[2] as StructDeclarationList).propList;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration_list)\n export class StructDeclarationList extends TreeNode {\n propList: StructProp[] = [];\n\n override init(): void {\n this.propList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, propList } = this;\n\n if (children.length === 1) {\n const props = (children[0] as StructDeclaration).props;\n const propsLength = props.length;\n propList.length = propsLength;\n for (let i = 0; i < propsLength; i++) {\n propList[i] = props[i];\n }\n } else {\n const listProps = (children[0] as StructDeclarationList).propList;\n const declProps = (children[1] as StructDeclaration).props;\n const listPropLength = listProps.length;\n const declPropLength = declProps.length;\n propList.length = listPropLength + declPropLength;\n\n for (let i = 0; i < listPropLength; i++) {\n propList[i] = listProps[i];\n }\n for (let i = 0; i < declPropLength; i++) {\n propList[i + listPropLength] = declProps[i];\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration)\n export class StructDeclaration extends TreeNode {\n typeSpecifier: TypeSpecifier;\n declaratorList: StructDeclaratorList;\n props: StructProp[] = [];\n\n override init(): void {\n this.typeSpecifier = undefined;\n this.declaratorList = undefined;\n this.props.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, props } = this;\n if (children.length === 3) {\n this.typeSpecifier = children[0] as TypeSpecifier;\n this.declaratorList = children[1] as StructDeclaratorList;\n } else {\n this.typeSpecifier = children[1] as TypeSpecifier;\n this.declaratorList = children[2] as StructDeclaratorList;\n }\n\n const firstChild = children[0];\n const { type, lexeme } = this.typeSpecifier;\n if (firstChild instanceof LayoutQualifier) {\n const declarator = children[2] as StructDeclarator;\n const typeInfo = new SymbolType(type, lexeme);\n const prop = new StructProp(typeInfo, declarator.ident, firstChild.index);\n props.push(prop);\n } else {\n const declaratorList = this.declaratorList.declaratorList;\n const declaratorListLength = declaratorList.length;\n props.length = declaratorListLength;\n for (let i = 0; i < declaratorListLength; i++) {\n const declarator = declaratorList[i];\n const typeInfo = new SymbolType(type, lexeme, declarator.arraySpecifier);\n const prop = new StructProp(typeInfo, declarator.ident);\n props[i] = prop;\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.layout_qualifier)\n export class LayoutQualifier extends TreeNode {\n index: number;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.index = Number((<BaseToken>this.children[4]).lexeme);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator_list)\n export class StructDeclaratorList extends TreeNode {\n declaratorList: StructDeclarator[] = [];\n\n override init(): void {\n this.declaratorList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, declaratorList } = this;\n if (children.length === 1) {\n declaratorList.push(children[0] as StructDeclarator);\n } else {\n const list = children[0] as StructDeclaratorList;\n const declarator = children[1] as StructDeclarator;\n const listLength = list.declaratorList.length;\n declaratorList.length = listLength + 1;\n for (let i = 0; i < listLength; i++) {\n declaratorList[i] = list.declaratorList[i];\n }\n declaratorList[listLength] = declarator;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator)\n export class StructDeclarator extends TreeNode {\n ident: Token;\n arraySpecifier: ArraySpecifier | undefined;\n\n override init(): void {\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[0] as Token;\n this.arraySpecifier = children[1] as ArraySpecifier;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration)\n export class VariableDeclaration extends TreeNode {\n type: FullySpecifiedType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const type = children[0] as FullySpecifiedType;\n const ident = children[1] as Token;\n this.type = type;\n const sm = new VarSymbol(ident.lexeme, new SymbolType(type.type, type.typeSpecifier.lexeme), true, this);\n\n sa.symbolTableStack.insert(sm);\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitGlobalVariableDeclaration(this) + \";\";\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration_list)\n export class VariableDeclarationList extends TreeNode {\n type: FullySpecifiedType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children } = this;\n const length = children.length;\n const variableDeclaration = children[0] as VariableDeclaration;\n const type = variableDeclaration.type;\n this.type = type;\n\n if (length === 1) {\n return;\n }\n\n const ident = children[2] as Token;\n\n const newVariable = VariableDeclaration.pool.get();\n if (length === 3) {\n // variable_declaration_list ',' id\n newVariable.set(ident.location, [type, ident]);\n } else {\n // variable_declaration_list ',' id array_specifier\n newVariable.set(ident.location, [type, ident, children[3] as ArraySpecifier]);\n }\n newVariable.semanticAnalyze(sa);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_identifier)\n export class VariableIdentifier extends TreeNode {\n symbolInfo:\n | VarSymbol\n // #if _VERBOSE\n | BuiltinVariable\n // #endif\n | null;\n\n lexeme: string;\n typeInfo: GalaceanDataType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const token = this.children[0] as Token;\n this.lexeme = token.lexeme;\n\n // #if _VERBOSE\n const builtinVar = BuiltinVariable.getVar(token.lexeme);\n if (builtinVar) {\n this.symbolInfo = builtinVar;\n this.typeInfo = builtinVar.type;\n return;\n }\n // #endif\n\n this.symbolInfo = sa.lookupSymbolBy(token.lexeme, ESymbolType.VAR) as VarSymbol;\n // #if _VERBOSE\n if (!this.symbolInfo) {\n sa.reportError(this.location, `undeclared identifier: ${token.lexeme}`);\n }\n // #endif\n this.typeInfo = this.symbolInfo?.dataType?.type;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return visitor.visitVariableIdentifier(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.gs_shader_program)\n export class GLShaderProgram extends TreeNode {\n shaderData: ShaderData;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.shaderData = sa.shaderData;\n this.shaderData.symbolTable = sa.symbolTableStack._scope;\n }\n }\n}\n","export enum EPpToken {\n id,\n line_remain,\n chunk,\n int_constant,\n string_const,\n /** \\>> */\n right_op,\n /** << */\n left_op,\n left_paren,\n right_paren,\n /** \\>= */\n ge,\n /** <= */\n le,\n /** == */\n eq,\n /** != */\n neq,\n /** && */\n and,\n /** || */\n or,\n /** < */\n left_angle,\n /** \\> */\n right_angle,\n /** \\* */\n star,\n /** + */\n plus,\n /** \\- */\n dash,\n /** ! */\n bang,\n /** \\/ */\n slash,\n /** % */\n percent,\n\n EOF = 100\n}\n\nexport enum EPpKeyword {\n define = 101,\n undef,\n if,\n ifdef,\n ifndef,\n else,\n elif,\n endif,\n include,\n\n defined\n}\n\nexport const PpKeyword = new Map<string, EPpKeyword>([\n [\"#define\", EPpKeyword.define],\n [\"#undef\", EPpKeyword.undef],\n [\"#if\", EPpKeyword.if],\n [\"#ifdef\", EPpKeyword.ifdef],\n [\"#ifndef\", EPpKeyword.ifndef],\n [\"#else\", EPpKeyword.else],\n [\"#elif\", EPpKeyword.elif],\n [\"#endif\", EPpKeyword.endif],\n [\"#include\", EPpKeyword.include],\n [\"defined\", EPpKeyword.defined]\n]);\n\nexport type PpConstant = boolean | number;\n","export enum EShaderStage {\n VERTEX,\n FRAGMENT,\n ALL\n}\n","import { IPoolElement } from \"@galacean/engine\";\n\nexport class ShaderPosition implements IPoolElement {\n index: number;\n // #if _VERBOSE\n line: number;\n column: number;\n // #endif\n\n set(\n index: number,\n // #if _VERBOSE\n line: number,\n column: number\n // #endif\n ) {\n this.index = index;\n // #if _VERBOSE\n this.line = line;\n this.column = column;\n // #endif\n }\n\n dispose(): void {\n this.index = 0;\n // #if _VERBOSE\n this.line = 0;\n this.column = 0;\n // #endif\n }\n}\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","import { ClearableObjectPool, IPoolElement, Logger } from \"@galacean/engine\";\nimport { GSErrorName } from \"./GSError\";\nimport { ShaderRange } from \"./common/ShaderRange\";\nimport { ShaderPosition } from \"./common/ShaderPosition\";\n// #if _VERBOSE\nimport { GSError } from \"./GSError\";\n// #endif\n\nexport class ShaderLabUtils {\n private static _shaderLabObjectPoolSet: ClearableObjectPool<IPoolElement>[] = [];\n\n static createObjectPool<T extends IPoolElement>(type: new () => T) {\n const pool = new ClearableObjectPool<T>(type);\n ShaderLabUtils._shaderLabObjectPoolSet.push(pool);\n return pool;\n }\n\n static clearAllShaderLabObjectPool() {\n for (let i = 0, n = ShaderLabUtils._shaderLabObjectPoolSet.length; i < n; i++) {\n ShaderLabUtils._shaderLabObjectPoolSet[i].clear();\n }\n }\n\n static createGSError(\n message: string,\n errorName: GSErrorName,\n source: string,\n location: ShaderRange | ShaderPosition,\n file?: string\n ): Error | undefined {\n // #if _VERBOSE\n return new GSError(errorName, message, location, source, file);\n // #else\n Logger.error(message);\n // #endif\n }\n}\n","import { ETokenType } from \"./types\";\nimport { ShaderRange, ShaderPosition } from \".\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { IPoolElement } from \"@galacean/engine\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\nexport class BaseToken<T extends number = number> implements IPoolElement {\n static pool = ShaderLabUtils.createObjectPool(BaseToken);\n\n type: T;\n lexeme: string;\n location: ShaderRange;\n\n set(type: T, lexeme: string, start?: ShaderPosition);\n set(type: T, lexeme: string, location?: ShaderRange);\n set(type: T, lexeme: string, arg?: ShaderRange | ShaderPosition) {\n this.type = type;\n this.lexeme = lexeme;\n if (arg) {\n if (arg instanceof ShaderRange) {\n this.location = arg as ShaderRange;\n } else {\n const end = ShaderLab.createPosition(\n arg.index + lexeme.length,\n // #if _VERBOSE\n arg.line,\n arg.column + lexeme.length\n // #endif\n );\n this.location = ShaderLab.createRange(arg, end);\n }\n }\n }\n\n dispose(): void {}\n}\n\nexport const EOF = new BaseToken();\nEOF.set(ETokenType.EOF, \"/EOF\");\n","export default class LexerUtils {\n static isNum(charCode: number) {\n return charCode >= 48 && charCode <= 57;\n }\n\n static isLetter(charCode: number) {\n return (\n charCode === 95 || // _\n (charCode >= 48 && charCode <= 57) || // 0 - 9\n (charCode >= 65 && charCode <= 90) || // A - Z\n (charCode >= 97 && charCode <= 122) // a - z\n );\n }\n\n static isAlpha(charCode: number) {\n return (\n charCode === 95 || // _\n (charCode >= 65 && charCode <= 90) || // A - Z\n (charCode >= 97 && charCode <= 122) // a - z\n );\n }\n\n static isPpCharacters(charCode: number) {\n return (\n charCode === 35 || // #\n charCode === 95 || // _\n (charCode >= 48 && charCode <= 57) || // 0 - 9\n (charCode >= 65 && charCode <= 90) || // A - Z\n (charCode >= 97 && charCode <= 122) // a - z\n );\n }\n\n static isSpace(charCode: number) {\n return (\n charCode === 9 || // Tab\n charCode === 10 || // Line break - /n\n charCode === 13 || // Carriage return -/r\n charCode === 32 // Space\n );\n }\n}\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","import { ETokenType, ShaderRange, ShaderPosition } from \".\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { BaseToken } from \"./BaseToken\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { Logger } from \"@galacean/engine\";\n\nexport type OnToken = (token: BaseToken, scanner: BaseScanner) => void;\n\n/**\n * @internal\n */\nexport default class BaseScanner {\n private static _spaceCharsWithBreak = [\" \", \"\\t\", \"\\n\", \"\\r\"];\n private static _spaceChars = [\" \", \"\\t\"];\n private static _checkIsIn(checked: string, chars: string[]): boolean {\n for (let i = 0; i < chars.length; i++) {\n if (checked === chars[i]) {\n return true;\n }\n continue;\n }\n return false;\n }\n\n protected _currentIndex = 0;\n protected _source: string;\n\n // #if _VERBOSE\n protected _column = 0;\n protected _line = 0;\n // #endif\n\n get current(): number {\n return this._currentIndex;\n }\n\n get source(): string {\n return this._source;\n }\n\n getCurPosition(): ShaderPosition {\n return ShaderLab.createPosition(\n this._currentIndex,\n // #if _VERBOSE\n this._line,\n this._column\n // #endif\n );\n }\n\n // #if _VERBOSE\n get line() {\n return this._line;\n }\n\n get column() {\n return this._column;\n }\n // #endif\n\n protected readonly _keywordsMap: Map<string, number>;\n\n constructor(source: string, kws: Map<string, number> = new Map()) {\n this._source = source;\n this._keywordsMap = kws;\n }\n\n isEnd(): boolean {\n return this._currentIndex >= this._source.length;\n }\n\n getCurChar(): string {\n return this._source[this._currentIndex];\n }\n\n getCurCharCode(): number {\n return this._source.charCodeAt(this._currentIndex);\n }\n\n advance(count = 1): void {\n // #if _VERBOSE\n for (let i = 0; i < count; i++) {\n this._advance();\n }\n // #else\n this._currentIndex += count;\n // #endif\n }\n\n _advance(): void {\n // #if _VERBOSE\n if (this.getCurChar() === \"\\n\") {\n this._line += 1;\n this._column = 0;\n } else {\n this._column += 1;\n }\n // #endif\n\n this._currentIndex++;\n }\n\n skipSpace(includeLineBreak: boolean): void {\n const spaceChars = includeLineBreak ? BaseScanner._spaceCharsWithBreak : BaseScanner._spaceChars;\n let curChar = this.getCurChar();\n\n while (BaseScanner._checkIsIn(curChar, spaceChars)) {\n this._advance();\n curChar = this.getCurChar();\n }\n }\n\n skipCommentsAndSpace(): ShaderRange | undefined {\n this.skipSpace(true);\n if (this.peek(2) === \"//\") {\n const start = this.getCurPosition();\n this.advance(2);\n // single line comments\n let curChar = this.getCurChar();\n while (curChar !== \"\\n\" && curChar !== \"\\r\" && !this.isEnd()) {\n this._advance();\n curChar = this.getCurChar();\n }\n this.skipCommentsAndSpace();\n return ShaderLab.createRange(start, this.getCurPosition());\n } else if (this.peek(2) === \"/*\") {\n const start = this.getCurPosition();\n this.advance(2);\n // multi-line comments\n while (this.peek(2) !== \"*/\" && !this.isEnd()) this._advance();\n this.advance(2);\n this.skipCommentsAndSpace();\n return ShaderLab.createRange(start, this.getCurPosition());\n }\n }\n\n peek(to: number): string {\n const offset = this._currentIndex;\n return this._source.substring(offset, offset + to);\n }\n\n scanText(text: string) {\n this.skipCommentsAndSpace();\n const peek = this.peek(text.length);\n if (peek !== text) {\n this.throwError(this.getCurPosition(), `Expect text \"${text}\", but got \"${peek}\"`);\n }\n this.advance(text.length);\n }\n\n throwError(pos: ShaderPosition | ShaderRange, ...msgs: any[]) {\n const error = ShaderLabUtils.createGSError(msgs.join(\" \"), GSErrorName.ScannerError, this._source, pos);\n // #if _VERBOSE\n Logger.error(error!.toString());\n // #endif\n throw error;\n }\n\n scanPairedText(left: string, right: string, balanced = false, skipLeading = false) {\n if (!skipLeading) {\n this.scanText(left);\n }\n const start = this._currentIndex;\n let level = balanced ? 1 : 0;\n while (this.peek(right.length) !== right || level !== 0) {\n if (this.isEnd()) return;\n if (balanced) {\n if (this.peek(left.length) === left) {\n level += 1;\n this.advance(left.length);\n continue;\n } else if (this.peek(right.length) === right) {\n level -= 1;\n if (level === 0) break;\n this.advance(right.length);\n continue;\n }\n }\n this.advance(right.length);\n }\n this.advance(right.length);\n return this._source.substring(start, this._currentIndex - right.length);\n }\n\n scanToken(onToken?: OnToken, splitCharRegex = /\\w/) {\n this.skipCommentsAndSpace();\n const start = this.getCurPosition();\n if (this.isEnd()) return;\n while (splitCharRegex.test(this.getCurChar()) && !this.isEnd()) this._advance();\n const end = this.getCurPosition();\n\n if (start.index === end.index) {\n this._advance();\n const token = BaseToken.pool.get();\n token.set(ETokenType.NOT_WORD, this._source[start.index], start);\n onToken?.(token, this);\n return token;\n }\n\n const lexeme = this._source.substring(start.index, end.index);\n const tokenType = this._keywordsMap.get(lexeme) ?? ETokenType.ID;\n const range = ShaderLab.createRange(start, end);\n const token = BaseToken.pool.get();\n token.set(tokenType, lexeme, range);\n onToken?.(token, this);\n return token;\n }\n}\n","import { ETokenType, KeywordTable } from \"../common\";\nimport { EOF, BaseToken } from \"../common/BaseToken\";\nimport LexerUtils from \"./Utils\";\nimport BaseScanner from \"../common/BaseScanner\";\nimport { ShaderLab } from \"../ShaderLab\";\n\n/**\n * The Lexer of ShaderLab Compiler\n */\nexport class Lexer extends BaseScanner {\n reset(source: string) {\n this._source = source;\n this._currentIndex = 0;\n // #if _VERBOSE\n this._line = this._column = 0;\n // #endif\n }\n\n *tokenize() {\n while (!this.isEnd()) {\n yield this.scanToken();\n }\n return EOF;\n }\n\n override skipSpace() {\n while (LexerUtils.isSpace(this.getCurCharCode())) {\n this._advance();\n }\n }\n\n override scanToken(): BaseToken {\n this.skipCommentsAndSpace();\n if (this.isEnd()) {\n return EOF;\n }\n\n if (LexerUtils.isAlpha(this.getCurCharCode())) {\n return this._scanWord();\n }\n if (LexerUtils.isNum(this.getCurCharCode())) {\n return this._scanNum();\n }\n\n const start = this._getPosition();\n const token = BaseToken.pool.get();\n let curChar: string;\n\n switch (this.getCurChar()) {\n case \"<\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"<\") {\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.LEFT_ASSIGN, \"<<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_OP, \"<<\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.LE_OP, \"<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_ANGLE, \"<\", start);\n break;\n\n case \">\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \">\") {\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.RIGHT_ASSIGN, \">>=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_OP, \">>\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.GE_OP, \">=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_ANGLE, \">\", start);\n break;\n\n case \"+\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"+\") {\n this._advance();\n token.set(ETokenType.INC_OP, \"++\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.ADD_ASSIGN, \"+=\", start);\n break;\n }\n token.set(ETokenType.PLUS, \"+\", start);\n break;\n\n case \"-\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"-\") {\n this._advance();\n token.set(ETokenType.DEC_OP, \"--\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.SUB_ASSIGN, \"-=\", start);\n break;\n }\n token.set(ETokenType.DASH, \"-\", start);\n break;\n\n case \"=\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.EQ_OP, \"==\", start);\n break;\n }\n token.set(ETokenType.EQUAL, \"=\", start);\n break;\n\n case \"!\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.NE_OP, \"!=\", start);\n break;\n }\n token.set(ETokenType.BANG, \"!\", start);\n break;\n\n case \"&\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"&\") {\n this._advance();\n token.set(ETokenType.AND_OP, \"&&\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.ADD_ASSIGN, \"&=\", start);\n break;\n }\n token.set(ETokenType.AMPERSAND, \"&\", start);\n break;\n\n case \"|\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"|\") {\n this._advance();\n token.set(ETokenType.OR_OP, \"||\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.OR_ASSIGN, \"|=\", start);\n break;\n }\n token.set(ETokenType.VERTICAL_BAR, \"|\", start);\n break;\n\n case \"^\":\n this._advance();\n curChar = this.getCurChar();\n if (curChar === \"^\") {\n this._advance();\n token.set(ETokenType.XOR_OP, \"^^\", start);\n break;\n } else if (curChar === \"=\") {\n this._advance();\n token.set(ETokenType.XOR_ASSIGN, \"^=\", start);\n break;\n }\n token.set(ETokenType.CARET, \"^\", start);\n break;\n\n case \"*\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n token.set(ETokenType.MUL_ASSIGN, \"*=\", start);\n break;\n }\n\n token.set(ETokenType.STAR, \"*\", start);\n break;\n\n case \"/\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n\n token.set(ETokenType.DIV_ASSIGN, \"/=\", start);\n break;\n }\n\n token.set(ETokenType.SLASH, \"/\", start);\n break;\n\n case \"%\":\n this._advance();\n if (this.getCurChar() === \"=\") {\n this._advance();\n\n token.set(ETokenType.MOD_ASSIGN, \"%=\", start);\n break;\n }\n\n token.set(ETokenType.PERCENT, \"%\", start);\n break;\n\n case \"(\":\n this._advance();\n\n token.set(ETokenType.LEFT_PAREN, \"(\", start);\n break;\n case \")\":\n this._advance();\n\n token.set(ETokenType.RIGHT_PAREN, \")\", start);\n break;\n case \"{\":\n this._advance();\n\n token.set(ETokenType.LEFT_BRACE, \"{\", start);\n break;\n case \"}\":\n this._advance();\n\n token.set(ETokenType.RIGHT_BRACE, \"}\", start);\n break;\n case \"[\":\n this._advance();\n\n token.set(ETokenType.LEFT_BRACKET, \"[\", start);\n break;\n case \"]\":\n this._advance();\n\n token.set(ETokenType.RIGHT_BRACKET, \"]\", start);\n break;\n case \".\":\n this._advance();\n if (LexerUtils.isNum(this.getCurCharCode())) {\n return this._scanNumAfterDot();\n }\n\n token.set(ETokenType.DOT, \".\", start);\n break;\n case \",\":\n this._advance();\n\n token.set(ETokenType.COMMA, \",\", start);\n break;\n case \":\":\n this._advance();\n\n token.set(ETokenType.COLON, \":\", start);\n return token;\n case \";\":\n this._advance();\n\n token.set(ETokenType.SEMICOLON, \";\", start);\n break;\n case \"~\":\n this._advance();\n\n token.set(ETokenType.TILDE, \"~\", start);\n break;\n case \"?\":\n this._advance();\n\n token.set(ETokenType.QUESTION, \"?\", start);\n break;\n case '\"':\n this._advance();\n return this._scanStringConst();\n\n default:\n this.throwError(this.getCurPosition(), `Unexpected character ${this.getCurChar()}`);\n }\n return token;\n }\n\n private _scanStringConst() {\n const start = this._getPosition();\n const buffer: string[] = [];\n while (this.getCurChar() !== '\"') {\n buffer.push(this.getCurChar());\n this._advance();\n }\n this._advance();\n const range = ShaderLab.createRange(start, this._getPosition());\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.STRING_CONST, buffer.join(\"\"), range);\n return token;\n }\n\n private _scanNumAfterDot() {\n const buffer = [\".\"];\n while (LexerUtils.isNum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this._getPosition(1));\n return token;\n }\n\n private _getPosition(offset /** offset from starting point */ = 0) {\n return ShaderLab.createPosition(\n this.current - offset,\n // #if _VERBOSE\n this._line,\n this._column - offset\n // #endif\n );\n }\n\n private _scanWord() {\n const buffer: string[] = [this.getCurChar()];\n const start = this._getPosition();\n this._advance();\n while (LexerUtils.isLetter(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n const word = buffer.join(\"\");\n const kt = KeywordTable.get(word);\n if (kt) {\n const token = BaseToken.pool.get();\n token.set(kt, word, start);\n return token;\n }\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.ID, word, start);\n return token;\n }\n\n private _scanNum() {\n const buffer: string[] = [];\n while (LexerUtils.isNum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n if (this.getCurChar() === \".\") {\n buffer.push(this.getCurChar());\n this._advance();\n while (LexerUtils.isNum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this._getPosition(buffer.length));\n return token;\n } else {\n if (this.getCurChar() === \"e\" || this.getCurChar() === \"E\") {\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this._getPosition(buffer.length));\n return token;\n } else {\n this._scanIntegerSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.INT_CONSTANT, buffer.join(\"\"), this._getPosition(buffer.length));\n return token;\n }\n }\n }\n\n private _scanFloatSuffix(buffer: string[]) {\n if (this.getCurChar() === \"e\" || this.getCurChar() === \"E\") {\n buffer.push(this.getCurChar());\n this._advance();\n if (this.getCurChar() === \"+\" || this.getCurChar() === \"-\") {\n buffer.push(this.getCurChar());\n this._advance();\n }\n if (!LexerUtils.isNum(this.getCurCharCode()))\n this.throwError(this.getCurPosition(), \"lexing error, invalid exponent suffix.\");\n while (LexerUtils.isNum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this._advance();\n }\n }\n if (this.getCurChar() === \"f\" || this.getCurChar() === \"F\") {\n buffer.push(this.getCurChar());\n this._advance();\n }\n }\n\n private _scanIntegerSuffix(buffer: string[]) {\n if (this.getCurChar() === \"u\" || this.getCurChar() === \"U\") {\n buffer.push(this.getCurChar());\n this._advance();\n }\n }\n}\n","import { ASTNode } from \"./AST\";\nimport { TargetSymbolTable } from \"../parser/symbolTable\";\n\nexport class ShaderData {\n symbolTable: TargetSymbolTable;\n\n vertexMain: ASTNode.FunctionDefinition;\n fragmentMain: ASTNode.FunctionDefinition;\n\n globalPrecisions: ASTNode.PrecisionSpecifier[] = [];\n}\n","import { GalaceanDataType } from \"../../common\";\nimport { ASTNode } from \"../AST\";\n\nexport class SymbolDataType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class FnSymbol extends SymbolInfo {\n declare astNode: ASTNode.FunctionDefinition;\n\n constructor(lexeme: string, astNode: ASTNode.FunctionDefinition) {\n const type = new SymbolDataType(\n astNode.protoType.returnType.type,\n astNode.protoType.returnType.typeSpecifier.lexeme\n );\n super(lexeme, ESymbolType.FN, astNode, type);\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class StructSymbol extends SymbolInfo {\n declare astNode: ASTNode.StructSpecifier;\n\n constructor(lexeme: string, astNode: ASTNode.StructSpecifier) {\n super(lexeme, ESymbolType.STRUCT, astNode);\n }\n}\n","import { Logger } from \"@galacean/engine\";\n\nexport interface IBaseSymbol {\n readonly ident: string;\n}\n\n/**\n * The base class of `SymbolTable`\n */\nexport abstract class BaseSymbolTable<T extends IBaseSymbol = IBaseSymbol> {\n protected _table: Map<string, T[]> = new Map();\n\n abstract insert(sm: T): void;\n}\n\nexport class SymbolTableStack<S extends IBaseSymbol, T extends BaseSymbolTable<S>> {\n stack: T[] = [];\n\n get _scope() {\n return this.stack[this.stack.length - 1];\n }\n\n newScope(scope: T) {\n this.stack.push(scope);\n }\n\n clear() {\n this.stack.length = 0;\n }\n\n dropScope() {\n this.stack.pop();\n }\n\n insert(sm: S) {\n this._scope.insert(sm);\n }\n}\n","import { Logger } from \"@galacean/engine\";\nimport { GalaceanDataType, TypeAny } from \"../../common\";\nimport { BaseSymbolTable } from \"../../common/BaseSymbolTable\";\nimport { ASTNode } from \"../AST\";\nimport { FnSymbol } from \"./FnSymbol\";\nimport { StructSymbol } from \"./StructSymbol\";\nimport { ESymbolType, SymbolAstNode, SymbolInfo } from \"./SymbolInfo\";\nimport { VarSymbol } from \"./VarSymbol\";\n\nexport class TargetSymbolTable extends BaseSymbolTable<SymbolInfo> {\n override insert(sm: SymbolInfo): void {\n const entry = this._table.get(sm.ident) ?? [];\n for (let i = 0; i < entry.length; i++) {\n if (this._compareWith(entry[i], sm.symbolType, sm.signature, sm.astNode)) {\n Logger.warn(\"replace symbol:\", sm.ident);\n entry[i] = sm;\n return;\n }\n }\n entry.push(sm);\n this._table.set(sm.ident, entry);\n }\n\n lookup<T extends ESymbolType>(\n ident: string,\n symbolType: T,\n signature?: GalaceanDataType[],\n astNode?: ASTNode.FunctionDefinition\n ): T extends ESymbolType.FN\n ? FnSymbol\n : T extends ESymbolType.STRUCT\n ? StructSymbol\n : T extends ESymbolType.VAR\n ? VarSymbol\n : SymbolInfo {\n const entry = this._table.get(ident);\n if (entry) {\n for (let length = entry.length, i = 0; i < length; i++) {\n const item = entry[i];\n if (this._compareWith(item, symbolType, signature, astNode)) return <any>item;\n }\n }\n }\n\n getAllFnSymbols(fnIdent: string): FnSymbol[] {\n const entries = this._table.get(fnIdent) ?? [];\n return entries.filter((item) => item.symbolType === ESymbolType.FN) as FnSymbol[];\n }\n\n private _compareWith(\n item: SymbolInfo,\n symbolType: ESymbolType,\n signature?: GalaceanDataType[],\n astNode?: SymbolAstNode\n ): boolean {\n if (item.symbolType !== symbolType) return false;\n if (item.symbolType === ESymbolType.FN) {\n if (!astNode && !signature) return true;\n\n const params = (<ASTNode.FunctionDefinition>item.astNode).protoType.paramSig;\n const comparedParams = signature ?? (<ASTNode.FunctionDefinition>astNode).protoType.paramSig;\n const length = params.length;\n if (length !== comparedParams.length) return false;\n for (let i = 0; i < length; i++) {\n const t1 = params[i],\n t2 = comparedParams[i];\n if (t1 === TypeAny || t2 === TypeAny) continue;\n if (t1 !== t2) return false;\n }\n return true;\n }\n return true;\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class VarSymbol extends SymbolInfo {\n declare astNode:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\n readonly isGlobalVariable: boolean;\n\n constructor(\n ident: string,\n dataType: SymbolDataType,\n isGlobalVariable: boolean,\n initAst:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration\n ) {\n super(ident, ESymbolType.VAR, initAst, dataType);\n this.isGlobalVariable = isGlobalVariable;\n }\n}\n","import { ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { ESymbolType, SymbolInfo, TargetSymbolTable } from \"../parser/symbolTable\";\nimport { NodeChild } from \"./types\";\nimport { SymbolTableStack } from \"../common/BaseSymbolTable\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { NonGenericGalaceanType } from \"./builtin\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #else\nimport { Logger } from \"@galacean/engine\";\n// #endif\n\nexport type TranslationRule<T = any> = (sa: SemanticAnalyzer, ...tokens: NodeChild[]) => T;\n\n/**\n * @internal\n * The semantic analyzer of `ShaderLab` compiler.\n * - Build symbol table\n * - Static analysis\n */\nexport default class SemanticAnalyzer {\n semanticStack: TreeNode[] = [];\n acceptRule?: TranslationRule = undefined;\n symbolTableStack: SymbolTableStack<SymbolInfo, TargetSymbolTable> = new SymbolTableStack();\n curFunctionInfo: {\n header?: ASTNode.FunctionDeclarator;\n returnStatement?: ASTNode.JumpStatement;\n } = {};\n private _shaderData = new ShaderData();\n private _translationRuleTable: Map<number /** production id */, TranslationRule> = new Map();\n\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n get shaderData() {\n return this._shaderData;\n }\n\n constructor() {\n this.newScope();\n }\n\n reset() {\n this.semanticStack.length = 0;\n this._shaderData = new ShaderData();\n this.symbolTableStack.clear();\n this.newScope();\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n }\n\n newScope() {\n const scope = new TargetSymbolTable();\n this.symbolTableStack.newScope(scope);\n }\n\n dropScope() {\n return this.symbolTableStack.dropScope();\n }\n\n addTranslationRule(pid: number, rule: TranslationRule) {\n this._translationRuleTable.set(pid, rule);\n }\n\n getTranslationRule(pid: number) {\n return this._translationRuleTable.get(pid);\n }\n\n lookupSymbolBy(\n ident: string,\n symbolType: ESymbolType,\n signature?: NonGenericGalaceanType[],\n astNode?: ASTNode.FunctionDefinition\n ): SymbolInfo | undefined {\n const stack = this.symbolTableStack.stack;\n for (let length = stack.length, i = length - 1; i >= 0; i--) {\n const symbolTable = stack[i];\n const ret = symbolTable.lookup(ident, symbolType, signature, astNode);\n if (ret) return ret;\n }\n }\n\n reportError(loc: ShaderRange, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderLab._processingPassText));\n // #else\n Logger.error(message);\n // #endif\n }\n}\n","import { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\n\nexport default class Production {\n private static _id = 0;\n static pool: Map<number, Production> = new Map();\n\n readonly goal: NoneTerminal;\n readonly derivation: GrammarSymbol[];\n readonly id: number;\n\n constructor(goal: NoneTerminal, derivation: GrammarSymbol[]) {\n this.goal = goal;\n this.derivation = derivation;\n this.id = Production._id++;\n Production.pool.set(this.id, this);\n }\n}\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, GrammarSymbol } from \"./GrammarSymbol\";\nimport Production from \"../lalr/Production\";\n\nexport class Grammar {\n readonly productions: Production[];\n\n readonly startSymbol: NoneTerminal;\n\n static create(start: NoneTerminal, productions: GrammarSymbol[][]) {\n const _ps = productions.map((gsl) => {\n return new Production(<NoneTerminal>gsl[0], gsl.slice(1));\n });\n return new Grammar(start, _ps);\n }\n\n constructor(start: NoneTerminal, productions: Production[]) {\n this.startSymbol = start;\n productions.unshift(new Production(NoneTerminal.START, [start]));\n this.productions = productions;\n }\n\n getProductionList(nonTerminal: NoneTerminal) {\n return this.productions.filter((item) => item.goal === nonTerminal);\n }\n\n isNullableNT(NT: NoneTerminal) {\n return this.productions.find((item) => item.goal === NT && item.derivation[0] === ETokenType.EPSILON);\n }\n\n getProductionByID(pid: number) {\n return Production.pool.get(pid);\n }\n}\n","import { NoneTerminal } from \"./GrammarSymbol\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { GalaceanDataType, ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"./AST\";\n\nexport type TraceStackItem = NoneTerminal | BaseToken;\n\nexport class SymbolType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n\nexport class StructProp implements IParamInfo {\n constructor(\n public typeInfo: SymbolType,\n public ident: BaseToken,\n public mrtIndex?: number\n ) {}\n}\n\nexport type NodeChild = TreeNode | BaseToken;\n\nexport type IParamInfo = { ident: BaseToken; typeInfo: SymbolType; astNode?: TreeNode };\n","import { EKeyword, ETokenType, ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport { ActionInfo, EAction } from \"./types\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ClearableObjectPool, IPoolElement } from \"@galacean/engine\";\nimport { NodeChild } from \"../parser/types\";\n\nexport default class GrammarUtils {\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? EKeyword[sm];\n }\n return NoneTerminal[sm];\n }\n\n static createProductionWithOptions(\n goal: NoneTerminal,\n options: GrammarSymbol[][],\n /** the ast node */\n astTypePool?: ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >\n ) {\n const ret: [GrammarSymbol[], TranslationRule | undefined][] = [];\n for (const opt of options) {\n ret.push([\n [goal, ...opt],\n function (sa, ...children) {\n if (!children[0]) return;\n const start = children[0].location.start;\n const end = children[children.length - 1].location.end;\n const location = ShaderLab.createRange(start, end);\n ASTNode.get(astTypePool ?? ASTNode.TrivialNode.pool, sa, location, children);\n }\n ]);\n }\n return ret;\n }\n\n static addMapSetItem<K, T>(map: Map<K, Set<T>>, k: K, v: T) {\n const set = map.get(k) ?? new Set();\n set.add(v);\n map.set(k, set);\n }\n\n static isSubSet<T>(sa: Set<T>, sb: Set<T>) {\n for (const item of sa) {\n if (!sb.has(item)) return false;\n }\n return true;\n }\n\n static isActionEqual(a: ActionInfo, b: ActionInfo) {\n return a.action === b.action && a.target === b.target;\n }\n\n // #if _VERBOSE\n static printAction(actionInfo: ActionInfo) {\n return `<Action: ${EAction[actionInfo.action]} -> ${\n actionInfo.action === EAction.Reduce ? Production.pool.get(actionInfo.target!) : `State ${actionInfo.target!}`\n }>`;\n }\n\n static printProduction(production: Production) {\n const deriv = production.derivation.map((gs) => GrammarUtils.toString(gs)).join(\"|\");\n return `${NoneTerminal[production.goal]} :=> ${deriv}`;\n }\n // #endif\n}\n","// Context Free Grammar of Galacean ShaderLab\n\nimport { Grammar } from \"../parser/Grammar\";\nimport { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\nimport GrammarUtils from \"./Utils\";\nimport { EKeyword, ETokenType } from \"../common\";\nimport SemanticAnalyzer, { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport { ASTNode } from \"../parser/AST\";\n\nconst productionAndRules: [GrammarSymbol[], TranslationRule | undefined][] = [\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.gs_shader_program,\n [[NoneTerminal.global_declaration], [NoneTerminal.gs_shader_program, NoneTerminal.global_declaration]],\n ASTNode.GLShaderProgram.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(NoneTerminal.global_declaration, [\n [NoneTerminal.precision_specifier],\n [NoneTerminal.variable_declaration_statement],\n [NoneTerminal.struct_specifier],\n [NoneTerminal.function_definition]\n ]),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.VariableDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration_list,\n [\n [NoneTerminal.variable_declaration],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.VariableDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_statement, [\n [NoneTerminal.variable_declaration_list, ETokenType.SEMICOLON]\n ]),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n [\n [EKeyword.VOID],\n [EKeyword.FLOAT],\n [EKeyword.BOOL],\n [EKeyword.INT],\n [EKeyword.UINT],\n [EKeyword.VEC2],\n [EKeyword.VEC3],\n [EKeyword.VEC4],\n [EKeyword.BVEC2],\n [EKeyword.BVEC3],\n [EKeyword.BVEC4],\n [EKeyword.IVEC2],\n [EKeyword.IVEC3],\n [EKeyword.IVEC4],\n [EKeyword.UVEC2],\n [EKeyword.UVEC3],\n [EKeyword.UVEC4],\n [EKeyword.MAT2],\n [EKeyword.MAT3],\n [EKeyword.MAT4],\n [EKeyword.MAT2X3],\n [EKeyword.MAT2X4],\n [EKeyword.MAT3X2],\n [EKeyword.MAT3X4],\n [EKeyword.MAT4X2],\n [EKeyword.MAT4X3],\n [EKeyword.SAMPLER2D],\n [EKeyword.SAMPLER3D],\n [EKeyword.SAMPLER_CUBE],\n [EKeyword.SAMPLER2D_SHADOW],\n [EKeyword.SAMPLER_CUBE_SHADOW],\n [EKeyword.SAMPLER2D_ARRAY],\n [EKeyword.SAMPLER2D_ARRAY_SHADOW],\n [EKeyword.I_SAMPLER2D],\n [EKeyword.I_SAMPLER3D],\n [EKeyword.I_SAMPLER_CUBE],\n [EKeyword.I_SAMPLER2D_ARRAY],\n [EKeyword.U_SAMPLER2D],\n [EKeyword.U_SAMPLER3D],\n [EKeyword.U_SAMPLER_CUBE],\n [EKeyword.U_SAMPLER2D_ARRAY]\n ],\n ASTNode.ExtBuiltinTypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier_nonarray,\n [[ETokenType.ID], [NoneTerminal.ext_builtin_type_specifier_nonarray]],\n ASTNode.TypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.fully_specified_type,\n [[NoneTerminal.type_specifier], [NoneTerminal.type_qualifier, NoneTerminal.type_specifier]],\n ASTNode.FullySpecifiedType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier,\n [\n [NoneTerminal.type_specifier_nonarray],\n [NoneTerminal.ext_builtin_type_specifier_nonarray, NoneTerminal.array_specifier]\n ],\n ASTNode.TypeSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_qualifier,\n [[NoneTerminal.single_type_qualifier], [NoneTerminal.type_qualifier, NoneTerminal.single_type_qualifier]],\n ASTNode.TypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_type_qualifier,\n [\n [NoneTerminal.storage_qualifier],\n [NoneTerminal.precision_qualifier],\n [NoneTerminal.interpolation_qualifier],\n [NoneTerminal.invariant_qualifier],\n [EKeyword.PRECISE]\n ],\n ASTNode.SingleTypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.storage_qualifier,\n [[EKeyword.CONST], [EKeyword.IN], [EKeyword.INOUT], [EKeyword.OUT], [EKeyword.CENTROID]],\n // #if _VERBOSE\n ASTNode.StorageQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.interpolation_qualifier,\n [[EKeyword.SMOOTH], [EKeyword.FLAT]],\n // #if _VERBOSE\n ASTNode.InterpolationQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.invariant_qualifier,\n [[EKeyword.INVARIANT]],\n // #if _VERBOSE\n ASTNode.InvariantQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_qualifier,\n [[EKeyword.HIGHP], [EKeyword.MEDIUMP], [EKeyword.LOWP]],\n // #if _VERBOSE\n ASTNode.PrecisionQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_specifier,\n [\n [\n EKeyword.STRUCT,\n ETokenType.ID,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ],\n [\n EKeyword.STRUCT,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.StructSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration_list,\n [[NoneTerminal.struct_declaration], [NoneTerminal.struct_declaration_list, NoneTerminal.struct_declaration]],\n ASTNode.StructDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration,\n [\n [NoneTerminal.type_specifier, NoneTerminal.struct_declarator_list, ETokenType.SEMICOLON],\n [\n NoneTerminal.type_qualifier,\n NoneTerminal.type_specifier,\n NoneTerminal.struct_declarator_list,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.layout_qualifier, NoneTerminal.type_specifier, NoneTerminal.struct_declarator, ETokenType.SEMICOLON]\n ],\n ASTNode.StructDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.layout_qualifier,\n [\n [\n EKeyword.LAYOUT,\n ETokenType.LEFT_PAREN,\n EKeyword.LOCATION,\n ETokenType.EQUAL,\n ETokenType.INT_CONSTANT,\n ETokenType.RIGHT_PAREN\n ]\n ],\n ASTNode.LayoutQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator_list,\n [\n [NoneTerminal.struct_declarator],\n [NoneTerminal.struct_declarator_list, ETokenType.COMMA, NoneTerminal.struct_declarator]\n ],\n ASTNode.StructDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator,\n [[ETokenType.ID], [ETokenType.ID, NoneTerminal.array_specifier]],\n ASTNode.StructDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.array_specifier,\n [\n [ETokenType.LEFT_BRACKET, ETokenType.RIGHT_BRACKET],\n [ETokenType.LEFT_BRACKET, NoneTerminal.integer_constant_expression, ETokenType.RIGHT_BRACKET]\n ],\n ASTNode.ArraySpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.STAR], [ETokenType.SLASH], [ETokenType.PERCENT]],\n ASTNode.IntegerConstantExpressionOperator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n ETokenType.INT_CONSTANT\n ],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n NoneTerminal.variable_identifier\n ]\n ],\n ASTNode.IntegerConstantExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditional_expression,\n [\n [NoneTerminal.logical_or_expression],\n [\n NoneTerminal.logical_or_expression,\n ETokenType.QUESTION,\n NoneTerminal.expression,\n ETokenType.COLON,\n NoneTerminal.assignment_expression\n ]\n ],\n // #if _VERBOSE\n ASTNode.ConditionalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_or_expression,\n [\n [NoneTerminal.logical_xor_expression],\n [NoneTerminal.logical_or_expression, ETokenType.OR_OP, NoneTerminal.logical_xor_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_xor_expression,\n [\n [NoneTerminal.logical_and_expression],\n [NoneTerminal.logical_xor_expression, ETokenType.XOR_OP, NoneTerminal.logical_and_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalXorExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_and_expression,\n [\n [NoneTerminal.inclusive_or_expression],\n [NoneTerminal.logical_and_expression, ETokenType.AND_OP, NoneTerminal.inclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalAndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.inclusive_or_expression,\n [\n [NoneTerminal.exclusive_or_expression],\n [NoneTerminal.inclusive_or_expression, ETokenType.VERTICAL_BAR, NoneTerminal.exclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.InclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.exclusive_or_expression,\n [\n [NoneTerminal.and_expression],\n [NoneTerminal.exclusive_or_expression, ETokenType.CARET, NoneTerminal.and_expression]\n ],\n // #if _VERBOSE\n ASTNode.ExclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.and_expression,\n [\n [NoneTerminal.equality_expression],\n [NoneTerminal.and_expression, ETokenType.AMPERSAND, NoneTerminal.equality_expression]\n ],\n // #if _VERBOSE\n ASTNode.AndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.equality_expression,\n [\n [NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.EQ_OP, NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.NE_OP, NoneTerminal.relational_expression]\n ],\n // #if _VERBOSE\n ASTNode.EqualityExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.relational_expression,\n [\n [NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LEFT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.RIGHT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LE_OP, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.GE_OP, NoneTerminal.shift_expression]\n ],\n // #if _VERBOSE\n ASTNode.RelationalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.shift_expression,\n [\n [NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.LEFT_OP, NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.RIGHT_OP, NoneTerminal.additive_expression]\n ],\n // #if _VERBOSE\n ASTNode.ShiftExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.additive_expression,\n [\n [NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.PLUS, NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.DASH, NoneTerminal.multiplicative_expression]\n ],\n // #if _VERBOSE\n ASTNode.AdditiveExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.multiplicative_expression,\n [\n [NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.STAR, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.SLASH, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.PERCENT, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.MultiplicativeExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_expression,\n [\n [NoneTerminal.postfix_expression],\n [ETokenType.INC_OP, NoneTerminal.unary_expression],\n [ETokenType.DEC_OP, NoneTerminal.unary_expression],\n [NoneTerminal.unary_operator, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.UnaryExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.BANG], [ETokenType.TILDE]],\n // #if _VERBOSE\n ASTNode.UnaryOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.postfix_expression,\n [\n [NoneTerminal.primary_expression],\n [NoneTerminal.postfix_expression, ETokenType.LEFT_BRACKET, NoneTerminal.expression, ETokenType.RIGHT_BRACKET],\n [NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.DOT, ETokenType.ID],\n [NoneTerminal.postfix_expression, ETokenType.DOT, NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.INC_OP],\n [NoneTerminal.postfix_expression, ETokenType.DEC_OP]\n ],\n ASTNode.PostfixExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.primary_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [ETokenType.FLOAT_CONSTANT],\n [EKeyword.TRUE],\n [EKeyword.FALSE],\n [ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.PrimaryExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.expression, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.Expression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_expression,\n [\n [NoneTerminal.conditional_expression],\n [NoneTerminal.unary_expression, NoneTerminal.assignment_operator, NoneTerminal.assignment_expression]\n ],\n ASTNode.AssignmentExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_operator,\n [\n [ETokenType.EQUAL],\n [ETokenType.MUL_ASSIGN],\n [ETokenType.DIV_ASSIGN],\n [ETokenType.MOD_ASSIGN],\n [ETokenType.ADD_ASSIGN],\n [ETokenType.SUB_ASSIGN],\n [ETokenType.LEFT_ASSIGN],\n [ETokenType.RIGHT_ASSIGN],\n [ETokenType.AND_ASSIGN],\n [ETokenType.XOR_ASSIGN],\n [ETokenType.OR_ASSIGN]\n ],\n // #if _VERBOSE\n ASTNode.AssignmentOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call,\n [[NoneTerminal.function_call_generic]],\n ASTNode.FunctionCall.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_generic,\n [\n [\n NoneTerminal.function_identifier,\n ETokenType.LEFT_PAREN,\n NoneTerminal.function_call_parameter_list,\n ETokenType.RIGHT_PAREN\n ],\n [NoneTerminal.function_identifier, ETokenType.LEFT_PAREN, ETokenType.RIGHT_PAREN],\n [NoneTerminal.function_identifier, EKeyword.VOID, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.FunctionCallGeneric.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_parameter_list,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.function_call_parameter_list, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.FunctionCallParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_identifier,\n [[NoneTerminal.type_specifier]],\n ASTNode.FunctionIdentifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_definition,\n [[NoneTerminal.function_prototype, NoneTerminal.compound_statement_no_scope]],\n ASTNode.FunctionDefinition.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_prototype,\n [[NoneTerminal.function_declarator, ETokenType.RIGHT_PAREN]],\n ASTNode.FunctionProtoType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_declarator,\n [[NoneTerminal.function_header], [NoneTerminal.function_header, NoneTerminal.function_parameter_list]],\n ASTNode.FunctionDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_header,\n [[NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.LEFT_PAREN]],\n ASTNode.FunctionHeader.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_parameter_list,\n [\n [NoneTerminal.parameter_declaration],\n [NoneTerminal.function_parameter_list, ETokenType.COMMA, NoneTerminal.parameter_declaration]\n ],\n ASTNode.FunctionParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declaration,\n [[NoneTerminal.type_qualifier, NoneTerminal.parameter_declarator], [NoneTerminal.parameter_declarator]],\n ASTNode.ParameterDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declarator,\n [\n [NoneTerminal.type_specifier, ETokenType.ID],\n [NoneTerminal.type_specifier, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.ParameterDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement_list,\n [[NoneTerminal.statement], [NoneTerminal.statement_list, NoneTerminal.statement]],\n ASTNode.StatementList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement,\n [[NoneTerminal.compound_statement], [NoneTerminal.simple_statement]],\n // #if _VERBOSE\n ASTNode.Statement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement_no_scope,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [ETokenType.LEFT_BRACE, NoneTerminal.statement_list, ETokenType.RIGHT_BRACE]\n ],\n ASTNode.CompoundStatementNoScope.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [NoneTerminal.scope_brace, NoneTerminal.statement_list, NoneTerminal.scope_end_brace]\n ],\n // #if _VERBOSE\n ASTNode.CompoundStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.simple_statement,\n [\n [NoneTerminal.declaration],\n [NoneTerminal.expression_statement],\n [NoneTerminal.selection_statement],\n [NoneTerminal.iteration_statement],\n [NoneTerminal.jump_statement]\n ],\n // #if _VERBOSE\n ASTNode.SimpleStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.declaration,\n [\n [NoneTerminal.function_prototype, ETokenType.SEMICOLON],\n [NoneTerminal.init_declarator_list, ETokenType.SEMICOLON],\n [\n EKeyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.type_qualifier, ETokenType.ID, ETokenType.SEMICOLON],\n [NoneTerminal.type_qualifier, ETokenType.ID, NoneTerminal.identifier_list, ETokenType.SEMICOLON]\n ],\n ASTNode.Declaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.identifier_list,\n [\n [ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.identifier_list, ETokenType.COMMA, ETokenType.ID]\n ],\n ASTNode.IdentifierList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.init_declarator_list,\n [\n [NoneTerminal.single_declaration],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.init_declarator_list,\n ETokenType.COMMA,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.InitDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.fully_specified_type,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.SingleDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer,\n [\n [NoneTerminal.assignment_expression],\n [ETokenType.LEFT_BRACE, NoneTerminal.initializer_list, ETokenType.RIGHT_BRACE]\n ],\n // #if _VERBOSE\n ASTNode.Initializer.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer_list,\n [[NoneTerminal.initializer], [NoneTerminal.initializer_list, ETokenType.COMMA, NoneTerminal.initializer]],\n // #if _VERBOSE\n ASTNode.InitializerList.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression_statement,\n [[ETokenType.SEMICOLON], [NoneTerminal.expression, ETokenType.SEMICOLON]],\n // #if _VERBOSE\n ASTNode.ExpressionStatement.pool\n // #endif\n ),\n\n // dangling else ambiguity\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.selection_statement,\n [\n [EKeyword.IF, ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n EKeyword.IF,\n ETokenType.LEFT_PAREN,\n NoneTerminal.expression,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement,\n EKeyword.ELSE,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.SelectionStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.iteration_statement,\n [\n [EKeyword.WHILE, ETokenType.LEFT_PAREN, NoneTerminal.condition, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n EKeyword.FOR,\n ETokenType.LEFT_PAREN,\n NoneTerminal.for_init_statement,\n NoneTerminal.for_rest_statement,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.IterationStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_specifier,\n [\n [\n EKeyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.PrecisionSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_init_statement,\n [[NoneTerminal.expression_statement], [NoneTerminal.declaration]],\n // #if _VERBOSE\n ASTNode.ForInitStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.condition,\n [\n [NoneTerminal.expression],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n // #if _VERBOSE\n ASTNode.Condition.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_rest_statement,\n [\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON],\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON, NoneTerminal.expression]\n ],\n // #if _VERBOSE\n ASTNode.ForRestStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditionopt,\n [[ETokenType.EPSILON], [NoneTerminal.condition]],\n // #if _VERBOSE\n ASTNode.ConditionOpt.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.jump_statement,\n [\n [EKeyword.CONTINUE, ETokenType.SEMICOLON],\n [EKeyword.BREAK, ETokenType.SEMICOLON],\n [EKeyword.RETURN, ETokenType.SEMICOLON],\n [EKeyword.RETURN, NoneTerminal.expression, ETokenType.SEMICOLON],\n [EKeyword.DISCARD, ETokenType.SEMICOLON]\n ],\n ASTNode.JumpStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_brace,\n [[ETokenType.LEFT_BRACE]],\n ASTNode.ScopeBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_end_brace,\n [[ETokenType.RIGHT_BRACE]],\n ASTNode.ScopeEndBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_identifier,\n [[ETokenType.ID]],\n ASTNode.VariableIdentifier.pool\n )\n];\n\nconst createGrammar = () =>\n Grammar.create(\n NoneTerminal.gs_shader_program,\n productionAndRules.map((item) => item[0])\n );\n\nconst addTranslationRule = (sa: SemanticAnalyzer) => {\n for (let i = 0; i < productionAndRules.length; i++) {\n const rule = productionAndRules[i][1];\n if (rule) {\n sa.addTranslationRule(i, rule);\n }\n }\n};\n\nexport { createGrammar, addTranslationRule };\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport GrammarUtils from \"./Utils\";\n\nexport default class StateItem {\n static _id = 0;\n\n readonly production: Production;\n readonly position: number;\n readonly lookaheadSet: Set<Terminal>;\n readonly id: number;\n\n _needReInfer = true;\n get needReInfer() {\n return this._needReInfer;\n }\n set needReInfer(v: boolean) {\n this._needReInfer = v;\n }\n\n get curSymbol() {\n return this.production.derivation[this.position];\n }\n get nextSymbol() {\n return this.production.derivation[this.position + 1];\n }\n\n constructor(production: Production, position: number, lookahead: Iterable<Terminal>) {\n this.production = production;\n this.position = position;\n this.lookaheadSet = new Set();\n for (const la of lookahead) {\n this.lookaheadSet.add(la);\n }\n this.id = StateItem._id++;\n }\n\n addLookahead(ts: Iterable<Terminal>) {\n for (const t of ts) {\n if (this.lookaheadSet.has(t)) continue;\n this.lookaheadSet.add(t);\n this.needReInfer = true;\n }\n }\n\n symbolByOffset(offset: number) {\n return this.production.derivation[this.position + offset];\n }\n\n canReduce() {\n if (this.position > this.production.derivation.length - 1) return true;\n else {\n for (let i = this.position; i < this.production.derivation.length; i++) {\n if (this.production.derivation[i] !== ETokenType.EPSILON) return false;\n }\n return true;\n }\n }\n\n advance() {\n // #if _VERBOSE\n if (this.canReduce()) throw `Error: advance reduce-able parsing state item`;\n // #endif\n return new StateItem(this.production, this.position + 1, this.lookaheadSet);\n }\n\n // #if _VERBOSE\n toString() {\n const coreItem = this.production.derivation.map((item) => GrammarUtils.toString(item));\n coreItem[this.position] = \".\" + (coreItem[this.position] ?? \"\");\n\n return `${NoneTerminal[this.production.goal]} :=> ${coreItem.join(\"|\")} ;${Array.from(this.lookaheadSet)\n .map((item) => GrammarUtils.toString(item))\n .join(\"/\")}`;\n }\n // #endif\n}\n","import { Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport StateItem from \"./StateItem\";\n\nexport default class State {\n static closureMap: Map<string /** state mapKey */, State> = new Map();\n static pool: Map<number, State> = new Map();\n static _id = 0;\n\n readonly id: number;\n readonly cores: Set<StateItem>;\n private _items: Set<StateItem>;\n get items() {\n return this._items;\n }\n\n closured = false;\n get needReInfer() {\n for (const core of this.cores) {\n if (core.needReInfer) return true;\n }\n return false;\n }\n\n private _stateItemPool: Map<string /** Map ID */, StateItem> = new Map();\n\n static create(cores: StateItem[]) {\n const cacheKey = this.getMapKey(cores);\n const state = this.closureMap.get(cacheKey);\n if (state) {\n for (const core of cores) {\n // merge lookahead\n state.createStateItem(core.production, core.position, core.lookaheadSet);\n }\n return state;\n }\n\n const newState = new State(cores);\n this.closureMap.set(cacheKey, newState);\n return newState;\n }\n\n // TODO: any optimization?\n static getMapKey(cores: StateItem[]) {\n return cores.map((item) => `${item.production.id},${item.position}`).join(\";\");\n }\n\n private constructor(cores: Iterable<StateItem>) {\n this.id = State._id++;\n this._items = new Set([...cores]);\n this.cores = new Set([...cores]);\n for (const it of cores) {\n const itemMapKey = this.getStateItemMapKey(it.production, it.position);\n this._stateItemPool.set(itemMapKey, it);\n }\n State.pool.set(this.id, this);\n }\n\n // TODO: any optimization?\n getStateItemMapKey(production: Production, position: number) {\n return `${production.id},${position}`;\n }\n\n createStateItem(production: Production, position: number, lookaheadSet: Iterable<Terminal> = new Set()) {\n const mapId = this.getStateItemMapKey(production, position);\n const item = this._stateItemPool.get(mapId);\n if (item) {\n for (const la of lookaheadSet) {\n if (item.lookaheadSet.has(la)) continue;\n item.lookaheadSet.add(la);\n item.needReInfer = true;\n }\n return item;\n }\n const newItem = new StateItem(production, position, lookaheadSet);\n this._stateItemPool.set(mapId, newItem);\n return newItem;\n }\n}\n","import { Grammar } from \"../parser/Grammar\";\nimport { NoneTerminal, GrammarSymbol, Terminal } from \"../parser/GrammarSymbol\";\nimport State from \"./State\";\nimport StateItem from \"./StateItem\";\nimport GrammarUtils from \"./Utils\";\nimport { EKeyword, ETokenType } from \"../common\";\nimport Utils from \"./Utils\";\nimport { ActionInfo, ActionTable, EAction, GotoTable, StateActionTable, StateGotoTable } from \"./types\";\n\n/**\n * The [LALR1](https://web.stanford.edu/class/archive/cs/cs143/cs143.1128/handouts/140%20LALR%20Parsing.pdf) Parser generator\n */\nexport class LALR1 {\n readonly firstSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n readonly followSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n\n readonly actionTable: StateActionTable = new Map();\n readonly gotoTable: StateGotoTable = new Map();\n private grammar: Grammar;\n\n /** For circle detect */\n private _firstSetNTStack: NoneTerminal[] = [];\n\n constructor(grammar: Grammar) {\n this.grammar = grammar;\n }\n\n generate() {\n this.computeFirstSet();\n this.buildStateTable();\n }\n\n private buildStateTable() {\n const startStateItemCore = [new StateItem(this.grammar.productions[0], 0, [ETokenType.EOF])];\n const startState = State.create(startStateItemCore);\n this._extendState(startState);\n }\n\n private _extendState(state: State) {\n if (!state.needReInfer) return;\n this._closure(state);\n const newStates = this._inferNextState(state);\n for (const ns of newStates) {\n this._extendState(ns);\n }\n }\n\n private _closure(state: State) {\n for (const core of state.cores) {\n if (!core.canReduce()) {\n this._extendStateItem(state, core);\n }\n }\n state.closured = true;\n return state;\n }\n\n private _extendStateItem(state: State, item: StateItem) {\n if (GrammarUtils.isTerminal(item.curSymbol)) return;\n\n const productionList = this.grammar.getProductionList(<NoneTerminal>item.curSymbol);\n\n if (item.nextSymbol) {\n let newLookaheadSet = new Set<Terminal>();\n let lastFirstSet: Set<Terminal> | undefined;\n let terminalExist = false;\n // when A :=> a.BC, a; ==》 B :=> .xy, First(Ca)\n // newLookAhead = First(Ca)\n for (let i = 1, nextSymbol = item.symbolByOffset(1); !!nextSymbol; nextSymbol = item.symbolByOffset(++i)) {\n if (GrammarUtils.isTerminal(nextSymbol)) {\n newLookaheadSet.add(<Terminal>nextSymbol);\n terminalExist = true;\n break;\n }\n lastFirstSet = this.firstSetMap.get(<NoneTerminal>nextSymbol)!;\n for (const t of lastFirstSet) {\n newLookaheadSet.add(t);\n }\n if (!lastFirstSet.has(ETokenType.EPSILON)) break;\n }\n if (!terminalExist && lastFirstSet?.has(ETokenType.EPSILON)) {\n for (const t of item.lookaheadSet) {\n newLookaheadSet.add(t);\n }\n }\n\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(newLookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(newLookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n } else {\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(item.lookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(item.lookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n }\n }\n\n private _inferNextState(state: State): Set<State> {\n const coreMap: Map<GrammarSymbol, Set<StateItem>> = new Map();\n const stateActionTable: ActionTable = this.actionTable.get(state.id) ?? new Map();\n const stateGotoTable: GotoTable = this.gotoTable.get(state.id) ?? new Map();\n\n this.actionTable.set(state.id, stateActionTable);\n this.gotoTable.set(state.id, stateGotoTable);\n\n for (const stateItem of state.items) {\n if (stateItem.canReduce()) {\n let action: ActionInfo;\n if (stateItem.production.goal !== NoneTerminal.START) {\n action = {\n action: EAction.Reduce,\n target: stateItem.production.id\n };\n } else {\n action = { action: EAction.Accept };\n }\n\n for (const t of stateItem.lookaheadSet) {\n this._addAction(stateActionTable, t, action);\n }\n } else {\n const nextItem = stateItem.advance();\n Utils.addMapSetItem(coreMap, stateItem.curSymbol, nextItem);\n }\n\n stateItem.needReInfer = false;\n }\n\n const newStates = new Set<State>();\n for (const [gs, cores] of coreMap.entries()) {\n const newState = State.create(Array.from(cores));\n if (GrammarUtils.isTerminal(gs)) {\n this._addAction(stateActionTable, <Terminal>gs, {\n action: EAction.Shift,\n target: newState.id\n });\n } else {\n stateGotoTable.set(<NoneTerminal>gs, newState.id);\n }\n\n newStates.add(newState);\n }\n\n return newStates;\n }\n\n /** Resolve shift-reduce/reduce-reduce conflict detect */\n private _addAction(table: ActionTable, terminal: Terminal, action: ActionInfo) {\n const exist = table.get(terminal);\n if (exist && !Utils.isActionEqual(exist, action)) {\n // Resolve dangling else ambiguity\n if (terminal === EKeyword.ELSE && exist.action === EAction.Shift && action.action === EAction.Reduce) {\n return;\n } else {\n // #if _VERBOSE\n console.warn(\n `conflict detect: <Terminal ${GrammarUtils.toString(terminal)}>`,\n Utils.printAction(exist),\n \" -> \",\n Utils.printAction(action)\n );\n // #endif\n }\n }\n table.set(terminal, action);\n }\n\n // https://people.cs.pitt.edu/~jmisurda/teaching/cs1622/handouts/cs1622-first_and_follow.pdf\n private computeFirstSet() {\n for (const production of this.grammar.productions.slice(1)) {\n this._computeFirstSetForNT(production.goal);\n }\n }\n\n private _computeFirstSetForNT(NT: NoneTerminal) {\n // circle detect\n const idx = this._firstSetNTStack.findIndex((item) => item === NT);\n if (idx !== -1) {\n const computingFS = this.firstSetMap.get(NT)!;\n const len = this._firstSetNTStack.length;\n for (let i = len - 1; i > idx; i--) {\n const curNT = this._firstSetNTStack[i];\n this.firstSetMap.set(curNT, computingFS);\n }\n return computingFS;\n }\n this._firstSetNTStack.push(NT);\n\n const productionList = this.grammar.getProductionList(NT);\n const firstSet = new Set<Terminal>();\n this.firstSetMap.set(NT, firstSet);\n if (this.grammar.isNullableNT(NT)) firstSet.add(ETokenType.EPSILON);\n\n for (const production of productionList) {\n let i = 0;\n for (; i < production.derivation.length; i++) {\n const gs = production.derivation[i];\n if (GrammarUtils.isTerminal(gs)) {\n firstSet.add(<Terminal>gs);\n break;\n }\n\n const succeedFirstSet = this._computeFirstSetForNT(<NoneTerminal>gs);\n\n for (const item of succeedFirstSet) {\n if (item !== ETokenType.EPSILON) firstSet.add(item);\n }\n if (!this.grammar.isNullableNT(<NoneTerminal>gs)) break;\n }\n if (i === production.derivation.length) firstSet.add(ETokenType.EPSILON);\n }\n\n this._firstSetNTStack.pop();\n return firstSet;\n }\n}\n","import { Grammar } from \"./Grammar\";\nimport { NoneTerminal, GrammarSymbol } from \"./GrammarSymbol\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { ETokenType } from \"../common\";\nimport { EAction, StateActionTable, StateGotoTable } from \"../lalr/types\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport SematicAnalyzer from \"./SemanticAnalyzer\";\nimport { TraceStackItem } from \"./types\";\nimport { addTranslationRule, createGrammar } from \"../lalr/CFG\";\nimport { LALR1 } from \"../lalr\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { Logger } from \"@galacean/engine\";\nimport { GSError, GSErrorName } from \"../GSError\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\n/**\n * The syntax parser and sematic analyzer of `ShaderLab` compiler\n */\nexport class ShaderTargetParser {\n readonly actionTable: StateActionTable;\n readonly gotoTable: StateGotoTable;\n readonly grammar: Grammar;\n readonly sematicAnalyzer: SematicAnalyzer;\n private _traceBackStack: (TraceStackItem | number)[] = [];\n\n private get curState() {\n return this._traceBackStack[this._traceBackStack.length - 1] as number;\n }\n private get stateActionTable() {\n return this.actionTable.get(this.curState)!;\n }\n private get stateGotoTable() {\n return this.gotoTable.get(this.curState);\n }\n\n // #if _VERBOSE\n /** @internal */\n get errors() {\n return this.sematicAnalyzer.errors;\n }\n // #endif\n\n static _singleton: ShaderTargetParser;\n\n static create() {\n if (!this._singleton) {\n const grammar = createGrammar();\n const generator = new LALR1(grammar);\n generator.generate();\n this._singleton = new ShaderTargetParser(generator.actionTable, generator.gotoTable, grammar);\n addTranslationRule(this._singleton.sematicAnalyzer);\n }\n\n return this._singleton;\n }\n\n private constructor(actionTable: StateActionTable, gotoTable: StateGotoTable, grammar: Grammar) {\n this.actionTable = actionTable;\n this.gotoTable = gotoTable;\n this.grammar = grammar;\n this.sematicAnalyzer = new SematicAnalyzer();\n }\n\n parse(tokens: Generator<BaseToken, BaseToken>): ASTNode.GLShaderProgram | null {\n this.sematicAnalyzer.reset();\n const start = performance.now();\n const { _traceBackStack: traceBackStack, sematicAnalyzer } = this;\n traceBackStack.push(0);\n\n let nextToken = tokens.next();\n let loopCount = 0;\n while (true) {\n loopCount += 1;\n const token = nextToken.value;\n\n const actionInfo = this.stateActionTable.get(token.type);\n if (actionInfo?.action === EAction.Shift) {\n traceBackStack.push(token, actionInfo.target!);\n nextToken = tokens.next();\n } else if (actionInfo?.action === EAction.Accept) {\n Logger.info(\n `[pass compilation - parser] Accept! State automata run ${loopCount} times! cost time ${\n performance.now() - start\n }ms`\n );\n sematicAnalyzer.acceptRule?.(sematicAnalyzer);\n return sematicAnalyzer.semanticStack.pop() as ASTNode.GLShaderProgram;\n } else if (actionInfo?.action === EAction.Reduce) {\n const target = actionInfo.target!;\n const reduceProduction = this.grammar.getProductionByID(target)!;\n const translationRule = sematicAnalyzer.getTranslationRule(reduceProduction.id);\n\n const values: (TreeNode | BaseToken)[] = [];\n\n for (let i = reduceProduction.derivation.length - 1; i >= 0; i--) {\n if (reduceProduction.derivation[i] === ETokenType.EPSILON) continue;\n traceBackStack.pop();\n const token = traceBackStack.pop();\n if (token instanceof BaseToken) {\n values.unshift(token);\n } else {\n const astNode = sematicAnalyzer.semanticStack.pop()!;\n values.unshift(astNode);\n }\n }\n translationRule?.(sematicAnalyzer, ...values);\n\n const gotoTable = this.stateGotoTable;\n traceBackStack.push(reduceProduction.goal);\n\n const nextState = gotoTable?.get(reduceProduction.goal)!;\n traceBackStack.push(nextState);\n continue;\n } else {\n const error = ShaderLabUtils.createGSError(\n `Unexpected token ${token.lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n token.location\n );\n // #if _VERBOSE\n this.sematicAnalyzer.errors.push(<GSError>error);\n // #endif\n return null;\n }\n }\n }\n\n // #if _VERBOSE\n private _printStack(nextToken: BaseToken) {\n let str = \"\";\n for (let i = 0; i < this._traceBackStack.length - 1; i++) {\n const state = <NoneTerminal>this._traceBackStack[i++];\n const token = this._traceBackStack[i];\n str += `State${state} - ${(<BaseToken>token).lexeme ?? ParserUtils.toString(token as GrammarSymbol)}; `;\n }\n str += `State${this._traceBackStack[this._traceBackStack.length - 1]} --- ${nextToken.lexeme}`;\n Logger.info(str);\n }\n // #endif\n}\n","function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of as _ };\n","import { BaseToken } from \"../common/BaseToken\";\nimport { ShaderRange } from \"../common\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n// #if _VERBOSE\nimport { GSErrorName } from \"../GSError\";\n// #endif\n\nexport class MacroDefine {\n private _replaceRegex?: RegExp;\n private readonly _argsLexemes: string[];\n\n get isFunction(): boolean {\n return !!this.args?.length;\n }\n\n constructor(\n public readonly macro: BaseToken,\n public readonly body?: BaseToken,\n public readonly location?: ShaderRange,\n public readonly args?: BaseToken[]\n ) {\n if (args) {\n this._argsLexemes = this.args.map((item) => item.lexeme);\n this._replaceRegex = new RegExp(`\\\\b(${this._argsLexemes.join(\"|\")})\\\\b`, \"g\");\n }\n }\n\n expandFunctionBody(args: string[]): string {\n if (args.length !== this.args?.length) {\n throw ShaderLabUtils.createGSError(\"mismatched function macro\", GSErrorName.PreprocessorError, \"\", this.location);\n }\n\n return this.body.lexeme.replace(this._replaceRegex, (m) => {\n return args[this._argsLexemes.indexOf(m)];\n });\n }\n}\n","import { ShaderRange } from \"../common\";\nimport { ExpandSegment } from \"./PpParser\";\n// #if _VERBOSE\nimport PpSourceMap, { MapRange } from \"./sourceMap\";\n// #endif\n\nexport class PpUtils {\n static expand(\n segments: ExpandSegment[],\n source: string,\n // #if _VERBOSE\n sourceMap?: PpSourceMap\n //#endif\n ) {\n const ret: string[] = [];\n let startIdx = 0;\n let generatedIdx = 0;\n\n for (const seg of segments) {\n const originSlice = source.slice(startIdx, seg.rangeInBlock.start.index);\n ret.push(originSlice, seg.replace);\n\n const generatedIdxEnd = generatedIdx + originSlice.length + seg.replace.length;\n\n // #if _VERBOSE\n const mapRange = new MapRange(seg.block, seg.rangeInBlock, {\n start: generatedIdx + originSlice.length,\n end: generatedIdxEnd\n });\n sourceMap?.addMapRange(mapRange);\n // #endif\n\n startIdx = seg.rangeInBlock.end.index;\n generatedIdx = generatedIdxEnd;\n }\n ret.push(source.slice(startIdx));\n return ret.join(\"\");\n }\n\n static assembleSegments(\n segments: {\n range: ShaderRange;\n replace: string;\n }[],\n source: string\n ) {\n const ret: string[] = [];\n let startIdx = 0;\n for (const seg of segments) {\n const originSlice = source.slice(startIdx, seg.range.start.index);\n ret.push(originSlice, seg.replace);\n startIdx = seg.range.end.index;\n }\n ret.push(source.slice(startIdx));\n return ret.join(\"\");\n }\n}\n","import { ShaderRange, ShaderPosition } from \"../common\";\nimport LexerUtils from \"../lexer/Utils\";\n// #if _VERBOSE\nimport PpSourceMap from \"./sourceMap\";\n// #endif\nimport BaseScanner from \"../common/BaseScanner\";\nimport { BaseToken, EOF } from \"../common/BaseToken\";\nimport { EPpKeyword, EPpToken, PpKeyword } from \"./constants\";\nimport { PpUtils } from \"./Utils\";\nimport { ShaderLab } from \"../ShaderLab\";\n\nexport type OnToken = (token: BaseToken, scanner: PpScanner) => void;\n\nexport default class PpScanner extends BaseScanner {\n private macroLvl = 0;\n\n // #if _VERBOSE\n readonly sourceMap = new PpSourceMap();\n readonly file: string;\n readonly blockRange?: ShaderRange;\n // #endif\n\n constructor(\n source: string,\n // #if _VERBOSE\n file = \"__main__\",\n blockRange?: ShaderRange\n // #endif\n ) {\n super(source);\n // #if _VERBOSE\n this.file = file;\n this.blockRange = blockRange;\n // #endif\n }\n\n /**\n * Advance to directive\n * @param expandOnToken callback on encountering token.\n */\n scanDirective(expandOnToken?: OnToken): BaseToken<number> {\n const directive = this._advanceToDirective(expandOnToken);\n if ([EPpKeyword.if, EPpKeyword.ifdef, EPpKeyword.ifndef].includes(<any>directive?.type)) {\n this.macroLvl += 1;\n } else if (<any>directive?.type === EPpKeyword.endif) {\n this.macroLvl -= 1;\n }\n return directive;\n }\n\n /**\n * @param nonLetterChar should not be space\n */\n scanWordsUntilChar(nonLetterChar: string): BaseToken[] {\n const ret: BaseToken[] = [];\n while (true) {\n this.skipSpace(true);\n if (LexerUtils.isLetter(this.getCurCharCode())) {\n ret.push(this.scanWord());\n } else if (this.getCurChar() === nonLetterChar) {\n this._advance();\n return ret;\n } else {\n this._advance();\n }\n }\n }\n\n scanWord(skipNonLetter = false): BaseToken {\n if (skipNonLetter) {\n while (!LexerUtils.isLetter(this.getCurCharCode()) && !this.isEnd()) {\n this._advance();\n }\n } else {\n this.skipSpace(true);\n }\n\n if (this.isEnd()) return EOF;\n\n const start = this._currentIndex;\n while (LexerUtils.isLetter(this.getCurCharCode()) && !this.isEnd()) {\n this._advance();\n }\n const end = this._currentIndex;\n const word = this._source.slice(start, end);\n if (end === start) {\n this.throwError(this.getShaderPosition(0), \"no word found.\");\n }\n const kw = PpKeyword.get(word);\n if (kw) {\n const token = BaseToken.pool.get();\n token.set(kw, word, this.getShaderPosition(0));\n return token;\n }\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.id, word, this.getShaderPosition(word.length));\n return token;\n }\n\n /**\n * @param offset - Offset from starting point\n */\n getShaderPosition(offset: number) {\n return ShaderLab.createPosition(\n this._currentIndex - offset,\n // #if _VERBOSE\n this.line,\n this.column - offset\n // #endif\n );\n }\n\n /**\n * @param onToken callback when encounter a token\n * @returns token split by space\n */\n override scanToken(onToken?: OnToken): BaseToken | undefined {\n this.skipCommentsAndSpace();\n if (this.isEnd()) {\n return;\n }\n const { _source: source } = this;\n let start = this._currentIndex;\n let found = false;\n for (var n = source.length; this._currentIndex < n; ) {\n if (LexerUtils.isPpCharacters(source.charCodeAt(this._currentIndex))) {\n this._advance();\n found = true;\n } else {\n if (found) {\n break;\n }\n this._advance();\n this.skipCommentsAndSpace();\n start = this._currentIndex;\n }\n }\n\n const lexeme = source.slice(start, this._currentIndex);\n const ret = BaseToken.pool.get();\n const tokenType = PpKeyword.get(lexeme);\n ret.set(tokenType ?? EPpToken.id, lexeme, this.getShaderPosition(this._currentIndex - start));\n onToken?.(ret, this);\n return ret;\n }\n\n scanQuotedString(): BaseToken<EPpToken.string_const> {\n this.skipSpace(true);\n if (this.getCurChar() !== '\"') {\n this.throwError(this.getShaderPosition(0), \"unexpected char, expected '\\\"'\");\n }\n const ShaderPosition = this.getShaderPosition(0);\n this._advance();\n const start = this._currentIndex;\n while (this.getCurChar() !== '\"' && !this.isEnd()) this._advance();\n if (this.isEnd()) {\n this.throwError(this.getShaderPosition(0), \"unexpected char, expected '\\\"'\");\n }\n const word = this._source.slice(start, this._currentIndex);\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.string_const, word, ShaderPosition);\n return token;\n }\n\n scanToChar(char: string) {\n const source = this._source;\n while (source[this._currentIndex] !== char && !this.isEnd()) {\n this._advance();\n }\n }\n\n scanMacroBranchChunk(): {\n token: BaseToken<EPpToken.chunk>;\n nextDirective: BaseToken;\n } {\n const start = this._currentIndex;\n const ShaderPosition = this.getShaderPosition(0);\n\n const startLvl = this.macroLvl;\n let directive = this.scanDirective()!;\n\n while (true) {\n if (directive.type === EPpKeyword.endif && startLvl - 1 === this.macroLvl) break;\n else if ([EPpKeyword.elif, EPpKeyword.else].includes(<EPpKeyword>directive.type) && startLvl === this.macroLvl)\n break;\n directive = this.scanDirective()!;\n }\n\n const chunk = this._source.slice(start, this._currentIndex - directive.lexeme.length - 1);\n const token = BaseToken.pool.get();\n token.set(EPpToken.chunk, chunk, ShaderPosition);\n return { token, nextDirective: directive };\n }\n\n scanPairedBlock(lc: string, rc: string): void {\n this.scanToChar(lc);\n let level = 0;\n const source = this._source;\n\n do {\n const curChar = source[this._currentIndex];\n\n if (curChar === lc) {\n level++;\n } else if (curChar === rc) {\n level--;\n }\n this._advance();\n } while (level > 0);\n }\n\n /**\n * @returns end ShaderPosition\n */\n scanRemainMacro(): ShaderPosition {\n const startLvl = this.macroLvl;\n let directive = this.scanDirective()!;\n while (!this.isEnd() && (directive.type !== EPpKeyword.endif || startLvl - 1 !== this.macroLvl)) {\n directive = this.scanDirective()!;\n }\n return this.getShaderPosition(0);\n }\n\n peekNonSpace() {\n let current = this._currentIndex;\n while (/\\s/.test(this._source[current])) {\n current += 1;\n }\n return this._source[current];\n }\n\n scanInteger() {\n const start = this._currentIndex;\n while (LexerUtils.isNum(this.getCurCharCode())) {\n this._advance();\n }\n if (this._currentIndex === start) {\n this.throwError(this.getShaderPosition(0), \"no integer found\");\n }\n const integer = this._source.slice(start, this._currentIndex);\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.int_constant, integer, this.getShaderPosition(0));\n return token;\n }\n\n /**\n * Skip comments\n */\n scanLineRemain() {\n this.skipSpace(false);\n const start = this._currentIndex;\n\n const comments: ShaderRange[] = [];\n\n while (this.getCurChar() !== \"\\n\") {\n if (this.isEnd()) {\n const line = this._source.slice(start, this._currentIndex);\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.line_remain, line, this.getShaderPosition(line.length));\n return token;\n }\n this._advance();\n const commentRange = this._skipComments();\n if (commentRange) {\n commentRange.start.index -= start;\n commentRange.end.index -= start;\n comments.push(commentRange);\n }\n }\n let line = this._source.slice(start, this._currentIndex);\n if (comments.length) {\n // filter comments\n line = PpUtils.assembleSegments(\n comments.map((item) => ({ range: item, replace: \"\" })),\n line\n );\n }\n\n const token = BaseToken.pool.get();\n token.set(EPpToken.line_remain, line, this.getShaderPosition(line.length));\n return token;\n }\n\n private _advanceToDirective(onToken?: OnToken): BaseToken | undefined {\n while (true) {\n const token = this.scanToken(onToken);\n if (token?.lexeme.startsWith(\"#\")) return token;\n if (this.isEnd()) return;\n }\n }\n\n private _skipComments(): ShaderRange | undefined {\n if (this.peek(2) === \"//\") {\n const start = this.getShaderPosition(0);\n // single line comments\n while (this.getCurChar() !== \"\\n\" && !this.isEnd()) {\n this._advance();\n }\n return ShaderLab.createRange(start, this.getCurPosition());\n } else if (this.peek(2) === \"/*\") {\n const start = this.getShaderPosition(0);\n // multi-line comments\n this.advance(2);\n while (this.peek(2) !== \"*/\" && !this.isEnd()) {\n this._advance();\n }\n this.advance(2);\n return ShaderLab.createRange(start, this.getShaderPosition(0));\n }\n }\n}\n","import { ShaderPosition, ShaderRange } from \"../common\";\nimport LexerUtils from \"../lexer/Utils\";\nimport { MacroDefine } from \"./MacroDefine\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { EPpKeyword, EPpToken, PpConstant } from \"./constants\";\nimport PpScanner from \"./PpScanner\";\nimport { PpUtils } from \"./Utils\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderPass } from \"@galacean/engine\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { GSErrorName } from \"../GSError\";\n// #if _VERBOSE\nimport PpSourceMap, { BlockInfo } from \"./sourceMap\";\n// #endif\n\nexport interface ExpandSegment {\n // #if _VERBOSE\n block?: BlockInfo;\n // #endif\n rangeInBlock: ShaderRange;\n replace: string;\n}\n\n/** @internal */\nexport class PpParser {\n private static _definedMacros: Map<string, MacroDefine> = new Map();\n private static _expandSegmentsStack: ExpandSegment[][] = [[]];\n\n /** Referenced by branch macro or defined operator */\n private static _branchMacros: Set<string> = new Set();\n\n private static _includeMap: Record<string, string>;\n private static _basePathForIncludeKey: string;\n\n // #if _VERBOSE\n static _errors: Error[] = [];\n // #endif\n\n static reset(includeMap: Record<string, string>, basePathForIncludeKey: string) {\n this._definedMacros.clear();\n this._expandSegmentsStack.length = 0;\n this._expandSegmentsStack.push([]);\n this._branchMacros.clear();\n this.addPredefinedMacro(\"GL_ES\");\n this._includeMap = includeMap;\n this._basePathForIncludeKey = basePathForIncludeKey;\n // #if _VERBOSE\n this._errors.length = 0;\n // #endif\n }\n\n static addPredefinedMacro(macro: string, value?: string) {\n const tk = BaseToken.pool.get();\n tk.set(EPpToken.id, macro);\n\n let macroBody: BaseToken | undefined;\n if (value) {\n macroBody = BaseToken.pool.get();\n macroBody.set(EPpToken.id, value);\n }\n\n this._definedMacros.set(macro, new MacroDefine(tk, macroBody));\n }\n\n static parse(scanner: PpScanner): string | null {\n while (!scanner.isEnd()) {\n const directive = scanner.scanDirective(this._onToken.bind(this))!;\n if (scanner.isEnd()) break;\n switch (directive.type) {\n case EPpKeyword.define:\n this._parseDefine(scanner);\n break;\n\n case EPpKeyword.undef:\n this._parseUndef(scanner);\n break;\n\n case EPpKeyword.if:\n this._parseIf(scanner);\n break;\n\n case EPpKeyword.ifndef:\n this._parseIfNdef(scanner);\n break;\n\n case EPpKeyword.ifdef:\n this._parseIfDef(scanner);\n break;\n\n case EPpKeyword.include:\n this._parseInclude(scanner);\n break;\n }\n }\n // #if _VERBOSE\n if (this._errors.length > 0) return null;\n // #endif\n\n return PpUtils.expand(this.expandSegments, scanner.source, scanner.sourceMap);\n }\n\n private static get expandSegments() {\n return this._expandSegmentsStack[this._expandSegmentsStack.length - 1];\n }\n\n private static reportError(loc: ShaderRange | ShaderPosition, message: string, source: string, file: string) {\n const error = ShaderLabUtils.createGSError(message, GSErrorName.PreprocessorError, source, loc, file);\n // #if _VERBOSE\n this._errors.push(error);\n // #endif\n }\n\n private static _parseInclude(scanner: PpScanner) {\n const start = scanner.getShaderPosition(8);\n\n scanner.skipSpace(true);\n const id = scanner.scanQuotedString();\n let includedPath: string;\n // builtin path\n if (id.lexeme[0] !== \".\") {\n includedPath = id.lexeme;\n } else {\n // relative path\n // @ts-ignore\n includedPath = new URL(id.lexeme, this._basePathForIncludeKey).href.substring(ShaderPass._shaderRootPath.length);\n }\n\n scanner.scanToChar(\"\\n\");\n const end = scanner.getShaderPosition(0);\n const chunk = this._includeMap[includedPath];\n if (!chunk) {\n this.reportError(id.location, `Shader slice \"${includedPath}\" not founded.`, scanner.source, scanner.file);\n return;\n }\n\n const range = ShaderLab.createRange(start, end);\n const expanded = this._expandMacroChunk(chunk, range, id.lexeme);\n // #if _VERBOSE\n const block = new BlockInfo(id.lexeme, undefined, expanded.sourceMap);\n // #endif\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n }\n\n private static _parseIfDef(scanner: PpScanner) {\n const start = scanner.current - 6;\n\n const id = scanner.scanWord();\n this._addEmptyReplace(scanner, start);\n this._branchMacros.add(id.lexeme);\n\n const macro = this._definedMacros.get(id.lexeme);\n scanner.skipSpace(true);\n\n const { token: bodyChunk, nextDirective } = scanner.scanMacroBranchChunk();\n if (!!macro) {\n const end = nextDirective.type === EPpKeyword.endif ? scanner.getShaderPosition(0) : scanner.scanRemainMacro();\n\n const expanded = this._expandMacroChunk(bodyChunk.lexeme, bodyChunk.location, scanner);\n\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const range = ShaderLab.createRange(bodyChunk.location.start, end);\n\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n\n return;\n }\n\n this.expandSegments.pop();\n this._addEmptyReplace(scanner, start);\n\n this._parseMacroBranch(<any>nextDirective.type, scanner);\n }\n\n private static _parseMacroBranch(\n directive: EPpKeyword.elif | EPpKeyword.else | EPpKeyword.endif,\n scanner: PpScanner\n ) {\n if (directive === EPpKeyword.endif) {\n return;\n }\n\n const start = scanner.current;\n\n if (directive === EPpKeyword.else) {\n const { token: elseChunk } = scanner.scanMacroBranchChunk();\n const expanded = this._expandMacroChunk(elseChunk.lexeme, elseChunk.location, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const range = ShaderLab.createRange(startPosition, scanner.getShaderPosition(0));\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n } else if (directive === EPpKeyword.elif) {\n const constantExpr = this._parseConstantExpression(scanner);\n const { token: bodyChunk, nextDirective } = scanner.scanMacroBranchChunk();\n if (!!constantExpr) {\n const end = nextDirective.type === EPpKeyword.endif ? scanner.current : scanner.scanRemainMacro().index;\n const expanded = this._expandMacroChunk(bodyChunk.lexeme, bodyChunk.location, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const endPosition = ShaderLab.createPosition(end);\n const range = ShaderLab.createRange(startPosition, endPosition);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n } else {\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const endPosition = ShaderLab.createPosition(scanner.current);\n const range = ShaderLab.createRange(startPosition, endPosition);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: \"\"\n });\n this._parseMacroBranch(<any>nextDirective.type, scanner);\n }\n }\n }\n\n private static _parseConstantExpression(scanner: PpScanner) {\n scanner.skipSpace(true);\n return this._parseLogicalOrExpression(scanner);\n }\n\n private static _parseLogicalOrExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseLogicalAndExpression(scanner);\n const operator = scanner.peek(2);\n if (operator && operator === \"||\") {\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseLogicalOrExpression(scanner);\n return operand1 || operand2;\n }\n return operand1;\n }\n\n private static _parseLogicalAndExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseEqualityExpression(scanner);\n const operator = scanner.peek(2);\n if (operator && operator === \"&&\") {\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseLogicalAndExpression(scanner);\n return operand1 && operand2;\n }\n return operand1;\n }\n\n private static _parseEqualityExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseRelationalExpression(scanner);\n const operator = scanner.peek(2);\n if (operator && [\"==\", \"!=\"].includes(operator)) {\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseEqualityExpression(scanner);\n switch (operator) {\n case \"==\":\n return operand1 === operand2;\n case \"!=\":\n return operand1 !== operand2;\n }\n }\n return operand1;\n }\n\n private static _parseRelationalExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseShiftExpression(scanner) as number;\n let operator = scanner.peek(2);\n if (operator[1] !== \"=\") operator = operator[0];\n if (operator && [\">\", \"<\", \">=\", \"<=\"].includes(operator)) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance(operator.length);\n scanner.skipSpace(false);\n const operand2 = this._parseRelationalExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this.reportError(opPos, \"invalid operator in relation expression.\", scanner.source, scanner.file);\n return;\n }\n switch (operator) {\n case \">\":\n return operand1 > operand2;\n case \"<\":\n return operand1 < operand2;\n case \">=\":\n return operand1 >= operand2;\n case \"<=\":\n return operand1 <= operand2;\n }\n }\n return operand1;\n }\n\n private static _parseShiftExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseAdditiveExpression(scanner) as number;\n const operator = scanner.peek(2);\n if (operator && [\">>\", \"<<\"].includes(operator)) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseShiftExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this.reportError(opPos, \"invalid operator in shift expression.\", scanner.source, scanner.file);\n return;\n }\n switch (operator) {\n case \">>\":\n return operand1 >> operand2;\n case \"<<\":\n return operand1 << operand2;\n }\n }\n\n return operand1;\n }\n\n private static _parseAdditiveExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseMulticativeExpression(scanner) as number;\n if ([\">\", \"<\"].includes(scanner.getCurChar())) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance();\n\n const operator = scanner.getCurChar();\n scanner.skipSpace(false);\n const operand2 = this._parseAdditiveExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this.reportError(opPos, \"invalid operator.\", scanner.source, scanner.file);\n return false;\n }\n switch (operator) {\n case \"+\":\n return operand1 + operand2;\n case \"-\":\n return operand1 - operand2;\n }\n }\n return operand1;\n }\n\n private static _parseMulticativeExpression(scanner: PpScanner): PpConstant {\n const operand1 = this._parseUnaryExpression(scanner) as number;\n scanner.skipSpace(false);\n if ([\"*\", \"/\", \"%\"].includes(scanner.getCurChar())) {\n const opPos = scanner.getShaderPosition(0);\n const operator = scanner.getCurChar();\n scanner.skipSpace(false);\n const operand2 = this._parseMulticativeExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this.reportError(opPos, \"invalid operator.\", scanner.source, scanner.file);\n return;\n }\n switch (operator) {\n case \"*\":\n return operand1 * operand2;\n case \"/\":\n return operand1 / operand2;\n case \"%\":\n return operand1 % operand2;\n }\n }\n return operand1;\n }\n\n private static _parseUnaryExpression(scanner: PpScanner) {\n const operator = scanner.getCurChar();\n if ([\"+\", \"-\", \"!\"].includes(operator)) {\n scanner.advance();\n const opPos = scanner.getShaderPosition(0);\n const parenExpr = this._parseParenthesisExpression(scanner);\n if ((operator === \"!\" && typeof parenExpr !== \"boolean\") || (operator !== \"!\" && typeof parenExpr !== \"number\")) {\n this.reportError(opPos, \"invalid operator.\", scanner.source, scanner.file);\n }\n\n switch (operator) {\n case \"+\":\n return parenExpr;\n case \"-\":\n return -parenExpr;\n case \"!\":\n return !parenExpr;\n }\n }\n return this._parseParenthesisExpression(scanner);\n }\n\n private static _parseParenthesisExpression(scanner: PpScanner): PpConstant {\n if (scanner.getCurChar() === \"(\") {\n scanner._advance();\n scanner.skipSpace(false);\n const ret = this._parseConstantExpression(scanner);\n scanner.scanToChar(\")\");\n scanner._advance();\n return ret;\n }\n return this._parseConstant(scanner);\n }\n\n private static _parseConstant(scanner: PpScanner): PpConstant {\n if (LexerUtils.isAlpha(scanner.getCurCharCode())) {\n const id = scanner.scanWord();\n if (id.type === EPpKeyword.defined) {\n const withParen = scanner.peekNonSpace() === \"(\";\n const macro = scanner.scanWord(true);\n if (withParen) {\n scanner.scanToChar(\")\");\n scanner._advance();\n }\n this._branchMacros.add(macro.lexeme);\n return !!this._definedMacros.get(macro.lexeme);\n } else {\n const macro = this._definedMacros.get(id.lexeme);\n if (!macro || !macro.body) {\n return false;\n }\n if (macro.isFunction) {\n this.reportError(id.location, \"invalid function macro usage\", scanner.source, scanner.file);\n }\n const value = Number(macro.body.lexeme);\n if (!Number.isInteger(value)) {\n this.reportError(id.location, `invalid const macro: ${id.lexeme}`, scanner.source, scanner.file);\n }\n this._branchMacros.add(id.lexeme);\n return value;\n }\n } else if (LexerUtils.isNum(scanner.getCurCharCode())) {\n const integer = scanner.scanInteger();\n return Number(integer.lexeme);\n } else {\n this.reportError(\n scanner.getShaderPosition(0),\n `invalid token: ${scanner.getCurChar()}`,\n scanner.source,\n scanner.file\n );\n }\n }\n\n /**\n * Recursively expand macro body and expansion.\n */\n private static _expandMacroChunk(\n chunk: string,\n loc: ShaderRange,\n parentScanner: PpScanner\n ): {\n content: string;\n // #if _VERBOSE\n sourceMap: PpSourceMap;\n // #endif\n };\n private static _expandMacroChunk(\n chunk: string,\n loc: ShaderRange,\n file: string\n ): {\n content: string;\n // #if _VERBOSE\n sourceMap: PpSourceMap;\n // #endif\n };\n private static _expandMacroChunk(\n chunk: string,\n loc: ShaderRange,\n scannerOrFile: PpScanner | string\n ): {\n content: string;\n // #if _VERBOSE\n sourceMap: PpSourceMap;\n // #endif\n } {\n this._expandSegmentsStack.push([]);\n let scanner: PpScanner;\n if (typeof scannerOrFile === \"string\") {\n scanner = new PpScanner(chunk, scannerOrFile);\n } else {\n scanner = new PpScanner(chunk, scannerOrFile.file, loc);\n }\n const ret = this.parse(scanner);\n this._expandSegmentsStack.pop();\n return {\n content: ret,\n // #if _VERBOSE\n sourceMap: scanner.sourceMap\n // #endif\n };\n }\n\n private static _parseIfNdef(scanner: PpScanner) {\n const start = scanner.current - 7;\n\n const id = scanner.scanWord();\n this._addEmptyReplace(scanner, start);\n this._branchMacros.add(id.lexeme);\n\n const macro = this._definedMacros.get(id.lexeme);\n const { token: bodyChunk, nextDirective } = scanner.scanMacroBranchChunk();\n if (!macro) {\n const end = nextDirective.type === EPpKeyword.endif ? scanner.getShaderPosition(0) : scanner.scanRemainMacro();\n\n const expanded = this._expandMacroChunk(bodyChunk.lexeme, bodyChunk.location, scanner);\n // #if _VERBOSE\n const blockInfo = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const range = ShaderLab.createRange(bodyChunk.location.start, end);\n this.expandSegments.push({\n // #if _VERBOSE\n block: blockInfo,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n return;\n }\n\n this.expandSegments.pop();\n this._addEmptyReplace(scanner, start);\n this._parseMacroBranch(<any>nextDirective.type, scanner);\n }\n\n private static _addEmptyReplace(scanner: PpScanner, start: number) {\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const endPosition = scanner.getCurPosition();\n const range = ShaderLab.createRange(startPosition, endPosition);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: \"\"\n });\n }\n\n private static _parseIf(scanner: PpScanner) {\n const start = scanner.current - 3;\n\n const constantExpr = this._parseConstantExpression(scanner);\n this._addEmptyReplace(scanner, start);\n\n const { token: bodyChunk, nextDirective } = scanner.scanMacroBranchChunk();\n if (!!constantExpr) {\n const end = nextDirective.type === EPpKeyword.endif ? scanner.getShaderPosition(0) : scanner.scanRemainMacro();\n const expanded = this._expandMacroChunk(bodyChunk.lexeme, bodyChunk.location, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const range = ShaderLab.createRange(bodyChunk.location.start, end);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n return;\n }\n\n this.expandSegments.pop();\n this._addEmptyReplace(scanner, start);\n this._parseMacroBranch(<any>nextDirective.type, scanner);\n }\n\n private static _parseDefine(scanner: PpScanner) {\n const start = scanner.getShaderPosition(7);\n const macro = scanner.scanWord();\n\n let end = macro.location.end;\n if (this._definedMacros.get(macro.lexeme) && macro.lexeme.startsWith(\"GL_\")) {\n this.reportError(macro.location, `redefined macro: ${macro.lexeme}`, scanner.source, scanner.file);\n }\n\n let macroArgs: BaseToken[] | undefined;\n if (scanner.getCurChar() === \"(\") {\n macroArgs = scanner.scanWordsUntilChar(\")\");\n end = scanner.getShaderPosition(0);\n }\n const macroBody = scanner.scanLineRemain();\n const range = ShaderLab.createRange(start, end);\n const macroDefine = new MacroDefine(macro, macroBody, range, macroArgs);\n this._definedMacros.set(macro.lexeme, macroDefine);\n\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange);\n // #endif\n\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: ShaderLab.createRange(start, scanner.getCurPosition()),\n replace: \"\"\n });\n }\n\n private static _parseUndef(scanner: PpScanner) {\n const start = scanner.current - 6;\n const macro = scanner.scanWord();\n\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange);\n // #endif\n const startPosition = ShaderLab.createPosition(start);\n const range = ShaderLab.createRange(startPosition, scanner.getCurPosition());\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: \"\"\n });\n this._definedMacros.delete(macro.lexeme);\n }\n\n private static _onToken(token: BaseToken, scanner: PpScanner) {\n const macro = this._definedMacros.get(token.lexeme);\n if (macro) {\n let replace = macro.body.lexeme;\n if (macro.isFunction) {\n scanner.scanToChar(\"(\");\n scanner._advance();\n\n // extract parameters\n const args: string[] = [];\n let curLvl = 1;\n let curIdx = scanner.current;\n while (true) {\n if (scanner.getCurChar() === \"(\") curLvl += 1;\n else if (scanner.getCurChar() === \")\") {\n curLvl -= 1;\n if (curLvl === 0) break;\n } else if (scanner.getCurChar() === \",\" && curLvl === 1) {\n args.push(scanner.source.slice(curIdx, scanner.current));\n curIdx = scanner.current + 1;\n }\n scanner._advance();\n }\n args.push(scanner.source.slice(curIdx, scanner.current));\n\n scanner._advance();\n const range = ShaderLab.createRange(token.location!.start, scanner.getCurPosition());\n replace = macro.expandFunctionBody(args);\n const expanded = this._expandMacroChunk(replace, range, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const blockRange = ShaderLab.createRange(token.location!.start, scanner.getCurPosition());\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: blockRange,\n replace: expanded.content\n });\n } else {\n const expanded = this._expandMacroChunk(replace, token.location, scanner);\n // #if _VERBOSE\n const block = new BlockInfo(scanner.file, scanner.blockRange, expanded.sourceMap);\n // #endif\n const range = ShaderLab.createRange(token.location.start, token.location.end);\n this.expandSegments.push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: expanded.content\n });\n }\n }\n }\n}\n","import { PpParser } from \"./PpParser\";\nimport PpScanner from \"./PpScanner\";\n\n/** @internal */\nexport class Preprocessor {\n static baseScanner: PpScanner;\n\n /**\n * Reset the parser of `Preprocessor`\n * @param basePathForIncludeKey - the base path to resolve the relative path of `#include` directive\n */\n static reset(includeMap: Record<string, string>, basePathForIncludeKey: string): void {\n PpParser.reset(includeMap, basePathForIncludeKey);\n }\n\n /**\n * Should call it after reset.\n */\n static process(source: string): string | null {\n this.baseScanner = new PpScanner(source);\n return PpParser.parse(this.baseScanner);\n }\n\n static addPredefinedMacro(macro: string, value?: string): void {\n PpParser.addPredefinedMacro(macro, value);\n }\n\n // #if _VERBOSE\n static convertSourceIndex(index: number) {\n return this.baseScanner.sourceMap.map(index);\n }\n // #endif\n}\n","import { NoneTerminal, GrammarSymbol } from \"./parser/GrammarSymbol\";\nimport { BaseToken as Token } from \"./common/BaseToken\";\nimport { EKeyword, ETokenType, GalaceanDataType } from \"./common\";\nimport { TreeNode } from \"./parser/AST\";\n// #if _VERBOSE\nimport State from \"./lalr/State\";\n// #endif\n\nexport class ParserUtils {\n static unwrapNodeByType<T = TreeNode>(node: TreeNode, type: NoneTerminal): T | undefined {\n const child = node.children[0];\n if (child instanceof Token) return;\n if (child.nt === type) return child as T;\n return ParserUtils.unwrapNodeByType(child, type);\n }\n\n // #if _VERBOSE\n /**\n * Check if type `tb` is compatible with type `ta`.\n */\n static typeCompatible(ta: GalaceanDataType, tb: GalaceanDataType | undefined) {\n if (tb == undefined) return true;\n if (ta === EKeyword.INT) {\n return ta === tb || tb === EKeyword.UINT;\n }\n return ta === tb;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? EKeyword[sm];\n }\n return NoneTerminal[sm];\n }\n // #endif\n\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n /**\n * @internal\n */\n // #if _VERBOSE\n static printStatePool(logPath: string) {\n let output = \"\";\n\n console.log(\"========== Parser Pool ==========\");\n\n let count = 0;\n for (const state of State.pool.values()) {\n count++;\n let tmp = \"\";\n tmp += `${state.id}: \\n`.padEnd(4);\n for (const psItem of state.items) {\n tmp += \" \" + psItem.toString() + \"\\n\";\n }\n output += tmp;\n }\n\n console.log(\"state count:\", count);\n console.log(output);\n }\n // #endif\n}\n","import { EShaderStage } from \"../common/Enums\";\nimport { ASTNode } from \"../parser/AST\";\nimport { ESymbolType, TargetSymbolTable, SymbolInfo } from \"../parser/symbolTable\";\nimport { IParamInfo, StructProp } from \"../parser/types\";\nimport { GSErrorName } from \"../GSError\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\n/** @internal */\nexport class VisitorContext {\n private static _singleton: VisitorContext;\n static get context() {\n return this._singleton;\n }\n\n static reset() {\n if (!this._singleton) {\n this._singleton = new VisitorContext();\n }\n this._singleton.reset();\n }\n\n attributeList: IParamInfo[] = [];\n attributeStructs: ASTNode.StructSpecifier[] = [];\n varyingStruct?: ASTNode.StructSpecifier;\n mrtStruct?: ASTNode.StructSpecifier;\n\n stage: EShaderStage;\n\n _referencedAttributeList: Record<string, IParamInfo & { qualifier?: string }> = Object.create(null);\n _referencedGlobals: Record<string, SymbolInfo | ASTNode.PrecisionSpecifier> = Object.create(null);\n _referencedVaryingList: Record<string, IParamInfo & { qualifier?: string }> = Object.create(null);\n _referencedMRTList: Record<string, StructProp | string> = Object.create(null);\n\n _curFn?: ASTNode.FunctionProtoType;\n\n _passSymbolTable: TargetSymbolTable;\n\n private constructor() {}\n\n get passSymbolTable() {\n return this._passSymbolTable;\n }\n\n reset() {\n this.attributeList.length = 0;\n this.attributeStructs.length = 0;\n this._referencedAttributeList = Object.create(null);\n this._referencedGlobals = Object.create(null);\n this._referencedVaryingList = Object.create(null);\n this._referencedMRTList = Object.create(null);\n this.mrtStruct = undefined;\n }\n\n isAttributeStruct(type: string) {\n return this.attributeStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isVaryingStruct(type: string) {\n return this.varyingStruct?.ident?.lexeme === type;\n }\n\n isMRTStruct(type: string) {\n return this.mrtStruct?.ident?.lexeme === type;\n }\n\n referenceAttribute(ident: BaseToken): Error | void {\n if (this._referencedAttributeList[ident.lexeme]) return;\n\n const prop = this.attributeList.find((item) => item.ident.lexeme === ident.lexeme);\n if (!prop) {\n return ShaderLabUtils.createGSError(\n `referenced attribute not found: ${ident.lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n ident.location\n );\n }\n this._referencedAttributeList[ident.lexeme] = prop;\n }\n\n referenceVarying(ident: BaseToken): Error | void {\n if (this._referencedVaryingList[ident.lexeme]) return;\n\n const prop = this.varyingStruct?.propList.find((item) => item.ident.lexeme === ident.lexeme);\n if (!prop) {\n return ShaderLabUtils.createGSError(\n `referenced varying not found: ${ident.lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n ident.location\n );\n }\n this._referencedVaryingList[ident.lexeme] = prop;\n }\n\n referenceMRTProp(ident: BaseToken): Error | void {\n if (this._referencedMRTList[ident.lexeme]) return;\n\n const prop = this.mrtStruct?.propList.find((item) => item.ident.lexeme === ident.lexeme);\n if (!prop) {\n return ShaderLabUtils.createGSError(\n `referenced mrt not found: ${ident.lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n ident.location\n );\n }\n this._referencedMRTList[ident.lexeme] = prop;\n }\n\n referenceGlobal(ident: string, type: ESymbolType) {\n if (this._referencedGlobals[ident]) return;\n\n if (type === ESymbolType.FN) {\n const fnEntries = this._passSymbolTable.getAllFnSymbols(ident);\n for (let i = 0; i < fnEntries.length; i++) {\n const key = i === 0 ? ident : ident + i;\n this._referencedGlobals[key] = fnEntries[i];\n }\n return;\n }\n const sm = this._passSymbolTable.lookup(ident, type);\n if (sm) {\n this._referencedGlobals[ident] = sm;\n }\n }\n}\n","import { IPoolElement } from \"@galacean/engine\";\n\nexport class TempArray<T> implements IPoolElement {\n array: Array<T> = new Array();\n\n dispose(): void {\n this.array.length = 0;\n }\n}\n","import { NoneTerminal } from \"../parser/GrammarSymbol\";\nimport { BaseToken as Token } from \"../common/BaseToken\";\nimport { EKeyword, ShaderPosition, ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { ESymbolType, FnSymbol, VarSymbol } from \"../parser/symbolTable\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { NodeChild } from \"../parser/types\";\nimport { VisitorContext } from \"./VisitorContext\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { GSErrorName } from \"../GSError\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { Logger, ReturnableObjectPool } from \"@galacean/engine\";\nimport { TempArray } from \"../TempArray\";\n\nexport const V3_GL_FragColor = \"GS_glFragColor\";\nexport const V3_GL_FragData = \"GS_glFragData\";\n\n/**\n * @internal\n * The code generator\n */\nexport abstract class CodeGenVisitor {\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n abstract getFragDataCodeGen(index: string | number): string;\n abstract getReferencedMRTPropText(index: string | number, ident: string): string;\n\n protected static _tmpArrayPool = new ReturnableObjectPool(TempArray<string>, 10);\n\n defaultCodeGen(children: NodeChild[]) {\n const pool = CodeGenVisitor._tmpArrayPool;\n let ret = pool.get();\n ret.dispose();\n for (const child of children) {\n if (child instanceof Token) {\n ret.array.push(child.lexeme);\n } else {\n ret.array.push(child.codeGen(this));\n }\n }\n pool.return(ret);\n return ret.array.join(\" \");\n }\n\n visitPostfixExpression(node: ASTNode.PostfixExpression) {\n const children = node.children;\n const derivationLength = children.length;\n const context = VisitorContext.context;\n\n if (derivationLength === 3) {\n const postExpr = children[0] as ASTNode.PostfixExpression;\n const prop = children[2];\n\n if (prop instanceof Token) {\n if (context.isAttributeStruct(<string>postExpr.type)) {\n const error = context.referenceAttribute(prop);\n // #if _VERBOSE\n if (error) {\n this.errors.push(<GSError>error);\n }\n // #endif\n return prop.lexeme;\n } else if (context.isVaryingStruct(<string>postExpr.type)) {\n const error = context.referenceVarying(prop);\n // #if _VERBOSE\n if (error) {\n this.errors.push(<GSError>error);\n }\n // #endif\n return prop.lexeme;\n } else if (context.isMRTStruct(<string>postExpr.type)) {\n const error = context.referenceMRTProp(prop);\n // #if _VERBOSE\n if (error) {\n this.errors.push(<GSError>error);\n }\n // #endif\n return prop.lexeme;\n }\n\n return `${postExpr.codeGen(this)}.${prop.lexeme}`;\n } else {\n return `${postExpr.codeGen(this)}.${prop.codeGen(this)}`;\n }\n } else if (derivationLength === 4) {\n const identNode = children[0] as ASTNode.PostfixExpression;\n const indexNode = children[2] as ASTNode.Expression;\n const identLexeme = identNode.codeGen(this);\n const indexLexeme = indexNode.codeGen(this);\n if (identLexeme === \"gl_FragData\") {\n // #if _VERBOSE\n if (context._referencedVaryingList[V3_GL_FragColor]) {\n this._reportError(identNode.location, \"cannot use both gl_FragData and gl_FragColor\");\n }\n // #endif\n const mrtLexeme = this.getFragDataCodeGen(indexLexeme);\n context._referencedMRTList[mrtLexeme] = this.getReferencedMRTPropText(indexLexeme, mrtLexeme);\n return mrtLexeme;\n }\n return `${identLexeme}[${indexLexeme}]`;\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n if (node.symbolInfo instanceof VarSymbol && node.symbolInfo.isGlobalVariable) {\n VisitorContext.context.referenceGlobal(node.lexeme, ESymbolType.VAR);\n }\n return node.lexeme;\n }\n\n visitFunctionCall(node: ASTNode.FunctionCall): string {\n const call = node.children[0] as ASTNode.FunctionCallGeneric;\n if (call.fnSymbol instanceof FnSymbol) {\n VisitorContext.context.referenceGlobal(call.fnSymbol.ident, ESymbolType.FN);\n\n const paramList = call.children[2];\n const paramInfoList = call.fnSymbol.astNode.protoType.parameterList;\n\n if (paramList instanceof ASTNode.FunctionCallParameterList) {\n const plainParams: string[] = [];\n const params = paramList.paramNodes;\n\n for (let i = 0; i < params.length; i++) {\n if (\n !VisitorContext.context.isAttributeStruct(paramInfoList[i].typeInfo.typeLexeme) &&\n !VisitorContext.context.isVaryingStruct(paramInfoList[i].typeInfo.typeLexeme)\n ) {\n plainParams.push(params[i].codeGen(this));\n }\n }\n return `${call.fnSymbol.ident}(${plainParams.join(\", \")})`;\n }\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitStatementList(node: ASTNode.StatementList): string {\n const children = node.children as TreeNode[];\n if (children.length === 1) {\n return children[0].codeGen(this);\n } else {\n return `${children[0].codeGen(this)}\\n${children[1].codeGen(this)}`;\n }\n }\n\n visitSingleDeclaration(node: ASTNode.SingleDeclaration): string {\n const type = node.typeSpecifier.type;\n if (typeof type === \"string\") {\n VisitorContext.context.referenceGlobal(type, ESymbolType.STRUCT);\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitGlobalVariableDeclaration(node: ASTNode.VariableDeclaration): string {\n const children = node.children;\n const fullType = children[0];\n if (fullType instanceof ASTNode.FullySpecifiedType && fullType.typeSpecifier.isCustom) {\n VisitorContext.context.referenceGlobal(<string>fullType.type, ESymbolType.STRUCT);\n }\n return this.defaultCodeGen(children);\n }\n\n visitDeclaration(node: ASTNode.Declaration): string {\n const { context } = VisitorContext;\n const children = node.children;\n const child = children[0];\n\n if (child instanceof ASTNode.InitDeclaratorList) {\n const typeLexeme = child.typeInfo.typeLexeme;\n if (context.isVaryingStruct(typeLexeme) || context.isMRTStruct(typeLexeme)) return \"\";\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionProtoType(node: ASTNode.FunctionProtoType): string {\n VisitorContext.context._curFn = node;\n return this.defaultCodeGen(node.children);\n }\n\n visitFunctionDefinition(node: ASTNode.FunctionDefinition): string {\n VisitorContext.context._curFn = undefined;\n return this.defaultCodeGen(node.children);\n }\n\n visitFunctionParameterList(node: ASTNode.FunctionParameterList): string {\n const params = node.parameterInfoList;\n return params\n .filter(\n (item) =>\n !VisitorContext.context.isAttributeStruct(item.typeInfo.typeLexeme) &&\n !VisitorContext.context.isVaryingStruct(item.typeInfo.typeLexeme)\n )\n .map((item) => item.astNode.codeGen(this))\n .join(\", \");\n }\n\n visitFunctionHeader(node: ASTNode.FunctionHeader): string {\n const returnType = node.returnType.typeSpecifier.lexeme;\n if (VisitorContext.context.isAttributeStruct(returnType) || VisitorContext.context.isVaryingStruct(returnType))\n return `void ${node.ident.lexeme}(`;\n return this.defaultCodeGen(node.children);\n }\n\n visitJumpStatement(node: ASTNode.JumpStatement): string {\n const children = node.children;\n const cmd = children[0] as Token;\n if (cmd.type === EKeyword.RETURN) {\n const expr = children[1];\n if (expr instanceof ASTNode.Expression) {\n const returnVar = ParserUtils.unwrapNodeByType<ASTNode.VariableIdentifier>(\n expr,\n NoneTerminal.variable_identifier\n );\n if (returnVar?.typeInfo === VisitorContext.context.varyingStruct?.ident?.lexeme) {\n return \"\";\n }\n const returnFnCall = ParserUtils.unwrapNodeByType<ASTNode.FunctionCall>(expr, NoneTerminal.function_call);\n if (returnFnCall?.type === VisitorContext.context.varyingStruct?.ident?.lexeme) {\n return `${expr.codeGen(this)};`;\n }\n }\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n return this.defaultCodeGen(node.children);\n }\n\n protected _reportError(loc: ShaderRange | ShaderPosition, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderLab._processingPassText));\n // #else\n Logger.error(message);\n // #endif\n }\n}\n","import { CodeGenVisitor } from \"./CodeGenVisitor\";\nimport { ASTNode } from \"../parser/AST\";\nimport { ShaderData } from \"../parser/ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, SymbolInfo } from \"../parser/symbolTable\";\nimport { EShaderStage } from \"../common/Enums\";\nimport { IShaderInfo } from \"@galacean/engine-design\";\nimport { ICodeSegment } from \"./types\";\nimport { VisitorContext } from \"./VisitorContext\";\nimport { EKeyword } from \"../common\";\n\nconst defaultPrecision = `\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n precision highp int;\n#else\n precision mediump float;\n precision mediump int;\n#endif\n`;\n\n/**\n * @internal\n */\nexport abstract class GLESVisitor extends CodeGenVisitor {\n protected _versionText: string = \"\";\n protected _extensions: string = \"\";\n private _globalCodeArray: ICodeSegment[] = [];\n\n abstract getAttributeDeclare(out: ICodeSegment[]): void;\n abstract getVaryingDeclare(out: ICodeSegment[]): void;\n abstract getMRTDeclare(out: ICodeSegment[]): void;\n\n visitShaderProgram(node: ASTNode.GLShaderProgram, vertexEntry: string, fragmentEntry: string): IShaderInfo {\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n VisitorContext.reset();\n VisitorContext.context._passSymbolTable = node.shaderData.symbolTable;\n\n return {\n vertex: this.vertexMain(vertexEntry, node.shaderData),\n fragment: this._fragmentMain(fragmentEntry, node.shaderData)\n };\n }\n\n vertexMain(entry: string, data: ShaderData): string {\n const { symbolTable } = data;\n const fnSymbol = symbolTable.lookup(entry, ESymbolType.FN);\n if (!fnSymbol?.astNode) throw `no entry function found: ${entry}`;\n\n const fnNode = fnSymbol.astNode;\n VisitorContext.context.stage = EShaderStage.VERTEX;\n\n const returnType = fnNode.protoType.returnType;\n if (typeof returnType.type === \"string\") {\n const varyStruct = symbolTable.lookup(returnType.type, ESymbolType.STRUCT);\n if (!varyStruct) {\n this._reportError(returnType.location, `invalid varying struct: ${returnType.type}`);\n } else {\n VisitorContext.context.varyingStruct = varyStruct.astNode;\n }\n } else if (returnType.type !== EKeyword.VOID) {\n this._reportError(returnType.location, \"vertex main entry can only return struct or void.\");\n }\n\n const paramList = fnNode.protoType.parameterList;\n if (paramList?.length) {\n for (const paramInfo of paramList) {\n if (typeof paramInfo.typeInfo.type === \"string\") {\n const structSymbol = symbolTable.lookup(paramInfo.typeInfo.type, ESymbolType.STRUCT);\n if (!structSymbol) {\n this._reportError(paramInfo.astNode.location, `Not found attribute struct \"${paramInfo.typeInfo.type}\".`);\n continue;\n }\n VisitorContext.context.attributeStructs.push(structSymbol.astNode);\n for (const prop of structSymbol.astNode.propList) {\n VisitorContext.context.attributeList.push(prop);\n }\n } else {\n VisitorContext.context.attributeList.push(paramInfo);\n }\n }\n }\n\n const statements = fnNode.statements.codeGen(this);\n\n const { _globalCodeArray: globalCodeArray } = this;\n globalCodeArray.length = 0;\n\n this._getGlobalText(data, globalCodeArray);\n this.getAttributeDeclare(globalCodeArray);\n this.getVaryingDeclare(globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n VisitorContext.context.reset();\n\n return `${this._versionText}\\n${globalCode}\\n\\nvoid main() ${statements}`;\n }\n\n private _fragmentMain(entry: string, data: ShaderData): string {\n const { symbolTable } = data;\n const fnSymbol = symbolTable.lookup(entry, ESymbolType.FN);\n if (!fnSymbol?.astNode) throw `no entry function found: ${entry}`;\n const fnNode = fnSymbol.astNode;\n\n const { returnStatement } = fnNode;\n if (returnStatement) {\n returnStatement.isFragReturnStatement = true;\n }\n\n const { context } = VisitorContext;\n context.stage = EShaderStage.FRAGMENT;\n\n const { type: returnDataType, location: returnLocation } = fnNode.protoType.returnType;\n if (typeof returnDataType === \"string\") {\n const mrtStruct = symbolTable.lookup(returnDataType, ESymbolType.STRUCT);\n if (!mrtStruct) {\n this._reportError(returnLocation, `invalid mrt struct: ${returnDataType}`);\n } else {\n context.mrtStruct = mrtStruct.astNode;\n }\n } else if (returnDataType !== EKeyword.VOID && returnDataType !== EKeyword.VEC4) {\n this._reportError(returnLocation, \"fragment main entry can only return struct or vec4.\");\n }\n\n const statements = fnNode.statements.codeGen(this);\n const { _globalCodeArray: globalCodeArray } = this;\n globalCodeArray.length = 0;\n\n this._getGlobalText(data, globalCodeArray);\n this.getVaryingDeclare(globalCodeArray);\n this.getMRTDeclare(globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n context.reset();\n return `${this._versionText}\\n${this._extensions}\\n${defaultPrecision}\\n${globalCode}\\n\\nvoid main() ${statements}`;\n }\n\n private _getGlobalText(\n data: ShaderData,\n textList: ICodeSegment[],\n lastLength: number = 0,\n _serialized: Set<string> = new Set()\n ): ICodeSegment[] {\n const { _referencedGlobals } = VisitorContext.context;\n\n if (lastLength === Object.keys(_referencedGlobals).length) {\n for (const precision of data.globalPrecisions) {\n textList.push({ text: precision.codeGen(this), index: precision.location.start.index });\n }\n return textList;\n }\n\n lastLength = Object.keys(_referencedGlobals).length;\n for (const ident in _referencedGlobals) {\n const sm = _referencedGlobals[ident];\n\n if (_serialized.has(ident)) continue;\n _serialized.add(ident);\n\n if (sm instanceof SymbolInfo) {\n if (sm.symbolType === ESymbolType.VAR) {\n textList.push({ text: `uniform ${sm.astNode.codeGen(this)}`, index: sm.astNode.location.start.index });\n } else {\n textList.push({ text: sm.astNode!.codeGen(this), index: sm.astNode!.location.start.index });\n }\n } else {\n textList.push({ text: sm.codeGen(this), index: sm.location.start.index });\n }\n }\n return this._getGlobalText(data, textList, lastLength, _serialized);\n }\n}\n","import { BaseToken } from \"../common/BaseToken\";\nimport { ASTNode } from \"../parser/AST\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { VisitorContext } from \"./VisitorContext\";\nimport { ICodeSegment } from \"./types\";\n\nexport class GLES100Visitor extends GLESVisitor {\n override _versionText: string = `#version 100`;\n override _extensions: string = [\n \"GL_EXT_shader_texture_lod\",\n \"GL_OES_standard_derivatives\",\n \"GL_EXT_draw_buffers\",\n \"GL_EXT_frag_depth\"\n ]\n .map((e) => `#extension ${e} : enable\\n`)\n .join(\"\");\n\n private static _singleton: GLES100Visitor;\n static getVisitor(): GLES100Visitor {\n if (!this._singleton) {\n this._singleton = new GLES100Visitor();\n }\n return this._singleton;\n }\n\n override getFragDataCodeGen(index: string | number): string {\n return `gl_FragData[${index}]`;\n }\n\n override getReferencedMRTPropText(index: string | number, ident: string): string {\n return \"\";\n }\n\n override getAttributeDeclare(out: ICodeSegment[]): void {\n for (const item of Object.values(VisitorContext.context._referencedAttributeList)) {\n out.push({\n text: `attribute ${item.typeInfo.typeLexeme} ${item.ident.lexeme};`,\n index: item.ident.location.start.index\n });\n }\n }\n\n override getVaryingDeclare(out: ICodeSegment[]): void {\n for (const item of Object.values(VisitorContext.context._referencedVaryingList)) {\n out.push({\n text: `varying ${item.typeInfo.typeLexeme} ${item.ident.lexeme};`,\n index: item.ident.location.start.index\n });\n }\n }\n\n override getMRTDeclare(out: ICodeSegment[]): void {\n return;\n }\n\n override visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const { children } = node;\n const postExpr = children[0];\n const { context } = VisitorContext;\n if (postExpr instanceof ASTNode.PostfixExpression && context.isMRTStruct(<string>postExpr.type)) {\n const propReferenced = children[2] as BaseToken;\n const prop = context.mrtStruct!.propList.find((item) => item.ident.lexeme === propReferenced.lexeme);\n if (!prop) {\n this._reportError(propReferenced.location, `not found mrt property: ${propReferenced.lexeme}`);\n return \"\";\n }\n return `gl_FragData[${prop.mrtIndex!}]`;\n }\n return super.visitPostfixExpression(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n const expression = node.children[1] as ASTNode.Expression;\n return `gl_FragColor = ${expression.codeGen(this)}`;\n }\n return super.visitJumpStatement(node);\n }\n}\n","import { ASTNode, TreeNode } from \"../parser/AST\";\nimport { SymbolType } from \"../parser/types\";\nimport { BaseToken as Token } from \"../common/BaseToken\";\nimport { EKeyword, ETokenType } from \"../common\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { EShaderStage } from \"../common/Enums\";\nimport { ICodeSegment } from \"./types\";\nimport { VisitorContext } from \"./VisitorContext\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { V3_GL_FragColor, V3_GL_FragData } from \"./CodeGenVisitor\";\n\nexport class GLES300Visitor extends GLESVisitor {\n override _versionText: string = \"#version 300 es\";\n\n private static _singleton: GLES300Visitor;\n static getVisitor(): GLES300Visitor {\n if (!this._singleton) {\n this._singleton = new GLES300Visitor();\n }\n return this._singleton;\n }\n\n override getFragDataCodeGen(index: string | number): string {\n return `${V3_GL_FragData}_${index}`;\n }\n\n override getReferencedMRTPropText(index: string | number, ident: string): string {\n return `layout(location = ${index}) out vec4 ${ident};`;\n }\n\n override getAttributeDeclare(out: ICodeSegment[]): void {\n for (const item of Object.values(VisitorContext.context._referencedAttributeList)) {\n out.push({\n text: `in ${item.typeInfo.typeLexeme} ${item.ident.lexeme};`,\n index: item.ident.location.start.index\n });\n }\n }\n\n override getVaryingDeclare(out: ICodeSegment[]): void {\n const qualifier = VisitorContext.context.stage === EShaderStage.FRAGMENT ? \"in\" : \"out\";\n const values = Object.values(VisitorContext.context._referencedVaryingList);\n for (let i = 0; i < values.length; i++) {\n const item = values[i];\n out.push({\n text: `${item.qualifier ?? qualifier} ${item.typeInfo.typeLexeme} ${item.ident.lexeme};`,\n index: item.ident.location.start.index\n });\n }\n }\n\n override getMRTDeclare(out: ICodeSegment[]): void {\n const referencedMRTList = VisitorContext.context._referencedMRTList;\n for (let ident in referencedMRTList) {\n const info = referencedMRTList[ident];\n if (typeof info === \"string\") {\n out.push({\n text: info,\n index: Number.MAX_SAFE_INTEGER\n });\n } else {\n out.push({\n text: this.getReferencedMRTPropText(info.mrtIndex, ident),\n index: info.ident.location.start.index\n });\n }\n }\n }\n\n override visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n const children = node.children;\n const typeSpecifier = children[0] as ASTNode.TypeSpecifier;\n if (typeSpecifier.children.length !== 1) {\n return this.defaultCodeGen(children);\n }\n let ident = node.lexeme;\n if (node.ident === \"texture2D\" || node.ident === \"textureCube\") {\n ident = \"texture\";\n } else if (node.ident === \"texture2DProj\") {\n ident = \"textureProj\";\n } else if (VisitorContext.context.stage === EShaderStage.FRAGMENT) {\n switch (node.ident) {\n case \"texture2DLodEXT\":\n case \"textureCubeLodEXT\":\n ident = \"textureLod\";\n break;\n case \"texture2DGradEXT\":\n case \"textureCubeGradEXT\":\n ident = \"textureGrad\";\n break;\n case \"texture2DProjLodEXT\":\n ident = \"textureProjLod\";\n break;\n case \"texture2DProjGradEXT\":\n ident = \"textureProjGrad\";\n break;\n case \"gl_FragDepthEXT\":\n ident = \"gl_FragDepth\";\n break;\n }\n }\n return ident;\n }\n\n override visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n const { context } = VisitorContext;\n if (context.stage === EShaderStage.FRAGMENT && node.lexeme === \"gl_FragColor\") {\n // #if _VERBOSE\n if (context._referencedMRTList[\"gl_FragData\"]) {\n this._reportError(node.location, \"cannot use both gl_FragData and gl_FragColor\");\n }\n if (context.mrtStruct) {\n this._reportError(node.location, \"gl_FragColor cannot be used with MRT (Multiple Render Targets).\");\n }\n // #endif\n this._registerFragColorVariable(node);\n return V3_GL_FragColor;\n }\n return super.visitVariableIdentifier(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n const { mrtStruct } = VisitorContext.context;\n if (mrtStruct) {\n return \"\";\n }\n this._registerFragColorVariable(node);\n\n const expression = node.children[1] as ASTNode.Expression;\n return `${V3_GL_FragColor} = ${expression.codeGen(this)};`;\n }\n return super.visitJumpStatement(node);\n }\n\n private _registerFragColorVariable(node: TreeNode) {\n const { _referencedVaryingList } = VisitorContext.context;\n if (!_referencedVaryingList[V3_GL_FragColor]) {\n const token = Token.pool.get();\n token.set(ETokenType.ID, V3_GL_FragColor, ShaderLab.createPosition(0, 0, 0));\n _referencedVaryingList[V3_GL_FragColor] = {\n ident: token,\n typeInfo: new SymbolType(EKeyword.VEC4, \"vec4\"),\n qualifier: \"out\",\n astNode: node\n };\n }\n }\n}\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","import { EKeyword } from \"../common\";\n\nexport const KeywordMap = new Map([\n [\"RenderQueueType\", EKeyword.GS_RenderQueueType],\n [\"BlendState\", EKeyword.GS_BlendState],\n [\"DepthState\", EKeyword.GS_DepthState],\n [\"StencilState\", EKeyword.GS_StencilState],\n [\"RasterState\", EKeyword.GS_RasterState],\n [\"EditorProperties\", EKeyword.GS_EditorProperties],\n [\"EditorMacros\", EKeyword.GS_EditorMacros],\n [\"Editor\", EKeyword.GS_Editor],\n [\"Tags\", EKeyword.GS_Tags],\n [\"VertexShader\", EKeyword.GS_VertexShader],\n [\"FragmentShader\", EKeyword.GS_FragmentShader],\n [\"SubShader\", EKeyword.GS_SubShader],\n [\"Pass\", EKeyword.GS_Pass],\n [\"BlendFactor\", EKeyword.GS_BlendFactor],\n [\"BlendOperation\", EKeyword.GS_BlendOperation],\n [\"Bool\", EKeyword.GS_Bool],\n [\"Number\", EKeyword.GS_Number],\n [\"CompareFunction\", EKeyword.GS_CompareFunction],\n [\"StencilOperation\", EKeyword.GS_StencilOperation],\n [\"CullMode\", EKeyword.GS_CullMode],\n [\"true\", EKeyword.TRUE],\n [\"false\", EKeyword.FALSE],\n [\"UsePass\", EKeyword.GS_UsePass],\n [\"Color\", EKeyword.GS_Color]\n]);\n","import BaseScanner from \"../common/BaseScanner\";\n\nexport default class Scanner extends BaseScanner {\n constructor(source: string, kws: Map<string, number> = new Map()) {\n super(source, kws);\n }\n\n /**\n * split by space\n */\n scanWord(): string {\n this.skipCommentsAndSpace();\n const start = this._currentIndex;\n while (/\\S/.test(this.getCurChar()) && !this.isEnd()) this._advance();\n return this._source.substring(start, this._currentIndex);\n }\n\n scanNumber(): number {\n this.skipCommentsAndSpace();\n const start = this._currentIndex;\n while (/[0-9]/.test(this.getCurChar())) this._advance();\n if (this.getCurChar() === \".\") {\n this._advance();\n while (/[0-9]/.test(this.getCurChar())) this._advance();\n }\n return Number(this._source.substring(start, this._currentIndex));\n }\n\n // #if _VERBOSE\n scanToCharacter(char: string): void {\n while (this.getCurChar() !== char && !this.isEnd()) {\n this._advance();\n }\n this._advance();\n }\n // #endif\n}\n","import { Logger } from \"@galacean/engine\";\nimport { TokenType } from \"../common\";\nimport { BaseSymbolTable, IBaseSymbol } from \"../common/BaseSymbolTable\";\n\nexport interface ISymbol extends IBaseSymbol {\n type: number;\n value?: any;\n}\n\nexport default class ContentSymbolTable extends BaseSymbolTable<ISymbol> {\n override insert(sm: ISymbol): void {\n const entry = this._table.get(sm.ident) ?? [];\n for (let i = 0; i < entry.length; i++) {\n if (entry[i].type === sm.type) {\n Logger.warn(\"replace symbol:\", sm.ident);\n entry[i] = sm;\n return;\n }\n }\n entry.push(sm);\n this._table.set(sm.ident, entry);\n }\n\n lookup(ident: string, type: TokenType): ISymbol | undefined {\n const entry = this._table.get(ident);\n if (entry) {\n for (let length = entry.length, i = 0; i < length; i++) {\n const item = entry[i];\n if (item.type === type) return item;\n }\n }\n }\n}\n","import { SymbolTableStack } from \"../common/BaseSymbolTable\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { EKeyword, ETokenType, TokenType } from \"../common\";\nimport { ShaderPosition } from \"../common\";\nimport { KeywordMap } from \"./KeywordMap\";\nimport Scanner from \"./Scanner\";\nimport ContentSymbolTable, { ISymbol } from \"./ContentSymbolTable\";\nimport {\n RenderStateDataKey,\n Color,\n RenderQueueType,\n CompareFunction,\n StencilOperation,\n BlendOperation,\n BlendFactor,\n CullMode,\n Logger\n} from \"@galacean/engine\";\nimport {\n IStatement,\n IShaderContent,\n ISubShaderContent,\n IShaderPassContent,\n IRenderStates\n} from \"@galacean/engine-design\";\nimport { GSErrorName } from \"../GSError\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\nconst EngineType = [\n EKeyword.GS_RenderQueueType,\n EKeyword.GS_BlendFactor,\n EKeyword.GS_BlendOperation,\n EKeyword.GS_Bool,\n EKeyword.GS_Number,\n EKeyword.GS_Color,\n EKeyword.GS_CompareFunction,\n EKeyword.GS_StencilOperation,\n EKeyword.GS_CullMode\n];\n\nconst RenderStateType = [\n EKeyword.GS_BlendState,\n EKeyword.GS_DepthState,\n EKeyword.GS_RasterState,\n EKeyword.GS_StencilState\n];\n\n/**\n * @internal\n */\nexport class ShaderContentParser {\n static _engineType = { RenderQueueType, CompareFunction, StencilOperation, BlendOperation, BlendFactor, CullMode };\n\n static _errors: GSError[] = [];\n\n private static _symbolTableStack: SymbolTableStack<ISymbol, ContentSymbolTable> = new SymbolTableStack();\n\n static reset() {\n this._errors.length = 0;\n this._symbolTableStack.clear();\n this._newScope();\n }\n\n static parse(source: string): IShaderContent {\n const start = performance.now();\n\n const scanner = new Scanner(source, KeywordMap);\n const ret = {\n subShaders: [],\n globalContents: [],\n renderStates: { constantMap: {}, variableMap: {} }\n } as IShaderContent;\n\n scanner.scanText(\"Shader\");\n ret.name = scanner.scanPairedText('\"', '\"');\n scanner.scanText(\"{\");\n\n scanner.skipCommentsAndSpace();\n this._parseShaderStatements(ret, scanner);\n\n const shaderGlobalStatements = ret.globalContents;\n const shaderRenderStates = ret.renderStates;\n for (let i = 0; i < ret.subShaders.length; i++) {\n const subShader = ret.subShaders[i];\n const curSubShaderGlobalStatements = shaderGlobalStatements.concat(subShader.globalContents);\n const constMap = { ...shaderRenderStates.constantMap, ...subShader.renderStates.constantMap };\n const variableMap = { ...shaderRenderStates.variableMap, ...subShader.renderStates.variableMap };\n\n for (let i = 0; i < subShader.passes.length; i++) {\n const pass = subShader.passes[i];\n Object.assign(pass.renderStates.constantMap, constMap);\n Object.assign(pass.renderStates.variableMap, variableMap);\n if (pass.isUsePass) continue;\n // @ts-ignore\n const passGlobalStatements = curSubShaderGlobalStatements.concat(pass.globalContents);\n pass.contents = passGlobalStatements.map((item) => item.content).join(\"\\n\");\n }\n }\n\n Logger.info(`[content compilation] cost time ${performance.now() - start}ms`);\n\n return ret;\n }\n\n private static _isRenderStateDeclarator(token: BaseToken) {\n return RenderStateType.includes(token.type);\n }\n\n private static _isEngineType(token: BaseToken) {\n return EngineType.includes(token.type);\n }\n\n private static _lookupSymbolByType(ident: string, type: TokenType): ISymbol | undefined {\n const stack = ShaderContentParser._symbolTableStack.stack;\n for (let length = stack.length, i = length - 1; i >= 0; i--) {\n const symbolTable = stack[i];\n const ret = symbolTable.lookup(ident, type);\n if (ret) return ret;\n }\n }\n\n private static _parseShaderStatements(ret: IShaderContent, scanner: Scanner) {\n let braceLevel = 1;\n let start = scanner.getCurPosition();\n\n while (true) {\n const word = scanner.scanToken();\n switch (word.type) {\n case EKeyword.GS_SubShader:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n const subShader = this._parseSubShader(scanner);\n ret.subShaders.push(subShader);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_EditorProperties:\n case EKeyword.GS_EditorMacros:\n case EKeyword.GS_Editor:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n scanner.scanPairedText(\"{\", \"}\", true);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_RenderQueueType:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderQueueAssignment(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case ETokenType.NOT_WORD:\n if (word.lexeme === \"{\") braceLevel += 1;\n else if (word.lexeme === \"}\") {\n braceLevel -= 1;\n if (braceLevel === 0) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._symbolTableStack.dropScope();\n return;\n }\n }\n\n default:\n if (ShaderContentParser._isRenderStateDeclarator(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderStateDeclarationOrAssignment(ret, word, scanner);\n start = scanner.getCurPosition();\n break;\n } else if (ShaderContentParser._isEngineType(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseVariableDeclaration(word.type, scanner);\n start = scanner.getCurPosition();\n break;\n }\n }\n }\n }\n\n private static _parseRenderStateDeclarationOrAssignment(\n ret: { renderStates: IRenderStates },\n stateToken: BaseToken,\n scanner: Scanner\n ) {\n const ident = scanner.scanToken();\n let isDeclaration: boolean;\n if (ident.type === ETokenType.ID) {\n isDeclaration = true;\n scanner.scanText(\"{\");\n } else if (ident.lexeme === \"{\") {\n isDeclaration = false;\n } else if (ident.lexeme === \"=\") {\n const variable = scanner.scanToken();\n scanner.scanText(\";\");\n const sm = ShaderContentParser._lookupSymbolByType(variable.lexeme, stateToken.type);\n if (!sm?.value) {\n const error = ShaderLabUtils.createGSError(\n `Invalid \"${stateToken.lexeme}\" variable: ${variable.lexeme}`,\n GSErrorName.CompilationError,\n scanner.source,\n variable.location\n );\n // #if _VERBOSE\n this._errors.push(<GSError>error);\n return;\n // #endif\n }\n const renderState = sm.value as IRenderStates;\n Object.assign(ret.renderStates.constantMap, renderState.constantMap);\n Object.assign(ret.renderStates.variableMap, renderState.variableMap);\n return;\n }\n\n const renderState = this._parseRenderStatePropList(stateToken.lexeme, scanner);\n if (isDeclaration) {\n this._symbolTableStack.insert({ ident: ident.lexeme, type: stateToken.type, value: renderState });\n } else {\n Object.assign(ret.renderStates.constantMap, renderState.constantMap);\n Object.assign(ret.renderStates.variableMap, renderState.variableMap);\n }\n }\n\n private static _parseVariableDeclaration(type: number, scanner: Scanner) {\n const token = scanner.scanToken();\n scanner.scanText(\";\");\n this._symbolTableStack.insert({ type: token.type, ident: token.lexeme });\n }\n\n private static _newScope() {\n const symbolTable = new ContentSymbolTable();\n this._symbolTableStack.newScope(symbolTable);\n }\n\n private static _dropScope() {\n this._symbolTableStack.dropScope();\n }\n\n private static _parseRenderStatePropList(state: string, scanner: Scanner): IRenderStates {\n const ret: IRenderStates = { constantMap: {}, variableMap: {} };\n while (scanner.getCurChar() !== \"}\") {\n this._parseRenderStatePropItem(ret, state, scanner);\n scanner.skipCommentsAndSpace();\n }\n scanner._advance();\n return ret;\n }\n\n private static _parseRenderStatePropItem(ret: IRenderStates, state: string, scanner: Scanner) {\n let renderStateProp = scanner.scanToken().lexeme;\n const op = scanner.scanToken();\n if (state === \"BlendState\" && renderStateProp !== \"BlendColor\" && renderStateProp !== \"AlphaToCoverage\") {\n let idx = 0;\n if (op.lexeme === \"[\") {\n idx = scanner.scanNumber();\n scanner.scanText(\"]\");\n scanner.scanText(\"=\");\n } else if (op.lexeme !== \"=\") {\n const error = ShaderLabUtils.createGSError(\n `Invalid syntax, expect character '=', but got ${op.lexeme}`,\n GSErrorName.CompilationError,\n scanner.source,\n scanner.getCurPosition()\n );\n // #if _VERBOSE\n this._errors.push(<GSError>error);\n scanner.scanToCharacter(\";\");\n return;\n // #endif\n }\n renderStateProp += idx;\n }\n\n renderStateProp = state + renderStateProp;\n const renderStateElementKey = RenderStateDataKey[renderStateProp];\n if (renderStateElementKey == undefined) {\n const error = ShaderLabUtils.createGSError(\n `Invalid render state element ${renderStateProp}`,\n GSErrorName.CompilationError,\n scanner.source,\n scanner.getCurPosition()\n );\n // #if _VERBOSE\n this._errors.push(<GSError>error);\n scanner.scanToCharacter(\";\");\n return;\n // #endif\n }\n\n scanner.skipCommentsAndSpace();\n let value: any;\n if (/[0-9.]/.test(scanner.getCurChar())) {\n value = scanner.scanNumber();\n } else {\n const token = scanner.scanToken();\n if (token.type === EKeyword.TRUE) value = true;\n else if (token.type === EKeyword.FALSE) value = false;\n else if (token.type === EKeyword.GS_Color) {\n scanner.scanText(\"(\");\n const args: number[] = [];\n while (true) {\n args.push(scanner.scanNumber());\n scanner.skipCommentsAndSpace();\n const peek = scanner.peek(1);\n if (peek === \")\") {\n scanner._advance();\n break;\n }\n scanner.scanText(\",\");\n }\n value = new Color(...args);\n } else if (scanner.getCurChar() === \".\") {\n scanner._advance();\n const engineTypeProp = scanner.scanToken();\n value = ShaderContentParser._engineType[token.lexeme]?.[engineTypeProp.lexeme];\n if (value == undefined) {\n const error = ShaderLabUtils.createGSError(\n `Invalid engine constant: ${token.lexeme}.${engineTypeProp.lexeme}`,\n GSErrorName.CompilationError,\n scanner.source,\n engineTypeProp.location\n );\n // #if _VERBOSE\n this._errors.push(<GSError>error);\n scanner.scanToCharacter(\";\");\n return;\n // #endif\n }\n } else {\n value = token.lexeme;\n }\n }\n scanner.scanText(\";\");\n if (typeof value === \"string\") {\n ret.variableMap[renderStateElementKey] = value;\n } else {\n ret.constantMap[renderStateElementKey] = value;\n }\n }\n\n private static _parseRenderQueueAssignment(ret: { renderStates: IRenderStates }, scanner: Scanner) {\n scanner.scanText(\"=\");\n const word = scanner.scanToken();\n scanner.scanText(\";\");\n const value = ShaderContentParser._engineType.RenderQueueType[word.lexeme];\n const key = RenderStateDataKey.RenderQueueType;\n if (value == undefined) {\n ret.renderStates.variableMap[key] = word.lexeme;\n } else {\n ret.renderStates.constantMap[key] = value;\n }\n }\n\n private static _addGlobalStatement(\n ret: { globalContents: IStatement[] },\n scanner: Scanner,\n start: ShaderPosition,\n offset: number\n ) {\n if (scanner.current > start.index + offset) {\n ret.globalContents.push({\n range: { start, end: { ...scanner.getCurPosition(), index: scanner.current - offset - 1 } },\n content: scanner.source.substring(start.index, scanner.current - offset - 1)\n });\n }\n }\n\n private static _parseSubShader(scanner: Scanner): ISubShaderContent {\n this._newScope();\n const ret = {\n passes: [],\n globalContents: [],\n renderStates: { constantMap: {}, variableMap: {} },\n tags: {}\n } as ISubShaderContent;\n let braceLevel = 1;\n ret.name = scanner.scanPairedText('\"', '\"');\n scanner.scanText(\"{\");\n\n scanner.skipCommentsAndSpace();\n let start = scanner.getCurPosition();\n\n while (true) {\n const word = scanner.scanToken();\n switch (word.type) {\n case EKeyword.GS_Pass:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n const pass = this._parsePass(scanner);\n ret.passes.push(pass);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_RenderQueueType:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderQueueAssignment(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_UsePass:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n const name = scanner.scanPairedText('\"', '\"');\n // @ts-ignore\n ret.passes.push({ name, isUsePass: true, renderStates: { constantMap: {}, variableMap: {} }, tags: {} });\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_Tags:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseTags(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case ETokenType.NOT_WORD:\n if (word.lexeme === \"{\") braceLevel += 1;\n else if (word.lexeme === \"}\") {\n braceLevel -= 1;\n if (braceLevel === 0) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._dropScope();\n return ret;\n }\n }\n\n default:\n if (ShaderContentParser._isRenderStateDeclarator(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderStateDeclarationOrAssignment(ret, word, scanner);\n start = scanner.getCurPosition();\n break;\n } else if (ShaderContentParser._isEngineType(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseVariableDeclaration(word.type, scanner);\n start = scanner.getCurPosition();\n break;\n }\n }\n }\n }\n\n private static _parseTags(ret: { tags?: Record<string, number | string | boolean> }, scanner: Scanner) {\n scanner.scanText(\"{\");\n while (true) {\n const ident = scanner.scanToken();\n scanner.scanText(\"=\");\n const value = scanner.scanPairedText('\"', '\"');\n scanner.skipCommentsAndSpace();\n\n ret.tags[ident.lexeme] = value;\n\n if (scanner.peek(1) === \"}\") {\n scanner._advance();\n return;\n }\n scanner.scanText(\",\");\n }\n }\n\n private static _parsePass(scanner: Scanner): IShaderPassContent {\n this._newScope();\n const ret = {\n globalContents: [],\n renderStates: { constantMap: {}, variableMap: {} },\n tags: {}\n } as IShaderPassContent & {\n globalContents: IStatement[];\n };\n ret.name = scanner.scanPairedText('\"', '\"');\n scanner.scanText(\"{\");\n let braceLevel = 1;\n\n scanner.skipCommentsAndSpace();\n let start = scanner.getCurPosition();\n\n while (true) {\n const word = scanner.scanToken();\n switch (word.type) {\n case EKeyword.GS_RenderQueueType:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderQueueAssignment(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_Tags:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseTags(ret, scanner);\n start = scanner.getCurPosition();\n break;\n\n case EKeyword.GS_VertexShader:\n case EKeyword.GS_FragmentShader:\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n scanner.scanText(\"=\");\n const entry = scanner.scanToken();\n if (ret[word.lexeme]) {\n const error = ShaderLabUtils.createGSError(\n \"reassign main entry\",\n GSErrorName.CompilationError,\n scanner.source,\n scanner.getCurPosition()\n );\n // #if _VERBOSE\n Logger.error(error.toString());\n throw error;\n // #endif\n }\n const key = word.type === EKeyword.GS_VertexShader ? \"vertexEntry\" : \"fragmentEntry\";\n ret[key] = entry.lexeme;\n scanner.scanText(\";\");\n start = scanner.getCurPosition();\n break;\n\n case ETokenType.NOT_WORD:\n if (word.lexeme === \"{\") braceLevel += 1;\n else if (word.lexeme === \"}\") {\n braceLevel -= 1;\n if (braceLevel === 0) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._dropScope();\n return ret;\n }\n }\n\n default:\n if (ShaderContentParser._isRenderStateDeclarator(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseRenderStateDeclarationOrAssignment(ret, word, scanner);\n start = scanner.getCurPosition();\n break;\n } else if (ShaderContentParser._isEngineType(word)) {\n this._addGlobalStatement(ret, scanner, start, word.lexeme.length);\n this._parseVariableDeclaration(word.type, scanner);\n start = scanner.getCurPosition();\n break;\n }\n }\n }\n }\n}\n","import { Lexer } from \"./lexer\";\nimport { ShaderTargetParser } from \"./parser\";\nimport { Preprocessor } from \"./preprocessor\";\nimport { GLES100Visitor, GLES300Visitor } from \"./codeGen\";\nimport { IShaderContent, IShaderLab } from \"@galacean/engine-design\";\nimport { ShaderContentParser } from \"./contentParser\";\n// @ts-ignore\nimport { Logger, ShaderLib, ShaderMacro, ShaderPlatformTarget } from \"@galacean/engine\";\nimport { ShaderPosition, ShaderRange } from \"./common\";\n// #if _VERBOSE\nimport { GSError } from \"./GSError\";\n// #endif\nimport { PpParser } from \"./preprocessor/PpParser\";\nimport { ShaderLabUtils } from \"./ShaderLabUtils\";\nimport { IShaderProgramSource } from \"@galacean/engine-design/types/shader-lab/IShaderProgramSource\";\n\n/** @internal */\nexport class ShaderLab implements IShaderLab {\n private static _parser = ShaderTargetParser.create();\n private static _shaderPositionPool = ShaderLabUtils.createObjectPool(ShaderPosition);\n private static _shaderRangePool = ShaderLabUtils.createObjectPool(ShaderRange);\n\n // #if _VERBOSE\n static _processingPassText?: string;\n // #endif\n\n static createPosition(index: number, line?: number, column?: number): ShaderPosition {\n const position = this._shaderPositionPool.get();\n position.set(\n index,\n // #if _VERBOSE\n line,\n column\n // #endif\n );\n return position;\n }\n\n static createRange(start: ShaderPosition, end: ShaderPosition): ShaderRange {\n const range = this._shaderRangePool.get();\n range.set(start, end);\n return range;\n }\n\n // #if _VERBOSE\n /** Retrieve the compilation errors */\n readonly errors: Error[] = [];\n // #endif\n\n _parseShaderPass(\n source: string,\n vertexEntry: string,\n fragmentEntry: string,\n macros: ShaderMacro[],\n backend: ShaderPlatformTarget,\n platformMacros: string[],\n basePathForIncludeKey: string\n ): IShaderProgramSource | undefined {\n Preprocessor.reset(ShaderLib, basePathForIncludeKey);\n for (const macro of macros) {\n Preprocessor.addPredefinedMacro(macro.name, macro.value);\n }\n\n for (let i = 0; i < platformMacros.length; i++) {\n Preprocessor.addPredefinedMacro(platformMacros[i]);\n }\n\n const preprocessorStart = performance.now();\n const ppdContent = Preprocessor.process(source);\n // #if _VERBOSE\n if (PpParser._errors.length > 0) {\n for (const err of PpParser._errors) {\n this.errors.push(<GSError>err);\n }\n this._logErrors();\n return undefined;\n }\n // #endif\n\n Logger.info(`[pass compilation - preprocessor] cost time ${performance.now() - preprocessorStart}ms`);\n\n const lexer = new Lexer(ppdContent);\n const tokens = lexer.tokenize();\n\n const { _parser: parser } = ShaderLab;\n\n ShaderLab._processingPassText = ppdContent;\n const program = parser.parse(tokens);\n\n // #if _VERBOSE\n for (const err of parser.errors) {\n this.errors.push(err);\n }\n // #endif\n if (!program) {\n // #if _VERBOSE\n this._logErrors();\n // #endif\n return undefined;\n }\n\n const codeGen =\n backend === ShaderPlatformTarget.GLES100 ? GLES100Visitor.getVisitor() : GLES300Visitor.getVisitor();\n\n const start = performance.now();\n const ret = codeGen.visitShaderProgram(program, vertexEntry, fragmentEntry);\n Logger.info(`[CodeGen] cost time: ${performance.now() - start}ms`);\n ShaderLab._processingPassText = undefined;\n\n // #if _VERBOSE\n for (const err of codeGen.errors) {\n this.errors.push(err);\n }\n this._logErrors();\n // #endif\n\n return ret;\n }\n\n _parseShaderContent(shaderSource: string): IShaderContent {\n ShaderLabUtils.clearAllShaderLabObjectPool();\n ShaderContentParser.reset();\n const ret = ShaderContentParser.parse(shaderSource);\n\n // #if _VERBOSE\n this.errors.length = 0;\n for (const error of ShaderContentParser._errors) {\n this.errors.push(error);\n }\n // #endif\n\n return ret;\n }\n\n // #if _VERBOSE\n /**\n * @internal\n */\n _logErrors() {\n const errors = this.errors;\n if (errors.length === 0 || !Logger.isEnabled) return;\n Logger.error(`${errors.length} errors occur!`);\n for (const err of errors) {\n Logger.error(err.toString());\n }\n }\n // #endif\n}\n","export { ShaderLab } from \"./ShaderLab\";\n\n// #if _VERBOSE\nexport { Preprocessor } from \"./preprocessor\";\nexport * from \"./GSError\";\n// #endif\n\n//@ts-ignore\nexport const version = `__buildVersion`;\n\nlet mode = \"Release\";\n// #if _VERBOSE\nmode = \"Verbose\";\n// #endif\n\nconsole.log(`Galacean Engine ShaderLab Version: ${version} | Mode: ${mode}`);\n"],"names":["_array_like_to_array","arr","len","length","i","arr2","Array","_create_for_of_iterator_helper_loose","o","allowArrayLike","it","Symbol","iterator","call","next","bind","isArray","_unsupported_iterable_to_array","minLen","n","Object","prototype","toString","slice","constructor","name","from","test","done","value","TypeError","_set_prototype_of","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","create","writable","configurable","__decorate","decorators","target","key","desc","d","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SuppressedError","EKeyword","ETokenType","GSErrorName","EAction","ESymbolType","NoneTerminal","ASTNode","TrivialNode","ScopeBrace","ScopeEndBrace","JumpStatement","ExpressionAstNode","SingleDeclaration","FullySpecifiedType","TypeQualifier","SingleTypeQualifier","TypeSpecifier","ArraySpecifier","IntegerConstantExpressionOperator","IntegerConstantExpression","TypeSpecifierNonArray","ExtBuiltinTypeSpecifierNonArray","InitDeclaratorList","IdentifierList","Declaration","FunctionProtoType","FunctionDeclarator","FunctionHeader","FunctionParameterList","ParameterDeclaration","ParameterDeclarator","CompoundStatementNoScope","StatementList","FunctionDefinition","FunctionCall","FunctionCallGeneric","FunctionCallParameterList","PrecisionSpecifier","FunctionIdentifier","AssignmentExpression","Expression","PrimaryExpression","PostfixExpression","StructSpecifier","StructDeclarationList","StructDeclaration","LayoutQualifier","StructDeclaratorList","StructDeclarator","VariableDeclaration","VariableDeclarationList","VariableIdentifier","GLShaderProgram","EPpToken","EPpKeyword","EShaderStage","ShaderRange","set","start","end","dispose","ShaderPosition","index","KeywordTable","Map","ATTRIBUTE","CONST","BOOL","FLOAT","DOUBLE","INT","UINT","BREAK","CONTINUE","DO","ELSE","FOR","IF","WHILE","DISCARD","RETURN","BVEC2","BVEC3","BVEC4","IVEC2","IVEC3","IVEC4","UVEC2","UVEC3","UVEC4","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","IN","OUT","INOUT","SAMPLER2D","SAMPLER_CUBE","SAMPLER3D","SAMPLER2D_SHADOW","SAMPLER_CUBE_SHADOW","SAMPLER2D_ARRAY","SAMPLER2D_ARRAY_SHADOW","I_SAMPLER2D","I_SAMPLER3D","I_SAMPLER_CUBE","I_SAMPLER2D_ARRAY","U_SAMPLER2D","U_SAMPLER3D","U_SAMPLER_CUBE","U_SAMPLER2D_ARRAY","STRUCT","VOID","TRUE","FALSE","PRECISION","PRECISE","HIGHP","MEDIUMP","LOWP","INVARIANT","FLAT","SMOOTH","NOPERSPECTIVE","CENTROID","LAYOUT","LOCATION","_instanceof","left","right","hasInstance","ShaderLabUtils","createObjectPool","type","pool","ClearableObjectPool","_shaderLabObjectPoolSet","push","clearAllShaderLabObjectPool","clear","createGSError","message","errorName","source","location","file","Logger","error","BaseToken","lexeme","arg","ShaderLab","createPosition","createRange","EOF","LexerUtils","isNum","charCode","isLetter","isAlpha","isPpCharacters","isSpace","_defineProperties","props","descriptor","enumerable","_create_class","Constructor","protoProps","staticProps","BaseScanner","kws","_currentIndex","_source","_keywordsMap","getCurPosition","isEnd","getCurChar","getCurCharCode","charCodeAt","advance","count","_advance","skipSpace","includeLineBreak","spaceChars","_spaceCharsWithBreak","_spaceChars","curChar","_checkIsIn","skipCommentsAndSpace","peek","to","offset","substring","scanText","text","throwError","pos","_len","msgs","_key","join","ScannerError","scanPairedText","balanced","skipLeading","level","scanToken","onToken","splitCharRegex","_this__keywordsMap_get","token","get","NOT_WORD","tokenType","ID","range","checked","chars","current","Lexer","reset","_proto","tokenize","thisArg","body","f","y","t","_","label","sent","trys","ops","g","Iterator","verb","v","step","op","pop","e","_state","_scanWord","_scanNum","_getPosition","LEFT_ASSIGN","LEFT_OP","LE_OP","LEFT_ANGLE","RIGHT_ASSIGN","RIGHT_OP","GE_OP","RIGHT_ANGLE","INC_OP","ADD_ASSIGN","PLUS","DEC_OP","SUB_ASSIGN","DASH","EQ_OP","EQUAL","NE_OP","BANG","AND_OP","AMPERSAND","OR_OP","OR_ASSIGN","VERTICAL_BAR","XOR_OP","XOR_ASSIGN","CARET","MUL_ASSIGN","STAR","DIV_ASSIGN","SLASH","MOD_ASSIGN","PERCENT","LEFT_PAREN","RIGHT_PAREN","LEFT_BRACE","RIGHT_BRACE","LEFT_BRACKET","RIGHT_BRACKET","_scanNumAfterDot","DOT","COMMA","COLON","SEMICOLON","TILDE","QUESTION","_scanStringConst","buffer","STRING_CONST","FLOAT_CONSTANT","word","kt","_scanFloatSuffix","_scanIntegerSuffix","INT_CONSTANT","ShaderData","globalPrecisions","SymbolDataType","typeLexeme","arraySpecifier","SymbolInfo","ident","symbolType","astNode","dataType","signature","FnSymbol","protoType","returnType","typeSpecifier","FN","StructSymbol","BaseSymbolTable","_table","SymbolTableStack","stack","newScope","scope","dropScope","insert","sm","_scope","TargetSymbolTable","_this__table_get","entry","_compareWith","warn","lookup","item","getAllFnSymbols","fnIdent","entries","filter","params","paramSig","comparedParams","t1","t2","VarSymbol","isGlobalVariable","initAst","_this","VAR","SemanticAnalyzer","semanticStack","acceptRule","undefined","symbolTableStack","curFunctionInfo","_shaderData","_translationRuleTable","addTranslationRule","pid","rule","getTranslationRule","lookupSymbolBy","ret","symbolTable","reportError","loc","shaderData","Production","goal","derivation","id","_id","Grammar","productions","startSymbol","unshift","START","getProductionList","nonTerminal","isNullableNT","NT","find","EPSILON","getProductionByID","map","gsl","SymbolType","StructProp","typeInfo","mrtIndex","ASTNodeDecorator","nt","TreeNode","children","_location","_children","init","codeGen","visitor","defaultCodeGen","semanticAnalyze","sa","_unwrapToken","node","Token","_ignore","scope_brace","scope_end_brace","isFragReturnStatement","returnStatement","visitJumpStatement","jump_statement","_type","_this__type","childrenLen","fullyType","initializer","visitSingleDeclaration","single_declaration","fully_specified_type","type_qualifier","child","qualifier","single_type_qualifier","arraySize","firstChild","_children_","size","isCustom","type_specifier","integerConstantExpr","array_specifier","operator","compute","a","b","integer_constant_expression_operator","Number","integer_constant_expression","tt","type_specifier_nonarray","ext_builtin_type_specifier_nonarray","childrenLength","initDeclList","init_declarator_list","idList","curIdList","list","listIdLength","identifier_list","visitDeclaration","declaration","declarator","parameterList","parameterInfoList","visitFunctionProtoType","function_prototype","header","function_declarator","visitFunctionHeader","function_header","decl","listParamLength","visitFunctionParameterList","function_parameter_list","typeQualifier","parameterDeclarator","varSymbol","parameter_declaration","parameter_declarator","compound_statement_no_scope","visitStatementList","statement_list","statements","visitFunctionDefinition","function_definition","visitFunctionCall","function_call","fnSymbol","functionIdentifier","isBuiltin","paramList","function_call_generic","paramNodes","expr","function_call_parameter_list","precision_specifier","visitFunctionIdentifier","function_identifier","assignment_expression","expression","primary_expression","visitPostfixExpression","postfix_expression","propList","struct_specifier","propsLength","listProps","declProps","listPropLength","declPropLength","struct_declaration_list","declaratorList","_this_typeSpecifier","prop","declaratorListLength","struct_declaration","layout_qualifier","listLength","struct_declarator_list","struct_declarator","visitGlobalVariableDeclaration","variable_declaration","variableDeclaration","newVariable","variable_declaration_list","_this_symbolInfo_dataType","_this_symbolInfo","symbolInfo","visitVariableIdentifier","variable_identifier","gs_shader_program","GrammarUtils","isTerminal","createProductionWithOptions","options","astTypePool","_step","_iterator","opt","addMapSetItem","k","Set","add","isSubSet","sb","has","isActionEqual","action","productionAndRules","global_declaration","variable_declaration_statement","MAT2X3","MAT2X4","MAT3X2","MAT3X4","MAT4X2","MAT4X3","storage_qualifier","precision_qualifier","interpolation_qualifier","invariant_qualifier","conditional_expression","logical_or_expression","logical_xor_expression","logical_and_expression","inclusive_or_expression","exclusive_or_expression","and_expression","equality_expression","relational_expression","shift_expression","additive_expression","multiplicative_expression","unary_expression","unary_operator","assignment_operator","AND_ASSIGN","statement","compound_statement","simple_statement","expression_statement","selection_statement","iteration_statement","initializer_list","condition","for_init_statement","for_rest_statement","conditionopt","StateItem","production","position","lookahead","_needReInfer","lookaheadSet","la","addLookahead","ts","needReInfer","symbolByOffset","canReduce","curSymbol","nextSymbol","State","cores","closured","_stateItemPool","_items","itemMapKey","getStateItemMapKey","createStateItem","mapId","newItem","cacheKey","getMapKey","state","closureMap","core","newState","items","LALR1","grammar","firstSetMap","followSetMap","actionTable","gotoTable","_firstSetNTStack","generate","computeFirstSet","buildStateTable","startStateItemCore","startState","_extendState","_closure","newStates","_inferNextState","ns","_extendStateItem","productionList","newLookaheadSet","terminalExist","lastFirstSet","_step1","_iterator1","_step2","_iterator2","Utils","_step3","_iterator3","coreMap","stateActionTable","_this_actionTable_get","stateGotoTable","_this_gotoTable_get","stateItem","Reduce","Accept","_addAction","nextItem","gs","Shift","table","terminal","exist","_computeFirstSetForNT","idx","findIndex","computingFS","curNT","firstSet","succeedFirstSet","ShaderTargetParser","_traceBackStack","sematicAnalyzer","SematicAnalyzer","parse","tokens","performance","now","traceBackStack","nextToken","loopCount","actionInfo","info","CompilationError","_processingPassText","reduceProduction","translationRule","values","nextState","_singleton","generator","curState","_type_of","obj","MacroDefine","macro","args","_argsLexemes","_replaceRegex","RegExp","expandFunctionBody","_this_args","PreprocessorError","replace","m","indexOf","isFunction","PpKeyword","PpUtils","expand","segments","startIdx","generatedIdx","seg","originSlice","rangeInBlock","generatedIdxEnd","assembleSegments","PpScanner","macroLvl","scanDirective","expandOnToken","directive","_advanceToDirective","if","ifdef","ifndef","includes","endif","scanWordsUntilChar","nonLetterChar","scanWord","skipNonLetter","getShaderPosition","kw","found","scanQuotedString","string_const","scanToChar","char","scanMacroBranchChunk","startLvl","elif","else","chunk","nextDirective","scanPairedBlock","lc","rc","scanRemainMacro","peekNonSpace","scanInteger","integer","int_constant","scanLineRemain","comments","line","line_remain","commentRange","_skipComments","startsWith","PpParser","includeMap","basePathForIncludeKey","_definedMacros","_expandSegmentsStack","_branchMacros","addPredefinedMacro","_includeMap","_basePathForIncludeKey","macroBody","tk","scanner","_onToken","define","_parseDefine","undef","_parseUndef","_parseIf","_parseIfNdef","_parseIfDef","include","_parseInclude","expandSegments","sourceMap","includedPath","URL","href","ShaderPass","_shaderRootPath","expanded","_expandMacroChunk","content","_addEmptyReplace","bodyChunk","_parseMacroBranch","elseChunk","startPosition","constantExpr","_parseConstantExpression","endPosition","_parseLogicalOrExpression","operand1","_parseLogicalAndExpression","operand2","_parseEqualityExpression","_parseRelationalExpression","_parseShiftExpression","opPos","_parseAdditiveExpression","_parseMulticativeExpression","_parseUnaryExpression","parenExpr","_parseParenthesisExpression","_parseConstant","defined","withParen","isInteger","scannerOrFile","macroArgs","macroDefine","delete","curLvl","curIdx","blockRange","Preprocessor","process","baseScanner","ParserUtils","unwrapNodeByType","VisitorContext","attributeList","attributeStructs","_referencedAttributeList","_referencedGlobals","_referencedVaryingList","_referencedMRTList","mrtStruct","isAttributeStruct","isVaryingStruct","_this_varyingStruct_ident","_this_varyingStruct","varyingStruct","isMRTStruct","_this_mrtStruct_ident","_this_mrtStruct","referenceAttribute","referenceVarying","referenceMRTProp","referenceGlobal","fnEntries","_passSymbolTable","passSymbolTable","context","TempArray","array","V3_GL_FragColor","CodeGenVisitor","_tmpArrayPool","return","derivationLength","postExpr","identNode","indexNode","identLexeme","indexLexeme","mrtLexeme","getFragDataCodeGen","getReferencedMRTPropText","paramInfoList","plainParams","fullType","_curFn","cmd","returnVar","returnFnCall","_reportError","ReturnableObjectPool","GLESVisitor","_versionText","_extensions","_globalCodeArray","visitShaderProgram","vertexEntry","fragmentEntry","vertex","vertexMain","fragment","_fragmentMain","data","fnNode","stage","VERTEX","varyStruct","paramInfo","structSymbol","globalCodeArray","_getGlobalText","getAttributeDeclare","getVaryingDeclare","globalCode","sort","FRAGMENT","returnDataType","returnLocation","getMRTDeclare","textList","lastLength","_serialized","keys","precision","GLES100Visitor","out","propReferenced","getVisitor","GLES300Visitor","V3_GL_FragData","referencedMRTList","MAX_SAFE_INTEGER","_registerFragColorVariable","_is_native_reflect_construct","result","Boolean","valueOf","construct","_construct","Parent","Class","apply","instance","Function","_extends","assign","hasOwnProperty","KeywordMap","GS_RenderQueueType","GS_BlendState","GS_DepthState","GS_StencilState","GS_RasterState","GS_EditorProperties","GS_EditorMacros","GS_Editor","GS_Tags","GS_VertexShader","GS_FragmentShader","GS_SubShader","GS_Pass","GS_BlendFactor","GS_BlendOperation","GS_Bool","GS_Number","GS_CompareFunction","GS_StencilOperation","GS_CullMode","GS_UsePass","GS_Color","Scanner","scanNumber","ContentSymbolTable","EngineType","RenderStateType","ShaderContentParser","_errors","_symbolTableStack","_newScope","subShaders","globalContents","renderStates","constantMap","variableMap","_parseShaderStatements","shaderGlobalStatements","shaderRenderStates","subShader","curSubShaderGlobalStatements","concat","constMap","passes","pass","isUsePass","passGlobalStatements","contents","_isRenderStateDeclarator","_isEngineType","_lookupSymbolByType","braceLevel","_addGlobalStatement","_parseSubShader","_parseRenderQueueAssignment","_parseRenderStateDeclarationOrAssignment","_parseVariableDeclaration","stateToken","isDeclaration","variable","renderState","_parseRenderStatePropList","_dropScope","_parseRenderStatePropItem","renderStateProp","renderStateElementKey","RenderStateDataKey","Color","engineTypeProp","_engineType","RenderQueueType","tags","_parsePass","_parseTags","CompareFunction","StencilOperation","BlendOperation","BlendFactor","CullMode","_parseShaderPass","macros","backend","platformMacros","ShaderLib","preprocessorStart","ppdContent","lexer","parser","_parser","program","ShaderPlatformTarget","GLES100","_parseShaderContent","shaderSource","column","_shaderPositionPool","_shaderRangePool","version","console","log"],"mappings":"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"}