spex-parser 0.1.5 → 0.6.2

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 +320 -9
  2. package/dist/ast.d.ts +71 -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 +17 -1
  13. package/dist/lexer.d.ts.map +1 -1
  14. package/dist/lexer.js +159 -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 +105 -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 +182 -8
  23. package/dist/visitor.js.map +1 -1
  24. package/package.json +1 -1
  25. package/src/ast.ts +94 -0
  26. package/src/constants.ts +40 -0
  27. package/src/index.ts +20 -3
  28. package/src/lexer.ts +150 -6
  29. package/src/parser.ts +130 -7
  30. package/src/visitor.ts +196 -11
  31. package/tests/constants.test.ts +102 -0
  32. package/tests/e2e.test.ts +15 -3
  33. package/tests/lexer.test.ts +230 -9
  34. package/tests/parser.test.ts +455 -10
  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 +99 -68
  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 +905 -6
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,8 @@ 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),
261
+ environment: this.visit(ctx.environment),
164
262
  };
165
263
  }
166
264
  generateDeclaration(ctx) {
@@ -169,9 +267,85 @@ export class SpexParserVisitor extends BaseSpexVisitor {
169
267
  name: ctx.Identifier[0].image,
170
268
  };
171
269
  }
270
+ realizeDeclaration(ctx) {
271
+ return {
272
+ kind: 'RealizeDeclaration',
273
+ object: this.visit(ctx.object),
274
+ target: this.visit(ctx.target),
275
+ environment: ctx.environment
276
+ ? this.visit(ctx.environment)
277
+ : { kind: 'NamedObject', name: 'environment' },
278
+ };
279
+ }
280
+ includeDeclaration(ctx) {
281
+ const address = stringLiteralValue(ctx.StringLiteral[0].image);
282
+ const name = ctx.Identifier[0].image;
283
+ return {
284
+ kind: 'IncludeDeclaration',
285
+ name,
286
+ address,
287
+ };
288
+ }
289
+ lambdaObject(ctx) {
290
+ const image = ctx.CodeBlock[0].image;
291
+ const firstNewline = image.indexOf('\n');
292
+ const langEnd = image.indexOf('\n');
293
+ const language = image.slice(3, langEnd);
294
+ const body = image.slice(firstNewline + 1, -3).trimEnd();
295
+ const patterns = [];
296
+ let i = 0;
297
+ while (i < body.length) {
298
+ if (body[i] === '@' && body[i + 1] === '{') {
299
+ const start = i;
300
+ let depth = 1;
301
+ i += 2;
302
+ while (i < body.length && depth > 0) {
303
+ if (body[i] === '\\') {
304
+ i += 2;
305
+ continue;
306
+ }
307
+ if (body[i] === '{')
308
+ depth++;
309
+ if (body[i] === '}')
310
+ depth--;
311
+ i++;
312
+ }
313
+ const end = i;
314
+ const raw = body.slice(start + 2, end - 1).trim();
315
+ patterns.push({
316
+ raw,
317
+ parts: parseConstraint(raw).parts,
318
+ start,
319
+ end,
320
+ });
321
+ }
322
+ else {
323
+ i++;
324
+ }
325
+ }
326
+ return {
327
+ kind: 'ExponentialPattern',
328
+ base: this.visit(ctx.exponent),
329
+ exponent: this.visit(ctx.base),
330
+ language,
331
+ body,
332
+ patterns,
333
+ };
334
+ }
172
335
  }
173
336
  export function parseToAst(text) {
174
337
  const lexingResult = SpexLexer.tokenize(text);
338
+ if (lexingResult.errors.length > 0) {
339
+ const details = lexingResult.errors
340
+ .map((e) => {
341
+ const where = e.line !== undefined && e.column !== undefined
342
+ ? ` (line ${e.line}, column ${e.column})`
343
+ : '';
344
+ return e.message + where;
345
+ })
346
+ .join('; ');
347
+ throw new Error(`Lexing errors: ${details}`);
348
+ }
175
349
  parserInstance.input = lexingResult.tokens;
176
350
  const cst = parserInstance.spexFile();
177
351
  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.5",
4
+ "version": "0.6.2",
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
 
@@ -17,6 +19,7 @@ export type PackageDeclaration = {
17
19
  packageType: PackageKind
18
20
  name: string
19
21
  objectName: ObjectExpression
22
+ environment: ObjectExpression
20
23
  }
21
24
 
22
25
  export type ObjectDeclaration = {
@@ -42,12 +45,31 @@ export type GenerateDeclaration = {
42
45
  name: string
43
46
  }
44
47
 
48
+ export type RealizeDeclaration = {
49
+ kind: 'RealizeDeclaration'
50
+ object: ObjectExpression
51
+ target: ObjectExpression
52
+ environment: ObjectExpression
53
+ }
54
+
55
+ export type IncludeDeclaration = {
56
+ kind: 'IncludeDeclaration'
57
+ name: string
58
+ address: string
59
+ }
60
+
45
61
  export type ObjectExpression =
46
62
  | NamedObject
47
63
  | ProductObject
48
64
  | ExponentialObject
49
65
  | SubObject
50
66
  | ArrayObject
67
+ | EnumObject
68
+ | LiteralObject
69
+ | SetObject
70
+ | CoproductObject
71
+ | PatternLiteralObject
72
+ | ExponentialPattern
51
73
 
52
74
  export type NamedObject = {
53
75
  kind: 'NamedObject'
@@ -92,3 +114,75 @@ export type ArrayObject = {
92
114
  kind: 'ArrayObject'
93
115
  base: ObjectExpression
94
116
  }
117
+
118
+ export type EnumObject = {
119
+ kind: 'EnumObject'
120
+ values: string[]
121
+ }
122
+
123
+ export type LiteralObject = StringLiteralObject | NumberLiteralObject | BoolLiteralObject
124
+
125
+ export type StringLiteralObject = {
126
+ kind: 'StringLiteralObject'
127
+ value: string
128
+ }
129
+
130
+ export type NumberLiteralObject = {
131
+ kind: 'NumberLiteralObject'
132
+ value: string
133
+ }
134
+
135
+ export type BoolLiteralObject = {
136
+ kind: 'BoolLiteralObject'
137
+ value: boolean
138
+ }
139
+
140
+ export type SetObject = SetUnionObject | SetIntersectionObject | SetDifferenceObject
141
+
142
+ export type SetUnionObject = {
143
+ kind: 'SetUnionObject'
144
+ left: ObjectExpression
145
+ right: ObjectExpression
146
+ }
147
+
148
+ export type SetIntersectionObject = {
149
+ kind: 'SetIntersectionObject'
150
+ left: ObjectExpression
151
+ right: ObjectExpression
152
+ }
153
+
154
+ export type SetDifferenceObject = {
155
+ kind: 'SetDifferenceObject'
156
+ left: ObjectExpression
157
+ right: ObjectExpression
158
+ }
159
+
160
+ export type CoproductObject = {
161
+ kind: 'CoproductObject'
162
+ left: ObjectExpression
163
+ right: ObjectExpression
164
+ }
165
+
166
+ // A pattern is a subobject of the string base object: the set of
167
+ // strings it matches.
168
+ export type PatternLiteralObject = {
169
+ kind: 'PatternLiteralObject'
170
+ source: string
171
+ flags: string
172
+ }
173
+
174
+ export type PatternBlock = {
175
+ raw: string
176
+ parts: ConstraintPart[]
177
+ start: number
178
+ end: number
179
+ }
180
+
181
+ export type ExponentialPattern = {
182
+ kind: 'ExponentialPattern'
183
+ base: ObjectExpression
184
+ exponent: ObjectExpression
185
+ language: string
186
+ body: string
187
+ patterns: PatternBlock[]
188
+ }
@@ -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,