spex-parser 0.1.4 → 0.6.1

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 (44) hide show
  1. package/README.md +312 -1
  2. package/dist/ast.d.ts +70 -2
  3. package/dist/ast.d.ts.map +1 -1
  4. package/dist/constants.d.ts +20 -0
  5. package/dist/constants.d.ts.map +1 -0
  6. package/dist/constants.js +32 -0
  7. package/dist/constants.js.map +1 -0
  8. package/dist/index.d.ts +4 -2
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/lexer.d.ts +19 -1
  13. package/dist/lexer.d.ts.map +1 -1
  14. package/dist/lexer.js +172 -5
  15. package/dist/lexer.js.map +1 -1
  16. package/dist/parser.d.ts +9 -0
  17. package/dist/parser.d.ts.map +1 -1
  18. package/dist/parser.js +103 -7
  19. package/dist/parser.js.map +1 -1
  20. package/dist/visitor.d.ts +11 -2
  21. package/dist/visitor.d.ts.map +1 -1
  22. package/dist/visitor.js +181 -8
  23. package/dist/visitor.js.map +1 -1
  24. package/package.json +1 -1
  25. package/src/ast.ts +93 -0
  26. package/src/constants.ts +40 -0
  27. package/src/index.ts +20 -3
  28. package/src/lexer.ts +164 -6
  29. package/src/parser.ts +128 -7
  30. package/src/visitor.ts +195 -11
  31. package/tests/constants.test.ts +102 -0
  32. package/tests/e2e.test.ts +15 -3
  33. package/tests/lexer.test.ts +291 -9
  34. package/tests/parser.test.ts +489 -0
  35. package/tests/props/express_todo_web.spex +108 -0
  36. package/tests/props/express_web_env.spex +16 -0
  37. package/tests/props/flask_todo_web.spex +111 -0
  38. package/tests/props/flask_web_env.spex +16 -0
  39. package/tests/props/python_cli_env.spex +16 -0
  40. package/tests/props/python_todo_cli.spex +70 -0
  41. package/tests/props/todo.spex +100 -60
  42. package/tests/props/typescript_cli_env.spex +16 -0
  43. package/tests/props/typescript_todo_cli.spex +70 -0
  44. package/tests/visitor.test.ts +892 -0
package/dist/visitor.js CHANGED
@@ -3,6 +3,13 @@ import { SpexParser } from './parser.js';
3
3
  const parserInstance = new SpexParser();
4
4
  const BaseSpexVisitor = parserInstance.getBaseCstVisitorConstructor();
5
5
  export const REFERENCE_PATTERN = /@([a-zA-Z_][\w]*(?:\.[a-zA-Z_][\w]*)*)/g;
6
+ function unescapeConstraint(text) {
7
+ return text.replace(/\\([\\{}])/g, '$1');
8
+ }
9
+ function stringLiteralValue(image) {
10
+ const inner = image.slice(1, -1);
11
+ return inner.replace(/\\([\\'"])/g, '$1');
12
+ }
6
13
  export function parseConstraint(raw) {
7
14
  const parts = [];
8
15
  let lastIndex = 0;
@@ -29,6 +36,9 @@ export class SpexParserVisitor extends BaseSpexVisitor {
29
36
  return { kind: 'SpexFile', declarations };
30
37
  }
31
38
  declaration(ctx) {
39
+ if (ctx.realizeDeclaration) {
40
+ return this.visit(ctx.realizeDeclaration);
41
+ }
32
42
  if (ctx.packageDeclaration) {
33
43
  return this.visit(ctx.packageDeclaration);
34
44
  }
@@ -41,15 +51,61 @@ export class SpexParserVisitor extends BaseSpexVisitor {
41
51
  if (ctx.exportDeclaration) {
42
52
  return this.visit(ctx.exportDeclaration);
43
53
  }
54
+ if (ctx.includeDeclaration) {
55
+ return this.visit(ctx.includeDeclaration);
56
+ }
44
57
  return this.visit(ctx.generateDeclaration);
45
58
  }
59
+ enumObject(ctx) {
60
+ return {
61
+ kind: 'EnumObject',
62
+ values: ctx.StringLiteral.map((s) => stringLiteralValue(s.image)),
63
+ };
64
+ }
65
+ literalObject(ctx) {
66
+ if (ctx.StringLiteral) {
67
+ return {
68
+ kind: 'StringLiteralObject',
69
+ value: stringLiteralValue(ctx.StringLiteral[0].image),
70
+ };
71
+ }
72
+ if (ctx.NumberLiteral) {
73
+ return { kind: 'NumberLiteralObject', value: ctx.NumberLiteral[0].image };
74
+ }
75
+ return { kind: 'BoolLiteralObject', value: ctx.TrueTok ? true : false };
76
+ }
46
77
  objectDeclaration(ctx) {
47
78
  return {
48
79
  kind: 'ObjectDeclaration',
49
80
  name: ctx.Identifier[0].image,
50
- object: this.visit(ctx.objectExpression),
81
+ object: this.visit(ctx.setObject),
51
82
  };
52
83
  }
84
+ setObject(ctx) {
85
+ const operands = ctx.coproductObject.map((expr) => this.visit(expr));
86
+ let result = operands[0];
87
+ for (let i = 1; i < operands.length; i++) {
88
+ const op = ctx.op[i - 1].tokenType.name;
89
+ if (op === 'UnionTok') {
90
+ result = { kind: 'SetUnionObject', left: result, right: operands[i] };
91
+ }
92
+ else if (op === 'IntersectTok') {
93
+ result = { kind: 'SetIntersectionObject', left: result, right: operands[i] };
94
+ }
95
+ else {
96
+ result = { kind: 'SetDifferenceObject', left: result, right: operands[i] };
97
+ }
98
+ }
99
+ return result;
100
+ }
101
+ coproductObject(ctx) {
102
+ const operands = ctx.objectExpression.map((expr) => this.visit(expr));
103
+ let result = operands[0];
104
+ for (let i = 1; i < operands.length; i++) {
105
+ result = { kind: 'CoproductObject', left: result, right: operands[i] };
106
+ }
107
+ return result;
108
+ }
53
109
  objectExpression(ctx) {
54
110
  if (ctx.base) {
55
111
  const exponent = this.visit(ctx.base);
@@ -69,9 +125,24 @@ export class SpexParserVisitor extends BaseSpexVisitor {
69
125
  if (ctx.subObject) {
70
126
  expr = this.visit(ctx.subObject);
71
127
  }
128
+ else if (ctx.parenthesizedObject) {
129
+ expr = this.visit(ctx.parenthesizedObject);
130
+ }
72
131
  else if (ctx.productObject) {
73
132
  expr = this.visit(ctx.productObject);
74
133
  }
134
+ else if (ctx.enumObject) {
135
+ expr = this.visit(ctx.enumObject);
136
+ }
137
+ else if (ctx.patternObject) {
138
+ expr = this.visit(ctx.patternObject);
139
+ }
140
+ else if (ctx.lambdaObject) {
141
+ expr = this.visit(ctx.lambdaObject);
142
+ }
143
+ else if (ctx.literalObject) {
144
+ expr = this.visit(ctx.literalObject);
145
+ }
75
146
  else {
76
147
  expr = this.visit(ctx.namedObject);
77
148
  }
@@ -82,6 +153,18 @@ export class SpexParserVisitor extends BaseSpexVisitor {
82
153
  }
83
154
  return expr;
84
155
  }
156
+ parenthesizedObject(ctx) {
157
+ return this.visit(ctx.setObject);
158
+ }
159
+ patternObject(ctx) {
160
+ const image = ctx.PatternLiteral[0].image;
161
+ const lastSlash = image.lastIndexOf('/');
162
+ return {
163
+ kind: 'PatternLiteralObject',
164
+ source: image.slice(1, lastSlash),
165
+ flags: image.slice(lastSlash + 1),
166
+ };
167
+ }
85
168
  namedObject(ctx) {
86
169
  let parts;
87
170
  if (ctx.StringTok) {
@@ -96,6 +179,12 @@ export class SpexParserVisitor extends BaseSpexVisitor {
96
179
  else if (ctx.UnitTok) {
97
180
  parts = [ctx.UnitTok[0].image, ...(ctx.Identifier ?? []).map((id) => id.image)];
98
181
  }
182
+ else if (ctx.ConceptTok) {
183
+ parts = [ctx.ConceptTok[0].image, ...(ctx.Identifier ?? []).map((id) => id.image)];
184
+ }
185
+ else if (ctx.EnvironmentTok) {
186
+ parts = [ctx.EnvironmentTok[0].image, ...(ctx.Identifier ?? []).map((id) => id.image)];
187
+ }
99
188
  else {
100
189
  parts = ctx.Identifier.map((id) => id.image);
101
190
  }
@@ -105,16 +194,24 @@ export class SpexParserVisitor extends BaseSpexVisitor {
105
194
  };
106
195
  }
107
196
  productObject(ctx) {
197
+ const names = ctx.Identifier ?? [];
108
198
  const fields = {};
109
- for (let i = 0; i < ctx.Identifier.length; i++) {
110
- const name = ctx.Identifier[i].image;
111
- fields[name] = this.visit(ctx.objectExpression[i]);
199
+ for (let i = 0; i < names.length; i++) {
200
+ const name = names[i].image;
201
+ const value = this.visit(ctx.setObject[i]);
202
+ if (value.kind === 'NamedObject' && value.name === 'unit') {
203
+ continue;
204
+ }
205
+ fields[name] = value;
206
+ }
207
+ if (Object.keys(fields).length === 0) {
208
+ return { kind: 'NamedObject', name: 'unit' };
112
209
  }
113
210
  return { kind: 'ProductObject', fields };
114
211
  }
115
212
  subObject(ctx) {
116
213
  const rawText = ctx.SelectBlock[0].image;
117
- const rawConstraint = rawText.slice(1, -1).trim();
214
+ const rawConstraint = unescapeConstraint(rawText.slice(1, -1).trim());
118
215
  return {
119
216
  kind: 'SubObject',
120
217
  base: this.visit(ctx.base),
@@ -129,7 +226,7 @@ export class SpexParserVisitor extends BaseSpexVisitor {
129
226
  }
130
227
  namedImport(ctx) {
131
228
  const name = ctx.Identifier[0].image;
132
- const source = ctx.PathLiteral[0].image.slice(1, -1);
229
+ const source = stringLiteralValue(ctx.StringLiteral[0].image);
133
230
  const alias = ctx.Identifier[1] ? ctx.Identifier[1].image : null;
134
231
  return {
135
232
  kind: 'ImportDeclaration',
@@ -139,7 +236,7 @@ export class SpexParserVisitor extends BaseSpexVisitor {
139
236
  };
140
237
  }
141
238
  moduleImport(ctx) {
142
- const source = ctx.PathLiteral[0].image.slice(1, -1);
239
+ const source = stringLiteralValue(ctx.StringLiteral[0].image);
143
240
  const alias = ctx.Identifier[0].image;
144
241
  return {
145
242
  kind: 'ImportDeclaration',
@@ -160,7 +257,7 @@ export class SpexParserVisitor extends BaseSpexVisitor {
160
257
  kind: 'PackageDeclaration',
161
258
  packageType,
162
259
  name: ctx.Identifier[0].image,
163
- objectName: this.visit(ctx.objectExpression),
260
+ objectName: this.visit(ctx.setObject),
164
261
  };
165
262
  }
166
263
  generateDeclaration(ctx) {
@@ -169,9 +266,85 @@ export class SpexParserVisitor extends BaseSpexVisitor {
169
266
  name: ctx.Identifier[0].image,
170
267
  };
171
268
  }
269
+ realizeDeclaration(ctx) {
270
+ return {
271
+ kind: 'RealizeDeclaration',
272
+ object: this.visit(ctx.object),
273
+ target: this.visit(ctx.target),
274
+ environment: ctx.environment
275
+ ? this.visit(ctx.environment)
276
+ : { kind: 'NamedObject', name: 'environment' },
277
+ };
278
+ }
279
+ includeDeclaration(ctx) {
280
+ const address = stringLiteralValue(ctx.StringLiteral[0].image);
281
+ const name = ctx.Identifier[0].image;
282
+ return {
283
+ kind: 'IncludeDeclaration',
284
+ name,
285
+ address,
286
+ };
287
+ }
288
+ lambdaObject(ctx) {
289
+ const image = ctx.CodeBlock[0].image;
290
+ const firstNewline = image.indexOf('\n');
291
+ const langEnd = image.indexOf('\n');
292
+ const language = image.slice(3, langEnd);
293
+ const body = image.slice(firstNewline + 1, -3).trimEnd();
294
+ const patterns = [];
295
+ let i = 0;
296
+ while (i < body.length) {
297
+ if (body[i] === '@' && body[i + 1] === '{') {
298
+ const start = i;
299
+ let depth = 1;
300
+ i += 2;
301
+ while (i < body.length && depth > 0) {
302
+ if (body[i] === '\\') {
303
+ i += 2;
304
+ continue;
305
+ }
306
+ if (body[i] === '{')
307
+ depth++;
308
+ if (body[i] === '}')
309
+ depth--;
310
+ i++;
311
+ }
312
+ const end = i;
313
+ const raw = body.slice(start + 2, end - 1).trim();
314
+ patterns.push({
315
+ raw,
316
+ parts: parseConstraint(raw).parts,
317
+ start,
318
+ end,
319
+ });
320
+ }
321
+ else {
322
+ i++;
323
+ }
324
+ }
325
+ return {
326
+ kind: 'ExponentialPattern',
327
+ base: this.visit(ctx.exponent),
328
+ exponent: this.visit(ctx.base),
329
+ language,
330
+ body,
331
+ patterns,
332
+ };
333
+ }
172
334
  }
173
335
  export function parseToAst(text) {
174
336
  const lexingResult = SpexLexer.tokenize(text);
337
+ if (lexingResult.errors.length > 0) {
338
+ const details = lexingResult.errors
339
+ .map((e) => {
340
+ const where = e.line !== undefined && e.column !== undefined
341
+ ? ` (line ${e.line}, column ${e.column})`
342
+ : '';
343
+ return e.message + where;
344
+ })
345
+ .join('; ');
346
+ throw new Error(`Lexing errors: ${details}`);
347
+ }
175
348
  parserInstance.input = lexingResult.tokens;
176
349
  const cst = parserInstance.spexFile();
177
350
  if (parserInstance.errors.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"visitor.js","sourceRoot":"","sources":["../src/visitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"visitor.js","sourceRoot":"","sources":["../src/visitor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "spex-parser",
3
3
  "repository": "github:Freelansys/spex-parser",
4
- "version": "0.1.4",
4
+ "version": "0.6.1",
5
5
  "description": "A parser for Spex, a language designed for programming with LLMs",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
package/src/ast.ts CHANGED
@@ -9,6 +9,8 @@ export type Declaration =
9
9
  | ExportDeclaration
10
10
  | GenerateDeclaration
11
11
  | PackageDeclaration
12
+ | RealizeDeclaration
13
+ | IncludeDeclaration
12
14
 
13
15
  export type PackageKind = 'EXECUTABLE' | 'MODULE'
14
16
 
@@ -42,12 +44,31 @@ export type GenerateDeclaration = {
42
44
  name: string
43
45
  }
44
46
 
47
+ export type RealizeDeclaration = {
48
+ kind: 'RealizeDeclaration'
49
+ object: ObjectExpression
50
+ target: ObjectExpression
51
+ environment: ObjectExpression
52
+ }
53
+
54
+ export type IncludeDeclaration = {
55
+ kind: 'IncludeDeclaration'
56
+ name: string
57
+ address: string
58
+ }
59
+
45
60
  export type ObjectExpression =
46
61
  | NamedObject
47
62
  | ProductObject
48
63
  | ExponentialObject
49
64
  | SubObject
50
65
  | ArrayObject
66
+ | EnumObject
67
+ | LiteralObject
68
+ | SetObject
69
+ | CoproductObject
70
+ | PatternLiteralObject
71
+ | ExponentialPattern
51
72
 
52
73
  export type NamedObject = {
53
74
  kind: 'NamedObject'
@@ -92,3 +113,75 @@ export type ArrayObject = {
92
113
  kind: 'ArrayObject'
93
114
  base: ObjectExpression
94
115
  }
116
+
117
+ export type EnumObject = {
118
+ kind: 'EnumObject'
119
+ values: string[]
120
+ }
121
+
122
+ export type LiteralObject = StringLiteralObject | NumberLiteralObject | BoolLiteralObject
123
+
124
+ export type StringLiteralObject = {
125
+ kind: 'StringLiteralObject'
126
+ value: string
127
+ }
128
+
129
+ export type NumberLiteralObject = {
130
+ kind: 'NumberLiteralObject'
131
+ value: string
132
+ }
133
+
134
+ export type BoolLiteralObject = {
135
+ kind: 'BoolLiteralObject'
136
+ value: boolean
137
+ }
138
+
139
+ export type SetObject = SetUnionObject | SetIntersectionObject | SetDifferenceObject
140
+
141
+ export type SetUnionObject = {
142
+ kind: 'SetUnionObject'
143
+ left: ObjectExpression
144
+ right: ObjectExpression
145
+ }
146
+
147
+ export type SetIntersectionObject = {
148
+ kind: 'SetIntersectionObject'
149
+ left: ObjectExpression
150
+ right: ObjectExpression
151
+ }
152
+
153
+ export type SetDifferenceObject = {
154
+ kind: 'SetDifferenceObject'
155
+ left: ObjectExpression
156
+ right: ObjectExpression
157
+ }
158
+
159
+ export type CoproductObject = {
160
+ kind: 'CoproductObject'
161
+ left: ObjectExpression
162
+ right: ObjectExpression
163
+ }
164
+
165
+ // A pattern is a subobject of the string base object: the set of
166
+ // strings it matches.
167
+ export type PatternLiteralObject = {
168
+ kind: 'PatternLiteralObject'
169
+ source: string
170
+ flags: string
171
+ }
172
+
173
+ export type PatternBlock = {
174
+ raw: string
175
+ parts: ConstraintPart[]
176
+ start: number
177
+ end: number
178
+ }
179
+
180
+ export type ExponentialPattern = {
181
+ kind: 'ExponentialPattern'
182
+ base: ObjectExpression
183
+ exponent: ObjectExpression
184
+ language: string
185
+ body: string
186
+ patterns: PatternBlock[]
187
+ }
@@ -0,0 +1,40 @@
1
+ import type { ObjectExpression } from './ast.js'
2
+
3
+ export type Constant =
4
+ | { kind: 'StringConstant'; value: string }
5
+ | { kind: 'NumberConstant'; value: string }
6
+ | { kind: 'BoolConstant'; value: boolean }
7
+ | { kind: 'ProductConstant'; fields: Record<string, Constant> }
8
+ | { kind: 'ExponentialConstant'; base: Constant; exponent: Constant }
9
+
10
+ export function constantOf(expr: ObjectExpression): Constant | null {
11
+ switch (expr.kind) {
12
+ case 'StringLiteralObject':
13
+ return { kind: 'StringConstant', value: expr.value }
14
+ case 'NumberLiteralObject':
15
+ return { kind: 'NumberConstant', value: expr.value }
16
+ case 'BoolLiteralObject':
17
+ return { kind: 'BoolConstant', value: expr.value }
18
+ case 'ProductObject': {
19
+ const fields: Record<string, Constant> = {}
20
+ for (const [name, field] of Object.entries(expr.fields)) {
21
+ const constant = constantOf(field)
22
+ if (constant === null) {
23
+ return null
24
+ }
25
+ fields[name] = constant
26
+ }
27
+ return { kind: 'ProductConstant', fields }
28
+ }
29
+ case 'ExponentialObject': {
30
+ const base = constantOf(expr.base)
31
+ const exponent = constantOf(expr.exponent)
32
+ if (base === null || exponent === null) {
33
+ return null
34
+ }
35
+ return { kind: 'ExponentialConstant', base, exponent }
36
+ }
37
+ default:
38
+ return null
39
+ }
40
+ }
package/src/index.ts CHANGED
@@ -1,20 +1,37 @@
1
1
  export { SpexLexer } from './lexer.js'
2
2
  export { SpexParser } from './parser.js'
3
- export { SpexParserVisitor, parseToAst } from './visitor.js'
3
+ export { SpexParserVisitor, parseToAst, parseConstraint } from './visitor.js'
4
+ export { constantOf } from './constants.js'
5
+ export type { Constant } from './constants.js'
4
6
  export type {
5
7
  SpexFile,
6
8
  Declaration,
7
9
  ObjectDeclaration,
8
10
  ImportDeclaration,
9
11
  ExportDeclaration,
12
+ EnumObject,
13
+ GenerateDeclaration,
14
+ PackageDeclaration,
15
+ RealizeDeclaration,
16
+ IncludeDeclaration,
10
17
  ObjectExpression,
11
18
  NamedObject,
12
19
  ProductObject,
13
20
  ExponentialObject,
21
+ ExponentialPattern,
14
22
  SubObject,
15
23
  ArrayObject,
16
- PackageDeclaration,
17
- GenerateDeclaration,
24
+ LiteralObject,
25
+ StringLiteralObject,
26
+ NumberLiteralObject,
27
+ BoolLiteralObject,
28
+ SetObject,
29
+ SetUnionObject,
30
+ SetIntersectionObject,
31
+ SetDifferenceObject,
32
+ CoproductObject,
33
+ PatternLiteralObject,
34
+ PatternBlock,
18
35
  PackageKind,
19
36
  Constraint,
20
37
  ConstraintPart,