@elwood-lang/core 0.1.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,610 @@
1
+ import { TokenKind } from './token.js';
2
+ import { tokenize } from './lexer.js';
3
+ export class ParseError extends Error {
4
+ diagnostic;
5
+ constructor(diagnostic) {
6
+ super(diagnostic.message);
7
+ this.diagnostic = diagnostic;
8
+ }
9
+ }
10
+ export function parseExpression(source) {
11
+ const { tokens, diagnostics: lexDiags } = tokenize(source);
12
+ const parser = new Parser(tokens);
13
+ const ast = parser.parseExpression();
14
+ return { ast, diagnostics: [...lexDiags, ...parser.diagnostics] };
15
+ }
16
+ export function parseScript(source) {
17
+ const { tokens, diagnostics: lexDiags } = tokenize(source);
18
+ const parser = new Parser(tokens);
19
+ const ast = parser.parseScript();
20
+ return { ast, diagnostics: [...lexDiags, ...parser.diagnostics] };
21
+ }
22
+ class Parser {
23
+ tokens;
24
+ pos = 0;
25
+ pipeDepth = 0;
26
+ diagnostics = [];
27
+ constructor(tokens) {
28
+ this.tokens = tokens;
29
+ }
30
+ // ── Entry points ──
31
+ parseScript() {
32
+ const bindings = [];
33
+ let returnExpr = null;
34
+ const start = this.current().span;
35
+ while (!this.isAtEnd()) {
36
+ if (this.check(TokenKind.Let)) {
37
+ bindings.push(this.parseLetBinding());
38
+ }
39
+ else if (this.check(TokenKind.Return)) {
40
+ this.advance();
41
+ returnExpr = this.parseExpression();
42
+ break;
43
+ }
44
+ else {
45
+ returnExpr = this.parseExpression();
46
+ if (!this.isAtEnd() && !this.check(TokenKind.Eof)) {
47
+ this.error(`Unexpected token '${this.current().text}'. Did you mean 'let'?`);
48
+ break;
49
+ }
50
+ }
51
+ }
52
+ return { type: 'Script', bindings, returnExpression: returnExpr, span: this.span(start) };
53
+ }
54
+ parseExpression() {
55
+ return this.parsePipeline();
56
+ }
57
+ // ── Pipeline ──
58
+ parsePipeline() {
59
+ const start = this.current().span;
60
+ let expr = this.parseTernary();
61
+ const ops = [];
62
+ while (this.match(TokenKind.Pipe)) {
63
+ ops.push(this.parsePipeOperation());
64
+ }
65
+ return ops.length > 0 ? { type: 'Pipeline', source: expr, operations: ops, span: this.span(start) } : expr;
66
+ }
67
+ parsePipeOperation() {
68
+ const start = this.current().span;
69
+ const name = this.current().text;
70
+ if (this.check(TokenKind.Match)) {
71
+ this.advance();
72
+ return { type: 'MatchOp', arms: this.parseMatchArms(), span: this.span(start) };
73
+ }
74
+ if (!this.check(TokenKind.Identifier)) {
75
+ this.error(`Expected pipe operator name after '|', got '${this.current().text}'`);
76
+ return { type: 'Aggregate', name: 'error', span: this.span(start) };
77
+ }
78
+ this.advance();
79
+ switch (name) {
80
+ case 'where': return { type: 'Where', predicate: this.parsePipeArg(), span: this.span(start) };
81
+ case 'select': return { type: 'Select', projection: this.parsePipeArg(), span: this.span(start) };
82
+ case 'selectMany': return { type: 'SelectMany', projection: this.parsePipeArg(), span: this.span(start) };
83
+ case 'orderBy': return this.parseOrderBy(start);
84
+ case 'groupBy': return { type: 'GroupBy', keySelector: this.parsePipeArg(), span: this.span(start) };
85
+ case 'distinct': return { type: 'Distinct', span: this.span(start) };
86
+ case 'first':
87
+ case 'last': return this.parseFirstLast(name, start);
88
+ case 'count':
89
+ case 'sum':
90
+ case 'min':
91
+ case 'max':
92
+ case 'index':
93
+ return { type: 'Aggregate', name, span: this.span(start) };
94
+ case 'take':
95
+ case 'skip':
96
+ return { type: 'Slice', kind: name, count: this.parsePipeArg(), span: this.span(start) };
97
+ case 'batch': return { type: 'Batch', size: this.parsePipeArg(), span: this.span(start) };
98
+ case 'join': return this.parseJoin(start);
99
+ case 'concat': return this.parseConcat(start);
100
+ case 'reduce': return this.parseReduce(start);
101
+ case 'any':
102
+ case 'all':
103
+ return { type: 'Quantifier', kind: name, predicate: this.parsePipeArg(), span: this.span(start) };
104
+ default: throw this.error(`Unknown pipe operator '${name}'`);
105
+ }
106
+ }
107
+ parsePipeArg() {
108
+ this.pipeDepth++;
109
+ try {
110
+ return this.parseTernary();
111
+ }
112
+ finally {
113
+ this.pipeDepth--;
114
+ }
115
+ }
116
+ parseOrderBy(start) {
117
+ const keys = [];
118
+ do {
119
+ const key = this.parsePipeArg();
120
+ let ascending = true;
121
+ if (this.check(TokenKind.Asc)) {
122
+ this.advance();
123
+ ascending = true;
124
+ }
125
+ else if (this.check(TokenKind.Desc)) {
126
+ this.advance();
127
+ ascending = false;
128
+ }
129
+ keys.push({ key, ascending });
130
+ } while (this.match(TokenKind.Comma));
131
+ return { type: 'OrderBy', keys, span: this.span(start) };
132
+ }
133
+ parseFirstLast(name, start) {
134
+ if (this.isAtEnd() || this.check(TokenKind.Pipe) || this.check(TokenKind.RightBrace) ||
135
+ this.check(TokenKind.RightParen) || this.check(TokenKind.Eof) || this.check(TokenKind.Comma)) {
136
+ return { type: 'Aggregate', name, span: this.span(start) };
137
+ }
138
+ return { type: 'Aggregate', name, predicate: this.parsePipeArg(), span: this.span(start) };
139
+ }
140
+ parseReduce(start) {
141
+ const accumulator = this.parsePipeArg();
142
+ let initialValue;
143
+ if (this.match(TokenKind.From))
144
+ initialValue = this.parsePipeArg();
145
+ return { type: 'Reduce', accumulator, initialValue, span: this.span(start) };
146
+ }
147
+ parseConcat(start) {
148
+ if (this.isAtEnd() || this.check(TokenKind.Pipe) || this.check(TokenKind.RightBrace) ||
149
+ this.check(TokenKind.RightParen) || this.check(TokenKind.Eof) || this.check(TokenKind.Comma)) {
150
+ return { type: 'Concat', span: this.span(start) };
151
+ }
152
+ return { type: 'Concat', separator: this.parsePipeArg(), span: this.span(start) };
153
+ }
154
+ parseJoin(start) {
155
+ const source = this.parsePipeArg();
156
+ this.expect(TokenKind.On, "Expected 'on' after join source");
157
+ const leftKey = this.parsePipeArg();
158
+ this.expect(TokenKind.Equals, "Expected 'equals' in join");
159
+ const rightKey = this.parsePipeArg();
160
+ let intoAlias;
161
+ if (this.match(TokenKind.Into)) {
162
+ intoAlias = this.expect(TokenKind.Identifier, "Expected alias after 'into'").text;
163
+ }
164
+ let mode = 'inner';
165
+ if (this.check(TokenKind.Identifier)) {
166
+ const m = this.current().text.toLowerCase();
167
+ if (m === 'inner' || m === 'left' || m === 'right' || m === 'full') {
168
+ mode = m;
169
+ this.advance();
170
+ }
171
+ }
172
+ return { type: 'Join', source, leftKey, rightKey, intoAlias, mode, span: this.span(start) };
173
+ }
174
+ // ── Ternary ──
175
+ parseTernary() {
176
+ if (this.match(TokenKind.If)) {
177
+ const start = this.previous().span;
178
+ const condition = this.parseOr();
179
+ this.expect(TokenKind.Then, "Expected 'then'");
180
+ const thenBranch = this.parseTernary();
181
+ this.expect(TokenKind.Else, "Expected 'else'");
182
+ const elseBranch = this.parseTernary();
183
+ return { type: 'If', condition, thenBranch, elseBranch, span: this.span(start) };
184
+ }
185
+ return this.parseOr();
186
+ }
187
+ // ── Boolean ──
188
+ parseOr() {
189
+ const start = this.current().span;
190
+ let left = this.parseAnd();
191
+ while (this.match(TokenKind.PipePipe)) {
192
+ left = { type: 'Binary', left, operator: 'Or', right: this.parseAnd(), span: this.span(start) };
193
+ }
194
+ return left;
195
+ }
196
+ parseAnd() {
197
+ const start = this.current().span;
198
+ let left = this.parseEquality();
199
+ while (this.match(TokenKind.AmpersandAmpersand)) {
200
+ left = { type: 'Binary', left, operator: 'And', right: this.parseEquality(), span: this.span(start) };
201
+ }
202
+ return left;
203
+ }
204
+ // ── Comparison ──
205
+ parseEquality() {
206
+ const start = this.current().span;
207
+ let left = this.parseComparison();
208
+ while (this.check(TokenKind.EqualEqual) || this.check(TokenKind.BangEqual)) {
209
+ const op = this.advance().kind === TokenKind.EqualEqual ? 'Equal' : 'NotEqual';
210
+ left = { type: 'Binary', left, operator: op, right: this.parseComparison(), span: this.span(start) };
211
+ }
212
+ return left;
213
+ }
214
+ parseComparison() {
215
+ const start = this.current().span;
216
+ let left = this.parseAdditive();
217
+ while (this.check(TokenKind.LessThan) || this.check(TokenKind.LessThanOrEqual) ||
218
+ this.check(TokenKind.GreaterThan) || this.check(TokenKind.GreaterThanOrEqual)) {
219
+ const tok = this.advance();
220
+ const op = tok.kind === TokenKind.LessThan ? 'LessThan'
221
+ : tok.kind === TokenKind.LessThanOrEqual ? 'LessThanOrEqual'
222
+ : tok.kind === TokenKind.GreaterThan ? 'GreaterThan'
223
+ : 'GreaterThanOrEqual';
224
+ left = { type: 'Binary', left, operator: op, right: this.parseAdditive(), span: this.span(start) };
225
+ }
226
+ return left;
227
+ }
228
+ // ── Arithmetic ──
229
+ parseAdditive() {
230
+ const start = this.current().span;
231
+ let left = this.parseMultiplicative();
232
+ while (this.check(TokenKind.Plus) || this.check(TokenKind.Minus)) {
233
+ const op = this.advance().kind === TokenKind.Plus ? 'Add' : 'Subtract';
234
+ left = { type: 'Binary', left, operator: op, right: this.parseMultiplicative(), span: this.span(start) };
235
+ }
236
+ return left;
237
+ }
238
+ parseMultiplicative() {
239
+ const start = this.current().span;
240
+ let left = this.parseUnary();
241
+ while (this.check(TokenKind.Star) || this.check(TokenKind.Slash)) {
242
+ const op = this.advance().kind === TokenKind.Star ? 'Multiply' : 'Divide';
243
+ left = { type: 'Binary', left, operator: op, right: this.parseUnary(), span: this.span(start) };
244
+ }
245
+ return left;
246
+ }
247
+ parseUnary() {
248
+ if (this.match(TokenKind.Bang))
249
+ return { type: 'Unary', operator: 'Not', operand: this.parseUnary(), span: this.span(this.previous().span) };
250
+ if (this.match(TokenKind.Minus))
251
+ return { type: 'Unary', operator: 'Negate', operand: this.parseUnary(), span: this.span(this.previous().span) };
252
+ return this.parsePostfix();
253
+ }
254
+ // ── Postfix ──
255
+ parsePostfix() {
256
+ let expr = this.parsePrimary();
257
+ while (true) {
258
+ if (this.match(TokenKind.Dot)) {
259
+ const start = this.previous().span;
260
+ const name = this.expect(TokenKind.Identifier, "Expected property name after '.'").text;
261
+ if (this.match(TokenKind.LeftParen)) {
262
+ const args = this.parseArgList();
263
+ this.expect(TokenKind.RightParen, "Expected ')'");
264
+ expr = { type: 'MethodCall', target: expr, methodName: name, arguments: args, span: this.span(start) };
265
+ }
266
+ else {
267
+ expr = { type: 'MemberAccess', target: expr, memberName: name, span: this.span(start) };
268
+ }
269
+ }
270
+ else if (this.match(TokenKind.LeftBracket)) {
271
+ const start = this.previous().span;
272
+ if (this.match(TokenKind.Star)) {
273
+ this.expect(TokenKind.RightBracket, "Expected ']'");
274
+ expr = { type: 'Index', target: expr, index: null, span: this.span(start) };
275
+ }
276
+ else {
277
+ const index = this.parseExpression();
278
+ this.expect(TokenKind.RightBracket, "Expected ']'");
279
+ expr = { type: 'Index', target: expr, index, span: this.span(start) };
280
+ }
281
+ }
282
+ else {
283
+ break;
284
+ }
285
+ }
286
+ return expr;
287
+ }
288
+ // ── Primary ──
289
+ parsePrimary() {
290
+ const start = this.current().span;
291
+ // Dollar path
292
+ if (this.check(TokenKind.DollarDot) || this.check(TokenKind.Dollar))
293
+ return this.parsePath();
294
+ // Identifier / lambda / function call
295
+ if (this.check(TokenKind.Identifier))
296
+ return this.parseIdentifierOrLambda();
297
+ // Literals
298
+ if (this.match(TokenKind.StringLiteral))
299
+ return { type: 'Literal', value: this.previous().text, span: this.span(start) };
300
+ if (this.match(TokenKind.NumberLiteral))
301
+ return { type: 'Literal', value: parseFloat(this.previous().text), span: this.span(start) };
302
+ if (this.match(TokenKind.TrueLiteral))
303
+ return { type: 'Literal', value: true, span: this.span(start) };
304
+ if (this.match(TokenKind.FalseLiteral))
305
+ return { type: 'Literal', value: false, span: this.span(start) };
306
+ if (this.match(TokenKind.NullLiteral))
307
+ return { type: 'Literal', value: null, span: this.span(start) };
308
+ // Interpolated string
309
+ if (this.match(TokenKind.Backtick))
310
+ return this.parseInterpolatedContent(this.previous().text, start);
311
+ // Object literal
312
+ if (this.check(TokenKind.LeftBrace))
313
+ return this.parseObjectLiteral();
314
+ // Array literal
315
+ if (this.match(TokenKind.LeftBracket)) {
316
+ const items = [];
317
+ if (!this.check(TokenKind.RightBracket)) {
318
+ do {
319
+ items.push(this.parseExpression());
320
+ } while (this.match(TokenKind.Comma));
321
+ }
322
+ this.expect(TokenKind.RightBracket, "Expected ']'");
323
+ return { type: 'Array', items, span: this.span(start) };
324
+ }
325
+ // Parenthesized or multi-param lambda
326
+ if (this.match(TokenKind.LeftParen)) {
327
+ if (this.check(TokenKind.Identifier) && this.lookAheadMultiParamLambda()) {
328
+ const params = [];
329
+ do {
330
+ params.push(this.expect(TokenKind.Identifier, "Expected parameter name").text);
331
+ } while (this.match(TokenKind.Comma));
332
+ this.expect(TokenKind.RightParen, "Expected ')'");
333
+ this.expect(TokenKind.FatArrow, "Expected '=>'");
334
+ const body = this.pipeDepth > 0 ? this.parseTernary() : this.parseExpression();
335
+ return { type: 'Lambda', parameters: params, body, span: this.span(start) };
336
+ }
337
+ const expr = this.parseExpression();
338
+ this.expect(TokenKind.RightParen, "Expected ')'");
339
+ return expr;
340
+ }
341
+ // Memo
342
+ if (this.match(TokenKind.Memo)) {
343
+ const saved = this.pipeDepth;
344
+ this.pipeDepth = 0;
345
+ try {
346
+ const inner = this.parseTernary();
347
+ if (inner.type !== 'Lambda')
348
+ throw this.error("Expected lambda after 'memo'");
349
+ return { type: 'Memo', lambda: inner, span: this.span(start) };
350
+ }
351
+ finally {
352
+ this.pipeDepth = saved;
353
+ }
354
+ }
355
+ // Wildcard
356
+ if (this.match(TokenKind.Underscore))
357
+ return { type: 'Identifier', name: '_', span: this.span(start) };
358
+ throw this.error(`Unexpected token '${this.current().text}'`);
359
+ }
360
+ // ── Path ──
361
+ parsePath() {
362
+ const start = this.current().span;
363
+ const segments = [];
364
+ if (this.match(TokenKind.DollarDot)) {
365
+ segments.push(...this.parsePathSegments());
366
+ }
367
+ else {
368
+ this.match(TokenKind.Dollar); // standalone $
369
+ }
370
+ return { type: 'Path', segments, isRooted: true, span: this.span(start) };
371
+ }
372
+ parsePathSegments() {
373
+ const segments = [];
374
+ if (this.check(TokenKind.Identifier)) {
375
+ segments.push({ type: 'Property', name: this.advance().text, span: this.span(this.current().span) });
376
+ }
377
+ while (true) {
378
+ if (this.match(TokenKind.DotDot)) {
379
+ const name = this.expect(TokenKind.Identifier, "Expected name after '..'").text;
380
+ segments.push({ type: 'RecursiveDescent', name, span: this.span(this.current().span) });
381
+ }
382
+ else if (this.check(TokenKind.Dot) && !this.check(TokenKind.DotDot)) {
383
+ // Stop if .identifier( — it's a method call
384
+ if (this.peekAt(1)?.kind === TokenKind.Identifier && this.peekAt(2)?.kind === TokenKind.LeftParen)
385
+ break;
386
+ this.advance();
387
+ if (this.check(TokenKind.Identifier)) {
388
+ segments.push({ type: 'Property', name: this.advance().text, span: this.span(this.current().span) });
389
+ }
390
+ else
391
+ break;
392
+ }
393
+ else if (this.match(TokenKind.LeftBracket)) {
394
+ if (this.match(TokenKind.Star)) {
395
+ this.expect(TokenKind.RightBracket, "Expected ']'");
396
+ segments.push({ type: 'Index', index: null, span: this.span(this.current().span) });
397
+ }
398
+ else if (this.check(TokenKind.NumberLiteral) || this.check(TokenKind.Minus) || this.check(TokenKind.Colon)) {
399
+ const s = this.tryParseBracketInt();
400
+ if (this.match(TokenKind.Colon)) {
401
+ const e = this.tryParseBracketInt();
402
+ this.expect(TokenKind.RightBracket, "Expected ']'");
403
+ segments.push({ type: 'Slice', start: s, end: e, span: this.span(this.current().span) });
404
+ }
405
+ else if (s !== null) {
406
+ this.expect(TokenKind.RightBracket, "Expected ']'");
407
+ segments.push({ type: 'Index', index: s, span: this.span(this.current().span) });
408
+ }
409
+ else
410
+ break;
411
+ }
412
+ else
413
+ break;
414
+ }
415
+ else
416
+ break;
417
+ }
418
+ return segments;
419
+ }
420
+ tryParseBracketInt() {
421
+ const negate = this.match(TokenKind.Minus);
422
+ if (this.check(TokenKind.NumberLiteral)) {
423
+ const val = parseInt(this.advance().text, 10);
424
+ return negate ? -val : val;
425
+ }
426
+ return null;
427
+ }
428
+ // ── Identifier / Lambda / Function call ──
429
+ parseIdentifierOrLambda() {
430
+ const start = this.current().span;
431
+ const name = this.advance().text;
432
+ if (this.check(TokenKind.FatArrow)) {
433
+ this.advance();
434
+ const body = this.pipeDepth > 0 ? this.parseTernary() : this.parseExpression();
435
+ return { type: 'Lambda', parameters: [name], body, span: this.span(start) };
436
+ }
437
+ if (this.match(TokenKind.LeftParen)) {
438
+ const args = this.parseArgList();
439
+ this.expect(TokenKind.RightParen, "Expected ')'");
440
+ return { type: 'FunctionCall', functionName: name, arguments: args, span: this.span(start) };
441
+ }
442
+ return { type: 'Identifier', name, span: this.span(start) };
443
+ }
444
+ // ── Object literal ──
445
+ parseObjectLiteral() {
446
+ const start = this.current().span;
447
+ this.expect(TokenKind.LeftBrace, "Expected '{'");
448
+ const properties = [];
449
+ if (!this.check(TokenKind.RightBrace)) {
450
+ do {
451
+ const propStart = this.current().span;
452
+ if (this.match(TokenKind.Spread)) {
453
+ properties.push({ key: '', value: this.parseExpression(), span: this.span(propStart), isSpread: true });
454
+ continue;
455
+ }
456
+ if (this.match(TokenKind.LeftBracket)) {
457
+ const keyExpr = this.parseExpression();
458
+ this.expect(TokenKind.RightBracket, "Expected ']'");
459
+ this.expect(TokenKind.Colon, "Expected ':'");
460
+ properties.push({ key: '', value: this.parseExpression(), span: this.span(propStart), computedKey: keyExpr });
461
+ continue;
462
+ }
463
+ let key;
464
+ if (this.check(TokenKind.Identifier))
465
+ key = this.advance().text;
466
+ else if (this.check(TokenKind.StringLiteral))
467
+ key = this.advance().text;
468
+ else
469
+ throw this.error(`Expected property name, got '${this.current().text}'`);
470
+ this.expect(TokenKind.Colon, "Expected ':'");
471
+ properties.push({ key, value: this.parseExpression(), span: this.span(propStart) });
472
+ } while (this.match(TokenKind.Comma));
473
+ }
474
+ this.expect(TokenKind.RightBrace, "Expected '}'");
475
+ return { type: 'Object', properties, span: this.span(start) };
476
+ }
477
+ // ── Interpolated string ──
478
+ parseInterpolatedContent(raw, start) {
479
+ const parts = [];
480
+ let text = '';
481
+ let i = 0;
482
+ while (i < raw.length) {
483
+ if (raw[i] === '{') {
484
+ if (text) {
485
+ parts.push({ type: 'Text', text, span: start });
486
+ text = '';
487
+ }
488
+ i++;
489
+ let depth = 1;
490
+ let exprText = '';
491
+ while (i < raw.length && depth > 0) {
492
+ if (raw[i] === '{')
493
+ depth++;
494
+ else if (raw[i] === '}') {
495
+ depth--;
496
+ if (depth === 0) {
497
+ i++;
498
+ break;
499
+ }
500
+ }
501
+ exprText += raw[i];
502
+ i++;
503
+ }
504
+ const { ast } = parseExpression(exprText);
505
+ parts.push({ type: 'Expression', expression: ast, span: start });
506
+ }
507
+ else {
508
+ text += raw[i];
509
+ i++;
510
+ }
511
+ }
512
+ if (text)
513
+ parts.push({ type: 'Text', text, span: start });
514
+ return { type: 'InterpolatedString', parts, span: start };
515
+ }
516
+ // ── Match arms ──
517
+ parseMatchArms() {
518
+ const arms = [];
519
+ while (!this.isAtEnd() && !this.check(TokenKind.Pipe) && !this.check(TokenKind.Eof) &&
520
+ !this.check(TokenKind.RightBrace) && !this.check(TokenKind.RightParen)) {
521
+ const armStart = this.current().span;
522
+ let pattern;
523
+ if (this.check(TokenKind.Underscore)) {
524
+ this.advance();
525
+ pattern = null;
526
+ }
527
+ else
528
+ pattern = this.parsePrimary();
529
+ this.expect(TokenKind.FatArrow, "Expected '=>'");
530
+ const result = this.parseTernary();
531
+ arms.push({ pattern, result, span: this.span(armStart) });
532
+ this.match(TokenKind.Comma);
533
+ }
534
+ return arms;
535
+ }
536
+ // ── Let binding ──
537
+ parseLetBinding() {
538
+ const start = this.current().span;
539
+ this.expect(TokenKind.Let, "Expected 'let'");
540
+ const name = this.expect(TokenKind.Identifier, "Expected variable name").text;
541
+ this.expect(TokenKind.Assign, "Expected '='");
542
+ const value = this.parseExpression();
543
+ return { type: 'LetBinding', name, value, span: this.span(start) };
544
+ }
545
+ // ── Helpers ──
546
+ parseArgList() {
547
+ const args = [];
548
+ if (!this.check(TokenKind.RightParen)) {
549
+ do {
550
+ args.push(this.parseExpression());
551
+ } while (this.match(TokenKind.Comma));
552
+ }
553
+ return args;
554
+ }
555
+ lookAheadMultiParamLambda() {
556
+ const saved = this.pos;
557
+ try {
558
+ if (!this.check(TokenKind.Identifier))
559
+ return false;
560
+ this.advance();
561
+ while (this.check(TokenKind.Comma)) {
562
+ this.advance();
563
+ if (!this.check(TokenKind.Identifier))
564
+ return false;
565
+ this.advance();
566
+ }
567
+ if (!this.check(TokenKind.RightParen))
568
+ return false;
569
+ this.advance();
570
+ return this.check(TokenKind.FatArrow);
571
+ }
572
+ finally {
573
+ this.pos = saved;
574
+ }
575
+ }
576
+ current() { return this.pos < this.tokens.length ? this.tokens[this.pos] : this.tokens[this.tokens.length - 1]; }
577
+ previous() { return this.tokens[this.pos - 1]; }
578
+ isAtEnd() { return this.pos >= this.tokens.length || this.current().kind === TokenKind.Eof; }
579
+ check(kind) { return !this.isAtEnd() && this.current().kind === kind; }
580
+ peekAt(offset) { return this.tokens[this.pos + offset]; }
581
+ match(kind) {
582
+ if (!this.check(kind))
583
+ return false;
584
+ this.pos++;
585
+ return true;
586
+ }
587
+ advance() {
588
+ const token = this.current();
589
+ this.pos++;
590
+ return token;
591
+ }
592
+ expect(kind, message) {
593
+ if (this.check(kind))
594
+ return this.advance();
595
+ throw this.error(message);
596
+ }
597
+ span(start) {
598
+ return { start: start.start, end: this.current().span.end, line: start.line, column: start.column };
599
+ }
600
+ error(message) {
601
+ const diag = {
602
+ severity: 'error',
603
+ message,
604
+ span: this.current().span,
605
+ };
606
+ this.diagnostics.push(diag);
607
+ return new ParseError(diag);
608
+ }
609
+ }
610
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}