grammar-well 2.2.0 → 2.3.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/README.md +74 -1
- package/build/parser/algorithms/earley.d.ts +1 -1
- package/build/parser/algorithms/earley.js +1 -1
- package/build/parser/algorithms/earley.js.map +1 -1
- package/build/parser/algorithms/noop.d.ts +7 -0
- package/build/parser/algorithms/noop.js +9 -0
- package/build/parser/algorithms/noop.js.map +1 -0
- package/build/parser/parse.js +3 -1
- package/build/parser/parse.js.map +1 -1
- package/build/utility/parsing.js.map +1 -1
- package/build/utility/text-format.d.ts +1 -1
- package/build/utility/text-format.js +4 -4
- package/build/utility/text-format.js.map +1 -1
- package/build/version.json +1 -1
- package/package.json +7 -4
- package/src/parser/algorithms/earley.ts +14 -16
- package/src/parser/algorithms/noop.ts +11 -0
- package/src/parser/parse.ts +3 -1
- package/src/utility/parsing.ts +2 -1
- package/src/utility/text-format.ts +4 -4
- package/src/version.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/build/parser/algorithms/lrk/closure.d.ts +0 -10
- package/build/parser/algorithms/lrk/closure.js +0 -26
- package/build/parser/algorithms/lrk/closure.js.map +0 -1
- package/build/parser/algorithms/lrk/state.d.ts +0 -12
- package/build/parser/algorithms/lrk/state.js +0 -2
- package/build/parser/algorithms/lrk/state.js.map +0 -1
package/README.md
CHANGED
|
@@ -110,4 +110,77 @@ const javascriptsource = await Generate(source, {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
});
|
|
113
|
-
```
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Performance & Scalability Report: The 100k "Grammar Well"
|
|
116
|
+
|
|
117
|
+
This sections documents the engine's performance limits when processing extreme-depth telemetry (100,000 nested nodes).
|
|
118
|
+
|
|
119
|
+
### Infrastructure Profile
|
|
120
|
+
To ensure absolute resource isolation, tests were conducted on a dedicated high-memory cloud instance.
|
|
121
|
+
|
|
122
|
+
| Category | Specification |
|
|
123
|
+
| :----------- | :--------------------------------------------------- |
|
|
124
|
+
| **Provider** | **DigitalOcean (Memory-Optimized Droplet)** |
|
|
125
|
+
| **Compute** | 4 Dedicated vCPUs (Intel® Xeon® Gold 6248 @ 2.50GHz) |
|
|
126
|
+
| **Memory** | 32 GB Dedicated RAM |
|
|
127
|
+
| **Storage** | 100 GB NVMe SSD |
|
|
128
|
+
| **Runtime** | Node.js v25.2.1 on Linux 6.8.0 |
|
|
129
|
+
|
|
130
|
+
### V8 Runtime Configuration
|
|
131
|
+
Processing 100,000 nodes at depth generates a recursive call-stack that exceeds default Node.js and OS boundaries.
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
# 1. Unlock the OS-level stack limit
|
|
135
|
+
ulimit -s unlimited
|
|
136
|
+
|
|
137
|
+
# 2. Open a persistent session to prevent SSH timeout crashes
|
|
138
|
+
screen -L -Logfile benchmark.log -S benchmark
|
|
139
|
+
|
|
140
|
+
# 3. Launch the suite with tuned V8 stack/heap flags to stabilize the environment and prevent Segmentation Faults:
|
|
141
|
+
npm run benchmark -- --stack-size=65536 --max-old-space-size=28000
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Workflow Tip: Use `CTRL + A + D` to detach the screen. You can safely close your terminal or monitor the output via:
|
|
145
|
+
```
|
|
146
|
+
tail -f benchmark.log
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
### JSON (1K Nodes)
|
|
151
|
+
| | Parsing Cold | Parsing Hot | Stability (CV) | Memory Used | Parsing Iterations |
|
|
152
|
+
| --------------------------- | ------------ | ------------- | -------------- | ----------- | ------------------ |
|
|
153
|
+
| Lexer Only | 6.17 | 5.22 (±1.92) | 36.8% | 24.12 MB | 100 |
|
|
154
|
+
| Earley Eager | 40.36 | 37.15 (±5.37) | 14.5% | 45.25 MB | 100 |
|
|
155
|
+
| Earley Lazy | 46.27 | 42.59 (±4.75) | 11.1% | 48.30 MB | 100 |
|
|
156
|
+
| Earley Eager (Zero Epsilon) | 39.44 | 36.27 (±4.93) | 13.6% | 40.29 MB | 100 |
|
|
157
|
+
| Earley Lazy (Zero Epsilon) | 39.19 | 35.67 (±6.31) | 17.7% | 41.65 MB | 100 |
|
|
158
|
+
| LR0 (Zero Epsilon) | 19.72 | 12.96 (±3.28) | 25.3% | 25.60 MB | 100 |
|
|
159
|
+
|
|
160
|
+
### JSON (10K Nodes)
|
|
161
|
+
| | Parsing Cold | Parsing Hot | Stability (CV) | Memory Used | Parsing Iterations |
|
|
162
|
+
| --------------------------- | ------------ | --------------- | -------------- | ----------- | ------------------ |
|
|
163
|
+
| Lexer Only | 32.27 | 31.49 (±2.17) | 6.9% | 56.12 MB | 100 |
|
|
164
|
+
| Earley Eager | 855.60 | 825.14 (±17.17) | 2.1% | 270.32 MB | 100 |
|
|
165
|
+
| Earley Lazy | 759.63 | 750.13 (±11.63) | 1.5% | 186.92 MB | 100 |
|
|
166
|
+
| Earley Eager (Zero Epsilon) | 246.72 | 236.36 (±7.41) | 3.1% | 85.53 MB | 100 |
|
|
167
|
+
| Earley Lazy (Zero Epsilon) | 267.39 | 262.59 (±6.62) | 2.5% | 94.25 MB | 100 |
|
|
168
|
+
| LR0 (Zero Epsilon) | 86.06 | 85.09 (±4.86) | 5.7% | 53.52 MB | 100 |
|
|
169
|
+
|
|
170
|
+
### JSON (50K Nodes)
|
|
171
|
+
| | Parsing Cold | Parsing Hot | Stability (CV) | Memory Used | Parsing Iterations |
|
|
172
|
+
| --------------------------- | ------------ | ------------------ | -------------- | ----------- | ------------------ |
|
|
173
|
+
| Lexer Only | 128.11 | 128.23 (±4.82) | 3.8% | 206.47 MB | 10 |
|
|
174
|
+
| Earley Eager | 15647.68 | 15585.77 (±299.41) | 1.9% | 5365.89 MB | 10 |
|
|
175
|
+
| Earley Lazy | 14665.24 | 14710.48 (±139.89) | 1.0% | 1239.93 MB | 10 |
|
|
176
|
+
| Earley Eager (Zero Epsilon) | 1256.36 | 1216.06 (±21.39) | 1.8% | 161.81 MB | 10 |
|
|
177
|
+
| Earley Lazy (Zero Epsilon) | 1388.78 | 1342.75 (±13.41) | 1.0% | 229.55 MB | 10 |
|
|
178
|
+
| LR0 (Zero Epsilon) | 431.23 | 422.55 (±11.36) | 2.7% | 143.34 MB | 10 |
|
|
179
|
+
|
|
180
|
+
### JSON (100k Nodes)
|
|
181
|
+
| | Parsing Cold | Parsing Hot | Stability (CV) | Memory Used | Parsing Iterations |
|
|
182
|
+
| --------------------------- | ------------ | ---------------- | -------------- | ----------- | ------------------ |
|
|
183
|
+
| Lexer Only | 226.86 | 224.91 (±6.51) | 2.9% | 281.19 MB | 10 |
|
|
184
|
+
| Earley Eager (Zero Epsilon) | 2259.98 | 2258.16 (±22.03) | 1.0% | 227.75 MB | 10 |
|
|
185
|
+
| Earley Lazy (Zero Epsilon) | 2569.49 | 2603.80 (±26.03) | 1.0% | 353.09 MB | 10 |
|
|
186
|
+
| LR0 (Zero Epsilon) | 717.48 | 753.08 (±17.29) | 2.3% | 176.64 MB | 10 |
|
|
@@ -18,8 +18,8 @@ declare class Column {
|
|
|
18
18
|
wants: Dictionary<State[]>;
|
|
19
19
|
scannable: State[];
|
|
20
20
|
completed: Dictionary<State[]>;
|
|
21
|
-
private rules;
|
|
22
21
|
index: number;
|
|
22
|
+
private rules;
|
|
23
23
|
private StateClass;
|
|
24
24
|
constructor(rules: Dictionary<RuntimeGrammarProductionRule[]>, index: number, StateClass: Concrete<typeof State>);
|
|
25
25
|
process(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"earley.js","sourceRoot":"","sources":["../../../src/parser/algorithms/earley.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOzD,MAAM,UAAU,MAAM,CAAC,QAAsD,EAAE,UAA+B,EAAE;IAC5G,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAC5B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,KAAK,GAAa,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,IAAI,OAAO,GAAW,CAAC,CAAC;IAExB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,cAAc,GAAW,KAAK,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,EAAE,CAAC;QAEV,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEvB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC;QACnB,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;QAC1B,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;QACzB,OAAO,CAAC,EAAE,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,aAAa,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrF,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACL,CAAC;QAED,UAAU,CAAC,OAAO,EAAE,CAAC;QAErB,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,aAAa,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QACrE,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,GAA+B,EAAE,KAAe;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QACnB,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACpC,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,MAAM;
|
|
1
|
+
{"version":3,"file":"earley.js","sourceRoot":"","sources":["../../../src/parser/algorithms/earley.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop.js","sourceRoot":"","sources":["../../../src/parser/algorithms/noop.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,IAAI,CAAC,QAAsD,EAAE,QAAQ,GAAG,EAAE;IACtF,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAC5B,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;AACjC,CAAC"}
|
package/build/parser/parse.js
CHANGED
|
@@ -5,10 +5,12 @@ import { CYK } from "./algorithms/cyk.js";
|
|
|
5
5
|
import { Earley } from "./algorithms/earley.js";
|
|
6
6
|
import { LRK } from "./algorithms/lrk/algorithm.js";
|
|
7
7
|
import { ParserUtility } from "../utility/parsing.js";
|
|
8
|
+
import { NOOP } from "./algorithms/noop.js";
|
|
8
9
|
const ParserRegistry = {
|
|
9
10
|
earley: Earley,
|
|
10
11
|
cyk: CYK,
|
|
11
|
-
lr0: LRK
|
|
12
|
+
lr0: LRK,
|
|
13
|
+
noop: NOOP
|
|
12
14
|
};
|
|
13
15
|
export function Parse(language, input, options = {
|
|
14
16
|
algorithm: 'earley',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parser/parse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parser/parse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,MAAM,cAAc,GAAuC;IACvD,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;CACb,CAAA;AAED,MAAM,UAAU,KAAK,CACjB,QAA0C,EAC1C,KAAa,EACb,UAAyB;IACrB,SAAS,EAAE,QAAQ;IACnB,aAAa,EAAE,EAAE;CACpB,EACD,UAA4B,OAAO;IAEnC,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjH,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5G,OAAO,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,YAAY,CAAC,SAA0C;IAC5D,MAAM,cAAc,GAAG,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,IAAI,WAAW,CAAC,IAAI,cAAc,EAAE,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC;SAAM,IAAI,MAAM,IAAI,SAAS,CAAC,KAAK,IAAI,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;QAChF,OAAO,IAAI,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,QAAQ,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACrC,OAAO,IAAI,WAAW,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IAC/E,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsing.js","sourceRoot":"","sources":["../../src/utility/parsing.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"parsing.js","sourceRoot":"","sources":["../../src/utility/parsing.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAGtB,MAAM,CAAC,kBAAkB,CAAC,MAAgC,EAAE,KAAwB;QAChF,IAAI,OAAO,MAAM,KAAK,QAAQ;YAC1B,MAAM,+CAA+C,CAAC;QAC1D,IAAI,OAAO,MAAM,IAAI,UAAU;YAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM;YACP,OAAM;QACV,IAAI,MAAM,IAAI,MAAM;YAChB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,OAAO,IAAI,MAAM;YACjB,OAAO,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,SAAS,IAAI,MAAM;YACnB,OAAO,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,MAAgC;QACpD,OAAO,OAAO,MAAM,IAAI,QAAQ,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAkC,EAAE,IAAS,EAAE,IAAU;QACxE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|
|
@@ -7,5 +7,5 @@ export declare class TextFormatter {
|
|
|
7
7
|
static LexerTokenShort(token: RuntimeLexerToken): string;
|
|
8
8
|
static LexerTokenError(lexer: TokenBuffer): string;
|
|
9
9
|
static GrammarRuleSymbol(symbol: RuntimeGrammarRuleSymbol, short?: boolean, error?: boolean): string;
|
|
10
|
-
static GrammarRule(rule: RuntimeGrammarProductionRule,
|
|
10
|
+
static GrammarRule(rule: RuntimeGrammarProductionRule, dot?: number): string;
|
|
11
11
|
}
|
|
@@ -69,10 +69,10 @@ export class TextFormatter {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
static GrammarRule(rule,
|
|
73
|
-
let symbolSequence = rule.symbols.slice(0,
|
|
74
|
-
if (typeof
|
|
75
|
-
symbolSequence += " ● " + rule.symbols.slice(
|
|
72
|
+
static GrammarRule(rule, dot) {
|
|
73
|
+
let symbolSequence = rule.symbols.slice(0, dot).map(v => TextFormatter.GrammarRuleSymbol(v, true, true)).join(' ');
|
|
74
|
+
if (typeof dot !== "undefined") {
|
|
75
|
+
symbolSequence += " ● " + rule.symbols.slice(dot).map(v => TextFormatter.GrammarRuleSymbol(v, true, true)).join(' ');
|
|
76
76
|
}
|
|
77
77
|
return rule.name + " → " + symbolSequence;
|
|
78
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-format.js","sourceRoot":"","sources":["../../src/utility/text-format.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"text-format.js","sourceRoot":"","sources":["../../src/utility/text-format.ts"],"names":[],"mappings":"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"}
|
package/build/version.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "version": "2.
|
|
1
|
+
{ "version": "2.3.0" }
|
package/package.json
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "grammar-well",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.3.0",
|
|
5
5
|
"description": "Cross-platform Parser written in TypeScript",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"prebuild": "tsc --build --clean && node scripts/prebuild.ts",
|
|
8
8
|
"grammar": "tsc --build --clean && node scripts/grammar.ts",
|
|
9
9
|
"build": "tsc --build",
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
10
|
+
"hardware": "node tests/utilities/hardware.ts",
|
|
11
|
+
"benchmark": "node --stack-size=65536 --max-old-space-size=28000 --expose-gc tests/performance/benchmark.ts",
|
|
12
|
+
"test": "node --test --test-reporter ./tests/utilities/reporter.ts tests/**/*.spec.ts",
|
|
13
|
+
"profile": "node tests/performance/profile.ts",
|
|
14
|
+
"lint": "tsc --noEmit"
|
|
13
15
|
},
|
|
14
16
|
"exports": {
|
|
15
17
|
".": "./build/index.js",
|
|
@@ -34,6 +36,7 @@
|
|
|
34
36
|
},
|
|
35
37
|
"homepage": "https://grammar-well.xyz",
|
|
36
38
|
"devDependencies": {
|
|
39
|
+
"grammar-well": "^2.1.0",
|
|
37
40
|
"@types/node": "^25.0.3",
|
|
38
41
|
"typescript": "^5.9.3",
|
|
39
42
|
"yaml": "^2.8.2"
|
|
@@ -81,13 +81,13 @@ function PostProcess(ast: PreAST | RuntimeLexerToken, clone?: boolean) {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
class Column {
|
|
84
|
-
data: any;
|
|
85
|
-
states: State[] = [];
|
|
86
|
-
wants: Dictionary<State[]> = Object.create(null)
|
|
87
|
-
scannable: State[] = []
|
|
88
|
-
completed: Dictionary<State[]> = Object.create(null);
|
|
89
|
-
private rules: Dictionary<RuntimeGrammarProductionRule[]>;
|
|
84
|
+
public data: any;
|
|
85
|
+
public states: State[] = [];
|
|
86
|
+
public wants: Dictionary<State[]> = Object.create(null);
|
|
87
|
+
public scannable: State[] = [];
|
|
88
|
+
public completed: Dictionary<State[]> = Object.create(null);
|
|
90
89
|
public index: number;
|
|
90
|
+
private rules: Dictionary<RuntimeGrammarProductionRule[]>;
|
|
91
91
|
private StateClass: Concrete<typeof State>;
|
|
92
92
|
|
|
93
93
|
constructor(
|
|
@@ -105,12 +105,11 @@ class Column {
|
|
|
105
105
|
let w = 0;
|
|
106
106
|
let state: State;
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
while (state = this.states[w++]) { // nb. we push() during iteration
|
|
108
|
+
while (state = this.states[w++]) {
|
|
110
109
|
if (state.isComplete) {
|
|
111
110
|
state.finish();
|
|
112
111
|
const { wantedBy } = state;
|
|
113
|
-
for (let i = wantedBy.length; i--;) {
|
|
112
|
+
for (let i = wantedBy.length; i--;) {
|
|
114
113
|
this.complete(wantedBy[i], state);
|
|
115
114
|
}
|
|
116
115
|
|
|
@@ -170,14 +169,15 @@ class Column {
|
|
|
170
169
|
}
|
|
171
170
|
|
|
172
171
|
abstract class State {
|
|
173
|
-
isComplete: boolean;
|
|
174
|
-
data: any = [];
|
|
175
|
-
left: State;
|
|
176
|
-
right: State | StateToken;
|
|
172
|
+
public isComplete: boolean;
|
|
173
|
+
public data: any = [];
|
|
174
|
+
public left: State;
|
|
175
|
+
public right: State | StateToken;
|
|
177
176
|
public rule: RuntimeGrammarProductionRule;
|
|
178
177
|
public dot: number;
|
|
179
178
|
public reference: number;
|
|
180
179
|
public wantedBy: State[];
|
|
180
|
+
|
|
181
181
|
constructor(
|
|
182
182
|
rule: RuntimeGrammarProductionRule,
|
|
183
183
|
dot: number,
|
|
@@ -207,7 +207,6 @@ abstract class State {
|
|
|
207
207
|
|
|
208
208
|
protected build() {
|
|
209
209
|
const children = [];
|
|
210
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
211
210
|
let node: State = this;
|
|
212
211
|
do {
|
|
213
212
|
children[node.dot - 1] = node.right.data;
|
|
@@ -237,5 +236,4 @@ interface StateToken {
|
|
|
237
236
|
}
|
|
238
237
|
|
|
239
238
|
type PreAST = [RuntimeGrammarProductionRule, (RuntimeLexerToken | PreAST)[], { reference: number, dot: number }];
|
|
240
|
-
type Concrete<T extends abstract new (...args: any) => any> =
|
|
241
|
-
new (...args: ConstructorParameters<T>) => InstanceType<T>;
|
|
239
|
+
type Concrete<T extends abstract new (...args: any) => any> = new (...args: ConstructorParameters<T>) => InstanceType<T>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RuntimeParserClass } from "../../typings/index.ts";
|
|
2
|
+
import { TokenBuffer } from "../../lexers/token-buffer.ts";
|
|
3
|
+
|
|
4
|
+
export function NOOP(language: RuntimeParserClass & { tokens: TokenBuffer }, _options = {}) {
|
|
5
|
+
const { tokens } = language;
|
|
6
|
+
const result = [];
|
|
7
|
+
for (const token of tokens) {
|
|
8
|
+
result.push(token);
|
|
9
|
+
}
|
|
10
|
+
return { results: [result] };
|
|
11
|
+
}
|
package/src/parser/parse.ts
CHANGED
|
@@ -6,11 +6,13 @@ import { CYK } from "./algorithms/cyk.ts";
|
|
|
6
6
|
import { Earley } from "./algorithms/earley.ts";
|
|
7
7
|
import { LRK } from "./algorithms/lrk/algorithm.ts";
|
|
8
8
|
import { ParserUtility } from "../utility/parsing.ts";
|
|
9
|
+
import { NOOP } from "./algorithms/noop.ts";
|
|
9
10
|
|
|
10
11
|
const ParserRegistry: { [key: string]: ParserAlgorithm } = {
|
|
11
12
|
earley: Earley,
|
|
12
13
|
cyk: CYK,
|
|
13
|
-
lr0: LRK
|
|
14
|
+
lr0: LRK,
|
|
15
|
+
noop: NOOP
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
export function Parse(
|
package/src/utility/parsing.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { RuntimeGrammarProductionRule, RuntimeGrammarRuleSymbol, RuntimeLex
|
|
|
2
2
|
|
|
3
3
|
export class ParserUtility {
|
|
4
4
|
|
|
5
|
+
|
|
5
6
|
static SymbolMatchesToken(symbol: RuntimeGrammarRuleSymbol, token: RuntimeLexerToken) {
|
|
6
7
|
if (typeof symbol === 'string')
|
|
7
8
|
throw 'Attempted to match token against non-terminal';
|
|
@@ -27,4 +28,4 @@ export class ParserUtility {
|
|
|
27
28
|
}
|
|
28
29
|
return data;
|
|
29
30
|
}
|
|
30
|
-
}
|
|
31
|
+
}
|
|
@@ -74,10 +74,10 @@ export class TextFormatter {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
static GrammarRule(rule: RuntimeGrammarProductionRule,
|
|
78
|
-
let symbolSequence = rule.symbols.slice(0,
|
|
79
|
-
if (typeof
|
|
80
|
-
symbolSequence += " ● " + rule.symbols.slice(
|
|
77
|
+
static GrammarRule(rule: RuntimeGrammarProductionRule, dot?: number) {
|
|
78
|
+
let symbolSequence = rule.symbols.slice(0, dot).map(v => TextFormatter.GrammarRuleSymbol(v, true, true)).join(' ');
|
|
79
|
+
if (typeof dot !== "undefined") {
|
|
80
|
+
symbolSequence += " ● " + rule.symbols.slice(dot).map(v => TextFormatter.GrammarRuleSymbol(v, true, true)).join(' ');
|
|
81
81
|
}
|
|
82
82
|
return rule.name + " → " + symbolSequence;
|
|
83
83
|
}
|
package/src/version.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"2.
|
|
1
|
+
{"version":"2.3.0"}
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/index.ts","./src/generator/generator.ts","./src/generator/index.ts","./src/generator/state.ts","./src/generator/artifacts/basic.ts","./src/generator/artifacts/lexer.ts","./src/generator/artifacts/lr.ts","./src/generator/grammars/index.ts","./src/generator/grammars/v1.ts","./src/generator/grammars/v2.ts","./src/generator/import-resolvers/auto.ts","./src/generator/import-resolvers/browser.ts","./src/generator/import-resolvers/dictionary.ts","./src/generator/import-resolvers/filesystem.ts","./src/generator/stringify/common.ts","./src/generator/stringify/javascript.ts","./src/generator/stringify/exports/javascript.ts","./src/generator/stringify/exports/json.ts","./src/generator/stringify/exports/registry.ts","./src/generator/stringify/exports/typescript.ts","./src/generator/stringify/grammar/v2.ts","./src/lexers/character-lexer.ts","./src/lexers/stateful-lexer.ts","./src/lexers/token-buffer.ts","./src/parser/parse.ts","./src/parser/algorithms/cyk.ts","./src/parser/algorithms/earley.ts","./src/parser/algorithms/lrk/algorithm.ts","./src/parser/algorithms/lrk/bimap.ts","./src/parser/algorithms/lrk/canonical-collection.ts","./src/parser/algorithms/lrk/stack.ts","./src/parser/algorithms/lrk/typings.ts","./src/typings/ast.ts","./src/typings/common.ts","./src/typings/generator.ts","./src/typings/index.ts","./src/typings/runtime.ts","./src/utility/format.ts","./src/utility/general.ts","./src/utility/index.ts","./src/utility/lint.ts","./src/utility/monarch.ts","./src/utility/parsing.ts","./src/utility/text-format.ts"],"version":"5.9.3"}
|
|
1
|
+
{"root":["./src/index.ts","./src/generator/generator.ts","./src/generator/index.ts","./src/generator/state.ts","./src/generator/artifacts/basic.ts","./src/generator/artifacts/lexer.ts","./src/generator/artifacts/lr.ts","./src/generator/grammars/index.ts","./src/generator/grammars/v1.ts","./src/generator/grammars/v2.ts","./src/generator/import-resolvers/auto.ts","./src/generator/import-resolvers/browser.ts","./src/generator/import-resolvers/dictionary.ts","./src/generator/import-resolvers/filesystem.ts","./src/generator/stringify/common.ts","./src/generator/stringify/javascript.ts","./src/generator/stringify/exports/javascript.ts","./src/generator/stringify/exports/json.ts","./src/generator/stringify/exports/registry.ts","./src/generator/stringify/exports/typescript.ts","./src/generator/stringify/grammar/v2.ts","./src/lexers/character-lexer.ts","./src/lexers/stateful-lexer.ts","./src/lexers/token-buffer.ts","./src/parser/parse.ts","./src/parser/algorithms/cyk.ts","./src/parser/algorithms/earley.ts","./src/parser/algorithms/noop.ts","./src/parser/algorithms/lrk/algorithm.ts","./src/parser/algorithms/lrk/bimap.ts","./src/parser/algorithms/lrk/canonical-collection.ts","./src/parser/algorithms/lrk/stack.ts","./src/parser/algorithms/lrk/typings.ts","./src/typings/ast.ts","./src/typings/common.ts","./src/typings/generator.ts","./src/typings/index.ts","./src/typings/runtime.ts","./src/utility/format.ts","./src/utility/general.ts","./src/utility/index.ts","./src/utility/lint.ts","./src/utility/monarch.ts","./src/utility/parsing.ts","./src/utility/text-format.ts"],"version":"5.9.3"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { RuntimeGrammarProductionRule, RuntimeParserClass } from "../../../typings/index.ts";
|
|
2
|
-
export declare class ClosureBuilder {
|
|
3
|
-
private grammar;
|
|
4
|
-
constructor(grammar: RuntimeParserClass['artifacts']['grammar']);
|
|
5
|
-
get(rule: string): {
|
|
6
|
-
rule: RuntimeGrammarProductionRule;
|
|
7
|
-
dot: number;
|
|
8
|
-
}[];
|
|
9
|
-
private addClosure;
|
|
10
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { ParserUtility } from "../../../utility/parsing.js";
|
|
2
|
-
export class ClosureBuilder {
|
|
3
|
-
grammar;
|
|
4
|
-
constructor(grammar) {
|
|
5
|
-
this.grammar = grammar;
|
|
6
|
-
}
|
|
7
|
-
get(rule) {
|
|
8
|
-
const closure = { items: [], visited: new Set() };
|
|
9
|
-
this.addClosure(closure, rule);
|
|
10
|
-
return closure.items;
|
|
11
|
-
}
|
|
12
|
-
addClosure(closure, symbol) {
|
|
13
|
-
if (!ParserUtility.SymbolIsTerminal(symbol)) {
|
|
14
|
-
const key = symbol;
|
|
15
|
-
if (!(closure.visited.has(key))) {
|
|
16
|
-
closure.visited.add(key);
|
|
17
|
-
const rules = this.grammar.rules[key];
|
|
18
|
-
for (const rule of rules) {
|
|
19
|
-
closure.items.push({ rule, dot: 0 });
|
|
20
|
-
this.addClosure(closure, rule.symbols[0]);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=closure.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"closure.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/closure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,OAAO,cAAc;IACf,OAAO,CAA6C;IAC5D,YACI,OAAmD;QAEnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,IAAY;QACZ,MAAM,OAAO,GAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC,KAAK,CAAC;IACzB,CAAC;IAEO,UAAU,CAAC,OAAoB,EAAE,MAAgC;QACrE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,MAAgB,CAAC;YAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;oBACpC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { RuntimeGrammarProductionRule, RuntimeGrammarRuleSymbol } from "../../../typings/index.ts";
|
|
2
|
-
export interface State {
|
|
3
|
-
items: {
|
|
4
|
-
rule: RuntimeGrammarProductionRule;
|
|
5
|
-
dot: number;
|
|
6
|
-
}[];
|
|
7
|
-
isFinal: boolean;
|
|
8
|
-
actions: Map<RuntimeGrammarRuleSymbol, string>;
|
|
9
|
-
goto: Map<RuntimeGrammarRuleSymbol, string>;
|
|
10
|
-
reduce: number;
|
|
11
|
-
rule: RuntimeGrammarProductionRule;
|
|
12
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/state.ts"],"names":[],"mappings":""}
|