@intend-it/parser 1.3.1 → 1.3.3

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 (3) hide show
  1. package/README.md +1 -0
  2. package/dist/index.js +55 -27
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -113,6 +113,7 @@ interface IntentDeclaration {
113
113
  | **Invariants** | `invariant "rule"` | `invariant "Input must be positive"` |
114
114
  | **Ensures** | `ensure expression` | `ensure result is defined` |
115
115
  | **Imports** | `import { X } from "path"` | `import { User } from "./types"` |
116
+ | **Context** | `context "Message"` | `context "Handle currency as integers"` |
116
117
  | **Entry Points** | `entry intent Main()` | `export entry intent Main() -> void` |
117
118
 
118
119
  ## Related Packages
package/dist/index.js CHANGED
@@ -9145,6 +9145,7 @@ class CstParser extends Parser {
9145
9145
  }
9146
9146
  }
9147
9147
  // src/tokens.ts
9148
+ var Identifier = createToken({ name: "Identifier", pattern: /[a-zA-Z_]\w*/ });
9148
9149
  var LineComment = createToken({
9149
9150
  name: "LineComment",
9150
9151
  pattern: /\/\/[^\n\r]*/,
@@ -9155,19 +9156,20 @@ var BlockComment = createToken({
9155
9156
  pattern: /\/\*[\s\S]*?\*\//,
9156
9157
  group: Lexer.SKIPPED
9157
9158
  });
9158
- var Import = createToken({ name: "Import", pattern: /import/ });
9159
- var From = createToken({ name: "From", pattern: /from/ });
9160
- var Intent = createToken({ name: "Intent", pattern: /intent/ });
9161
- var Export = createToken({ name: "Export", pattern: /export/ });
9162
- var Invariant = createToken({ name: "Invariant", pattern: /invariant/ });
9163
- var Step = createToken({ name: "Step", pattern: /step/ });
9164
- var Ensure = createToken({ name: "Ensure", pattern: /ensure/ });
9165
- var Const = createToken({ name: "Const", pattern: /const/ });
9166
- var Is = createToken({ name: "Is", pattern: /is/ });
9167
- var Defined = createToken({ name: "Defined", pattern: /defined/ });
9168
- var Entry = createToken({ name: "Entry", pattern: /entry/ });
9169
- var Let = createToken({ name: "Let", pattern: /let/ });
9170
- var Return = createToken({ name: "Return", pattern: /return/ });
9159
+ var Import = createToken({ name: "Import", pattern: /import/, longer_alt: Identifier });
9160
+ var From = createToken({ name: "From", pattern: /from/, longer_alt: Identifier });
9161
+ var Intent = createToken({ name: "Intent", pattern: /intent/, longer_alt: Identifier });
9162
+ var Context = createToken({ name: "Context", pattern: /context/, longer_alt: Identifier });
9163
+ var Export = createToken({ name: "Export", pattern: /export/, longer_alt: Identifier });
9164
+ var Invariant = createToken({ name: "Invariant", pattern: /invariant/, longer_alt: Identifier });
9165
+ var Step = createToken({ name: "Step", pattern: /step/, longer_alt: Identifier });
9166
+ var Ensure = createToken({ name: "Ensure", pattern: /ensure/, longer_alt: Identifier });
9167
+ var Const = createToken({ name: "Const", pattern: /const/, longer_alt: Identifier });
9168
+ var Is = createToken({ name: "Is", pattern: /is/, longer_alt: Identifier });
9169
+ var Defined = createToken({ name: "Defined", pattern: /defined/, longer_alt: Identifier });
9170
+ var Entry = createToken({ name: "Entry", pattern: /entry/, longer_alt: Identifier });
9171
+ var Let = createToken({ name: "Let", pattern: /let/, longer_alt: Identifier });
9172
+ var Return = createToken({ name: "Return", pattern: /return/, longer_alt: Identifier });
9171
9173
  var LCurly = createToken({ name: "LCurly", pattern: /{/ });
9172
9174
  var RCurly = createToken({ name: "RCurly", pattern: /}/ });
9173
9175
  var LParen = createToken({ name: "LParen", pattern: /\(/ });
@@ -9191,7 +9193,6 @@ var StringLiteral = createToken({
9191
9193
  line_breaks: true
9192
9194
  });
9193
9195
  var NumberLiteral = createToken({ name: "NumberLiteral", pattern: /-?\d+(\.\d+)?/ });
9194
- var Identifier = createToken({ name: "Identifier", pattern: /[a-zA-Z_]\w*/ });
9195
9196
  var WhiteSpace = createToken({
9196
9197
  name: "WhiteSpace",
9197
9198
  pattern: /\s+/,
@@ -9205,6 +9206,7 @@ var allTokens = [
9205
9206
  From,
9206
9207
  Export,
9207
9208
  Intent,
9209
+ Context,
9208
9210
  Invariant,
9209
9211
  Step,
9210
9212
  Ensure,
@@ -9243,6 +9245,9 @@ class IntendParser extends CstParser {
9243
9245
  this.performSelfAnalysis();
9244
9246
  }
9245
9247
  intendFile = this.RULE("intendFile", () => {
9248
+ this.OPTION(() => {
9249
+ this.SUBRULE(this.contextStatement);
9250
+ });
9246
9251
  this.MANY(() => {
9247
9252
  this.SUBRULE(this.importStatement);
9248
9253
  });
@@ -9250,6 +9255,13 @@ class IntendParser extends CstParser {
9250
9255
  this.SUBRULE(this.intentDeclaration);
9251
9256
  });
9252
9257
  });
9258
+ contextStatement = this.RULE("contextStatement", () => {
9259
+ this.CONSUME(Context);
9260
+ this.CONSUME(StringLiteral);
9261
+ this.OPTION(() => {
9262
+ this.CONSUME(Semicolon);
9263
+ });
9264
+ });
9253
9265
  intentDeclaration = this.RULE("intentDeclaration", () => {
9254
9266
  this.CONSUME(Export);
9255
9267
  this.OPTION3(() => {
@@ -9338,18 +9350,27 @@ class IntendParser extends CstParser {
9338
9350
  this.OPTION(() => {
9339
9351
  this.CONSUME(FatArrow);
9340
9352
  this.OR([
9341
- { ALT: () => this.CONSUME(Const) },
9342
- { ALT: () => this.CONSUME(Let) }
9353
+ { ALT: () => {
9354
+ this.OR2([
9355
+ { ALT: () => this.CONSUME(Const) },
9356
+ { ALT: () => this.CONSUME(Let) }
9357
+ ]);
9358
+ this.CONSUME(Identifier, { LABEL: "ResultVar" });
9359
+ this.OPTION2(() => {
9360
+ this.CONSUME(Colon);
9361
+ this.CONSUME2(Identifier, { LABEL: "ResultType" });
9362
+ this.OPTION3(() => {
9363
+ this.CONSUME(LBracket);
9364
+ this.CONSUME(RBracket);
9365
+ });
9366
+ });
9367
+ } },
9368
+ { ALT: () => {
9369
+ this.CONSUME(LCurly);
9370
+ this.SUBRULE(this.body);
9371
+ this.CONSUME(RCurly);
9372
+ } }
9343
9373
  ]);
9344
- this.CONSUME(Identifier, { LABEL: "ResultVar" });
9345
- this.OPTION2(() => {
9346
- this.CONSUME(Colon);
9347
- this.CONSUME2(Identifier, { LABEL: "ResultType" });
9348
- this.OPTION3(() => {
9349
- this.CONSUME(LBracket);
9350
- this.CONSUME(RBracket);
9351
- });
9352
- });
9353
9374
  });
9354
9375
  });
9355
9376
  ensureStatement = this.RULE("ensureStatement", () => {
@@ -9365,7 +9386,8 @@ class IntendParser extends CstParser {
9365
9386
  { ALT: () => this.CONSUME(LessThan) },
9366
9387
  { ALT: () => this.CONSUME(Is) },
9367
9388
  { ALT: () => this.CONSUME(Defined) },
9368
- { ALT: () => this.CONSUME(StringLiteral) }
9389
+ { ALT: () => this.CONSUME(StringLiteral) },
9390
+ { ALT: () => this.CONSUME(NumberLiteral) }
9369
9391
  ]);
9370
9392
  });
9371
9393
  });
@@ -9421,14 +9443,19 @@ class IntendASTVisitor extends BaseIntendVisitor {
9421
9443
  this.validateVisitor();
9422
9444
  }
9423
9445
  intendFile(ctx) {
9446
+ const context = ctx.contextStatement ? this.visit(ctx.contextStatement[0]) : undefined;
9424
9447
  const imports = ctx.importStatement ? ctx.importStatement.map((imp) => this.visit(imp)) : [];
9425
9448
  const intents = ctx.intentDeclaration ? ctx.intentDeclaration.map((d) => this.visit(d)) : [];
9426
9449
  return {
9427
9450
  type: "IntendFile",
9451
+ context,
9428
9452
  imports,
9429
9453
  intents
9430
9454
  };
9431
9455
  }
9456
+ contextStatement(ctx) {
9457
+ return this.unquoteString(ctx.StringLiteral[0].image);
9458
+ }
9432
9459
  intentDeclaration(ctx) {
9433
9460
  const entryPoint = !!ctx.Entry && ctx.Entry.length > 0;
9434
9461
  const name = ctx.Identifier[0].image;
@@ -9588,7 +9615,8 @@ class IntendASTVisitor extends BaseIntendVisitor {
9588
9615
  ...ctx.LessThan || [],
9589
9616
  ...ctx.Is || [],
9590
9617
  ...ctx.Defined || [],
9591
- ...ctx.StringLiteral || []
9618
+ ...ctx.StringLiteral || [],
9619
+ ...ctx.NumberLiteral || []
9592
9620
  ];
9593
9621
  tokens.sort((a, b) => a.startOffset - b.startOffset);
9594
9622
  let expression = "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intend-it/parser",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "Parser for the Intend programming language",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",