parser-lr 0.8.0 → 0.8.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.
- package/bin/parser-lr.js +629 -218
- package/bin/parser-lr.js.map +1 -1
- package/dist/lib/diagnostics/format-diagnostic.d.ts +31 -0
- package/dist/lib/diagnostics/format-diagnostic.d.ts.map +1 -0
- package/dist/lib/diagnostics/format-diagnostic.js +36 -0
- package/dist/lib/diagnostics/format-diagnostic.js.map +1 -0
- package/dist/lib/diagnostics/index.d.ts +5 -0
- package/dist/lib/diagnostics/index.d.ts.map +1 -0
- package/dist/lib/diagnostics/index.js +3 -0
- package/dist/lib/diagnostics/index.js.map +1 -0
- package/dist/lib/diagnostics/source-position.d.ts +24 -0
- package/dist/lib/diagnostics/source-position.d.ts.map +1 -0
- package/dist/lib/diagnostics/source-position.js +39 -0
- package/dist/lib/diagnostics/source-position.js.map +1 -0
- package/dist/lib/grammar/ast-type.d.ts +2 -0
- package/dist/lib/grammar/ast-type.d.ts.map +1 -1
- package/dist/lib/grammar/grammar-from-cst.js +8 -5
- package/dist/lib/grammar/grammar-from-cst.js.map +1 -1
- package/dist/lib/grammar/grammar.json +330 -164
- package/dist/lib/grammar/index.d.ts +1 -1
- package/dist/lib/grammar/index.d.ts.map +1 -1
- package/dist/lib/grammar/production.d.ts +2 -0
- package/dist/lib/grammar/production.d.ts.map +1 -1
- package/dist/lib/grammar/table-validator.d.ts +12 -2
- package/dist/lib/grammar/table-validator.d.ts.map +1 -1
- package/dist/lib/grammar/table-validator.js +49 -24
- package/dist/lib/grammar/table-validator.js.map +1 -1
- package/dist/lib/grammar/transform-rule.d.ts +3 -0
- package/dist/lib/grammar/transform-rule.d.ts.map +1 -1
- package/dist/lib/grammar-entry.d.ts +1 -1
- package/dist/lib/grammar-entry.d.ts.map +1 -1
- package/dist/lib/grammar-entry.js.map +1 -1
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/parse-context.d.ts +7 -0
- package/dist/lib/parse-context.d.ts.map +1 -1
- package/dist/lib/parse-context.js +9 -0
- package/dist/lib/parse-context.js.map +1 -1
- package/dist/lib/parse-table/table/lr-parse-table.d.ts.map +1 -1
- package/dist/lib/parse-table/table/lr-parse-table.js +10 -3
- package/dist/lib/parse-table/table/lr-parse-table.js.map +1 -1
- package/dist/lib/parser-lr.d.ts +15 -0
- package/dist/lib/parser-lr.d.ts.map +1 -1
- package/dist/lib/parser-lr.js +38 -9
- package/dist/lib/parser-lr.js.map +1 -1
- package/docs/grammar.md +29 -0
- package/grammars/grammar.grammar +2 -1
- package/package.json +1 -1
package/dist/lib/parser-lr.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Lexer, lexChunkStream, lexChunkStreamAsync, lexChunks, lexChunksAsync, } from './lexer/lexer.js';
|
|
2
2
|
import { ParseTable } from './parse-table/parse-table.js';
|
|
3
|
-
import { parseWithTable } from './shift-reduce/shift-reduce-engine.js';
|
|
3
|
+
import { parseWithTable, parseWithTableResult } from './shift-reduce/shift-reduce-engine.js';
|
|
4
4
|
import { transformCst } from './transform/cst-transformer.js';
|
|
5
5
|
/**
|
|
6
6
|
* Shift-reduce parser for EBNF grammars.
|
|
@@ -92,6 +92,42 @@ export class ParserLr {
|
|
|
92
92
|
}
|
|
93
93
|
return parseWithTable(this.table, tokens);
|
|
94
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Parses a token stream and retains syntax-error offset details.
|
|
97
|
+
*
|
|
98
|
+
* @param tokens - Token stream ending with `$eof`.
|
|
99
|
+
* @returns Tree and optional syntax-error details.
|
|
100
|
+
*/
|
|
101
|
+
parseResult(tokens) {
|
|
102
|
+
if (this.table === null) {
|
|
103
|
+
return {
|
|
104
|
+
tree: null,
|
|
105
|
+
errorOffset: 0,
|
|
106
|
+
errorMessage: 'Parse table has no parser entries',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const result = parseWithTableResult(this.table, tokens);
|
|
110
|
+
if (result.cst === null) {
|
|
111
|
+
return {
|
|
112
|
+
tree: null,
|
|
113
|
+
errorOffset: result.errorOffset,
|
|
114
|
+
errorMessage: result.errorMessage,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (this.grammar.transformSchema === null) {
|
|
118
|
+
return {
|
|
119
|
+
tree: result.cst,
|
|
120
|
+
errorOffset: null,
|
|
121
|
+
errorMessage: null,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const tree = transformCst(result.cst, this.grammar.transformSchema, this.table);
|
|
125
|
+
return {
|
|
126
|
+
tree,
|
|
127
|
+
errorOffset: tree === null ? result.errorOffset : null,
|
|
128
|
+
errorMessage: tree === null ? 'AST transform failed' : null,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
95
131
|
/**
|
|
96
132
|
* Parses a token stream into an AST when transform rules are declared.
|
|
97
133
|
*
|
|
@@ -99,14 +135,7 @@ export class ParserLr {
|
|
|
99
135
|
* @returns Transformed AST, CST when no transform section exists, or null on failure.
|
|
100
136
|
*/
|
|
101
137
|
parseAst(tokens) {
|
|
102
|
-
|
|
103
|
-
if (cst === null) {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
if (this.grammar.transformSchema === null || this.table === null) {
|
|
107
|
-
return cst;
|
|
108
|
-
}
|
|
109
|
-
return transformCst(cst, this.grammar.transformSchema, this.table);
|
|
138
|
+
return this.parseResult(tokens).tree;
|
|
110
139
|
}
|
|
111
140
|
/**
|
|
112
141
|
* Parses a token stream, applying CST-to-AST transforms when configured.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-lr.js","sourceRoot":"","sources":["../../src/lib/parser-lr.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,EACL,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,cAAc,GACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"parser-lr.js","sourceRoot":"","sources":["../../src/lib/parser-lr.ts"],"names":[],"mappings":"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"}
|
package/docs/grammar.md
CHANGED
|
@@ -98,6 +98,19 @@ expr =
|
|
|
98
98
|
;
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
+
An explicitly labeled alternative may contain zero factors. It matches the
|
|
102
|
+
empty input while preserving its label as the CST variant:
|
|
103
|
+
|
|
104
|
+
```ebnf
|
|
105
|
+
optional_color =
|
|
106
|
+
#absent
|
|
107
|
+
| #present kw_with expression
|
|
108
|
+
;
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Zero-factor alternatives must have a label; an unlabeled empty production such
|
|
112
|
+
as `optional_color = ;` is not valid.
|
|
113
|
+
|
|
101
114
|
### Production syntax
|
|
102
115
|
|
|
103
116
|
Each production ends with a semicolon:
|
|
@@ -158,6 +171,22 @@ transform
|
|
|
158
171
|
|
|
159
172
|
`type.#variant` refers to an AST type and variant from the `ast` section. Arguments are binding names from the parse production.
|
|
160
173
|
|
|
174
|
+
Use a build target without parentheses for a zero-argument transform:
|
|
175
|
+
|
|
176
|
+
```ebnf
|
|
177
|
+
ast
|
|
178
|
+
optional_color =
|
|
179
|
+
#absent
|
|
180
|
+
| #present expression
|
|
181
|
+
;
|
|
182
|
+
|
|
183
|
+
transform
|
|
184
|
+
optional_color ->
|
|
185
|
+
#absent optional_color.#absent
|
|
186
|
+
| #present optional_color.#present(expression)
|
|
187
|
+
;
|
|
188
|
+
```
|
|
189
|
+
|
|
161
190
|
Example (calculator):
|
|
162
191
|
|
|
163
192
|
```ebnf
|
package/grammars/grammar.grammar
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "parser-lr",
|
|
3
3
|
"author": "Adam R Moss <adamrmoss@gmail.com>",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.2",
|
|
5
5
|
"description": "Shift-reduce parser library for EBNF grammars with LR table generation, lexing, and CST-to-AST transforms",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"ast",
|