@galacean/engine-shaderlab 1.4.0-beta.1 → 1.4.0

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 SematicAnalyzer 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: SematicAnalyzer) {}\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: SematicAnalyzer, 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: SematicAnalyzer): void {\n sa.newScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.scope_end_brace)\n export class ScopeEndBrace extends TreeNode {\n override semanticAnalyze(sa: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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 get qualifierList() {\n if (this.children.length > 1) {\n return (<TypeQualifier>this.children[0]).qualifierList;\n }\n }\n\n get typeSpecifier() {\n return (this.children.length === 1 ? this.children[0] : this.children[1]) as TypeSpecifier;\n }\n\n get type() {\n return this.typeSpecifier.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_qualifier)\n export class TypeQualifier extends TreeNode {\n qualifierList: EKeyword[];\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n if (this.children.length > 1) {\n this.qualifierList = [\n ...(<TypeQualifier>this.children[0]).qualifierList,\n (<SingleTypeQualifier>this.children[1]).qualifier\n ];\n } else {\n this.qualifierList = [(<SingleTypeQualifier>this.children[0]).qualifier];\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.single_type_qualifier)\n export class SingleTypeQualifier extends TreeNode {\n qualifier: EKeyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SematicAnalyzer): 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 get qualifier(): EKeyword {\n return (<Token>this.children[0]).type as EKeyword;\n }\n get lexeme(): string {\n return (<Token>this.children[0]).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 get type(): GalaceanDataType {\n return (this.children![0] as TypeSpecifierNonArray).type;\n }\n get lexeme(): string {\n return (this.children![0] as TypeSpecifierNonArray).lexeme;\n }\n get arraySize(): number {\n return (this.children?.[1] as ArraySpecifier)?.size;\n }\n get arraySpecifier(): ArraySpecifier {\n return this.children[1] as ArraySpecifier;\n }\n\n get isCustom() {\n return typeof this.type === \"string\";\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.array_specifier)\n export class ArraySpecifier extends TreeNode {\n get size(): number | undefined {\n const integerConstantExpr = this.children[1] as IntegerConstantExpression;\n return 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 get lexeme(): string {\n return (this.children[0] as Token).lexeme;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n const operator = this.children[0] as Token;\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: SematicAnalyzer): 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 get typeInfo(): SymbolType {\n if (this.children.length === 1) {\n const singleDecl = this.children[0] as SingleDeclaration;\n return new SymbolType(\n singleDecl.typeSpecifier.type,\n singleDecl.typeSpecifier.lexeme,\n singleDecl.arraySpecifier\n );\n }\n\n const initDeclList = this.children[0] as InitDeclaratorList;\n return initDeclList.typeInfo;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n let sm: VarSymbol;\n if (this.children.length === 3 || this.children.length === 5) {\n const id = this.children[2] as Token;\n sm = new VarSymbol(id.lexeme, this.typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n } else if (this.children.length === 4 || this.children.length === 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 = this.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 get idList(): Token[] {\n if (this.children.length === 2) {\n return [this.children[1] as Token];\n }\n return [...(<IdentifierList>this.children[0]).idList, this.children[2] as Token];\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 private get declarator() {\n return this.children[0] as FunctionDeclarator;\n }\n\n get ident() {\n return this.declarator.ident;\n }\n\n get returnType() {\n return this.declarator.returnType;\n }\n\n get parameterList() {\n return this.declarator.parameterInfoList;\n }\n\n get paramSig() {\n return this.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 private get header() {\n return this.children[0] as FunctionHeader;\n }\n\n private get parameterList() {\n return this.children[1] as FunctionParameterList | undefined;\n }\n\n get ident() {\n return this.header.ident;\n }\n\n get returnType() {\n return this.header.returnType;\n }\n\n get parameterInfoList() {\n return this.parameterList?.parameterInfoList;\n }\n\n get paramSig() {\n return this.parameterList?.paramSig;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n sa.curFunctionInfo.returnStatement = null;\n sa.curFunctionInfo.header = this;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_header)\n export class FunctionHeader extends TreeNode {\n get ident() {\n return this.children[1] as Token;\n }\n get returnType() {\n return this.children[0] as FullySpecifiedType;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n sa.newScope();\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 get parameterInfoList(): IParamInfo[] {\n if (this.children.length === 1) {\n const decl = this.children[0] as ParameterDeclaration;\n return [{ ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl }];\n }\n const list = this.children[0] as FunctionParameterList;\n const decl = this.children[2] as ParameterDeclaration;\n return [...list.parameterInfoList, { ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl }];\n }\n\n get paramSig(): GalaceanDataType[] {\n if (this.children.length === 1) {\n const decl = this.children[0] as ParameterDeclaration;\n return [decl.typeInfo.type];\n } else {\n const list = this.children[0] as FunctionParameterList;\n const decl = this.children[2] as ParameterDeclaration;\n return list.paramSig.concat([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 get typeQualifier() {\n if (this.children.length === 2) return this.children[0] as TypeQualifier;\n }\n\n private get parameterDeclarator() {\n if (this.children.length === 1) return this.children[0] as ParameterDeclarator;\n return this.children[1] as ParameterDeclarator;\n }\n\n get typeInfo() {\n return this.parameterDeclarator.typeInfo;\n }\n\n get ident() {\n return this.parameterDeclarator.ident;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n let declarator: ParameterDeclarator;\n if (this.children.length === 1) {\n declarator = this.children[0] as ParameterDeclarator;\n } else {\n declarator = this.children[1] as ParameterDeclarator;\n }\n const varSymbol = new VarSymbol(declarator.ident.lexeme, declarator.typeInfo, false, this);\n sa.symbolTableStack.insert(varSymbol);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.parameter_declarator)\n export class ParameterDeclarator extends TreeNode {\n get ident() {\n return this.children[1] as Token;\n }\n\n get typeInfo(): SymbolType {\n const typeSpecifier = this.children[0] as TypeSpecifier;\n const arraySpecifier = this.children[2] as ArraySpecifier;\n return 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 private _returnStatement?: ASTNode.JumpStatement;\n\n get returnStatement(): ASTNode.JumpStatement | undefined {\n return this._returnStatement;\n }\n\n get protoType() {\n return this.children[0] as FunctionProtoType;\n }\n\n get statements() {\n return this.children[1] as CompoundStatementNoScope;\n }\n\n override init(): void {\n this._returnStatement = undefined;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\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: SematicAnalyzer): 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: SematicAnalyzer): 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 get paramSig(): GalaceanDataType[] | undefined {\n if (this.children.length === 1) {\n const expr = this.children[0] as AssignmentExpression;\n if (expr.type == undefined) return [TypeAny];\n return [expr.type];\n } else {\n const list = this.children[0] as FunctionCallParameterList;\n const decl = this.children[2] as AssignmentExpression;\n if (list.paramSig == undefined || decl.type == undefined) {\n return [TypeAny];\n } else {\n return list.paramSig.concat([decl.type]);\n }\n }\n }\n\n get paramNodes(): AssignmentExpression[] {\n if (this.children.length === 1) {\n return [this.children[0] as AssignmentExpression];\n } else {\n const list = this.children[0] as FunctionCallParameterList;\n const decl = this.children[2] as AssignmentExpression;\n\n return list.paramNodes.concat([decl]);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.precision_specifier)\n export class PrecisionSpecifier extends TreeNode {\n override semanticAnalyze(sa: SematicAnalyzer): void {\n sa.shaderData.globalPrecisions.push(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_identifier)\n export class FunctionIdentifier extends TreeNode {\n get ident() {\n const ty = this.children[0] as TypeSpecifier;\n return ty.type;\n }\n\n get lexeme() {\n const ty = this.children[0] as TypeSpecifier;\n return ty.lexeme;\n }\n\n get isBuiltin() {\n return typeof this.ident !== \"string\";\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {}\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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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 } 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 } 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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\n get propList(): StructProp[] {\n const declList = (this.children.length === 6 ? this.children[3] : this.children[2]) as StructDeclarationList;\n return declList.propList;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n if (this.children.length === 6) {\n this.ident = this.children[1] as Token;\n sa.symbolTableStack.insert(new StructSymbol(this.ident.lexeme, this));\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration_list)\n export class StructDeclarationList extends TreeNode {\n get propList(): StructProp[] {\n if (this.children.length === 1) {\n return (<StructDeclaration>this.children[0]).propList;\n }\n const list = this.children[0] as StructDeclarationList;\n const decl = this.children[1] as StructDeclaration;\n return [list.propList, decl.propList].flat();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration)\n export class StructDeclaration extends TreeNode {\n get typeSpecifier() {\n if (this.children.length === 3) {\n return this.children[0] as TypeSpecifier;\n }\n return this.children[1] as TypeSpecifier;\n }\n\n get declaratorList() {\n if (this.children.length === 3) {\n return this.children[1] as StructDeclaratorList;\n }\n return this.children[2] as StructDeclaratorList;\n }\n\n get propList(): StructProp[] {\n const ret: StructProp[] = [];\n const firstChild = this.children[0];\n if (firstChild instanceof LayoutQualifier) {\n const typeSpecifier = this.children[1] as TypeSpecifier;\n const declarator = this.children[2] as StructDeclarator;\n const typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme);\n const prop = new StructProp(typeInfo, declarator.ident, firstChild.index);\n ret.push(prop);\n } else {\n for (let i = 0; i < this.declaratorList.declaratorList.length; i++) {\n const declarator = this.declaratorList.declaratorList[i];\n const typeInfo = new SymbolType(\n this.typeSpecifier.type,\n this.typeSpecifier.lexeme,\n declarator.arraySpecifier\n );\n const prop = new StructProp(typeInfo, declarator.ident);\n ret.push(prop);\n }\n }\n return ret;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.layout_qualifier)\n export class LayoutQualifier extends TreeNode {\n get index(): number {\n return Number((<BaseToken>this.children[4]).lexeme);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator_list)\n export class StructDeclaratorList extends TreeNode {\n get declaratorList(): StructDeclarator[] {\n if (this.children.length === 1) {\n return [this.children[0] as StructDeclarator];\n } else {\n const list = this.children[0] as StructDeclaratorList;\n return [...list.declaratorList, <StructDeclarator>this.children[1]];\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator)\n export class StructDeclarator extends TreeNode {\n get ident() {\n return this.children[0] as Token;\n }\n\n get arraySpecifier(): ArraySpecifier | undefined {\n return this.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: SematicAnalyzer): 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: SematicAnalyzer): 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 get lexeme(): string {\n return (<Token>this.children[0]).lexeme;\n }\n\n get typeInfo(): GalaceanDataType {\n if (this.symbolInfo instanceof VarSymbol) return this.symbolInfo.dataType.type;\n return this.symbolInfo?.type;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n const token = this.children[0] as Token;\n\n // #if _VERBOSE\n const builtinVar = BuiltinVariable.getVar(token.lexeme);\n if (builtinVar) {\n this.symbolInfo = builtinVar;\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 }\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: SematicAnalyzer): 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 isPpCharactors(charCode: number) {\n return (\n charCode === 35 || // #\n charCode === 46 || // .\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: SematicAnalyzer, ...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 SematicAnalyzer {\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 SematicAnalyzer, { 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: SematicAnalyzer) => {\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.isPpCharactors(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 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","isPpCharactors","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","SematicAnalyzer","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","qualifierList","fully_specified_type","concat","qualifier","type_qualifier","child","single_type_qualifier","arraySize","_this_children_","_this_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","singleDecl","initDeclList","init_declarator_list","idList","identifier_list","visitDeclaration","declaration","visitFunctionProtoType","declarator","parameterList","parameterInfoList","function_prototype","header","_this_parameterList","function_declarator","visitFunctionHeader","function_header","visitFunctionParameterList","decl","list","function_parameter_list","varSymbol","typeQualifier","parameterDeclarator","parameter_declaration","parameter_declarator","compound_statement_no_scope","visitStatementList","statement_list","_returnStatement","visitFunctionDefinition","statements","function_definition","visitFunctionCall","function_call","fnSymbol","functionIdentifier","isBuiltin","paramList","function_call_generic","expr","paramNodes","function_call_parameter_list","precision_specifier","visitFunctionIdentifier","ty","function_identifier","assignment_expression","expression","primary_expression","visitPostfixExpression","postfix_expression","propList","declList","struct_specifier","flat","struct_declaration_list","declaratorList","firstChild","prop","struct_declaration","layout_qualifier","struct_declarator_list","struct_declarator","visitGlobalVariableDeclaration","variable_declaration","variableDeclaration","newVariable","variable_declaration_list","symbolInfo","visitVariableIdentifier","_this_symbolInfo","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","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","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 SematicAnalyzer 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: SematicAnalyzer) {}\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: SematicAnalyzer, 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: SematicAnalyzer): void {\n sa.newScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.scope_end_brace)\n export class ScopeEndBrace extends TreeNode {\n override semanticAnalyze(sa: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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 get qualifierList() {\n if (this.children.length > 1) {\n return (<TypeQualifier>this.children[0]).qualifierList;\n }\n }\n\n get typeSpecifier() {\n return (this.children.length === 1 ? this.children[0] : this.children[1]) as TypeSpecifier;\n }\n\n get type() {\n return this.typeSpecifier.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_qualifier)\n export class TypeQualifier extends TreeNode {\n qualifierList: EKeyword[];\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n if (this.children.length > 1) {\n this.qualifierList = [\n ...(<TypeQualifier>this.children[0]).qualifierList,\n (<SingleTypeQualifier>this.children[1]).qualifier\n ];\n } else {\n this.qualifierList = [(<SingleTypeQualifier>this.children[0]).qualifier];\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.single_type_qualifier)\n export class SingleTypeQualifier extends TreeNode {\n qualifier: EKeyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SematicAnalyzer): 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 get qualifier(): EKeyword {\n return (<Token>this.children[0]).type as EKeyword;\n }\n get lexeme(): string {\n return (<Token>this.children[0]).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 get type(): GalaceanDataType {\n return (this.children![0] as TypeSpecifierNonArray).type;\n }\n get lexeme(): string {\n return (this.children![0] as TypeSpecifierNonArray).lexeme;\n }\n get arraySize(): number {\n return (this.children?.[1] as ArraySpecifier)?.size;\n }\n get arraySpecifier(): ArraySpecifier {\n return this.children[1] as ArraySpecifier;\n }\n\n get isCustom() {\n return typeof this.type === \"string\";\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.array_specifier)\n export class ArraySpecifier extends TreeNode {\n get size(): number | undefined {\n const integerConstantExpr = this.children[1] as IntegerConstantExpression;\n return 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 get lexeme(): string {\n return (this.children[0] as Token).lexeme;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n const operator = this.children[0] as Token;\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: SematicAnalyzer): 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 get typeInfo(): SymbolType {\n if (this.children.length === 1) {\n const singleDecl = this.children[0] as SingleDeclaration;\n return new SymbolType(\n singleDecl.typeSpecifier.type,\n singleDecl.typeSpecifier.lexeme,\n singleDecl.arraySpecifier\n );\n }\n\n const initDeclList = this.children[0] as InitDeclaratorList;\n return initDeclList.typeInfo;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n let sm: VarSymbol;\n if (this.children.length === 3 || this.children.length === 5) {\n const id = this.children[2] as Token;\n sm = new VarSymbol(id.lexeme, this.typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n } else if (this.children.length === 4 || this.children.length === 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 = this.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 get idList(): Token[] {\n if (this.children.length === 2) {\n return [this.children[1] as Token];\n }\n return [...(<IdentifierList>this.children[0]).idList, this.children[2] as Token];\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 private get declarator() {\n return this.children[0] as FunctionDeclarator;\n }\n\n get ident() {\n return this.declarator.ident;\n }\n\n get returnType() {\n return this.declarator.returnType;\n }\n\n get parameterList() {\n return this.declarator.parameterInfoList;\n }\n\n get paramSig() {\n return this.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 private get header() {\n return this.children[0] as FunctionHeader;\n }\n\n private get parameterList() {\n return this.children[1] as FunctionParameterList | undefined;\n }\n\n get ident() {\n return this.header.ident;\n }\n\n get returnType() {\n return this.header.returnType;\n }\n\n get parameterInfoList() {\n return this.parameterList?.parameterInfoList;\n }\n\n get paramSig() {\n return this.parameterList?.paramSig;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n sa.curFunctionInfo.returnStatement = null;\n sa.curFunctionInfo.header = this;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_header)\n export class FunctionHeader extends TreeNode {\n get ident() {\n return this.children[1] as Token;\n }\n get returnType() {\n return this.children[0] as FullySpecifiedType;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n sa.newScope();\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 get parameterInfoList(): IParamInfo[] {\n if (this.children.length === 1) {\n const decl = this.children[0] as ParameterDeclaration;\n return [{ ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl }];\n }\n const list = this.children[0] as FunctionParameterList;\n const decl = this.children[2] as ParameterDeclaration;\n return [...list.parameterInfoList, { ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl }];\n }\n\n get paramSig(): GalaceanDataType[] {\n if (this.children.length === 1) {\n const decl = this.children[0] as ParameterDeclaration;\n return [decl.typeInfo.type];\n } else {\n const list = this.children[0] as FunctionParameterList;\n const decl = this.children[2] as ParameterDeclaration;\n return list.paramSig.concat([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 get typeQualifier() {\n if (this.children.length === 2) return this.children[0] as TypeQualifier;\n }\n\n private get parameterDeclarator() {\n if (this.children.length === 1) return this.children[0] as ParameterDeclarator;\n return this.children[1] as ParameterDeclarator;\n }\n\n get typeInfo() {\n return this.parameterDeclarator.typeInfo;\n }\n\n get ident() {\n return this.parameterDeclarator.ident;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n let declarator: ParameterDeclarator;\n if (this.children.length === 1) {\n declarator = this.children[0] as ParameterDeclarator;\n } else {\n declarator = this.children[1] as ParameterDeclarator;\n }\n const varSymbol = new VarSymbol(declarator.ident.lexeme, declarator.typeInfo, false, this);\n sa.symbolTableStack.insert(varSymbol);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.parameter_declarator)\n export class ParameterDeclarator extends TreeNode {\n get ident() {\n return this.children[1] as Token;\n }\n\n get typeInfo(): SymbolType {\n const typeSpecifier = this.children[0] as TypeSpecifier;\n const arraySpecifier = this.children[2] as ArraySpecifier;\n return 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 private _returnStatement?: ASTNode.JumpStatement;\n\n get returnStatement(): ASTNode.JumpStatement | undefined {\n return this._returnStatement;\n }\n\n get protoType() {\n return this.children[0] as FunctionProtoType;\n }\n\n get statements() {\n return this.children[1] as CompoundStatementNoScope;\n }\n\n override init(): void {\n this._returnStatement = undefined;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\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: SematicAnalyzer): 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: SematicAnalyzer): 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 get paramSig(): GalaceanDataType[] | undefined {\n if (this.children.length === 1) {\n const expr = this.children[0] as AssignmentExpression;\n if (expr.type == undefined) return [TypeAny];\n return [expr.type];\n } else {\n const list = this.children[0] as FunctionCallParameterList;\n const decl = this.children[2] as AssignmentExpression;\n if (list.paramSig == undefined || decl.type == undefined) {\n return [TypeAny];\n } else {\n return list.paramSig.concat([decl.type]);\n }\n }\n }\n\n get paramNodes(): AssignmentExpression[] {\n if (this.children.length === 1) {\n return [this.children[0] as AssignmentExpression];\n } else {\n const list = this.children[0] as FunctionCallParameterList;\n const decl = this.children[2] as AssignmentExpression;\n\n return list.paramNodes.concat([decl]);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.precision_specifier)\n export class PrecisionSpecifier extends TreeNode {\n override semanticAnalyze(sa: SematicAnalyzer): void {\n sa.shaderData.globalPrecisions.push(this);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_identifier)\n export class FunctionIdentifier extends TreeNode {\n get ident() {\n const ty = this.children[0] as TypeSpecifier;\n return ty.type;\n }\n\n get lexeme() {\n const ty = this.children[0] as TypeSpecifier;\n return ty.lexeme;\n }\n\n get isBuiltin() {\n return typeof this.ident !== \"string\";\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {}\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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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 } 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 } 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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: SematicAnalyzer): 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\n get propList(): StructProp[] {\n const declList = (this.children.length === 6 ? this.children[3] : this.children[2]) as StructDeclarationList;\n return declList.propList;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n if (this.children.length === 6) {\n this.ident = this.children[1] as Token;\n sa.symbolTableStack.insert(new StructSymbol(this.ident.lexeme, this));\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration_list)\n export class StructDeclarationList extends TreeNode {\n get propList(): StructProp[] {\n if (this.children.length === 1) {\n return (<StructDeclaration>this.children[0]).propList;\n }\n const list = this.children[0] as StructDeclarationList;\n const decl = this.children[1] as StructDeclaration;\n return [list.propList, decl.propList].flat();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration)\n export class StructDeclaration extends TreeNode {\n get typeSpecifier() {\n if (this.children.length === 3) {\n return this.children[0] as TypeSpecifier;\n }\n return this.children[1] as TypeSpecifier;\n }\n\n get declaratorList() {\n if (this.children.length === 3) {\n return this.children[1] as StructDeclaratorList;\n }\n return this.children[2] as StructDeclaratorList;\n }\n\n get propList(): StructProp[] {\n const ret: StructProp[] = [];\n const firstChild = this.children[0];\n if (firstChild instanceof LayoutQualifier) {\n const typeSpecifier = this.children[1] as TypeSpecifier;\n const declarator = this.children[2] as StructDeclarator;\n const typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme);\n const prop = new StructProp(typeInfo, declarator.ident, firstChild.index);\n ret.push(prop);\n } else {\n for (let i = 0; i < this.declaratorList.declaratorList.length; i++) {\n const declarator = this.declaratorList.declaratorList[i];\n const typeInfo = new SymbolType(\n this.typeSpecifier.type,\n this.typeSpecifier.lexeme,\n declarator.arraySpecifier\n );\n const prop = new StructProp(typeInfo, declarator.ident);\n ret.push(prop);\n }\n }\n return ret;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.layout_qualifier)\n export class LayoutQualifier extends TreeNode {\n get index(): number {\n return Number((<BaseToken>this.children[4]).lexeme);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator_list)\n export class StructDeclaratorList extends TreeNode {\n get declaratorList(): StructDeclarator[] {\n if (this.children.length === 1) {\n return [this.children[0] as StructDeclarator];\n } else {\n const list = this.children[0] as StructDeclaratorList;\n return [...list.declaratorList, <StructDeclarator>this.children[1]];\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator)\n export class StructDeclarator extends TreeNode {\n get ident() {\n return this.children[0] as Token;\n }\n\n get arraySpecifier(): ArraySpecifier | undefined {\n return this.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: SematicAnalyzer): 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: SematicAnalyzer): 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 get lexeme(): string {\n return (<Token>this.children[0]).lexeme;\n }\n\n get typeInfo(): GalaceanDataType {\n if (this.symbolInfo instanceof VarSymbol) return this.symbolInfo.dataType.type;\n return this.symbolInfo?.type;\n }\n\n override semanticAnalyze(sa: SematicAnalyzer): void {\n const token = this.children[0] as Token;\n\n // #if _VERBOSE\n const builtinVar = BuiltinVariable.getVar(token.lexeme);\n if (builtinVar) {\n this.symbolInfo = builtinVar;\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 }\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: SematicAnalyzer): 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 isPpCharactors(charCode: number) {\n return (\n charCode === 35 || // #\n charCode === 46 || // .\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: SematicAnalyzer, ...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 SematicAnalyzer {\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 SematicAnalyzer, { 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: SematicAnalyzer) => {\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.isPpCharactors(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 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","isPpCharactors","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","SematicAnalyzer","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","qualifierList","fully_specified_type","concat","qualifier","type_qualifier","child","single_type_qualifier","arraySize","_this_children_","_this_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","singleDecl","initDeclList","init_declarator_list","idList","identifier_list","visitDeclaration","declaration","visitFunctionProtoType","declarator","parameterList","parameterInfoList","function_prototype","header","_this_parameterList","function_declarator","visitFunctionHeader","function_header","visitFunctionParameterList","decl","list","function_parameter_list","varSymbol","typeQualifier","parameterDeclarator","parameter_declaration","parameter_declarator","compound_statement_no_scope","visitStatementList","statement_list","_returnStatement","visitFunctionDefinition","statements","function_definition","visitFunctionCall","function_call","fnSymbol","functionIdentifier","isBuiltin","paramList","function_call_generic","expr","paramNodes","function_call_parameter_list","precision_specifier","visitFunctionIdentifier","ty","function_identifier","assignment_expression","expression","primary_expression","visitPostfixExpression","postfix_expression","propList","declList","struct_specifier","flat","struct_declaration_list","declaratorList","firstChild","prop","struct_declaration","layout_qualifier","struct_declarator_list","struct_declarator","visitGlobalVariableDeclaration","variable_declaration","variableDeclaration","newVariable","variable_declaration_list","symbolInfo","visitVariableIdentifier","_this_symbolInfo","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","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","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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"}