@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.
- package/README.md +1 -0
- package/dist/index.js +55 -27
- 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
|
|
9162
|
-
var
|
|
9163
|
-
var
|
|
9164
|
-
var
|
|
9165
|
-
var
|
|
9166
|
-
var
|
|
9167
|
-
var
|
|
9168
|
-
var
|
|
9169
|
-
var
|
|
9170
|
-
var
|
|
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: () =>
|
|
9342
|
-
|
|
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 = "";
|