@galacean/engine-shaderlab 1.6.8 → 1.6.10

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.
Files changed (81) hide show
  1. package/dist/browser.js +8075 -0
  2. package/dist/browser.js.map +1 -0
  3. package/dist/browser.min.js +2 -0
  4. package/dist/browser.min.js.map +1 -0
  5. package/dist/browser.verbose.js +8864 -0
  6. package/dist/browser.verbose.js.map +1 -0
  7. package/dist/browser.verbose.min.js +2 -0
  8. package/dist/browser.verbose.min.js.map +1 -0
  9. package/dist/main.js +8071 -0
  10. package/dist/main.js.map +1 -0
  11. package/dist/main.verbose.js +8860 -0
  12. package/dist/main.verbose.js.map +1 -0
  13. package/dist/module.js +8064 -0
  14. package/dist/module.js.map +1 -0
  15. package/dist/module.verbose.js +8853 -0
  16. package/dist/module.verbose.js.map +1 -0
  17. package/package.json +4 -4
  18. package/types/GSError.d.ts +16 -0
  19. package/types/ParserUtils.d.ts +12 -0
  20. package/types/Preprocessor.d.ts +31 -0
  21. package/types/ShaderLab.d.ts +15 -0
  22. package/types/ShaderLabUtils.d.ts +10 -0
  23. package/types/TempArray.d.ts +5 -0
  24. package/types/codeGen/CodeGenVisitor.d.ts +1 -0
  25. package/types/codeGen/GLES100.d.ts +12 -0
  26. package/types/codeGen/GLES300.d.ts +20 -0
  27. package/types/codeGen/GLESVisitor.d.ts +1 -0
  28. package/types/codeGen/VisitorContext.d.ts +1 -0
  29. package/types/codeGen/index.d.ts +3 -0
  30. package/types/codeGen/types.d.ts +12 -0
  31. package/types/common/BaseLexer.d.ts +2 -0
  32. package/types/common/BaseToken.d.ts +12 -0
  33. package/types/common/IBaseSymbol.d.ts +5 -0
  34. package/types/common/ShaderPosition.d.ts +8 -0
  35. package/types/common/ShaderRange.d.ts +8 -0
  36. package/types/common/SymbolTable.d.ts +7 -0
  37. package/types/common/SymbolTableStack.d.ts +13 -0
  38. package/types/common/enums/Keyword.d.ts +108 -0
  39. package/types/common/enums/ShaderStage.d.ts +5 -0
  40. package/types/common/index.d.ts +5 -0
  41. package/types/common/types.d.ts +101 -0
  42. package/types/index.d.ts +3 -0
  43. package/types/lalr/CFG.d.ts +5 -0
  44. package/types/lalr/LALR1.d.ts +26 -0
  45. package/types/lalr/Production.d.ts +9 -0
  46. package/types/lalr/State.d.ts +20 -0
  47. package/types/lalr/StateItem.d.ts +20 -0
  48. package/types/lalr/Utils.d.ts +22 -0
  49. package/types/lalr/index.d.ts +2 -0
  50. package/types/lalr/types.d.ts +14 -0
  51. package/types/lexer/Lexer.d.ts +23 -0
  52. package/types/lexer/index.d.ts +1 -0
  53. package/types/macroProcessor/MacroDefine.d.ts +13 -0
  54. package/types/macroProcessor/MacroParser.d.ts +7 -0
  55. package/types/macroProcessor/MacroParserLexer.d.ts +32 -0
  56. package/types/macroProcessor/Utils.d.ts +5 -0
  57. package/types/macroProcessor/constants.d.ts +54 -0
  58. package/types/macroProcessor/index.d.ts +1 -0
  59. package/types/macroProcessor/sourceMap/index.d.ts +37 -0
  60. package/types/parser/AST.d.ts +448 -0
  61. package/types/parser/Grammar.d.ts +11 -0
  62. package/types/parser/GrammarSymbol.d.ts +127 -0
  63. package/types/parser/SemanticAnalyzer.d.ts +2 -0
  64. package/types/parser/ShaderInfo.d.ts +10 -0
  65. package/types/parser/ShaderTargetParser.d.ts +24 -0
  66. package/types/parser/builtin/functions.d.ts +35 -0
  67. package/types/parser/builtin/index.d.ts +2 -0
  68. package/types/parser/builtin/variables.d.ts +11 -0
  69. package/types/parser/index.d.ts +2 -0
  70. package/types/parser/symbolTable/FnSymbol.d.ts +6 -0
  71. package/types/parser/symbolTable/StructSymbol.d.ts +6 -0
  72. package/types/parser/symbolTable/SymbolDataType.d.ts +8 -0
  73. package/types/parser/symbolTable/SymbolInfo.d.ts +22 -0
  74. package/types/parser/symbolTable/VarSymbol.d.ts +8 -0
  75. package/types/parser/symbolTable/index.d.ts +6 -0
  76. package/types/parser/types.d.ts +24 -0
  77. package/types/sourceParser/ShaderSourceFactory.d.ts +8 -0
  78. package/types/sourceParser/ShaderSourceParser.d.ts +1 -0
  79. package/types/sourceParser/ShaderSourceSymbol.d.ts +10 -0
  80. package/types/sourceParser/SourceLexer.d.ts +19 -0
  81. package/types/sourceParser/index.d.ts +1 -0
@@ -0,0 +1,7 @@
1
+ import { ShaderRange } from "../common";
2
+ import { BlockInfo } from "./sourceMap";
3
+ export interface ExpandSegment {
4
+ block?: BlockInfo;
5
+ rangeInBlock: ShaderRange;
6
+ replace: string;
7
+ }
@@ -0,0 +1,32 @@
1
+ import { ShaderPosition, ShaderRange } from "../common";
2
+ import PpSourceMap from "./sourceMap";
3
+ import { BaseLexer } from "../common/BaseLexer";
4
+ import { BaseToken } from "../common/BaseToken";
5
+ import { MacroParserToken } from "./constants";
6
+ export type OnToken = (token: BaseToken, scanner: MacroParserLexer) => void;
7
+ export default class MacroParserLexer extends BaseLexer {
8
+ private static _isPpCharacters;
9
+ private static _lexemeTable;
10
+ private macroLvl;
11
+ readonly sourceMap: PpSourceMap;
12
+ readonly file: string;
13
+ readonly blockRange?: ShaderRange;
14
+ constructor(source: string, file?: string, blockRange?: ShaderRange);
15
+ scanWordsUntilTerminator(terminatorChar: string): BaseToken[];
16
+ scanWord(): BaseToken;
17
+ scanToken(): BaseToken | undefined;
18
+ scanQuotedString(): BaseToken<MacroParserToken.string_const>;
19
+ scanToChar(char: string): void;
20
+ scanMacroBranchBody(): {
21
+ body: BaseToken<MacroParserToken.chunk>;
22
+ nextDirective: BaseToken;
23
+ };
24
+ scanPairedBlock(lc: string, rc: string): void;
25
+ /**
26
+ * @returns end ShaderPosition
27
+ */
28
+ scanRemainMacro(): ShaderPosition;
29
+ peekNonSpace(): string;
30
+ scanInteger(): BaseToken<number>;
31
+ scanMacroBody(): BaseToken<MacroParserToken.line_remain>;
32
+ }
@@ -0,0 +1,5 @@
1
+ import { ExpandSegment } from "./MacroParser";
2
+ import PpSourceMap from "./sourceMap";
3
+ export declare class PpUtils {
4
+ static expand(segments: ExpandSegment[], source: string, sourceMap?: PpSourceMap): string;
5
+ }
@@ -0,0 +1,54 @@
1
+ export declare enum MacroParserToken {
2
+ id = 0,
3
+ line_remain = 1,
4
+ chunk = 2,
5
+ int_constant = 3,
6
+ string_const = 4,
7
+ /** \>> */
8
+ right_op = 5,
9
+ /** << */
10
+ left_op = 6,
11
+ left_paren = 7,
12
+ right_paren = 8,
13
+ /** \>= */
14
+ ge = 9,
15
+ /** <= */
16
+ le = 10,
17
+ /** == */
18
+ eq = 11,
19
+ /** != */
20
+ neq = 12,
21
+ /** && */
22
+ and = 13,
23
+ /** || */
24
+ or = 14,
25
+ /** < */
26
+ left_angle = 15,
27
+ /** \> */
28
+ right_angle = 16,
29
+ /** \* */
30
+ star = 17,
31
+ /** + */
32
+ plus = 18,
33
+ /** \- */
34
+ dash = 19,
35
+ /** ! */
36
+ bang = 20,
37
+ /** \/ */
38
+ slash = 21,
39
+ /** % */
40
+ percent = 22,
41
+ EOF = 100
42
+ }
43
+ export declare enum MacroParserKeyword {
44
+ define = 101,
45
+ undef = 102,
46
+ if = 103,
47
+ ifdef = 104,
48
+ ifndef = 105,
49
+ else = 106,
50
+ elif = 107,
51
+ endif = 108,
52
+ defined = 109
53
+ }
54
+ export type MacroParserConstant = boolean | number;
@@ -0,0 +1 @@
1
+ export * from "./MacroParser";
@@ -0,0 +1,37 @@
1
+ import { ShaderRange } from "../../common/ShaderRange";
2
+ export declare class BlockInfo {
3
+ readonly sourceFile: string;
4
+ readonly rangeInFile?: ShaderRange;
5
+ readonly sourceMap?: PpSourceMap;
6
+ constructor(sourceFile?: string, rangeInFile?: ShaderRange, sourceMap?: PpSourceMap);
7
+ }
8
+ export declare class MapRange {
9
+ sourceLoc: {
10
+ block: BlockInfo;
11
+ rangeInBlock: ShaderRange;
12
+ };
13
+ generatedLoc: {
14
+ start: number;
15
+ end: number;
16
+ };
17
+ constructor(sourceBlock: BlockInfo, rangeInBlock: ShaderRange, generatedLoc: {
18
+ start: number;
19
+ end: number;
20
+ });
21
+ getSourceIndex(generatedIdx: number): {
22
+ sourceFile: string;
23
+ index: number;
24
+ };
25
+ }
26
+ export default class PpSourceMap {
27
+ readonly mapRanges: MapRange[];
28
+ static rangeContains(range: MapRange["generatedLoc"], index: number): boolean;
29
+ addMapRange(mapRange: MapRange): void;
30
+ /**
31
+ * @returns index
32
+ */
33
+ map(index: number): {
34
+ sourceFile: string;
35
+ index: number;
36
+ };
37
+ }
@@ -0,0 +1,448 @@
1
+ import { ClearableObjectPool, IPoolElement } from "@galacean/engine";
2
+ import { CodeGenVisitor } from "../codeGen";
3
+ import { GalaceanDataType, ShaderRange, TokenType } from "../common";
4
+ import { BaseToken } from "../common/BaseToken";
5
+ import { Keyword } from "../common/enums/Keyword";
6
+ import { NoneTerminal } from "./GrammarSymbol";
7
+ import SemanticAnalyzer from "./SemanticAnalyzer";
8
+ import { ShaderData } from "./ShaderInfo";
9
+ import { FnSymbol, StructSymbol } from "./symbolTable";
10
+ import { IParamInfo, NodeChild, StructProp, SymbolType } from "./types";
11
+ export declare abstract class TreeNode implements IPoolElement {
12
+ static pool: ClearableObjectPool<TreeNode & {
13
+ set: (loc: ShaderRange, children: NodeChild[]) => void;
14
+ }>;
15
+ /** The non-terminal in grammar. */
16
+ nt: NoneTerminal;
17
+ private _children;
18
+ private _parent;
19
+ private _location;
20
+ private _codeCache;
21
+ /**
22
+ * Parent pointer for AST traversal.
23
+ * @remarks
24
+ * The parent pointer is only reliable after the entire AST has been constructed.
25
+ * DO NOT rely on `parent` during the `semanticAnalyze` phase, as the AST may still be under construction.
26
+ * It is safe to use `parent` during code generation or any phase after AST construction.
27
+ */
28
+ get parent(): TreeNode;
29
+ get children(): NodeChild[];
30
+ get location(): ShaderRange;
31
+ set(loc: ShaderRange, children: NodeChild[]): void;
32
+ init(): void;
33
+ dispose(): void;
34
+ setCache(code: string): string;
35
+ getCache(): string;
36
+ codeGen(visitor: CodeGenVisitor): string;
37
+ /**
38
+ * Do semantic analyze right after the ast node is generated.
39
+ */
40
+ semanticAnalyze(sa: SemanticAnalyzer): void;
41
+ }
42
+ export declare namespace ASTNode {
43
+ type MacroExpression = MacroPushContext | MacroPopContext | MacroElseExpression | MacroElifExpression | MacroUndef | BaseToken;
44
+ export type ASTNodePool = ClearableObjectPool<{
45
+ set: (loc: ShaderRange, children: NodeChild[]) => void;
46
+ } & IPoolElement & TreeNode>;
47
+ export function _unwrapToken(node: NodeChild): BaseToken<number>;
48
+ export function get(pool: ASTNodePool, sa: SemanticAnalyzer, loc: ShaderRange, children: NodeChild[]): void;
49
+ export class TrivialNode extends TreeNode {
50
+ }
51
+ export class ScopeBrace extends TreeNode {
52
+ semanticAnalyze(sa: SemanticAnalyzer): void;
53
+ }
54
+ export class ScopeEndBrace extends TreeNode {
55
+ semanticAnalyze(sa: SemanticAnalyzer): void;
56
+ }
57
+ export class JumpStatement extends TreeNode {
58
+ isFragReturnStatement: boolean;
59
+ init(): void;
60
+ semanticAnalyze(sa: SemanticAnalyzer): void;
61
+ codeGen(visitor: CodeGenVisitor): string;
62
+ }
63
+ export class ConditionOpt extends TreeNode {
64
+ }
65
+ export class ForRestStatement extends TreeNode {
66
+ }
67
+ export class Condition extends TreeNode {
68
+ }
69
+ export class ForInitStatement extends TreeNode {
70
+ }
71
+ export class IterationStatement extends TreeNode {
72
+ }
73
+ export class SelectionStatement extends TreeNode {
74
+ }
75
+ export class ExpressionStatement extends TreeNode {
76
+ }
77
+ export abstract class ExpressionAstNode extends TreeNode {
78
+ protected _type?: GalaceanDataType;
79
+ set type(t: GalaceanDataType | undefined);
80
+ get type(): GalaceanDataType | undefined;
81
+ init(): void;
82
+ }
83
+ export class InitializerList extends ExpressionAstNode {
84
+ semanticAnalyze(sa: SemanticAnalyzer): void;
85
+ }
86
+ export class Initializer extends ExpressionAstNode {
87
+ semanticAnalyze(sa: SemanticAnalyzer): void;
88
+ }
89
+ export class SingleDeclaration extends TreeNode {
90
+ typeSpecifier: TypeSpecifier;
91
+ arraySpecifier?: ArraySpecifier;
92
+ init(): void;
93
+ semanticAnalyze(sa: SemanticAnalyzer): void;
94
+ codeGen(visitor: CodeGenVisitor): string;
95
+ }
96
+ export class FullySpecifiedType extends TreeNode {
97
+ typeSpecifier: TypeSpecifier;
98
+ type: GalaceanDataType;
99
+ semanticAnalyze(_: SemanticAnalyzer): void;
100
+ }
101
+ export class TypeQualifier extends TreeNode {
102
+ }
103
+ export class SingleTypeQualifier extends TreeNode {
104
+ qualifier: Keyword;
105
+ lexeme: string;
106
+ semanticAnalyze(sa: SemanticAnalyzer): void;
107
+ }
108
+ abstract class BasicTypeQualifier extends TreeNode {
109
+ qualifier: Keyword;
110
+ lexeme: string;
111
+ semanticAnalyze(sa: SemanticAnalyzer): void;
112
+ }
113
+ export class StorageQualifier extends BasicTypeQualifier {
114
+ }
115
+ export class PrecisionQualifier extends BasicTypeQualifier {
116
+ }
117
+ export class InterpolationQualifier extends BasicTypeQualifier {
118
+ }
119
+ export class InvariantQualifier extends BasicTypeQualifier {
120
+ }
121
+ export class TypeSpecifier extends TreeNode {
122
+ type: GalaceanDataType;
123
+ lexeme: string;
124
+ arraySize?: number;
125
+ isCustom: boolean;
126
+ init(): void;
127
+ get arraySpecifier(): ArraySpecifier;
128
+ semanticAnalyze(sa: SemanticAnalyzer): void;
129
+ }
130
+ export class ArraySpecifier extends TreeNode {
131
+ size: number | undefined;
132
+ semanticAnalyze(sa: SemanticAnalyzer): void;
133
+ }
134
+ export class IntegerConstantExpressionOperator extends TreeNode {
135
+ compute: (a: number, b: number) => number;
136
+ lexeme: string;
137
+ semanticAnalyze(sa: SemanticAnalyzer): void;
138
+ }
139
+ export class IntegerConstantExpression extends TreeNode {
140
+ value?: number;
141
+ init(): void;
142
+ semanticAnalyze(sa: SemanticAnalyzer): void;
143
+ }
144
+ export class TypeSpecifierNonArray extends TreeNode {
145
+ type: GalaceanDataType;
146
+ lexeme: string;
147
+ init(): void;
148
+ }
149
+ export class ExtBuiltinTypeSpecifierNonArray extends TreeNode {
150
+ type: TokenType;
151
+ lexeme: string;
152
+ init(): void;
153
+ }
154
+ export class InitDeclaratorList extends TreeNode {
155
+ typeInfo: SymbolType;
156
+ semanticAnalyze(sa: SemanticAnalyzer): void;
157
+ }
158
+ export class IdentifierList extends TreeNode {
159
+ idList: BaseToken[];
160
+ init(): void;
161
+ semanticAnalyze(sa: SemanticAnalyzer): void;
162
+ }
163
+ export class Declaration extends TreeNode {
164
+ codeGen(visitor: CodeGenVisitor): string;
165
+ }
166
+ export class FunctionProtoType extends TreeNode {
167
+ ident: BaseToken;
168
+ returnType: FullySpecifiedType;
169
+ parameterList: IParamInfo[];
170
+ paramSig: GalaceanDataType[] | undefined;
171
+ semanticAnalyze(sa: SemanticAnalyzer): void;
172
+ }
173
+ export class FunctionDeclarator extends TreeNode {
174
+ ident: BaseToken;
175
+ returnType: FullySpecifiedType;
176
+ parameterInfoList: IParamInfo[] | undefined;
177
+ paramSig: GalaceanDataType[] | undefined;
178
+ semanticAnalyze(sa: SemanticAnalyzer): void;
179
+ }
180
+ export class FunctionHeader extends TreeNode {
181
+ ident: BaseToken;
182
+ returnType: FullySpecifiedType;
183
+ semanticAnalyze(sa: SemanticAnalyzer): void;
184
+ codeGen(visitor: CodeGenVisitor): string;
185
+ }
186
+ export class FunctionParameterList extends TreeNode {
187
+ parameterInfoList: IParamInfo[];
188
+ paramSig: GalaceanDataType[];
189
+ init(): void;
190
+ semanticAnalyze(sa: SemanticAnalyzer): void;
191
+ codeGen(visitor: CodeGenVisitor): string;
192
+ }
193
+ export class MacroParamCaseList extends TreeNode {
194
+ }
195
+ export class MacroParamBlock extends TreeNode {
196
+ }
197
+ export class MacroParameterBranch extends TreeNode {
198
+ }
199
+ export class ParameterDeclaration extends TreeNode {
200
+ typeInfo?: SymbolType;
201
+ ident?: BaseToken;
202
+ init(): void;
203
+ semanticAnalyze(sa: SemanticAnalyzer): void;
204
+ }
205
+ export class ParameterDeclarator extends TreeNode {
206
+ ident: BaseToken;
207
+ typeInfo: SymbolType;
208
+ semanticAnalyze(sa: SemanticAnalyzer): void;
209
+ }
210
+ export class SimpleStatement extends TreeNode {
211
+ }
212
+ export class CompoundStatement extends TreeNode {
213
+ }
214
+ export class CompoundStatementNoScope extends TreeNode {
215
+ }
216
+ export class Statement extends TreeNode {
217
+ }
218
+ export class StatementList extends TreeNode {
219
+ codeGen(visitor: CodeGenVisitor): string;
220
+ }
221
+ export class FunctionDefinition extends TreeNode {
222
+ returnStatement?: ASTNode.JumpStatement;
223
+ protoType: FunctionProtoType;
224
+ statements: CompoundStatementNoScope;
225
+ isInMacroBranch: boolean;
226
+ init(): void;
227
+ semanticAnalyze(sa: SemanticAnalyzer): void;
228
+ codeGen(visitor: CodeGenVisitor): string;
229
+ }
230
+ export class FunctionCall extends ExpressionAstNode {
231
+ semanticAnalyze(sa: SemanticAnalyzer): void;
232
+ codeGen(visitor: CodeGenVisitor): string;
233
+ }
234
+ export class FunctionCallGeneric extends ExpressionAstNode {
235
+ fnSymbol: FnSymbol | StructSymbol | undefined;
236
+ init(): void;
237
+ semanticAnalyze(sa: SemanticAnalyzer): void;
238
+ }
239
+ export class FunctionCallParameterList extends TreeNode {
240
+ paramSig: GalaceanDataType[];
241
+ paramNodes: Array<AssignmentExpression | MacroCallArgBlock>;
242
+ init(): void;
243
+ semanticAnalyze(sa: SemanticAnalyzer): void;
244
+ }
245
+ export class MacroCallArgCaseList extends TreeNode {
246
+ }
247
+ export class MacroCallArgBlock extends TreeNode {
248
+ }
249
+ export class MacroCallArgBranch extends TreeNode {
250
+ }
251
+ export class PrecisionSpecifier extends TreeNode {
252
+ semanticAnalyze(sa: SemanticAnalyzer): void;
253
+ }
254
+ export class FunctionIdentifier extends TreeNode {
255
+ ident: GalaceanDataType;
256
+ lexeme: string;
257
+ isBuiltin: boolean;
258
+ semanticAnalyze(sa: SemanticAnalyzer): void;
259
+ codeGen(visitor: CodeGenVisitor): string;
260
+ }
261
+ export class AssignmentExpression extends ExpressionAstNode {
262
+ semanticAnalyze(sa: SemanticAnalyzer): void;
263
+ }
264
+ export class AssignmentOperator extends TreeNode {
265
+ }
266
+ export class Expression extends ExpressionAstNode {
267
+ semanticAnalyze(sa: SemanticAnalyzer): void;
268
+ }
269
+ export class PrimaryExpression extends ExpressionAstNode {
270
+ semanticAnalyze(sa: SemanticAnalyzer): void;
271
+ }
272
+ export class PostfixExpression extends ExpressionAstNode {
273
+ init(): void;
274
+ codeGen(visitor: CodeGenVisitor): string;
275
+ }
276
+ export class UnaryOperator extends TreeNode {
277
+ }
278
+ export class UnaryExpression extends ExpressionAstNode {
279
+ init(): void;
280
+ }
281
+ export class MultiplicativeExpression extends ExpressionAstNode {
282
+ init(): void;
283
+ }
284
+ export class AdditiveExpression extends ExpressionAstNode {
285
+ init(): void;
286
+ }
287
+ export class ShiftExpression extends ExpressionAstNode {
288
+ semanticAnalyze(sa: SemanticAnalyzer): void;
289
+ }
290
+ export class RelationalExpression extends ExpressionAstNode {
291
+ semanticAnalyze(sa: SemanticAnalyzer): void;
292
+ }
293
+ export class EqualityExpression extends ExpressionAstNode {
294
+ semanticAnalyze(sa: SemanticAnalyzer): void;
295
+ }
296
+ export class AndExpression extends ExpressionAstNode {
297
+ semanticAnalyze(sa: SemanticAnalyzer): void;
298
+ }
299
+ export class ExclusiveOrExpression extends ExpressionAstNode {
300
+ semanticAnalyze(sa: SemanticAnalyzer): void;
301
+ }
302
+ export class InclusiveOrExpression extends ExpressionAstNode {
303
+ semanticAnalyze(sa: SemanticAnalyzer): void;
304
+ }
305
+ export class LogicalAndExpression extends ExpressionAstNode {
306
+ semanticAnalyze(sa: SemanticAnalyzer): void;
307
+ }
308
+ export class LogicalXorExpression extends ExpressionAstNode {
309
+ semanticAnalyze(sa: SemanticAnalyzer): void;
310
+ }
311
+ export class LogicalOrExpression extends ExpressionAstNode {
312
+ semanticAnalyze(sa: SemanticAnalyzer): void;
313
+ }
314
+ export class ConditionalExpression extends ExpressionAstNode {
315
+ semanticAnalyze(sa: SemanticAnalyzer): void;
316
+ }
317
+ export class StructSpecifier extends TreeNode {
318
+ ident?: BaseToken;
319
+ propList: StructProp[];
320
+ macroExpressions: MacroExpression[];
321
+ isInMacroBranch: boolean;
322
+ init(): void;
323
+ semanticAnalyze(sa: SemanticAnalyzer): void;
324
+ codeGen(visitor: CodeGenVisitor): string;
325
+ }
326
+ export class StructDeclarationList extends TreeNode {
327
+ propList: StructProp[];
328
+ macroExpressions: MacroExpression[];
329
+ init(): void;
330
+ semanticAnalyze(sa: SemanticAnalyzer): void;
331
+ }
332
+ export class StructDeclaration extends TreeNode {
333
+ props: StructProp[];
334
+ macroExpressions: MacroExpression[];
335
+ private _typeSpecifier?;
336
+ private _declaratorList?;
337
+ init(): void;
338
+ semanticAnalyze(sa: SemanticAnalyzer): void;
339
+ }
340
+ export class MacroStructDeclaration extends TreeNode {
341
+ props: StructProp[];
342
+ macroExpressions: MacroExpression[];
343
+ init(): void;
344
+ semanticAnalyze(): void;
345
+ }
346
+ export class MacroStructBranch extends TreeNode {
347
+ props: StructProp[];
348
+ macroExpressions: MacroExpression[];
349
+ init(): void;
350
+ semanticAnalyze(): void;
351
+ }
352
+ export class LayoutQualifier extends TreeNode {
353
+ index: number;
354
+ semanticAnalyze(sa: SemanticAnalyzer): void;
355
+ }
356
+ export class StructDeclaratorList extends TreeNode {
357
+ declaratorList: StructDeclarator[];
358
+ init(): void;
359
+ semanticAnalyze(sa: SemanticAnalyzer): void;
360
+ }
361
+ export class StructDeclarator extends TreeNode {
362
+ ident: BaseToken;
363
+ arraySpecifier: ArraySpecifier | undefined;
364
+ init(): void;
365
+ semanticAnalyze(sa: SemanticAnalyzer): void;
366
+ }
367
+ export class VariableDeclaration extends TreeNode {
368
+ type: FullySpecifiedType;
369
+ isStatic: boolean;
370
+ init(): void;
371
+ semanticAnalyze(sa: SemanticAnalyzer): void;
372
+ codeGen(visitor: CodeGenVisitor): string;
373
+ }
374
+ export class VariableDeclarationList extends TreeNode {
375
+ type: FullySpecifiedType;
376
+ variableDeclarations: VariableDeclaration[];
377
+ init(): void;
378
+ semanticAnalyze(sa: SemanticAnalyzer): void;
379
+ }
380
+ export class VariableIdentifier extends TreeNode {
381
+ typeInfo: GalaceanDataType;
382
+ referenceGlobalSymbolNames: string[];
383
+ private _symbols;
384
+ init(): void;
385
+ semanticAnalyze(sa: SemanticAnalyzer): void;
386
+ codeGen(visitor: CodeGenVisitor): string;
387
+ getLexeme(visitor: CodeGenVisitor): string;
388
+ }
389
+ export class GLShaderProgram extends TreeNode {
390
+ shaderData: ShaderData;
391
+ semanticAnalyze(sa: SemanticAnalyzer): void;
392
+ }
393
+ export class GlobalDeclaration extends TreeNode {
394
+ macroExpressions: Array<MacroExpression | MacroUndef | BaseToken>;
395
+ init(): void;
396
+ semanticAnalyze(sa: SemanticAnalyzer): void;
397
+ }
398
+ export class MacroUndef extends TreeNode {
399
+ codeGen(visitor: CodeGenVisitor): string;
400
+ }
401
+ export class MacroPushContext extends TreeNode {
402
+ semanticAnalyze(sa: SemanticAnalyzer): void;
403
+ codeGen(visitor: CodeGenVisitor): string;
404
+ }
405
+ export class MacroPopContext extends TreeNode {
406
+ semanticAnalyze(sa: SemanticAnalyzer): void;
407
+ codeGen(visitor: CodeGenVisitor): string;
408
+ }
409
+ export class MacroElifExpression extends TreeNode {
410
+ codeGen(visitor: CodeGenVisitor): string;
411
+ }
412
+ export class MacroElseExpression extends TreeNode {
413
+ codeGen(visitor: CodeGenVisitor): string;
414
+ }
415
+ export class GlobalMacroDeclaration extends TreeNode {
416
+ macroExpressions: MacroExpression[];
417
+ init(): void;
418
+ semanticAnalyze(sa: SemanticAnalyzer): void;
419
+ codeGen(visitor: CodeGenVisitor): string;
420
+ }
421
+ export class GlobalMacroIfStatement extends TreeNode {
422
+ macroExpressions: MacroExpression[];
423
+ init(): void;
424
+ semanticAnalyze(sa: SemanticAnalyzer): void;
425
+ }
426
+ export class GlobalMacroBranch extends TreeNode {
427
+ macroExpressions: MacroExpression[];
428
+ init(): void;
429
+ semanticAnalyze(sa: SemanticAnalyzer): void;
430
+ }
431
+ export class MacroIfStatement extends TreeNode {
432
+ }
433
+ export class MacroBranch extends TreeNode {
434
+ }
435
+ export class MacroCallSymbol extends TreeNode {
436
+ referenceSymbolNames: string[];
437
+ macroName: string;
438
+ init(): void;
439
+ semanticAnalyze(sa: SemanticAnalyzer): void;
440
+ }
441
+ export class MacroCallFunction extends TreeNode {
442
+ referenceSymbolNames: string[];
443
+ macroName: string;
444
+ semanticAnalyze(sa: SemanticAnalyzer): void;
445
+ codeGen(visitor: CodeGenVisitor): string;
446
+ }
447
+ export {};
448
+ }
@@ -0,0 +1,11 @@
1
+ import { NoneTerminal, GrammarSymbol } from "./GrammarSymbol";
2
+ import Production from "../lalr/Production";
3
+ export declare class Grammar {
4
+ readonly productions: Production[];
5
+ readonly startSymbol: NoneTerminal;
6
+ static create(start: NoneTerminal, productions: GrammarSymbol[][]): Grammar;
7
+ constructor(start: NoneTerminal, productions: Production[]);
8
+ getProductionList(nonTerminal: NoneTerminal): Production[];
9
+ isNullableNT(NT: NoneTerminal): Production;
10
+ getProductionByID(pid: number): Production;
11
+ }