@plurnk/plurnk-grammar 0.2.1 → 0.5.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.
- package/bin/plurnk.js +1 -1
- package/{schema → dist/schema}/LogEntry.json +1 -1
- package/{schema → dist/schema}/Packet.json +15 -2
- package/{schema → dist/schema}/Run.json +6 -1
- package/{schema → dist/schema}/Session.json +1 -1
- package/dist/src/AstBuilder.d.ts +19 -0
- package/dist/src/AstBuilder.d.ts.map +1 -0
- package/{src/AstBuilder.ts → dist/src/AstBuilder.js} +176 -161
- package/dist/src/AstBuilder.js.map +1 -0
- package/dist/src/PlurnkErrorStrategy.d.ts +10 -0
- package/dist/src/PlurnkErrorStrategy.d.ts.map +1 -0
- package/{src/PlurnkErrorStrategy.ts → dist/src/PlurnkErrorStrategy.js} +41 -49
- package/dist/src/PlurnkErrorStrategy.js.map +1 -0
- package/dist/src/PlurnkParseError.d.ts +14 -0
- package/dist/src/PlurnkParseError.d.ts.map +1 -0
- package/{src/PlurnkParseError.ts → dist/src/PlurnkParseError.js} +6 -9
- package/dist/src/PlurnkParseError.js.map +1 -0
- package/dist/src/PlurnkParser.d.ts +6 -0
- package/dist/src/PlurnkParser.d.ts.map +1 -0
- package/{src/PlurnkParser.ts → dist/src/PlurnkParser.js} +32 -40
- package/dist/src/PlurnkParser.js.map +1 -0
- package/dist/src/RecordingListener.d.ts +9 -0
- package/dist/src/RecordingListener.d.ts.map +1 -0
- package/dist/src/RecordingListener.js +19 -0
- package/dist/src/RecordingListener.js.map +1 -0
- package/dist/src/Validator.d.ts +28 -0
- package/dist/src/Validator.d.ts.map +1 -0
- package/dist/src/Validator.js +86 -0
- package/dist/src/Validator.js.map +1 -0
- package/dist/src/generated/plurnkLexer.d.ts +88 -0
- package/dist/src/generated/plurnkLexer.d.ts.map +1 -0
- package/dist/src/generated/plurnkLexer.js +440 -0
- package/dist/src/generated/plurnkLexer.js.map +1 -0
- package/dist/src/generated/plurnkParser.d.ts +274 -0
- package/dist/src/generated/plurnkParser.d.ts.map +1 -0
- package/dist/src/generated/plurnkParser.js +1833 -0
- package/dist/src/generated/plurnkParser.js.map +1 -0
- package/{src/generated/plurnkParserVisitor.ts → dist/src/generated/plurnkParserVisitor.d.ts} +2 -7
- package/dist/src/generated/plurnkParserVisitor.d.ts.map +1 -0
- package/dist/src/generated/plurnkParserVisitor.js +131 -0
- package/dist/src/generated/plurnkParserVisitor.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types.d.ts +23 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.generated.d.ts +465 -0
- package/dist/src/types.generated.d.ts.map +1 -0
- package/dist/src/types.generated.js +4 -0
- package/dist/src/types.generated.js.map +1 -0
- package/dist/src/types.js +4 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +10 -7
- package/plurnk.md +1 -1
- package/src/RecordingListener.ts +0 -34
- package/src/Validator.ts +0 -94
- package/src/generated/plurnkLexer.ts +0 -467
- package/src/generated/plurnkParser.ts +0 -1891
- package/src/index.ts +0 -29
- package/src/types.generated.ts +0 -497
- package/src/types.ts +0 -30
- /package/{schema → dist/schema}/Agent.json +0 -0
- /package/{schema → dist/schema}/ChannelContent.json +0 -0
- /package/{schema → dist/schema}/Entry.json +0 -0
- /package/{schema → dist/schema}/LineMarker.json +0 -0
- /package/{schema → dist/schema}/Loop.json +0 -0
- /package/{schema → dist/schema}/MatcherBody.json +0 -0
- /package/{schema → dist/schema}/Params.json +0 -0
- /package/{schema → dist/schema}/ParsedPath.json +0 -0
- /package/{schema → dist/schema}/PlurnkStatement.json +0 -0
- /package/{schema → dist/schema}/Position.json +0 -0
- /package/{schema → dist/schema}/ProviderDeclaration.json +0 -0
- /package/{schema → dist/schema}/SchemeRegistration.json +0 -0
- /package/{schema → dist/schema}/SendBody.json +0 -0
- /package/{schema → dist/schema}/Turn.json +0 -0
- /package/{schema → dist/schema}/Visibility.json +0 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DefaultErrorStrategy, type Parser, type RecognitionException } from "antlr4ng";
|
|
2
|
+
import { plurnkLexer } from "./generated/plurnkLexer.ts";
|
|
3
|
+
export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
4
|
+
#private;
|
|
5
|
+
static translateLexerMessage(lexer: plurnkLexer, originalMsg: string): string;
|
|
6
|
+
reportError(recognizer: Parser, e: RecognitionException): void;
|
|
7
|
+
reportMissingToken(recognizer: Parser): void;
|
|
8
|
+
reportUnwantedToken(recognizer: Parser): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=PlurnkErrorStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlurnkErrorStrategy.d.ts","sourceRoot":"","sources":["../../src/PlurnkErrorStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EAIpB,KAAK,MAAM,EACX,KAAK,oBAAoB,EAC5B,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,oBAAoB;;IAuCjE,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAoC7D,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAiB9D,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAiB5C,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAkBhE"}
|
|
@@ -1,18 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
InputMismatchException,
|
|
4
|
-
NoViableAltException,
|
|
5
|
-
Token,
|
|
6
|
-
type Parser,
|
|
7
|
-
type RecognitionException,
|
|
8
|
-
} from "antlr4ng";
|
|
9
|
-
import { plurnkParser } from "./generated/plurnkParser.ts";
|
|
10
|
-
import { plurnkLexer } from "./generated/plurnkLexer.ts";
|
|
11
|
-
|
|
1
|
+
import { DefaultErrorStrategy, InputMismatchException, NoViableAltException, Token, } from "antlr4ng";
|
|
2
|
+
import { plurnkParser } from "./generated/plurnkParser.js";
|
|
12
3
|
export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
13
4
|
static #OFFENDING_CHAR_RE = /at: '([^']*)'$/;
|
|
14
|
-
|
|
15
|
-
static #LEXER_MODE_CONTEXT: Record<string, string> = {
|
|
5
|
+
static #LEXER_MODE_CONTEXT = {
|
|
16
6
|
DEFAULT_MODE: "between statements",
|
|
17
7
|
SLOTS: "in slot region — expected `[signal]`, `(path)`, `<L>`, or `:body:` (any order)",
|
|
18
8
|
SIGNAL_TAGS: "in tag signal — expected tag, `,`, or `]`",
|
|
@@ -21,8 +11,7 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
21
11
|
PATH: "in path slot — expected path characters or `)`",
|
|
22
12
|
BODY: "in body",
|
|
23
13
|
};
|
|
24
|
-
|
|
25
|
-
static #SLOT_BY_TOKEN: Record<number, string> = {
|
|
14
|
+
static #SLOT_BY_TOKEN = {
|
|
26
15
|
[plurnkParser.OPEN_FIND]: "open tag `<<OPsuffix`",
|
|
27
16
|
[plurnkParser.OPEN_READ]: "open tag `<<OPsuffix`",
|
|
28
17
|
[plurnkParser.OPEN_EDIT]: "open tag `<<OPsuffix`",
|
|
@@ -47,69 +36,71 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
47
36
|
[plurnkParser.CLOSE_TAG]: "close tag `:OPsuffix`",
|
|
48
37
|
[plurnkParser.TEXT]: "text between statements",
|
|
49
38
|
};
|
|
50
|
-
|
|
51
|
-
static translateLexerMessage(lexer: plurnkLexer, originalMsg: string): string {
|
|
39
|
+
static translateLexerMessage(lexer, originalMsg) {
|
|
52
40
|
const modeName = lexer.modeNames[lexer.mode] ?? "DEFAULT_MODE";
|
|
53
41
|
const context = PlurnkErrorStrategy.#LEXER_MODE_CONTEXT[modeName] ?? "between statements";
|
|
54
42
|
const ch = PlurnkErrorStrategy.#extractOffendingChar(originalMsg);
|
|
55
43
|
return `unrecognized character ${ch} ${context}`;
|
|
56
44
|
}
|
|
57
|
-
|
|
58
|
-
static #extractOffendingChar(msg: string): string {
|
|
45
|
+
static #extractOffendingChar(msg) {
|
|
59
46
|
const m = PlurnkErrorStrategy.#OFFENDING_CHAR_RE.exec(msg);
|
|
60
|
-
if (!m)
|
|
47
|
+
if (!m)
|
|
48
|
+
return "input";
|
|
61
49
|
const text = m[1];
|
|
62
50
|
return text === "" ? "end of input" : `'${text}'`;
|
|
63
51
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
52
|
+
static #describeToken(tok) {
|
|
53
|
+
if (!tok || tok.type === Token.EOF)
|
|
54
|
+
return "end of input";
|
|
67
55
|
const slot = PlurnkErrorStrategy.#SLOT_BY_TOKEN[tok.type];
|
|
68
|
-
if (slot)
|
|
56
|
+
if (slot)
|
|
57
|
+
return slot;
|
|
69
58
|
const text = tok.text ?? "";
|
|
70
59
|
return text.length > 0 ? `'${text}'` : "input";
|
|
71
60
|
}
|
|
72
|
-
|
|
73
|
-
static #describeExpected(e: RecognitionException): string | null {
|
|
61
|
+
static #describeExpected(e) {
|
|
74
62
|
const expected = e.getExpectedTokens();
|
|
75
|
-
if (!expected)
|
|
76
|
-
|
|
77
|
-
|
|
63
|
+
if (!expected)
|
|
64
|
+
return null;
|
|
65
|
+
const types = expected.toArray();
|
|
66
|
+
if (types.length === 0)
|
|
67
|
+
return null;
|
|
78
68
|
const names = types
|
|
79
69
|
.map((t) => PlurnkErrorStrategy.#SLOT_BY_TOKEN[t])
|
|
80
|
-
.filter((s)
|
|
81
|
-
if (names.length === 0)
|
|
82
|
-
|
|
83
|
-
if (names.length ===
|
|
70
|
+
.filter((s) => Boolean(s));
|
|
71
|
+
if (names.length === 0)
|
|
72
|
+
return null;
|
|
73
|
+
if (names.length === 1)
|
|
74
|
+
return names[0];
|
|
75
|
+
if (names.length === 2)
|
|
76
|
+
return `${names[0]} or ${names[1]}`;
|
|
84
77
|
return `${names.slice(0, -1).join(", ")}, or ${names[names.length - 1]}`;
|
|
85
78
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
79
|
+
reportError(recognizer, e) {
|
|
80
|
+
if (this.inErrorRecoveryMode(recognizer))
|
|
81
|
+
return;
|
|
89
82
|
this.beginErrorCondition(recognizer);
|
|
90
|
-
|
|
91
83
|
const got = PlurnkErrorStrategy.#describeToken(e.offendingToken);
|
|
92
84
|
const expected = PlurnkErrorStrategy.#describeExpected(e);
|
|
93
|
-
|
|
94
|
-
let msg: string;
|
|
85
|
+
let msg;
|
|
95
86
|
if (e instanceof InputMismatchException || e instanceof NoViableAltException) {
|
|
96
87
|
msg = expected ? `unexpected ${got}; expected ${expected}` : `unexpected ${got}`;
|
|
97
|
-
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
98
90
|
msg = `unexpected ${got}`;
|
|
99
91
|
}
|
|
100
|
-
|
|
101
92
|
recognizer.notifyErrorListeners(msg, e.offendingToken, e);
|
|
102
93
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
94
|
+
reportMissingToken(recognizer) {
|
|
95
|
+
if (this.inErrorRecoveryMode(recognizer))
|
|
96
|
+
return;
|
|
106
97
|
this.beginErrorCondition(recognizer);
|
|
107
98
|
const tok = recognizer.getCurrentToken();
|
|
108
99
|
const expectedTokens = this.getExpectedTokens(recognizer);
|
|
109
100
|
const expectedNames = expectedTokens
|
|
110
101
|
.toArray()
|
|
111
102
|
.map((t) => PlurnkErrorStrategy.#SLOT_BY_TOKEN[t])
|
|
112
|
-
.filter((s)
|
|
103
|
+
.filter((s) => Boolean(s));
|
|
113
104
|
const expected = expectedNames.length > 0
|
|
114
105
|
? (expectedNames.length === 1 ? expectedNames[0] : expectedNames.join(" or "))
|
|
115
106
|
: "more input";
|
|
@@ -117,9 +108,9 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
117
108
|
const msg = `expected ${expected}; got ${got}`;
|
|
118
109
|
recognizer.notifyErrorListeners(msg, tok, null);
|
|
119
110
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
111
|
+
reportUnwantedToken(recognizer) {
|
|
112
|
+
if (this.inErrorRecoveryMode(recognizer))
|
|
113
|
+
return;
|
|
123
114
|
this.beginErrorCondition(recognizer);
|
|
124
115
|
const tok = recognizer.getCurrentToken();
|
|
125
116
|
const got = PlurnkErrorStrategy.#describeToken(tok);
|
|
@@ -127,7 +118,7 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
127
118
|
const expectedNames = expectedTokens
|
|
128
119
|
.toArray()
|
|
129
120
|
.map((t) => PlurnkErrorStrategy.#SLOT_BY_TOKEN[t])
|
|
130
|
-
.filter((s)
|
|
121
|
+
.filter((s) => Boolean(s));
|
|
131
122
|
const expected = expectedNames.length > 0
|
|
132
123
|
? (expectedNames.length === 1 ? expectedNames[0] : expectedNames.join(" or "))
|
|
133
124
|
: null;
|
|
@@ -137,3 +128,4 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
137
128
|
recognizer.notifyErrorListeners(msg, tok, null);
|
|
138
129
|
}
|
|
139
130
|
}
|
|
131
|
+
//# sourceMappingURL=PlurnkErrorStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlurnkErrorStrategy.js","sourceRoot":"","sources":["../../src/PlurnkErrorStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ErrorSource = "lexer" | "parser" | "visitor";
|
|
2
|
+
export default class PlurnkParseError extends Error {
|
|
3
|
+
readonly line: number;
|
|
4
|
+
readonly column: number;
|
|
5
|
+
readonly source: ErrorSource;
|
|
6
|
+
constructor(line: number, column: number, source: ErrorSource, message: string);
|
|
7
|
+
toJSON(): {
|
|
8
|
+
line: number;
|
|
9
|
+
column: number;
|
|
10
|
+
source: ErrorSource;
|
|
11
|
+
message: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=PlurnkParseError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlurnkParseError.d.ts","sourceRoot":"","sources":["../../src/PlurnkParseError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;gBAEjB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM;IAQ9E,MAAM,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAQnF"}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
export type ErrorSource = "lexer" | "parser" | "visitor";
|
|
2
|
-
|
|
3
1
|
export default class PlurnkParseError extends Error {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
constructor(line: number, column: number, source: ErrorSource, message: string) {
|
|
2
|
+
line;
|
|
3
|
+
column;
|
|
4
|
+
source;
|
|
5
|
+
constructor(line, column, source, message) {
|
|
9
6
|
super(`Plurnk ${source} error at ${line}:${column} — ${message}`);
|
|
10
7
|
this.name = "PlurnkParseError";
|
|
11
8
|
this.line = line;
|
|
12
9
|
this.column = column;
|
|
13
10
|
this.source = source;
|
|
14
11
|
}
|
|
15
|
-
|
|
16
|
-
toJSON(): { line: number; column: number; source: ErrorSource; message: string } {
|
|
12
|
+
toJSON() {
|
|
17
13
|
return {
|
|
18
14
|
line: this.line,
|
|
19
15
|
column: this.column,
|
|
@@ -22,3 +18,4 @@ export default class PlurnkParseError extends Error {
|
|
|
22
18
|
};
|
|
23
19
|
}
|
|
24
20
|
}
|
|
21
|
+
//# sourceMappingURL=PlurnkParseError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlurnkParseError.js","sourceRoot":"","sources":["../../src/PlurnkParseError.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,KAAK;IACtC,IAAI,CAAS;IACb,MAAM,CAAS;IACf,MAAM,CAAc;IAE7B,YAAY,IAAY,EAAE,MAAc,EAAE,MAAmB,EAAE,OAAe;QAC1E,KAAK,CAAC,UAAU,MAAM,aAAa,IAAI,IAAI,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,MAAM;QACF,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlurnkParser.d.ts","sourceRoot":"","sources":["../../src/PlurnkParser.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAa,WAAW,EAAY,MAAM,YAAY,CAAC;AAEnE,MAAM,CAAC,OAAO,OAAO,YAAY;;IAC7B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;CAiF3C"}
|
|
@@ -1,67 +1,61 @@
|
|
|
1
1
|
import { CharStream, CommonTokenStream } from "antlr4ng";
|
|
2
|
-
import { plurnkLexer } from "./generated/plurnkLexer.
|
|
3
|
-
import { plurnkParser } from "./generated/plurnkParser.
|
|
4
|
-
import AstBuilder from "./AstBuilder.
|
|
5
|
-
import PlurnkParseError from "./PlurnkParseError.
|
|
6
|
-
import PlurnkErrorStrategy from "./PlurnkErrorStrategy.
|
|
7
|
-
import RecordingListener from "./RecordingListener.
|
|
8
|
-
import type { ParseItem, ParseResult, Position } from "./types.ts";
|
|
9
|
-
|
|
2
|
+
import { plurnkLexer } from "./generated/plurnkLexer.js";
|
|
3
|
+
import { plurnkParser } from "./generated/plurnkParser.js";
|
|
4
|
+
import AstBuilder from "./AstBuilder.js";
|
|
5
|
+
import PlurnkParseError from "./PlurnkParseError.js";
|
|
6
|
+
import PlurnkErrorStrategy from "./PlurnkErrorStrategy.js";
|
|
7
|
+
import RecordingListener from "./RecordingListener.js";
|
|
10
8
|
export default class PlurnkParser {
|
|
11
|
-
static parse(input
|
|
9
|
+
static parse(input) {
|
|
12
10
|
const lexer = new plurnkLexer(CharStream.fromString(input));
|
|
13
|
-
const errors
|
|
11
|
+
const errors = [];
|
|
14
12
|
lexer.removeErrorListeners();
|
|
15
13
|
lexer.addErrorListener(new RecordingListener("lexer", errors));
|
|
16
|
-
|
|
17
14
|
const tokenStream = new CommonTokenStream(lexer);
|
|
18
15
|
const parser = new plurnkParser(tokenStream);
|
|
19
16
|
parser.removeErrorListeners();
|
|
20
17
|
parser.addErrorListener(new RecordingListener("parser", errors));
|
|
21
18
|
parser.errorHandler = new PlurnkErrorStrategy();
|
|
22
|
-
|
|
23
19
|
const tree = parser.document();
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
const consumedErrors = new Set<PlurnkParseError>();
|
|
27
|
-
|
|
20
|
+
const items = [];
|
|
21
|
+
const consumedErrors = new Set();
|
|
28
22
|
for (const child of tree.children ?? []) {
|
|
29
|
-
const ctx = child
|
|
23
|
+
const ctx = child;
|
|
30
24
|
const start = ctx.start ?? ctx.symbol;
|
|
31
25
|
const stop = ctx.stop ?? ctx.symbol;
|
|
32
|
-
if (!start)
|
|
33
|
-
|
|
26
|
+
if (!start)
|
|
27
|
+
continue;
|
|
34
28
|
if (ctx.ruleIndex === plurnkParser.RULE_statement) {
|
|
35
|
-
const errForStatement = errors.find(
|
|
36
|
-
(e) => !consumedErrors.has(e) && PlurnkParser.#errorInRange(e, start, stop ?? start),
|
|
37
|
-
);
|
|
29
|
+
const errForStatement = errors.find((e) => !consumedErrors.has(e) && PlurnkParser.#errorInRange(e, start, stop ?? start));
|
|
38
30
|
if (errForStatement) {
|
|
39
31
|
consumedErrors.add(errForStatement);
|
|
40
32
|
items.push({ kind: "error", error: errForStatement });
|
|
41
|
-
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
42
35
|
try {
|
|
43
36
|
items.push({ kind: "statement", statement: AstBuilder.build(ctx) });
|
|
44
|
-
}
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
45
39
|
if (e instanceof PlurnkParseError) {
|
|
46
40
|
items.push({ kind: "error", error: e });
|
|
47
|
-
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
48
43
|
throw e;
|
|
49
44
|
}
|
|
50
45
|
}
|
|
51
46
|
}
|
|
52
|
-
}
|
|
53
|
-
|
|
47
|
+
}
|
|
48
|
+
else if (ctx.symbol?.type === plurnkLexer.TEXT) {
|
|
49
|
+
const position = { line: start.line, column: start.column };
|
|
54
50
|
items.push({ kind: "text", text: ctx.symbol.text ?? "", position });
|
|
55
51
|
}
|
|
56
52
|
}
|
|
57
|
-
|
|
58
53
|
for (const err of errors) {
|
|
59
54
|
if (!consumedErrors.has(err)) {
|
|
60
55
|
items.push({ kind: "error", error: err });
|
|
61
56
|
}
|
|
62
57
|
}
|
|
63
|
-
|
|
64
|
-
let unparsedTail: ParseResult["unparsedTail"];
|
|
58
|
+
let unparsedTail;
|
|
65
59
|
if (lexer.mode !== 0) {
|
|
66
60
|
const openTag = lexer.getOpenTag();
|
|
67
61
|
const from = { line: lexer.getOpenTagLine(), column: lexer.getOpenTagColumn() };
|
|
@@ -75,18 +69,16 @@ export default class PlurnkParser {
|
|
|
75
69
|
: `statement \`<<${openTag}\` opened at line ${from.line} but never reached its close tag — add \`:${openTag}\` to terminate`;
|
|
76
70
|
unparsedTail = { from, reason };
|
|
77
71
|
}
|
|
78
|
-
|
|
79
72
|
return { items, unparsedTail };
|
|
80
73
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (err.line === start.line && err.column < start.column) return false;
|
|
89
|
-
if (err.line === stop.line && err.column > stop.column) return false;
|
|
74
|
+
static #errorInRange(err, start, stop) {
|
|
75
|
+
if (err.line < start.line || err.line > stop.line)
|
|
76
|
+
return false;
|
|
77
|
+
if (err.line === start.line && err.column < start.column)
|
|
78
|
+
return false;
|
|
79
|
+
if (err.line === stop.line && err.column > stop.column)
|
|
80
|
+
return false;
|
|
90
81
|
return true;
|
|
91
82
|
}
|
|
92
83
|
}
|
|
84
|
+
//# sourceMappingURL=PlurnkParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlurnkParser.js","sourceRoot":"","sources":["../../src/PlurnkParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseErrorListener, type RecognitionException, type Recognizer, type Token } from "antlr4ng";
|
|
2
|
+
import PlurnkParseError from "./PlurnkParseError.ts";
|
|
3
|
+
export default class RecordingListener extends BaseErrorListener {
|
|
4
|
+
readonly errors: PlurnkParseError[];
|
|
5
|
+
readonly source: "lexer" | "parser";
|
|
6
|
+
constructor(source: "lexer" | "parser", errors: PlurnkParseError[]);
|
|
7
|
+
syntaxError(recognizer: Recognizer<any>, _offendingSymbol: Token | null, line: number, column: number, msg: string, _e: RecognitionException | null): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=RecordingListener.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecordingListener.d.ts","sourceRoot":"","sources":["../../src/RecordingListener.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,KAAK,EACb,MAAM,UAAU,CAAC;AAElB,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AAGrD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,iBAAiB;IAC5D,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;gBAExB,MAAM,EAAE,OAAO,GAAG,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAMzD,WAAW,CAChB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAC3B,gBAAgB,EAAE,KAAK,GAAG,IAAI,EAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,oBAAoB,GAAG,IAAI,GAChC,IAAI;CAMV"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseErrorListener, } from "antlr4ng";
|
|
2
|
+
import PlurnkParseError from "./PlurnkParseError.js";
|
|
3
|
+
import PlurnkErrorStrategy from "./PlurnkErrorStrategy.js";
|
|
4
|
+
export default class RecordingListener extends BaseErrorListener {
|
|
5
|
+
errors;
|
|
6
|
+
source;
|
|
7
|
+
constructor(source, errors) {
|
|
8
|
+
super();
|
|
9
|
+
this.source = source;
|
|
10
|
+
this.errors = errors;
|
|
11
|
+
}
|
|
12
|
+
syntaxError(recognizer, _offendingSymbol, line, column, msg, _e) {
|
|
13
|
+
const translated = this.source === "lexer"
|
|
14
|
+
? PlurnkErrorStrategy.translateLexerMessage(recognizer, msg)
|
|
15
|
+
: msg;
|
|
16
|
+
this.errors.push(new PlurnkParseError(line, column, this.source, translated));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=RecordingListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecordingListener.js","sourceRoot":"","sources":["../../src/RecordingListener.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,GAIpB,MAAM,UAAU,CAAC;AAElB,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAE3D,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,iBAAiB;IACnD,MAAM,CAAqB;IAC3B,MAAM,CAAqB;IAEpC,YAAY,MAA0B,EAAE,MAA0B;QAC9D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEQ,WAAW,CAChB,UAA2B,EAC3B,gBAA8B,EAC9B,IAAY,EACZ,MAAc,EACd,GAAW,EACX,EAA+B;QAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO;YACtC,CAAC,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,UAAyB,EAAE,GAAG,CAAC;YAC3E,CAAC,CAAC,GAAG,CAAC;QACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAClF,CAAC;CACJ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type OutputUnit } from "@cfworker/json-schema";
|
|
2
|
+
export type ValidationResult = {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
errors: OutputUnit[];
|
|
5
|
+
};
|
|
6
|
+
export default class Validator {
|
|
7
|
+
#private;
|
|
8
|
+
static validatePosition(obj: unknown): ValidationResult;
|
|
9
|
+
static validateLineMarker(obj: unknown): ValidationResult;
|
|
10
|
+
static validateParams(obj: unknown): ValidationResult;
|
|
11
|
+
static validateChannelContent(obj: unknown): ValidationResult;
|
|
12
|
+
static validateParsedPath(obj: unknown): ValidationResult;
|
|
13
|
+
static validateMatcherBody(obj: unknown): ValidationResult;
|
|
14
|
+
static validateSendBody(obj: unknown): ValidationResult;
|
|
15
|
+
static validateEntry(obj: unknown): ValidationResult;
|
|
16
|
+
static validateSchemeRegistration(obj: unknown): ValidationResult;
|
|
17
|
+
static validateProviderDeclaration(obj: unknown): ValidationResult;
|
|
18
|
+
static validateVisibility(obj: unknown): ValidationResult;
|
|
19
|
+
static validateLogEntry(obj: unknown): ValidationResult;
|
|
20
|
+
static validatePlurnkStatement(obj: unknown): ValidationResult;
|
|
21
|
+
static validateTurn(obj: unknown): ValidationResult;
|
|
22
|
+
static validateLoop(obj: unknown): ValidationResult;
|
|
23
|
+
static validateRun(obj: unknown): ValidationResult;
|
|
24
|
+
static validateSession(obj: unknown): ValidationResult;
|
|
25
|
+
static validateAgent(obj: unknown): ValidationResult;
|
|
26
|
+
static validatePacket(obj: unknown): ValidationResult;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=Validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,UAAU,EAAe,MAAM,uBAAuB,CAAC;AAqB/F,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AAaxE,MAAM,CAAC,OAAO,OAAO,SAAS;;IAmC1B,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACvD,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACzD,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACrD,MAAM,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IAC7D,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACzD,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IAC1D,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACvD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACpD,MAAM,CAAC,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACjE,MAAM,CAAC,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IAClE,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACzD,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACvD,MAAM,CAAC,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IAC9D,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACnD,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACnD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IAClD,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACtD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;IACpD,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB;CAMxD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Validator as CfValidator } from "@cfworker/json-schema";
|
|
2
|
+
import positionSchema from "../schema/Position.json" with { type: "json" };
|
|
3
|
+
import lineMarkerSchema from "../schema/LineMarker.json" with { type: "json" };
|
|
4
|
+
import paramsSchema from "../schema/Params.json" with { type: "json" };
|
|
5
|
+
import channelContentSchema from "../schema/ChannelContent.json" with { type: "json" };
|
|
6
|
+
import parsedPathSchema from "../schema/ParsedPath.json" with { type: "json" };
|
|
7
|
+
import matcherBodySchema from "../schema/MatcherBody.json" with { type: "json" };
|
|
8
|
+
import sendBodySchema from "../schema/SendBody.json" with { type: "json" };
|
|
9
|
+
import entrySchema from "../schema/Entry.json" with { type: "json" };
|
|
10
|
+
import schemeRegistrationSchema from "../schema/SchemeRegistration.json" with { type: "json" };
|
|
11
|
+
import providerDeclarationSchema from "../schema/ProviderDeclaration.json" with { type: "json" };
|
|
12
|
+
import visibilitySchema from "../schema/Visibility.json" with { type: "json" };
|
|
13
|
+
import logEntrySchema from "../schema/LogEntry.json" with { type: "json" };
|
|
14
|
+
import plurnkStatementSchema from "../schema/PlurnkStatement.json" with { type: "json" };
|
|
15
|
+
import turnSchema from "../schema/Turn.json" with { type: "json" };
|
|
16
|
+
import loopSchema from "../schema/Loop.json" with { type: "json" };
|
|
17
|
+
import runSchema from "../schema/Run.json" with { type: "json" };
|
|
18
|
+
import sessionSchema from "../schema/Session.json" with { type: "json" };
|
|
19
|
+
import agentSchema from "../schema/Agent.json" with { type: "json" };
|
|
20
|
+
import packetSchema from "../schema/Packet.json" with { type: "json" };
|
|
21
|
+
// All foundational schemas — handy when a top-level shape transitively references many others.
|
|
22
|
+
const FOUNDATIONAL = [
|
|
23
|
+
positionSchema, lineMarkerSchema, paramsSchema, channelContentSchema,
|
|
24
|
+
parsedPathSchema, matcherBodySchema, sendBodySchema,
|
|
25
|
+
plurnkStatementSchema,
|
|
26
|
+
entrySchema, logEntrySchema,
|
|
27
|
+
schemeRegistrationSchema, providerDeclarationSchema,
|
|
28
|
+
visibilitySchema,
|
|
29
|
+
packetSchema,
|
|
30
|
+
];
|
|
31
|
+
export default class Validator {
|
|
32
|
+
static #position = new CfValidator(positionSchema, "2020-12");
|
|
33
|
+
static #lineMarker = new CfValidator(lineMarkerSchema, "2020-12");
|
|
34
|
+
static #params = new CfValidator(paramsSchema, "2020-12");
|
|
35
|
+
static #channelContent = new CfValidator(channelContentSchema, "2020-12");
|
|
36
|
+
static #parsedPath = Validator.#buildWithRefs(parsedPathSchema, [paramsSchema]);
|
|
37
|
+
static #matcherBody = new CfValidator(matcherBodySchema, "2020-12");
|
|
38
|
+
static #sendBody = new CfValidator(sendBodySchema, "2020-12");
|
|
39
|
+
static #entry = Validator.#buildWithRefs(entrySchema, [paramsSchema, channelContentSchema]);
|
|
40
|
+
static #schemeRegistration = new CfValidator(schemeRegistrationSchema, "2020-12");
|
|
41
|
+
static #providerDeclaration = new CfValidator(providerDeclarationSchema, "2020-12");
|
|
42
|
+
static #visibility = new CfValidator(visibilitySchema, "2020-12");
|
|
43
|
+
static #logEntry = Validator.#buildWithRefs(logEntrySchema, [paramsSchema, lineMarkerSchema]);
|
|
44
|
+
static #plurnkStatement = Validator.#buildWithRefs(plurnkStatementSchema, [positionSchema, lineMarkerSchema, paramsSchema, parsedPathSchema, matcherBodySchema, sendBodySchema]);
|
|
45
|
+
static #turn = Validator.#buildWithRefs(turnSchema, FOUNDATIONAL);
|
|
46
|
+
static #loop = new CfValidator(loopSchema, "2020-12");
|
|
47
|
+
static #run = new CfValidator(runSchema, "2020-12");
|
|
48
|
+
static #session = Validator.#buildWithRefs(sessionSchema, [schemeRegistrationSchema]);
|
|
49
|
+
static #agent = Validator.#buildWithRefs(agentSchema, [providerDeclarationSchema, schemeRegistrationSchema]);
|
|
50
|
+
static #packet = Validator.#buildWithRefs(packetSchema, FOUNDATIONAL);
|
|
51
|
+
static #buildWithRefs(mainSchema, refSchemas) {
|
|
52
|
+
const validator = new CfValidator(mainSchema, "2020-12");
|
|
53
|
+
const mainId = mainSchema.$id;
|
|
54
|
+
for (const ref of refSchemas) {
|
|
55
|
+
const refId = ref.$id;
|
|
56
|
+
if (refId && refId === mainId)
|
|
57
|
+
continue;
|
|
58
|
+
validator.addSchema(ref);
|
|
59
|
+
}
|
|
60
|
+
return validator;
|
|
61
|
+
}
|
|
62
|
+
static validatePosition(obj) { return Validator.#run_(Validator.#position, obj); }
|
|
63
|
+
static validateLineMarker(obj) { return Validator.#run_(Validator.#lineMarker, obj); }
|
|
64
|
+
static validateParams(obj) { return Validator.#run_(Validator.#params, obj); }
|
|
65
|
+
static validateChannelContent(obj) { return Validator.#run_(Validator.#channelContent, obj); }
|
|
66
|
+
static validateParsedPath(obj) { return Validator.#run_(Validator.#parsedPath, obj); }
|
|
67
|
+
static validateMatcherBody(obj) { return Validator.#run_(Validator.#matcherBody, obj); }
|
|
68
|
+
static validateSendBody(obj) { return Validator.#run_(Validator.#sendBody, obj); }
|
|
69
|
+
static validateEntry(obj) { return Validator.#run_(Validator.#entry, obj); }
|
|
70
|
+
static validateSchemeRegistration(obj) { return Validator.#run_(Validator.#schemeRegistration, obj); }
|
|
71
|
+
static validateProviderDeclaration(obj) { return Validator.#run_(Validator.#providerDeclaration, obj); }
|
|
72
|
+
static validateVisibility(obj) { return Validator.#run_(Validator.#visibility, obj); }
|
|
73
|
+
static validateLogEntry(obj) { return Validator.#run_(Validator.#logEntry, obj); }
|
|
74
|
+
static validatePlurnkStatement(obj) { return Validator.#run_(Validator.#plurnkStatement, obj); }
|
|
75
|
+
static validateTurn(obj) { return Validator.#run_(Validator.#turn, obj); }
|
|
76
|
+
static validateLoop(obj) { return Validator.#run_(Validator.#loop, obj); }
|
|
77
|
+
static validateRun(obj) { return Validator.#run_(Validator.#run, obj); }
|
|
78
|
+
static validateSession(obj) { return Validator.#run_(Validator.#session, obj); }
|
|
79
|
+
static validateAgent(obj) { return Validator.#run_(Validator.#agent, obj); }
|
|
80
|
+
static validatePacket(obj) { return Validator.#run_(Validator.#packet, obj); }
|
|
81
|
+
static #run_(validator, obj) {
|
|
82
|
+
const result = validator.validate(obj);
|
|
83
|
+
return { valid: result.valid, errors: result.errors };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=Validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"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"}
|