@ascent-lang/dev 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.
Files changed (111) hide show
  1. package/README.md +68 -0
  2. package/dist/errors/index.d.ts +4 -0
  3. package/dist/errors/index.d.ts.map +1 -0
  4. package/dist/errors/index.js +35 -0
  5. package/dist/errors/index.js.map +1 -0
  6. package/dist/errors/types.d.ts +9 -0
  7. package/dist/errors/types.d.ts.map +1 -0
  8. package/dist/errors/types.js +5 -0
  9. package/dist/errors/types.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +200 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/interpreter.d.ts +35 -0
  15. package/dist/interpreter.d.ts.map +1 -0
  16. package/dist/interpreter.js +305 -0
  17. package/dist/interpreter.js.map +1 -0
  18. package/dist/lexer/chars.d.ts +6 -0
  19. package/dist/lexer/chars.d.ts.map +1 -0
  20. package/dist/lexer/chars.js +6 -0
  21. package/dist/lexer/chars.js.map +1 -0
  22. package/dist/lexer/cursor.d.ts +16 -0
  23. package/dist/lexer/cursor.d.ts.map +1 -0
  24. package/dist/lexer/cursor.js +43 -0
  25. package/dist/lexer/cursor.js.map +1 -0
  26. package/dist/lexer/index.d.ts +21 -0
  27. package/dist/lexer/index.d.ts.map +1 -0
  28. package/dist/lexer/index.js +163 -0
  29. package/dist/lexer/index.js.map +1 -0
  30. package/dist/lexer/keywords.d.ts +5 -0
  31. package/dist/lexer/keywords.d.ts.map +1 -0
  32. package/dist/lexer/keywords.js +39 -0
  33. package/dist/lexer/keywords.js.map +1 -0
  34. package/dist/lexer/token.d.ts +20 -0
  35. package/dist/lexer/token.d.ts.map +1 -0
  36. package/dist/lexer/token.js +2 -0
  37. package/dist/lexer/token.js.map +1 -0
  38. package/dist/lib.d.ts +14 -0
  39. package/dist/lib.d.ts.map +1 -0
  40. package/dist/lib.js +17 -0
  41. package/dist/lib.js.map +1 -0
  42. package/dist/parser/ast.d.ts +128 -0
  43. package/dist/parser/ast.d.ts.map +1 -0
  44. package/dist/parser/ast.js +2 -0
  45. package/dist/parser/ast.js.map +1 -0
  46. package/dist/parser/expr.d.ts +4 -0
  47. package/dist/parser/expr.d.ts.map +1 -0
  48. package/dist/parser/expr.js +277 -0
  49. package/dist/parser/expr.js.map +1 -0
  50. package/dist/parser/index.d.ts +12 -0
  51. package/dist/parser/index.d.ts.map +1 -0
  52. package/dist/parser/index.js +40 -0
  53. package/dist/parser/index.js.map +1 -0
  54. package/dist/parser/printer.d.ts +7 -0
  55. package/dist/parser/printer.d.ts.map +1 -0
  56. package/dist/parser/printer.js +130 -0
  57. package/dist/parser/printer.js.map +1 -0
  58. package/dist/parser/stmt.d.ts +7 -0
  59. package/dist/parser/stmt.d.ts.map +1 -0
  60. package/dist/parser/stmt.js +153 -0
  61. package/dist/parser/stmt.js.map +1 -0
  62. package/dist/parser/token-stream.d.ts +19 -0
  63. package/dist/parser/token-stream.d.ts.map +1 -0
  64. package/dist/parser/token-stream.js +111 -0
  65. package/dist/parser/token-stream.js.map +1 -0
  66. package/dist/parser/type-expr.d.ts +5 -0
  67. package/dist/parser/type-expr.d.ts.map +1 -0
  68. package/dist/parser/type-expr.js +54 -0
  69. package/dist/parser/type-expr.js.map +1 -0
  70. package/dist/parser/typechecker.d.ts +9 -0
  71. package/dist/parser/typechecker.d.ts.map +1 -0
  72. package/dist/parser/typechecker.js +446 -0
  73. package/dist/parser/typechecker.js.map +1 -0
  74. package/dist/parser/typed-ast.d.ts +130 -0
  75. package/dist/parser/typed-ast.d.ts.map +1 -0
  76. package/dist/parser/typed-ast.js +2 -0
  77. package/dist/parser/typed-ast.js.map +1 -0
  78. package/dist/parser/typed-printer.d.ts +3 -0
  79. package/dist/parser/typed-printer.d.ts.map +1 -0
  80. package/dist/parser/typed-printer.js +91 -0
  81. package/dist/parser/typed-printer.js.map +1 -0
  82. package/dist/types/types.d.ts +28 -0
  83. package/dist/types/types.d.ts.map +1 -0
  84. package/dist/types/types.js +48 -0
  85. package/dist/types/types.js.map +1 -0
  86. package/package.json +70 -0
  87. package/src/errors/index.ts +38 -0
  88. package/src/errors/lexical.yml +16 -0
  89. package/src/errors/name.yml +11 -0
  90. package/src/errors/syntactic.yml +66 -0
  91. package/src/errors/typechecker.yml +61 -0
  92. package/src/errors/types.ts +13 -0
  93. package/src/index.ts +213 -0
  94. package/src/interpreter.ts +332 -0
  95. package/src/lexer/chars.ts +12 -0
  96. package/src/lexer/cursor.ts +51 -0
  97. package/src/lexer/index.ts +174 -0
  98. package/src/lexer/keywords.ts +43 -0
  99. package/src/lexer/token.ts +62 -0
  100. package/src/lib.ts +33 -0
  101. package/src/parser/ast.ts +64 -0
  102. package/src/parser/expr.ts +313 -0
  103. package/src/parser/index.ts +50 -0
  104. package/src/parser/printer.ts +146 -0
  105. package/src/parser/stmt.ts +176 -0
  106. package/src/parser/token-stream.ts +121 -0
  107. package/src/parser/type-expr.ts +63 -0
  108. package/src/parser/typechecker.ts +406 -0
  109. package/src/parser/typed-ast.ts +63 -0
  110. package/src/parser/typed-printer.ts +105 -0
  111. package/src/types/types.ts +65 -0
@@ -0,0 +1,305 @@
1
+ // A chain of scopes, one per block. A lookup (or assignment) walks
2
+ // outward through parents; a declaration always writes to the current
3
+ // (innermost) scope, so a 'fix'/'mut' inside a block shadows an outer
4
+ // slot of the same name without touching it, and the shadow disappears
5
+ // once the block ends.
6
+ export class Environment {
7
+ parent;
8
+ vars = new Map();
9
+ constructor(parent = null) {
10
+ this.parent = parent;
11
+ }
12
+ get(name) {
13
+ return this.vars.get(name)?.value ?? this.parent?.get(name);
14
+ }
15
+ declare(name, value, mutable) {
16
+ this.vars.set(name, { value, mutable });
17
+ }
18
+ // Reassigns a slot in whichever scope actually owns it (not
19
+ // necessarily this one), mutating the binding in place so every
20
+ // Environment sharing this chain sees the new value immediately —
21
+ // this is what lets a 'while' loop's condition observe a slot its
22
+ // body just changed.
23
+ assign(name, value) {
24
+ const binding = this.vars.get(name);
25
+ if (binding === undefined) {
26
+ return this.parent?.assign(name, value) ?? 'undeclared';
27
+ }
28
+ if (!binding.mutable)
29
+ return 'immutable';
30
+ binding.value = value;
31
+ return 'ok';
32
+ }
33
+ child() {
34
+ return new Environment(this);
35
+ }
36
+ }
37
+ // Coerce a runtime value to match a target type when the target is Float
38
+ // and the value is Int — the only implicit widening the language allows.
39
+ // All other type conversions are explicit (methods like toFloat/toInt).
40
+ const coerce = (v, targetType) => {
41
+ if (targetType.kind === 'Float' && v.type === 'Int') {
42
+ return { type: 'Float', value: Number(v.value) };
43
+ }
44
+ return v;
45
+ };
46
+ export const evaluateExpr = (expr, env) => {
47
+ switch (expr.kind) {
48
+ case 'literal': {
49
+ switch (expr.valueType) {
50
+ case 'Int': return { type: 'Int', value: expr.value };
51
+ case 'Float': return { type: 'Float', value: expr.value };
52
+ case 'Bool': return { type: 'Bool', value: expr.value };
53
+ case 'String': return { type: 'String', value: expr.value };
54
+ case 'None': return { type: 'None' };
55
+ case 'Done': return { type: 'Done' };
56
+ }
57
+ }
58
+ case 'slot': {
59
+ // N0001 / N0002 are caught at type-check time; this is an internal guard.
60
+ const value = env.get(expr.name);
61
+ if (value === undefined)
62
+ throw new Error(`internal: unbound slot '${expr.name}'`);
63
+ return value;
64
+ }
65
+ case 'call': {
66
+ // floor is the only built-in; others are rejected by the type checker.
67
+ const args = expr.args.map(a => evaluateExpr(a, env));
68
+ if (expr.callee === 'floor') {
69
+ const arg = args[0];
70
+ if (arg.type !== 'Float')
71
+ throw new Error('internal: floor arg not Float');
72
+ return { type: 'Float', value: Math.floor(arg.value) };
73
+ }
74
+ throw new Error(`internal: unknown built-in '${expr.callee}'`);
75
+ }
76
+ case 'methodCall': {
77
+ const receiver = evaluateExpr(expr.receiver, env);
78
+ const args = expr.args.map(a => evaluateExpr(a, env));
79
+ return evalMethodCall(receiver, expr.method, args, expr.type);
80
+ }
81
+ case 'list': {
82
+ // expr.type is List<T>; coerce each element to T (handles Int → Float).
83
+ const elemType = expr.type.kind === 'List' ? expr.type.elem : null;
84
+ const elements = expr.elements.map(el => {
85
+ const v = evaluateExpr(el, env);
86
+ return elemType !== null ? coerce(v, elemType) : v;
87
+ });
88
+ return { type: 'List', elements };
89
+ }
90
+ case 'index': {
91
+ const list = evaluateExpr(expr.list, env);
92
+ const idx = evaluateExpr(expr.index, env);
93
+ if (list.type !== 'List')
94
+ throw new Error('internal: index receiver not a List');
95
+ if (idx.type !== 'Int')
96
+ throw new Error('internal: index not an Int');
97
+ const i = Number(idx.value);
98
+ if (i < 0 || i >= list.elements.length) {
99
+ throw new Error(`index ${i} out of bounds (length ${list.elements.length})`);
100
+ }
101
+ return list.elements[i];
102
+ }
103
+ case 'unary': {
104
+ const operand = evaluateExpr(expr.operand, env);
105
+ if (operand.type === 'Int')
106
+ return { type: 'Int', value: -operand.value };
107
+ if (operand.type === 'Float')
108
+ return { type: 'Float', value: -operand.value };
109
+ throw new Error(`internal: unary '-' on ${operand.type}`);
110
+ }
111
+ case 'binary':
112
+ return evaluateBinary(expr.op, evaluateExpr(expr.left, env), evaluateExpr(expr.right, env));
113
+ case 'block': {
114
+ return evaluateBlock(expr, env);
115
+ }
116
+ case 'if': {
117
+ const cond = evaluateExpr(expr.cond, env);
118
+ if (cond.type !== 'Bool')
119
+ throw new Error('internal: if condition not Bool');
120
+ if (cond.value)
121
+ return evaluateExpr(expr.then, env);
122
+ if (expr.else !== null)
123
+ return evaluateExpr(expr.else, env);
124
+ return { type: 'Done' };
125
+ }
126
+ }
127
+ };
128
+ const evaluateBlock = (block, env) => {
129
+ const blockEnv = env.child();
130
+ let result = { type: 'Done' };
131
+ for (const stmt of block.stmts) {
132
+ result = executeStmt(stmt, blockEnv);
133
+ }
134
+ return result;
135
+ };
136
+ export const executeStmt = (stmt, env) => {
137
+ switch (stmt.kind) {
138
+ case 'fix':
139
+ case 'mut': {
140
+ // Coerce the init value to the declared slot type (handles Int → Float
141
+ // when the annotation says Float but the literal is an Int).
142
+ const value = coerce(evaluateExpr(stmt.init, env), stmt.slotType);
143
+ env.declare(stmt.name, value, stmt.kind === 'mut');
144
+ return { type: 'Done' };
145
+ }
146
+ case 'assign': {
147
+ const value = coerce(evaluateExpr(stmt.value, env), stmt.slotType);
148
+ const result = env.assign(stmt.name, value);
149
+ if (result !== 'ok')
150
+ throw new Error(`internal: assign '${stmt.name}' → ${result}`);
151
+ return { type: 'Done' };
152
+ }
153
+ case 'expr':
154
+ return evaluateExpr(stmt.expr, env);
155
+ case 'while': {
156
+ // Each iteration evaluates the body as a block, giving it a fresh
157
+ // child scope — a 'fix' from one iteration doesn't leak into the next.
158
+ while (true) {
159
+ const cond = evaluateExpr(stmt.cond, env);
160
+ if (cond.type !== 'Bool')
161
+ throw new Error('internal: while condition not Bool');
162
+ if (!cond.value)
163
+ break;
164
+ evaluateBlock(stmt.body, env);
165
+ }
166
+ return { type: 'Done' };
167
+ }
168
+ }
169
+ };
170
+ // ---- Method dispatch ------------------------------------------------
171
+ const evalIntMethod = (receiver, method, _args) => {
172
+ switch (method) {
173
+ case 'toStr': return { type: 'String', value: String(receiver.value) };
174
+ case 'toFloat': return { type: 'Float', value: Number(receiver.value) };
175
+ case 'abs': return { type: 'Int', value: receiver.value < 0n ? -receiver.value : receiver.value };
176
+ default: throw new Error(`internal: Int has no method '${method}'`);
177
+ }
178
+ };
179
+ const evalFloatMethod = (receiver, method, args) => {
180
+ switch (method) {
181
+ case 'toStr': return { type: 'String', value: String(receiver.value) };
182
+ case 'toInt': return { type: 'Int', value: BigInt(Math.trunc(receiver.value)) };
183
+ case 'abs': return { type: 'Float', value: Math.abs(receiver.value) };
184
+ case 'min': {
185
+ const r = args[0];
186
+ return { type: 'Float', value: Math.min(receiver.value, r.type === 'Int' ? Number(r.value) : r.value) };
187
+ }
188
+ case 'max': {
189
+ const r = args[0];
190
+ return { type: 'Float', value: Math.max(receiver.value, r.type === 'Int' ? Number(r.value) : r.value) };
191
+ }
192
+ default: throw new Error(`internal: Float has no method '${method}'`);
193
+ }
194
+ };
195
+ const evalListMethod = (receiver, method, args, resultType) => {
196
+ // For methods that return a List, resultType.elem is the element type to
197
+ // coerce to (handles Int → Float when the list widens, e.g. after concat).
198
+ const elemType = resultType.kind === 'List' ? resultType.elem : null;
199
+ const coerceElem = (v) => elemType !== null ? coerce(v, elemType) : v;
200
+ switch (method) {
201
+ case 'length': return { type: 'Int', value: BigInt(receiver.elements.length) };
202
+ case 'isEmpty': return { type: 'Bool', value: receiver.elements.length === 0 };
203
+ case 'reverse': return { type: 'List', elements: [...receiver.elements].reverse().map(coerceElem) };
204
+ case 'append':
205
+ return { type: 'List', elements: [...receiver.elements.map(coerceElem), coerceElem(args[0])] };
206
+ case 'prepend':
207
+ return { type: 'List', elements: [coerceElem(args[0]), ...receiver.elements.map(coerceElem)] };
208
+ case 'concat': {
209
+ const other = args[0];
210
+ return {
211
+ type: 'List',
212
+ elements: [...receiver.elements.map(coerceElem), ...other.elements.map(coerceElem)],
213
+ };
214
+ }
215
+ default: throw new Error(`internal: List has no method '${method}'`);
216
+ }
217
+ };
218
+ const evalMethodCall = (receiver, method, args, resultType) => {
219
+ switch (receiver.type) {
220
+ case 'Int': return evalIntMethod(receiver, method, args);
221
+ case 'Float': return evalFloatMethod(receiver, method, args);
222
+ case 'List': return evalListMethod(receiver, method, args, resultType);
223
+ default: throw new Error(`internal: ${receiver.type} has no methods`);
224
+ }
225
+ };
226
+ const isNumeric = (v) => v.type === 'Int' || v.type === 'Float';
227
+ const asFloat = (v) => (v.type === 'Int' ? Number(v.value) : v.value);
228
+ // BigInt's own '%' truncates toward zero (remainder takes the sign of
229
+ // the dividend, like C/Java/JS). 'mod' instead floors — the result
230
+ // takes the sign of the divisor — so a single correction pass covers
231
+ // the case where the truncating remainder landed on the wrong side of
232
+ // zero. 'div' is then defined from 'mod' so the identity
233
+ // `(a div b) * b + (a mod b) == a` holds by construction.
234
+ const floorDivMod = (a, b) => {
235
+ let mod = a % b;
236
+ if (mod !== 0n && (mod < 0n) !== (b < 0n))
237
+ mod += b;
238
+ return { div: (a - mod) / b, mod };
239
+ };
240
+ // '==' / '!=' are structural — same-type values compare by their
241
+ // contents — except Int meeting Float, which compares as numbers (the
242
+ // same one-way promotion arithmetic uses). Two Ints compare exactly, as
243
+ // BigInts, rather than going through asFloat and risking the precision
244
+ // loss a huge Int would suffer converting to a JS number.
245
+ const valuesEqual = (left, right) => {
246
+ if (isNumeric(left) && isNumeric(right)) {
247
+ return left.type === 'Int' && right.type === 'Int'
248
+ ? left.value === right.value
249
+ : asFloat(left) === asFloat(right);
250
+ }
251
+ if (left.type !== right.type)
252
+ return false;
253
+ if (left.type === 'Bool' && right.type === 'Bool')
254
+ return left.value === right.value;
255
+ if (left.type === 'String' && right.type === 'String')
256
+ return left.value === right.value;
257
+ return true; // None, Done — singleton types
258
+ };
259
+ const evaluateBinary = (op, left, right) => {
260
+ if (op === '==' || op === '!=') {
261
+ const eq = valuesEqual(left, right);
262
+ return { type: 'Bool', value: op === '==' ? eq : !eq };
263
+ }
264
+ if (!isNumeric(left) || !isNumeric(right))
265
+ throw new Error(`internal: '${op}' on non-numeric`);
266
+ if (op === '<' || op === '<=' || op === '>' || op === '>=') {
267
+ const useInt = left.type === 'Int' && right.type === 'Int';
268
+ const l = useInt ? left.value : asFloat(left);
269
+ const r = useInt ? right.value : asFloat(right);
270
+ const result = op === '<' ? l < r : op === '<=' ? l <= r : op === '>' ? l > r : l >= r;
271
+ return { type: 'Bool', value: result };
272
+ }
273
+ if (op === 'div' || op === 'mod') {
274
+ if (left.type !== 'Int' || right.type !== 'Int')
275
+ throw new Error(`internal: '${op}' on non-Int`);
276
+ if (right.value === 0n)
277
+ throw new Error(`${op} by zero`);
278
+ const { div, mod } = floorDivMod(left.value, right.value);
279
+ return { type: 'Int', value: op === 'div' ? div : mod };
280
+ }
281
+ if (op === '/') {
282
+ const divisor = asFloat(right);
283
+ if (divisor === 0)
284
+ throw new Error('division by zero');
285
+ return { type: 'Float', value: asFloat(left) / divisor };
286
+ }
287
+ if (left.type === 'Int' && right.type === 'Int') {
288
+ const v = op === '+' ? left.value + right.value
289
+ : op === '-' ? left.value - right.value
290
+ : left.value * right.value;
291
+ return { type: 'Int', value: v };
292
+ }
293
+ const l = asFloat(left);
294
+ const r = asFloat(right);
295
+ const v = op === '+' ? l + r : op === '-' ? l - r : l * r;
296
+ return { type: 'Float', value: v };
297
+ };
298
+ export const executeProgram = (program, env) => {
299
+ let result = { type: 'Done' };
300
+ for (const stmt of program.stmts) {
301
+ result = executeStmt(stmt, env);
302
+ }
303
+ return result;
304
+ };
305
+ //# sourceMappingURL=interpreter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const isDigit: (ch: string) => boolean;
2
+ export declare const isAlpha: (ch: string) => boolean;
3
+ export declare const isAlphaNum: (ch: string) => boolean;
4
+ export declare const isUpper: (ch: string) => boolean;
5
+ export declare const isWhitespace: (ch: string) => boolean;
6
+ //# sourceMappingURL=chars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chars.d.ts","sourceRoot":"","sources":["../../src/lexer/chars.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,GAAI,IAAI,MAAM,KAAG,OAAiC,CAAC;AAEvE,eAAO,MAAM,OAAO,GAAI,IAAI,MAAM,KAAG,OAC+B,CAAC;AAErE,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,KAAG,OAAqC,CAAC;AAE9E,eAAO,MAAM,OAAO,GAAI,IAAI,MAAM,KAAG,OAAiC,CAAC;AAEvE,eAAO,MAAM,YAAY,GAAI,IAAI,MAAM,KAAG,OAEzC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const isDigit = (ch) => ch >= '0' && ch <= '9';
2
+ export const isAlpha = (ch) => (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch === '_';
3
+ export const isAlphaNum = (ch) => isAlpha(ch) || isDigit(ch);
4
+ export const isUpper = (ch) => ch >= 'A' && ch <= 'Z';
5
+ export const isWhitespace = (ch) => (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r');
6
+ //# sourceMappingURL=chars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chars.js","sourceRoot":"","sources":["../../src/lexer/chars.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAW,EAAE,CAC7C,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;AAErE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC;AAEvE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,CACnD,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CACxD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Position, Span } from './token.js';
2
+ export declare class Cursor {
3
+ private src;
4
+ private pos;
5
+ private line;
6
+ private col;
7
+ constructor(src: string);
8
+ peek(offset?: number): string;
9
+ advance(): string;
10
+ atEnd(): boolean;
11
+ mark(): Position;
12
+ spanFrom(start: Position): Span;
13
+ match(ch: string): boolean;
14
+ slice(start: Position): string;
15
+ }
16
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/lexer/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,MAAM;IACjB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,GAAG,CAAa;gBAEL,GAAG,EAAE,MAAM;IAIvB,IAAI,CAAC,MAAM,SAAI,GAAG,MAAM;IAIxB,OAAO,IAAI,MAAM;IAWjB,KAAK,IAAI,OAAO;IAIhB,IAAI,IAAI,QAAQ;IAIhB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ1B,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;CAGtC"}
@@ -0,0 +1,43 @@
1
+ export class Cursor {
2
+ src;
3
+ pos = 0;
4
+ line = 1;
5
+ col = 1;
6
+ constructor(src) {
7
+ this.src = src;
8
+ }
9
+ peek(offset = 0) {
10
+ return this.src[this.pos + offset] ?? '\0';
11
+ }
12
+ advance() {
13
+ const ch = this.src[this.pos++] ?? '\0';
14
+ if (ch === '\n') {
15
+ this.line++;
16
+ this.col = 1;
17
+ }
18
+ else {
19
+ this.col++;
20
+ }
21
+ return ch;
22
+ }
23
+ atEnd() {
24
+ return this.pos >= this.src.length;
25
+ }
26
+ mark() {
27
+ return { offset: this.pos, line: this.line, column: this.col };
28
+ }
29
+ spanFrom(start) {
30
+ return { start, end: this.mark() };
31
+ }
32
+ match(ch) {
33
+ if (this.src[this.pos] !== ch) {
34
+ return false;
35
+ }
36
+ this.advance();
37
+ return true;
38
+ }
39
+ slice(start) {
40
+ return this.src.slice(start.offset, this.pos);
41
+ }
42
+ }
43
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/lexer/cursor.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,MAAM;IACT,GAAG,CAAS;IACZ,GAAG,GAAW,CAAC,CAAC;IAChB,IAAI,GAAW,CAAC,CAAC;IACjB,GAAG,GAAW,CAAC,CAAC;IAExB,YAAmB,GAAW;QAC5B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAEM,IAAI,CAAC,MAAM,GAAG,CAAC;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC;IAC7C,CAAC;IAEM,OAAO;QACZ,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;QACxC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IACrC,CAAC;IAEM,IAAI;QACT,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACjE,CAAC;IAEM,QAAQ,CAAC,KAAe;QAC7B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,EAAU;QACrB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,KAAe;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import type { Marker } from './token.js';
2
+ import type { Token } from './token.js';
3
+ export interface LexResult {
4
+ tokens: Token[];
5
+ errorMarkers: Marker[];
6
+ }
7
+ export declare class Lexer {
8
+ private c;
9
+ private errorMarkers;
10
+ constructor(src: string);
11
+ private token;
12
+ private error;
13
+ private consumeWhile;
14
+ private skipWhitespace;
15
+ private readWord;
16
+ private readString;
17
+ private readNumber;
18
+ private nextToken;
19
+ tokenize(): LexResult;
20
+ }
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lexer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,MAAM,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,YAAY,CAAC;AAKnD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,CAAC,CAAS;IAClB,OAAO,CAAC,YAAY,CAAgB;gBAEjB,GAAG,EAAE,MAAM;IAI9B,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,UAAU;IA8BlB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,SAAS;IA+DV,QAAQ,IAAI,SAAS;CAW7B"}
@@ -0,0 +1,163 @@
1
+ import { isDigit, isAlpha, isAlphaNum, isWhitespace } from './chars.js';
2
+ import { Cursor } from './cursor.js';
3
+ import { resolveWord } from './keywords.js';
4
+ export class Lexer {
5
+ c;
6
+ errorMarkers = [];
7
+ constructor(src) {
8
+ this.c = new Cursor(src);
9
+ }
10
+ token(kind, start) {
11
+ return { kind, value: this.c.slice(start), span: this.c.spanFrom(start) };
12
+ }
13
+ error(code, span) {
14
+ this.errorMarkers.push({ code, span });
15
+ return { kind: 'ERROR', value: '', span };
16
+ }
17
+ consumeWhile(pred) {
18
+ while (pred(this.c.peek())) {
19
+ this.c.advance();
20
+ }
21
+ }
22
+ skipWhitespace() {
23
+ this.consumeWhile(isWhitespace);
24
+ }
25
+ readWord() {
26
+ const start = this.c.mark();
27
+ const firstCh = this.c.peek();
28
+ this.consumeWhile(isAlphaNum);
29
+ const kind = resolveWord(this.c.slice(start), firstCh);
30
+ return kind !== null ? this.token(kind, start) : this.error('L0001', this.c.spanFrom(start));
31
+ }
32
+ readString(start) {
33
+ let value = '';
34
+ while (true) {
35
+ const ch = this.c.peek();
36
+ if (ch === '\0' || ch === '\n') {
37
+ return this.error('L0003', this.c.spanFrom(start));
38
+ }
39
+ if (ch === '"') {
40
+ this.c.advance(); // consume closing '"'
41
+ return { kind: 'STR_LIT', value, span: this.c.spanFrom(start) };
42
+ }
43
+ if (ch === '\\') {
44
+ this.c.advance(); // consume '\'
45
+ const esc = this.c.peek();
46
+ this.c.advance(); // consume escape char
47
+ switch (esc) {
48
+ case 'n':
49
+ value += '\n';
50
+ break;
51
+ case 't':
52
+ value += '\t';
53
+ break;
54
+ case 'r':
55
+ value += '\r';
56
+ break;
57
+ case '"':
58
+ value += '"';
59
+ break;
60
+ case '\\':
61
+ value += '\\';
62
+ break;
63
+ default: return this.error('L0001', this.c.spanFrom(start));
64
+ }
65
+ }
66
+ else {
67
+ value += ch;
68
+ this.c.advance();
69
+ }
70
+ }
71
+ }
72
+ readNumber() {
73
+ const start = this.c.mark();
74
+ this.consumeWhile(isDigit);
75
+ // Float: only consume the dot when a digit follows — this keeps '3.method()'
76
+ // valid in later sections where '.' is the member-access operator.
77
+ let kind = 'INT_LIT';
78
+ if (this.c.peek() === '.' && isDigit(this.c.peek(1))) {
79
+ this.c.advance(); // '.'
80
+ this.consumeWhile(isDigit);
81
+ kind = 'FLOAT_LIT';
82
+ }
83
+ // A number may not be glued to a letter: 123abc / 1.5x are one malformed
84
+ // token, not a number followed by a name.
85
+ if (isAlpha(this.c.peek())) {
86
+ this.consumeWhile(isAlphaNum);
87
+ return this.error('L0002', this.c.spanFrom(start));
88
+ }
89
+ return this.token(kind, start);
90
+ }
91
+ nextToken() {
92
+ this.skipWhitespace();
93
+ if (this.c.atEnd()) {
94
+ const start = this.c.mark();
95
+ return this.token('EOF', start);
96
+ }
97
+ const ch = this.c.peek();
98
+ if (isDigit(ch)) {
99
+ return this.readNumber();
100
+ }
101
+ if (isAlpha(ch)) {
102
+ return this.readWord();
103
+ }
104
+ // A leading-dot float like .5 looks like a number attempt, so L0002 is
105
+ // more helpful than L0001 ("unexpected character").
106
+ if (ch === '.' && isDigit(this.c.peek(1))) {
107
+ const start = this.c.mark();
108
+ this.c.advance(); // '.'
109
+ this.consumeWhile(isDigit);
110
+ return this.error('L0002', this.c.spanFrom(start));
111
+ }
112
+ const start = this.c.mark();
113
+ this.c.advance();
114
+ switch (ch) {
115
+ case '+': return this.token('PLUS', start);
116
+ case '-': return this.token('MINUS', start);
117
+ case '*': return this.token('STAR', start);
118
+ case '/': return this.token('SLASH', start);
119
+ case '=':
120
+ if (this.c.match('='))
121
+ return this.token('EQ_EQ', start);
122
+ return this.token('EQUALS', start);
123
+ case '!':
124
+ // Bare '!' has no meaning — negation is the word 'not' (§5), so
125
+ // only '!=' is a valid token starting with '!'.
126
+ if (this.c.match('='))
127
+ return this.token('BANG_EQ', start);
128
+ return this.error('L0001', this.c.spanFrom(start));
129
+ case '<':
130
+ if (this.c.match('='))
131
+ return this.token('LT_EQ', start);
132
+ return this.token('LT', start);
133
+ case '>':
134
+ if (this.c.match('='))
135
+ return this.token('GT_EQ', start);
136
+ return this.token('GT', start);
137
+ case '"': return this.readString(start);
138
+ case '.': return this.token('DOT', start);
139
+ case ':': return this.token('COLON', start);
140
+ case ',': return this.token('COMMA', start);
141
+ case ';': return this.token('SEMICOLON', start);
142
+ case '(': return this.token('LPAREN', start);
143
+ case ')': return this.token('RPAREN', start);
144
+ case '{': return this.token('LBRACE', start);
145
+ case '}': return this.token('RBRACE', start);
146
+ case '[': return this.token('LBRACKET', start);
147
+ case ']': return this.token('RBRACKET', start);
148
+ default: return this.error('L0001', this.c.spanFrom(start));
149
+ }
150
+ }
151
+ tokenize() {
152
+ const tokens = [];
153
+ while (true) {
154
+ const tok = this.nextToken();
155
+ tokens.push(tok);
156
+ if (tok.kind === 'EOF') {
157
+ break;
158
+ }
159
+ }
160
+ return { tokens, errorMarkers: this.errorMarkers };
161
+ }
162
+ }
163
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lexer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { TokenKind } from './token.js';
2
+ export declare const KEYWORDS: Record<string, TokenKind>;
3
+ export declare const CONSTRUCTORS: Record<string, TokenKind>;
4
+ export declare function resolveWord(value: string, firstCh: string): TokenKind | null;
5
+ //# sourceMappingURL=keywords.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../src/lexer/keywords.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAS9C,CAAC;AAKF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAKlD,CAAC;AAgBF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAK5E"}