gglang 1.0.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.
package/dist/parser.js ADDED
@@ -0,0 +1,543 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // GGLang — Parser
4
+ // Recursive-descent parser: transforms a token stream into an AST
5
+ // ============================================================
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Parser = void 0;
8
+ const types_1 = require("./types");
9
+ // ============================================================
10
+ // Parser Class
11
+ // ============================================================
12
+ class Parser {
13
+ constructor() {
14
+ /** The flat list of tokens produced by the lexer */
15
+ this.tokens = [];
16
+ /** Current position in the token array */
17
+ this.pos = 0;
18
+ }
19
+ // ----------------------------------------------------------
20
+ // Public API
21
+ // ----------------------------------------------------------
22
+ /**
23
+ * Parse a token array into a Program AST node.
24
+ * Expects the token stream to represent: spawn { <statements> }
25
+ */
26
+ parse(tokens) {
27
+ this.tokens = tokens;
28
+ this.pos = 0;
29
+ // The entire program must be wrapped in spawn { ... }
30
+ this.expect(types_1.TokenType.SPAWN, "Expected 'spawn' to start the program");
31
+ this.expect(types_1.TokenType.LBRACE, "Expected '{' after 'spawn'");
32
+ const body = [];
33
+ // Parse statements until we hit the closing brace
34
+ while (!this.check(types_1.TokenType.RBRACE) && !this.isAtEnd()) {
35
+ body.push(this.parseStatement());
36
+ }
37
+ this.expect(types_1.TokenType.RBRACE, "Expected '}' to close the 'spawn' block");
38
+ // There should be nothing left except EOF
39
+ this.expect(types_1.TokenType.EOF, "Unexpected tokens after end of program");
40
+ return { type: "Program", body };
41
+ }
42
+ // ----------------------------------------------------------
43
+ // Token helpers
44
+ // ----------------------------------------------------------
45
+ /** Look at the current token without consuming it */
46
+ peek() {
47
+ return this.tokens[this.pos];
48
+ }
49
+ /** Consume and return the current token, advancing the cursor */
50
+ advance() {
51
+ const token = this.tokens[this.pos];
52
+ this.pos++;
53
+ return token;
54
+ }
55
+ /** Return true if the current token matches the given type */
56
+ check(type) {
57
+ return this.peek().type === type;
58
+ }
59
+ /** Return true if we have reached EOF */
60
+ isAtEnd() {
61
+ return this.peek().type === types_1.TokenType.EOF;
62
+ }
63
+ /**
64
+ * If the current token matches any of the given types, consume it and
65
+ * return true. Otherwise leave the cursor alone and return false.
66
+ */
67
+ match(...types) {
68
+ for (const type of types) {
69
+ if (this.check(type)) {
70
+ this.advance();
71
+ return true;
72
+ }
73
+ }
74
+ return false;
75
+ }
76
+ /**
77
+ * Consume the current token if it matches `type`; otherwise throw a
78
+ * GGParserError with the supplied message.
79
+ */
80
+ expect(type, errorMsg) {
81
+ if (this.check(type)) {
82
+ return this.advance();
83
+ }
84
+ const current = this.peek();
85
+ throw new types_1.GGParserError(errorMsg, current.line);
86
+ }
87
+ /** Convenience: return the line number of the current token */
88
+ currentLine() {
89
+ return this.peek().line;
90
+ }
91
+ // ----------------------------------------------------------
92
+ // Statement parsing
93
+ // ----------------------------------------------------------
94
+ /** Dispatch to the correct statement parser based on the current token */
95
+ parseStatement() {
96
+ switch (this.peek().type) {
97
+ case types_1.TokenType.EQUIP:
98
+ return this.parseVariableDeclaration(false);
99
+ case types_1.TokenType.ARTIFACT:
100
+ return this.parseVariableDeclaration(true);
101
+ case types_1.TokenType.BROADCAST:
102
+ return this.parsePrintStatement();
103
+ case types_1.TokenType.QUEST:
104
+ return this.parseIfStatement();
105
+ case types_1.TokenType.GRIND:
106
+ return this.parseWhileStatement();
107
+ case types_1.TokenType.RAGE_QUIT:
108
+ return this.parseBreakStatement();
109
+ case types_1.TokenType.RESPAWN:
110
+ return this.parseContinueStatement();
111
+ case types_1.TokenType.SKILL:
112
+ return this.parseFunctionDeclaration();
113
+ case types_1.TokenType.LOOT:
114
+ return this.parseReturnStatement();
115
+ case types_1.TokenType.GLITCH:
116
+ return this.parseThrowStatement();
117
+ case types_1.TokenType.BOSS_FIGHT:
118
+ return this.parseTryCatchStatement();
119
+ case types_1.TokenType.IDENTIFIER:
120
+ return this.parseIdentifierStatement();
121
+ default:
122
+ return this.parseExpressionStatement();
123
+ }
124
+ }
125
+ // ---- Variable / constant declaration ----
126
+ // equip <name> = <expr>;
127
+ // artifact <name> = <expr>;
128
+ parseVariableDeclaration(constant) {
129
+ const keyword = this.advance(); // consume EQUIP or ARTIFACT
130
+ const line = keyword.line;
131
+ const nameToken = this.expect(types_1.TokenType.IDENTIFIER, `Expected variable name after '${keyword.value}'`);
132
+ this.expect(types_1.TokenType.EQUALS, "Expected '=' in variable declaration");
133
+ const value = this.parseExpression();
134
+ this.expect(types_1.TokenType.SEMICOLON, "Expected ';' after variable declaration");
135
+ return {
136
+ type: "VariableDeclaration",
137
+ name: nameToken.value,
138
+ value,
139
+ constant,
140
+ line,
141
+ };
142
+ }
143
+ // ---- Identifier-led statements ----
144
+ // Could be assignment, compound assignment, or expression statement.
145
+ // We peek ahead to decide.
146
+ parseIdentifierStatement() {
147
+ const name = this.peek().value;
148
+ const line = this.peek().line;
149
+ // Check the token *after* the identifier to decide
150
+ const nextType = this.tokens[this.pos + 1]?.type;
151
+ // Plain assignment: name = expr ;
152
+ if (nextType === types_1.TokenType.EQUALS) {
153
+ this.advance(); // consume identifier
154
+ this.advance(); // consume =
155
+ const value = this.parseExpression();
156
+ this.expect(types_1.TokenType.SEMICOLON, "Expected ';' after assignment");
157
+ return {
158
+ type: "AssignmentStatement",
159
+ name,
160
+ value,
161
+ line,
162
+ };
163
+ }
164
+ // Compound assignment: name += expr ; (and -=, *=, /=)
165
+ if (nextType === types_1.TokenType.PLUS_EQUALS ||
166
+ nextType === types_1.TokenType.MINUS_EQUALS ||
167
+ nextType === types_1.TokenType.STAR_EQUALS ||
168
+ nextType === types_1.TokenType.SLASH_EQUALS) {
169
+ this.advance(); // consume identifier
170
+ const opToken = this.advance(); // consume compound operator
171
+ const value = this.parseExpression();
172
+ this.expect(types_1.TokenType.SEMICOLON, "Expected ';' after compound assignment");
173
+ return {
174
+ type: "CompoundAssignmentStatement",
175
+ name,
176
+ operator: opToken.value,
177
+ value,
178
+ line,
179
+ };
180
+ }
181
+ // Otherwise fall through to expression statement (e.g. function call)
182
+ return this.parseExpressionStatement();
183
+ }
184
+ // ---- Print statement ----
185
+ // broadcast(<expr>);
186
+ parsePrintStatement() {
187
+ const keyword = this.advance(); // consume BROADCAST
188
+ const line = keyword.line;
189
+ this.expect(types_1.TokenType.LPAREN, "Expected '(' after 'broadcast'");
190
+ const value = this.parseExpression();
191
+ this.expect(types_1.TokenType.RPAREN, "Expected ')' after broadcast argument");
192
+ this.expect(types_1.TokenType.SEMICOLON, "Expected ';' after broadcast statement");
193
+ return { type: "PrintStatement", value, line };
194
+ }
195
+ // ---- If / else-if / else ----
196
+ // quest (<expr>) { stmts } [side_quest (<expr>) { stmts }]* [retreat { stmts }]
197
+ parseIfStatement() {
198
+ const keyword = this.advance(); // consume QUEST
199
+ const line = keyword.line;
200
+ // Condition
201
+ this.expect(types_1.TokenType.LPAREN, "Expected '(' after 'quest'");
202
+ const condition = this.parseExpression();
203
+ this.expect(types_1.TokenType.RPAREN, "Expected ')' after quest condition");
204
+ // Body
205
+ const body = this.parseBlock();
206
+ // Optional side_quest (else-if) clauses
207
+ const elseIfClauses = [];
208
+ while (this.check(types_1.TokenType.SIDE_QUEST)) {
209
+ this.advance(); // consume SIDE_QUEST
210
+ this.expect(types_1.TokenType.LPAREN, "Expected '(' after 'side_quest'");
211
+ const elseIfCondition = this.parseExpression();
212
+ this.expect(types_1.TokenType.RPAREN, "Expected ')' after side_quest condition");
213
+ const elseIfBody = this.parseBlock();
214
+ elseIfClauses.push({ condition: elseIfCondition, body: elseIfBody });
215
+ }
216
+ // Optional retreat (else) block
217
+ let elseBody = null;
218
+ if (this.check(types_1.TokenType.RETREAT)) {
219
+ this.advance(); // consume RETREAT
220
+ elseBody = this.parseBlock();
221
+ }
222
+ return { type: "IfStatement", condition, body, elseIfClauses, elseBody, line };
223
+ }
224
+ // ---- While loop ----
225
+ // grind (<expr>) { stmts }
226
+ parseWhileStatement() {
227
+ const keyword = this.advance(); // consume GRIND
228
+ const line = keyword.line;
229
+ this.expect(types_1.TokenType.LPAREN, "Expected '(' after 'grind'");
230
+ const condition = this.parseExpression();
231
+ this.expect(types_1.TokenType.RPAREN, "Expected ')' after grind condition");
232
+ const body = this.parseBlock();
233
+ return { type: "WhileStatement", condition, body, line };
234
+ }
235
+ // ---- Break ----
236
+ // rage_quit;
237
+ parseBreakStatement() {
238
+ const keyword = this.advance(); // consume RAGE_QUIT
239
+ this.expect(types_1.TokenType.SEMICOLON, "Expected ';' after 'rage_quit'");
240
+ return { type: "BreakStatement", line: keyword.line };
241
+ }
242
+ // ---- Continue ----
243
+ // respawn;
244
+ parseContinueStatement() {
245
+ const keyword = this.advance(); // consume RESPAWN
246
+ this.expect(types_1.TokenType.SEMICOLON, "Expected ';' after 'respawn'");
247
+ return { type: "ContinueStatement", line: keyword.line };
248
+ }
249
+ // ---- Function declaration ----
250
+ // skill <name>(<params>) { stmts }
251
+ parseFunctionDeclaration() {
252
+ const keyword = this.advance(); // consume SKILL
253
+ const line = keyword.line;
254
+ const nameToken = this.expect(types_1.TokenType.IDENTIFIER, "Expected function name after 'skill'");
255
+ // Parameter list
256
+ this.expect(types_1.TokenType.LPAREN, "Expected '(' after function name");
257
+ const params = [];
258
+ if (!this.check(types_1.TokenType.RPAREN)) {
259
+ // First parameter
260
+ params.push(this.expect(types_1.TokenType.IDENTIFIER, "Expected parameter name").value);
261
+ // Remaining parameters separated by commas
262
+ while (this.match(types_1.TokenType.COMMA)) {
263
+ params.push(this.expect(types_1.TokenType.IDENTIFIER, "Expected parameter name after ','")
264
+ .value);
265
+ }
266
+ }
267
+ this.expect(types_1.TokenType.RPAREN, "Expected ')' after parameter list");
268
+ // Function body
269
+ const body = this.parseBlock();
270
+ return {
271
+ type: "FunctionDeclaration",
272
+ name: nameToken.value,
273
+ params,
274
+ body,
275
+ line,
276
+ };
277
+ }
278
+ // ---- Return ----
279
+ // loot <expr>; or loot;
280
+ parseReturnStatement() {
281
+ const keyword = this.advance(); // consume LOOT
282
+ const line = keyword.line;
283
+ // If a semicolon follows immediately, it's a bare return
284
+ let value = null;
285
+ if (!this.check(types_1.TokenType.SEMICOLON)) {
286
+ value = this.parseExpression();
287
+ }
288
+ this.expect(types_1.TokenType.SEMICOLON, "Expected ';' after loot statement");
289
+ return { type: "ReturnStatement", value, line };
290
+ }
291
+ // ---- Throw ----
292
+ // glitch <expr>;
293
+ parseThrowStatement() {
294
+ const keyword = this.advance(); // consume GLITCH
295
+ const line = keyword.line;
296
+ const value = this.parseExpression();
297
+ this.expect(types_1.TokenType.SEMICOLON, "Expected ';' after glitch statement");
298
+ return { type: "ThrowStatement", value, line };
299
+ }
300
+ // ---- Try / catch ----
301
+ // boss_fight { stmts } revive (<name>) { stmts }
302
+ parseTryCatchStatement() {
303
+ const keyword = this.advance(); // consume BOSS_FIGHT
304
+ const line = keyword.line;
305
+ const tryBody = this.parseBlock();
306
+ this.expect(types_1.TokenType.REVIVE, "Expected 'revive' after boss_fight block");
307
+ this.expect(types_1.TokenType.LPAREN, "Expected '(' after 'revive'");
308
+ const catchParamToken = this.expect(types_1.TokenType.IDENTIFIER, "Expected error parameter name in revive");
309
+ this.expect(types_1.TokenType.RPAREN, "Expected ')' after revive parameter");
310
+ const catchBody = this.parseBlock();
311
+ return {
312
+ type: "TryCatchStatement",
313
+ tryBody,
314
+ catchParam: catchParamToken.value,
315
+ catchBody,
316
+ line,
317
+ };
318
+ }
319
+ // ---- Expression statement ----
320
+ // <expr>; (typically a function call like attack();)
321
+ parseExpressionStatement() {
322
+ const line = this.currentLine();
323
+ const expression = this.parseExpression();
324
+ this.expect(types_1.TokenType.SEMICOLON, "Expected ';' after expression statement");
325
+ return { type: "ExpressionStatement", expression, line };
326
+ }
327
+ // ----------------------------------------------------------
328
+ // Block parsing helper
329
+ // ----------------------------------------------------------
330
+ /** Parse a brace-delimited block: { statement* } */
331
+ parseBlock() {
332
+ this.expect(types_1.TokenType.LBRACE, "Expected '{' to open block");
333
+ const statements = [];
334
+ while (!this.check(types_1.TokenType.RBRACE) && !this.isAtEnd()) {
335
+ statements.push(this.parseStatement());
336
+ }
337
+ this.expect(types_1.TokenType.RBRACE, "Expected '}' to close block");
338
+ return statements;
339
+ }
340
+ // ----------------------------------------------------------
341
+ // Expression parsing — recursive descent with precedence
342
+ //
343
+ // Precedence (lowest → highest):
344
+ // 1. Logical OR ||
345
+ // 2. Logical AND &&
346
+ // 3. Equality == !=
347
+ // 4. Comparison > < >= <=
348
+ // 5. Additive + -
349
+ // 6. Multiplicative * / %
350
+ // 7. Unary ! - (prefix)
351
+ // 8. Primary literals, identifiers, calls, grouped
352
+ // ----------------------------------------------------------
353
+ /** Entry point for expression parsing */
354
+ parseExpression() {
355
+ return this.parseLogicalOr();
356
+ }
357
+ // ---- Level 1: Logical OR ( || ) ----
358
+ parseLogicalOr() {
359
+ let left = this.parseLogicalAnd();
360
+ while (this.check(types_1.TokenType.OR)) {
361
+ const op = this.advance(); // consume ||
362
+ const right = this.parseLogicalAnd();
363
+ left = {
364
+ type: "LogicalExpression",
365
+ operator: op.value,
366
+ left,
367
+ right,
368
+ };
369
+ }
370
+ return left;
371
+ }
372
+ // ---- Level 2: Logical AND ( && ) ----
373
+ parseLogicalAnd() {
374
+ let left = this.parseEquality();
375
+ while (this.check(types_1.TokenType.AND)) {
376
+ const op = this.advance(); // consume &&
377
+ const right = this.parseEquality();
378
+ left = {
379
+ type: "LogicalExpression",
380
+ operator: op.value,
381
+ left,
382
+ right,
383
+ };
384
+ }
385
+ return left;
386
+ }
387
+ // ---- Level 3: Equality ( == != ) ----
388
+ parseEquality() {
389
+ let left = this.parseComparison();
390
+ while (this.check(types_1.TokenType.DOUBLE_EQUALS) ||
391
+ this.check(types_1.TokenType.NOT_EQUALS)) {
392
+ const op = this.advance();
393
+ const right = this.parseComparison();
394
+ left = {
395
+ type: "BinaryExpression",
396
+ operator: op.value,
397
+ left,
398
+ right,
399
+ };
400
+ }
401
+ return left;
402
+ }
403
+ // ---- Level 4: Comparison ( > < >= <= ) ----
404
+ parseComparison() {
405
+ let left = this.parseAdditive();
406
+ while (this.check(types_1.TokenType.GREATER) ||
407
+ this.check(types_1.TokenType.LESS) ||
408
+ this.check(types_1.TokenType.GREATER_EQUALS) ||
409
+ this.check(types_1.TokenType.LESS_EQUALS)) {
410
+ const op = this.advance();
411
+ const right = this.parseAdditive();
412
+ left = {
413
+ type: "BinaryExpression",
414
+ operator: op.value,
415
+ left,
416
+ right,
417
+ };
418
+ }
419
+ return left;
420
+ }
421
+ // ---- Level 5: Additive ( + - ) ----
422
+ parseAdditive() {
423
+ let left = this.parseMultiplicative();
424
+ while (this.check(types_1.TokenType.PLUS) || this.check(types_1.TokenType.MINUS)) {
425
+ const op = this.advance();
426
+ const right = this.parseMultiplicative();
427
+ left = {
428
+ type: "BinaryExpression",
429
+ operator: op.value,
430
+ left,
431
+ right,
432
+ };
433
+ }
434
+ return left;
435
+ }
436
+ // ---- Level 6: Multiplicative ( * / % ) ----
437
+ parseMultiplicative() {
438
+ let left = this.parseUnary();
439
+ while (this.check(types_1.TokenType.STAR) ||
440
+ this.check(types_1.TokenType.SLASH) ||
441
+ this.check(types_1.TokenType.PERCENT)) {
442
+ const op = this.advance();
443
+ const right = this.parseUnary();
444
+ left = {
445
+ type: "BinaryExpression",
446
+ operator: op.value,
447
+ left,
448
+ right,
449
+ };
450
+ }
451
+ return left;
452
+ }
453
+ // ---- Level 7: Unary ( ! - ) ----
454
+ parseUnary() {
455
+ if (this.check(types_1.TokenType.NOT) || this.check(types_1.TokenType.MINUS)) {
456
+ const op = this.advance();
457
+ const operand = this.parseUnary(); // right-recursive for chained unaries
458
+ return {
459
+ type: "UnaryExpression",
460
+ operator: op.value,
461
+ operand,
462
+ };
463
+ }
464
+ return this.parsePrimary();
465
+ }
466
+ // ---- Level 8: Primary ----
467
+ // number, string, victory, defeat, phantom, identifier / call, grouped (expr)
468
+ parsePrimary() {
469
+ const token = this.peek();
470
+ // Number literal
471
+ if (token.type === types_1.TokenType.NUMBER) {
472
+ this.advance();
473
+ return { type: "NumberLiteral", value: Number(token.value) };
474
+ }
475
+ // String literal
476
+ if (token.type === types_1.TokenType.STRING) {
477
+ this.advance();
478
+ return { type: "StringLiteral", value: token.value };
479
+ }
480
+ // Boolean literal: victory (true)
481
+ if (token.type === types_1.TokenType.VICTORY) {
482
+ this.advance();
483
+ return { type: "BooleanLiteral", value: true };
484
+ }
485
+ // Boolean literal: defeat (false)
486
+ if (token.type === types_1.TokenType.DEFEAT) {
487
+ this.advance();
488
+ return { type: "BooleanLiteral", value: false };
489
+ }
490
+ // Null literal: phantom
491
+ if (token.type === types_1.TokenType.PHANTOM) {
492
+ this.advance();
493
+ return { type: "NullLiteral" };
494
+ }
495
+ // Identifier — may be a simple reference or a function call
496
+ if (token.type === types_1.TokenType.IDENTIFIER) {
497
+ this.advance();
498
+ // If the next token is '(', this is a function call
499
+ if (this.check(types_1.TokenType.LPAREN)) {
500
+ return this.parseCallExpression(token);
501
+ }
502
+ // Plain identifier reference
503
+ return { type: "Identifier", name: token.value };
504
+ }
505
+ // Grouped / parenthesised expression
506
+ if (token.type === types_1.TokenType.LPAREN) {
507
+ this.advance(); // consume (
508
+ const expr = this.parseExpression();
509
+ this.expect(types_1.TokenType.RPAREN, "Expected ')' after grouped expression");
510
+ return expr;
511
+ }
512
+ // Nothing matched — syntax error
513
+ throw new types_1.GGParserError(`Unexpected token '${token.value}' (${token.type})`, token.line);
514
+ }
515
+ // ----------------------------------------------------------
516
+ // Function call parsing helper
517
+ // ----------------------------------------------------------
518
+ /**
519
+ * Called after an identifier token has been consumed and we've confirmed
520
+ * the next token is '('. Parses the argument list and closing ')'.
521
+ */
522
+ parseCallExpression(calleeToken) {
523
+ this.advance(); // consume (
524
+ const args = [];
525
+ if (!this.check(types_1.TokenType.RPAREN)) {
526
+ // First argument
527
+ args.push(this.parseExpression());
528
+ // Additional arguments separated by commas
529
+ while (this.match(types_1.TokenType.COMMA)) {
530
+ args.push(this.parseExpression());
531
+ }
532
+ }
533
+ this.expect(types_1.TokenType.RPAREN, "Expected ')' after function arguments");
534
+ return {
535
+ type: "CallExpression",
536
+ callee: calleeToken.value,
537
+ arguments: args,
538
+ line: calleeToken.line,
539
+ };
540
+ }
541
+ }
542
+ exports.Parser = Parser;
543
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}