parser-lr 0.0.0 → 0.2.1
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 +112 -1
- package/bin/parser-lr.js +12502 -16
- package/bin/parser-lr.js.map +1 -1
- package/dist/lib/ast/ast-node.d.ts +59 -0
- package/dist/lib/ast/ast-node.d.ts.map +1 -0
- package/dist/lib/ast/ast-node.js +66 -0
- package/dist/lib/ast/ast-node.js.map +1 -0
- package/dist/lib/errors/index.d.ts +2 -0
- package/dist/lib/errors/index.d.ts.map +1 -0
- package/dist/lib/errors/index.js +2 -0
- package/dist/lib/errors/index.js.map +1 -0
- package/dist/lib/errors/parser-lr-error.d.ts +30 -0
- package/dist/lib/errors/parser-lr-error.d.ts.map +1 -0
- package/dist/lib/errors/parser-lr-error.js +45 -0
- package/dist/lib/errors/parser-lr-error.js.map +1 -0
- package/dist/lib/grammar/ast-schema.d.ts +28 -0
- package/dist/lib/grammar/ast-schema.d.ts.map +1 -0
- package/dist/lib/grammar/ast-schema.js +39 -0
- package/dist/lib/grammar/ast-schema.js.map +1 -0
- package/dist/lib/grammar/ast-type.d.ts +12 -0
- package/dist/lib/grammar/ast-type.d.ts.map +1 -0
- package/dist/lib/grammar/ast-type.js +2 -0
- package/dist/lib/grammar/ast-type.js.map +1 -0
- package/dist/lib/grammar/expression.d.ts +69 -0
- package/dist/lib/grammar/expression.d.ts.map +1 -0
- package/dist/lib/grammar/expression.js +2 -0
- package/dist/lib/grammar/expression.js.map +1 -0
- package/dist/lib/grammar/grammar-from-cst.d.ts +10 -0
- package/dist/lib/grammar/grammar-from-cst.d.ts.map +1 -0
- package/dist/lib/grammar/grammar-from-cst.js +638 -0
- package/dist/lib/grammar/grammar-from-cst.js.map +1 -0
- package/dist/lib/grammar/grammar-literals.d.ts +18 -0
- package/dist/lib/grammar/grammar-literals.d.ts.map +1 -0
- package/dist/lib/grammar/grammar-literals.js +67 -0
- package/dist/lib/grammar/grammar-literals.js.map +1 -0
- package/dist/lib/grammar/grammar.d.ts +45 -0
- package/dist/lib/grammar/grammar.d.ts.map +1 -0
- package/dist/lib/grammar/grammar.js +60 -0
- package/dist/lib/grammar/grammar.js.map +1 -0
- package/dist/lib/grammar/grammar.json +7950 -0
- package/dist/lib/grammar/index.d.ts +13 -0
- package/dist/lib/grammar/index.d.ts.map +1 -0
- package/dist/lib/grammar/index.js +7 -0
- package/dist/lib/grammar/index.js.map +1 -0
- package/dist/lib/grammar/meta-grammar-table.d.ts +19 -0
- package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -0
- package/dist/lib/grammar/meta-grammar-table.js +32 -0
- package/dist/lib/grammar/meta-grammar-table.js.map +1 -0
- package/dist/lib/grammar/production.d.ts +9 -0
- package/dist/lib/grammar/production.d.ts.map +1 -0
- package/dist/lib/grammar/production.js +2 -0
- package/dist/lib/grammar/production.js.map +1 -0
- package/dist/lib/grammar/read-grammar-error.d.ts +15 -0
- package/dist/lib/grammar/read-grammar-error.d.ts.map +1 -0
- package/dist/lib/grammar/read-grammar-error.js +18 -0
- package/dist/lib/grammar/read-grammar-error.js.map +1 -0
- package/dist/lib/grammar/read-grammar.d.ts +9 -0
- package/dist/lib/grammar/read-grammar.d.ts.map +1 -0
- package/dist/lib/grammar/read-grammar.js +21 -0
- package/dist/lib/grammar/read-grammar.js.map +1 -0
- package/dist/lib/grammar/token-rule.d.ts +11 -0
- package/dist/lib/grammar/token-rule.d.ts.map +1 -0
- package/dist/lib/grammar/token-rule.js +2 -0
- package/dist/lib/grammar/token-rule.js.map +1 -0
- package/dist/lib/grammar/transform-expression.d.ts +55 -0
- package/dist/lib/grammar/transform-expression.d.ts.map +1 -0
- package/dist/lib/grammar/transform-expression.js +2 -0
- package/dist/lib/grammar/transform-expression.js.map +1 -0
- package/dist/lib/grammar/transform-rule.d.ts +16 -0
- package/dist/lib/grammar/transform-rule.d.ts.map +1 -0
- package/dist/lib/grammar/transform-rule.js +2 -0
- package/dist/lib/grammar/transform-rule.js.map +1 -0
- package/dist/lib/grammar/transform-schema.d.ts +28 -0
- package/dist/lib/grammar/transform-schema.d.ts.map +1 -0
- package/dist/lib/grammar/transform-schema.js +39 -0
- package/dist/lib/grammar/transform-schema.js.map +1 -0
- package/dist/lib/index.d.ts +19 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +13 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/lexer/index.d.ts +10 -0
- package/dist/lib/lexer/index.d.ts.map +1 -0
- package/dist/lib/lexer/index.js +8 -0
- package/dist/lib/lexer/index.js.map +1 -0
- package/dist/lib/lexer/lexer-compile-error.d.ts +15 -0
- package/dist/lib/lexer/lexer-compile-error.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-compile-error.js +18 -0
- package/dist/lib/lexer/lexer-compile-error.js.map +1 -0
- package/dist/lib/lexer/lexer-compile.d.ts +94 -0
- package/dist/lib/lexer/lexer-compile.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-compile.js +189 -0
- package/dist/lib/lexer/lexer-compile.js.map +1 -0
- package/dist/lib/lexer/lexer-error.d.ts +15 -0
- package/dist/lib/lexer/lexer-error.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-error.js +18 -0
- package/dist/lib/lexer/lexer-error.js.map +1 -0
- package/dist/lib/lexer/lexer-input-error.d.ts +11 -0
- package/dist/lib/lexer/lexer-input-error.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-input-error.js +13 -0
- package/dist/lib/lexer/lexer-input-error.js.map +1 -0
- package/dist/lib/lexer/lexer-state-error.d.ts +13 -0
- package/dist/lib/lexer/lexer-state-error.d.ts.map +1 -0
- package/dist/lib/lexer/lexer-state-error.js +15 -0
- package/dist/lib/lexer/lexer-state-error.js.map +1 -0
- package/dist/lib/lexer/lexer.d.ts +111 -0
- package/dist/lib/lexer/lexer.d.ts.map +1 -0
- package/dist/lib/lexer/lexer.js +270 -0
- package/dist/lib/lexer/lexer.js.map +1 -0
- package/dist/lib/lexer/token.d.ts +34 -0
- package/dist/lib/lexer/token.d.ts.map +1 -0
- package/dist/lib/lexer/token.js +38 -0
- package/dist/lib/lexer/token.js.map +1 -0
- package/dist/lib/parse-context-error.d.ts +13 -0
- package/dist/lib/parse-context-error.d.ts.map +1 -0
- package/dist/lib/parse-context-error.js +15 -0
- package/dist/lib/parse-context-error.js.map +1 -0
- package/dist/lib/parse-context.d.ts +106 -0
- package/dist/lib/parse-context.d.ts.map +1 -0
- package/dist/lib/parse-context.js +133 -0
- package/dist/lib/parse-context.js.map +1 -0
- package/dist/lib/parse-output-error.d.ts +13 -0
- package/dist/lib/parse-output-error.d.ts.map +1 -0
- package/dist/lib/parse-output-error.js +15 -0
- package/dist/lib/parse-output-error.js.map +1 -0
- package/dist/lib/parse-output.d.ts +10 -0
- package/dist/lib/parse-output.d.ts.map +1 -0
- package/dist/lib/parse-output.js +15 -0
- package/dist/lib/parse-output.js.map +1 -0
- package/dist/lib/parse-table/analysis/first-follow.d.ts +124 -0
- package/dist/lib/parse-table/analysis/first-follow.d.ts.map +1 -0
- package/dist/lib/parse-table/analysis/first-follow.js +274 -0
- package/dist/lib/parse-table/analysis/first-follow.js.map +1 -0
- package/dist/lib/parse-table/analysis/index.d.ts +2 -0
- package/dist/lib/parse-table/analysis/index.d.ts.map +1 -0
- package/dist/lib/parse-table/analysis/index.js +2 -0
- package/dist/lib/parse-table/analysis/index.js.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-grammar.d.ts +65 -0
- package/dist/lib/parse-table/bnf/bnf-grammar.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-grammar.js +136 -0
- package/dist/lib/parse-table/bnf/bnf-grammar.js.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-production.d.ts +12 -0
- package/dist/lib/parse-table/bnf/bnf-production.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-production.js +2 -0
- package/dist/lib/parse-table/bnf/bnf-production.js.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-symbol.d.ts +40 -0
- package/dist/lib/parse-table/bnf/bnf-symbol.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/bnf-symbol.js +35 -0
- package/dist/lib/parse-table/bnf/bnf-symbol.js.map +1 -0
- package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts +104 -0
- package/dist/lib/parse-table/bnf/desugar-ebnf.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/desugar-ebnf.js +217 -0
- package/dist/lib/parse-table/bnf/desugar-ebnf.js.map +1 -0
- package/dist/lib/parse-table/bnf/index.d.ts +6 -0
- package/dist/lib/parse-table/bnf/index.d.ts.map +1 -0
- package/dist/lib/parse-table/bnf/index.js +4 -0
- package/dist/lib/parse-table/bnf/index.js.map +1 -0
- package/dist/lib/parse-table/build-lr-table.d.ts +11 -0
- package/dist/lib/parse-table/build-lr-table.d.ts.map +1 -0
- package/dist/lib/parse-table/build-lr-table.js +158 -0
- package/dist/lib/parse-table/build-lr-table.js.map +1 -0
- package/dist/lib/parse-table/index.d.ts +22 -0
- package/dist/lib/parse-table/index.d.ts.map +1 -0
- package/dist/lib/parse-table/index.js +15 -0
- package/dist/lib/parse-table/index.js.map +1 -0
- package/dist/lib/parse-table/lr-algorithm-error.d.ts +13 -0
- package/dist/lib/parse-table/lr-algorithm-error.d.ts.map +1 -0
- package/dist/lib/parse-table/lr-algorithm-error.js +15 -0
- package/dist/lib/parse-table/lr-algorithm-error.js.map +1 -0
- package/dist/lib/parse-table/lr-algorithm.d.ts +19 -0
- package/dist/lib/parse-table/lr-algorithm.d.ts.map +1 -0
- package/dist/lib/parse-table/lr-algorithm.js +27 -0
- package/dist/lib/parse-table/lr-algorithm.js.map +1 -0
- package/dist/lib/parse-table/lr0/index.d.ts +3 -0
- package/dist/lib/parse-table/lr0/index.d.ts.map +1 -0
- package/dist/lib/parse-table/lr0/index.js +2 -0
- package/dist/lib/parse-table/lr0/index.js.map +1 -0
- package/dist/lib/parse-table/lr0/lr0-item-set.d.ts +106 -0
- package/dist/lib/parse-table/lr0/lr0-item-set.d.ts.map +1 -0
- package/dist/lib/parse-table/lr0/lr0-item-set.js +235 -0
- package/dist/lib/parse-table/lr0/lr0-item-set.js.map +1 -0
- package/dist/lib/parse-table/lr1/index.d.ts +3 -0
- package/dist/lib/parse-table/lr1/index.d.ts.map +1 -0
- package/dist/lib/parse-table/lr1/index.js +2 -0
- package/dist/lib/parse-table/lr1/index.js.map +1 -0
- package/dist/lib/parse-table/lr1/lr1-item-set.d.ts +157 -0
- package/dist/lib/parse-table/lr1/lr1-item-set.d.ts.map +1 -0
- package/dist/lib/parse-table/lr1/lr1-item-set.js +380 -0
- package/dist/lib/parse-table/lr1/lr1-item-set.js.map +1 -0
- package/dist/lib/parse-table/parse-table-build-error.d.ts +17 -0
- package/dist/lib/parse-table/parse-table-build-error.d.ts.map +1 -0
- package/dist/lib/parse-table/parse-table-build-error.js +20 -0
- package/dist/lib/parse-table/parse-table-build-error.js.map +1 -0
- package/dist/lib/parse-table/parse-table-error.d.ts +13 -0
- package/dist/lib/parse-table/parse-table-error.d.ts.map +1 -0
- package/dist/lib/parse-table/parse-table-error.js +15 -0
- package/dist/lib/parse-table/parse-table-error.js.map +1 -0
- package/dist/lib/parse-table/parse-table-json.d.ts +50 -0
- package/dist/lib/parse-table/parse-table-json.d.ts.map +1 -0
- package/dist/lib/parse-table/parse-table-json.js +9 -0
- package/dist/lib/parse-table/parse-table-json.js.map +1 -0
- package/dist/lib/parse-table/parse-table.d.ts +154 -0
- package/dist/lib/parse-table/parse-table.d.ts.map +1 -0
- package/dist/lib/parse-table/parse-table.js +314 -0
- package/dist/lib/parse-table/parse-table.js.map +1 -0
- package/dist/lib/parse-table/slr/index.d.ts +4 -0
- package/dist/lib/parse-table/slr/index.d.ts.map +1 -0
- package/dist/lib/parse-table/slr/index.js +3 -0
- package/dist/lib/parse-table/slr/index.js.map +1 -0
- package/dist/lib/parse-table/slr/parse-action.d.ts +3 -0
- package/dist/lib/parse-table/slr/parse-action.d.ts.map +1 -0
- package/dist/lib/parse-table/slr/parse-action.js +2 -0
- package/dist/lib/parse-table/slr/parse-action.js.map +1 -0
- package/dist/lib/parse-table/slr/slr-table.d.ts +14 -0
- package/dist/lib/parse-table/slr/slr-table.d.ts.map +1 -0
- package/dist/lib/parse-table/slr/slr-table.js +14 -0
- package/dist/lib/parse-table/slr/slr-table.js.map +1 -0
- package/dist/lib/parse-table/table/index.d.ts +5 -0
- package/dist/lib/parse-table/table/index.d.ts.map +1 -0
- package/dist/lib/parse-table/table/index.js +4 -0
- package/dist/lib/parse-table/table/index.js.map +1 -0
- package/dist/lib/parse-table/table/lr-parse-table.d.ts +92 -0
- package/dist/lib/parse-table/table/lr-parse-table.d.ts.map +1 -0
- package/dist/lib/parse-table/table/lr-parse-table.js +144 -0
- package/dist/lib/parse-table/table/lr-parse-table.js.map +1 -0
- package/dist/lib/parse-table/table/parse-action.d.ts +47 -0
- package/dist/lib/parse-table/table/parse-action.d.ts.map +1 -0
- package/dist/lib/parse-table/table/parse-action.js +49 -0
- package/dist/lib/parse-table/table/parse-action.js.map +1 -0
- package/dist/lib/parse-table/table/table-builder-base.d.ts +63 -0
- package/dist/lib/parse-table/table/table-builder-base.d.ts.map +1 -0
- package/dist/lib/parse-table/table/table-builder-base.js +129 -0
- package/dist/lib/parse-table/table/table-builder-base.js.map +1 -0
- package/dist/lib/parse-table/token-inventory.d.ts +9 -0
- package/dist/lib/parse-table/token-inventory.d.ts.map +1 -0
- package/dist/lib/parse-table/token-inventory.js +15 -0
- package/dist/lib/parse-table/token-inventory.js.map +1 -0
- package/dist/lib/parser-lr.d.ts +96 -2
- package/dist/lib/parser-lr.d.ts.map +1 -1
- package/dist/lib/parser-lr.js +130 -2
- package/dist/lib/parser-lr.js.map +1 -1
- package/dist/lib/shift-reduce/index.d.ts +3 -0
- package/dist/lib/shift-reduce/index.d.ts.map +1 -0
- package/dist/lib/shift-reduce/index.js +2 -0
- package/dist/lib/shift-reduce/index.js.map +1 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.d.ts +82 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.d.ts.map +1 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.js +204 -0
- package/dist/lib/shift-reduce/shift-reduce-engine.js.map +1 -0
- package/dist/lib/transform/binding-map.d.ts +32 -0
- package/dist/lib/transform/binding-map.d.ts.map +1 -0
- package/dist/lib/transform/binding-map.js +59 -0
- package/dist/lib/transform/binding-map.js.map +1 -0
- package/dist/lib/transform/cst-transformer.d.ts +158 -0
- package/dist/lib/transform/cst-transformer.d.ts.map +1 -0
- package/dist/lib/transform/cst-transformer.js +381 -0
- package/dist/lib/transform/cst-transformer.js.map +1 -0
- package/dist/lib/transform/index.d.ts +4 -0
- package/dist/lib/transform/index.d.ts.map +1 -0
- package/dist/lib/transform/index.js +3 -0
- package/dist/lib/transform/index.js.map +1 -0
- package/docs/grammar.md +170 -0
- package/package.json +12 -4
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Grammar } from '../grammar/grammar.js';
|
|
2
|
+
import type { TokenRule } from '../grammar/token-rule.js';
|
|
3
|
+
import type { LrAlgorithm } from './lr-algorithm.js';
|
|
4
|
+
import { type ParseTableActionJson, type ParseTableGotoJson, type ParseTableProductionJson } from './parse-table-json.js';
|
|
5
|
+
import type { ParseAction } from './table/parse-action.js';
|
|
6
|
+
/** Current on-disk JSON schema version for lexer-only parse tables. */
|
|
7
|
+
export declare const PARSE_TABLE_VERSION = 1;
|
|
8
|
+
/** JSON schema version for full LR parse tables. */
|
|
9
|
+
export declare const PARSE_TABLE_VERSION_FULL = 2;
|
|
10
|
+
/**
|
|
11
|
+
* Serialized parse table payload written to JSON.
|
|
12
|
+
*/
|
|
13
|
+
export interface ParseTableJson {
|
|
14
|
+
readonly version: typeof PARSE_TABLE_VERSION | typeof PARSE_TABLE_VERSION_FULL;
|
|
15
|
+
readonly algorithm: LrAlgorithm;
|
|
16
|
+
readonly grammarName: string;
|
|
17
|
+
readonly startSymbol: string;
|
|
18
|
+
readonly tokens: readonly string[];
|
|
19
|
+
readonly tokenRules: readonly TokenRule[];
|
|
20
|
+
readonly skipRules: readonly TokenRule[];
|
|
21
|
+
readonly states: readonly string[];
|
|
22
|
+
readonly parserStateCount?: number;
|
|
23
|
+
readonly productions?: readonly ParseTableProductionJson[];
|
|
24
|
+
readonly actions?: readonly ParseTableActionJson[];
|
|
25
|
+
readonly gotos?: readonly ParseTableGotoJson[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* LR parse table metadata, including lexer inventory and parser table entries.
|
|
29
|
+
*/
|
|
30
|
+
export declare class ParseTable {
|
|
31
|
+
readonly grammarName: string;
|
|
32
|
+
readonly startSymbol: string;
|
|
33
|
+
readonly tokens: readonly string[];
|
|
34
|
+
readonly tokenRules: readonly TokenRule[];
|
|
35
|
+
readonly skipRules: readonly TokenRule[];
|
|
36
|
+
readonly states: readonly string[];
|
|
37
|
+
readonly algorithm: LrAlgorithm;
|
|
38
|
+
readonly parserStateCount: number;
|
|
39
|
+
private readonly actionByState;
|
|
40
|
+
private readonly gotoByState;
|
|
41
|
+
private readonly productionById;
|
|
42
|
+
/**
|
|
43
|
+
* Creates a parse table from its serialized fields.
|
|
44
|
+
*
|
|
45
|
+
* @param grammarName - Grammar name from the `name` declaration.
|
|
46
|
+
* @param startSymbol - Entry production from the `start` declaration.
|
|
47
|
+
* @param tokens - Ordered token rule names from the grammar `tokens` section.
|
|
48
|
+
* @param tokenRules - Lexer token definitions.
|
|
49
|
+
* @param skipRules - Lexer skip definitions.
|
|
50
|
+
* @param states - Lexer state names from the `states` section.
|
|
51
|
+
* @param algorithm - LR algorithm used to build the table.
|
|
52
|
+
* @param parserStateCount - Number of parser states, or zero when absent.
|
|
53
|
+
* @param productions - Flat BNF production metadata for reduce actions.
|
|
54
|
+
* @param actions - ACTION entries keyed by state and terminal symbol.
|
|
55
|
+
* @param gotos - GOTO entries keyed by state and non-terminal name.
|
|
56
|
+
*/
|
|
57
|
+
constructor(grammarName: string, startSymbol: string, tokens: readonly string[], tokenRules: readonly TokenRule[], skipRules: readonly TokenRule[], states: readonly string[], algorithm: LrAlgorithm, parserStateCount?: number, productions?: readonly ParseTableProductionJson[], actions?: ReadonlyMap<number, ReadonlyMap<string, ParseAction>>, gotos?: ReadonlyMap<number, ReadonlyMap<string, number>>);
|
|
58
|
+
/**
|
|
59
|
+
* Whether the table includes parser ACTION/GOTO entries.
|
|
60
|
+
*/
|
|
61
|
+
get hasParserTable(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Builds a parse table from a parsed grammar.
|
|
64
|
+
*
|
|
65
|
+
* @param grammar - Parsed `.grammar` file model.
|
|
66
|
+
* @param algorithm - LR algorithm used to build the table.
|
|
67
|
+
* @returns A parse table ready for serialization or parsing.
|
|
68
|
+
*/
|
|
69
|
+
static fromGrammar(grammar: Grammar, algorithm?: LrAlgorithm): ParseTable;
|
|
70
|
+
/**
|
|
71
|
+
* Restores a parse table from serialized JSON.
|
|
72
|
+
*
|
|
73
|
+
* @param json - Parsed table JSON object.
|
|
74
|
+
* @returns A parse table instance.
|
|
75
|
+
*/
|
|
76
|
+
static fromJson(json: ParseTableJson): ParseTable;
|
|
77
|
+
/**
|
|
78
|
+
* Parses a parse table from a JSON string.
|
|
79
|
+
*
|
|
80
|
+
* @param json - Serialized table JSON.
|
|
81
|
+
* @returns A parse table instance.
|
|
82
|
+
*/
|
|
83
|
+
static fromJsonString(json: string): ParseTable;
|
|
84
|
+
/**
|
|
85
|
+
* Serializes the parse table to a JSON string.
|
|
86
|
+
*
|
|
87
|
+
* @returns Pretty-printed JSON including lexer and parser table data.
|
|
88
|
+
*/
|
|
89
|
+
toJsonString(): string;
|
|
90
|
+
/**
|
|
91
|
+
* Converts the parse table to a plain JSON-serializable object.
|
|
92
|
+
*
|
|
93
|
+
* @returns Table metadata, token inventory, and parser table entries when present.
|
|
94
|
+
*/
|
|
95
|
+
toJson(): ParseTableJson;
|
|
96
|
+
/**
|
|
97
|
+
* Builds a grammar containing lexer metadata from this table.
|
|
98
|
+
*
|
|
99
|
+
* @returns A grammar suitable for lexing; productions are empty.
|
|
100
|
+
*/
|
|
101
|
+
toGrammar(): Grammar;
|
|
102
|
+
/**
|
|
103
|
+
* Returns the ACTION entry for a parser state and terminal symbol key.
|
|
104
|
+
*
|
|
105
|
+
* @param state - Parser state index.
|
|
106
|
+
* @param symbol - Encoded terminal or `$eof` key.
|
|
107
|
+
*/
|
|
108
|
+
action(state: number, symbol: string): ParseAction | null;
|
|
109
|
+
/**
|
|
110
|
+
* Returns the GOTO state for a parser state and non-terminal name.
|
|
111
|
+
*
|
|
112
|
+
* @param state - Parser state index.
|
|
113
|
+
* @param nonTerminal - Non-terminal symbol name.
|
|
114
|
+
*/
|
|
115
|
+
goto(state: number, nonTerminal: string): number | null;
|
|
116
|
+
/**
|
|
117
|
+
* Returns production metadata referenced by a reduce action.
|
|
118
|
+
*
|
|
119
|
+
* @param productionId - Production id from a reduce action.
|
|
120
|
+
*/
|
|
121
|
+
production(productionId: number): ParseTableProductionJson | null;
|
|
122
|
+
/**
|
|
123
|
+
* Creates a {@link ParseTable} from a built LR table and source grammar.
|
|
124
|
+
*
|
|
125
|
+
* @param grammar - Parsed `.grammar` file model.
|
|
126
|
+
* @param lrTable - Conflict-free LR parse table.
|
|
127
|
+
*/
|
|
128
|
+
private static fromLrParseTable;
|
|
129
|
+
/**
|
|
130
|
+
* Converts ACTION maps into JSON rows.
|
|
131
|
+
*
|
|
132
|
+
* @param actions - ACTION entries keyed by state and terminal symbol.
|
|
133
|
+
*/
|
|
134
|
+
private static actionsToJson;
|
|
135
|
+
/**
|
|
136
|
+
* Converts GOTO maps into JSON rows.
|
|
137
|
+
*
|
|
138
|
+
* @param gotos - GOTO entries keyed by state and non-terminal name.
|
|
139
|
+
*/
|
|
140
|
+
private static gotosToJson;
|
|
141
|
+
/**
|
|
142
|
+
* Restores ACTION maps from JSON rows.
|
|
143
|
+
*
|
|
144
|
+
* @param rows - Serialized ACTION rows.
|
|
145
|
+
*/
|
|
146
|
+
private static actionsFromJson;
|
|
147
|
+
/**
|
|
148
|
+
* Restores GOTO maps from JSON rows.
|
|
149
|
+
*
|
|
150
|
+
* @param rows - Serialized GOTO rows.
|
|
151
|
+
*/
|
|
152
|
+
private static gotosFromJson;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=parse-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-table.d.ts","sourceRoot":"","sources":["../../../src/lib/parse-table/parse-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { Grammar } from '../grammar/grammar.js';
|
|
2
|
+
import { desugarEbnf } from './bnf/desugar-ebnf.js';
|
|
3
|
+
import { buildLrTable } from './build-lr-table.js';
|
|
4
|
+
import { ParseTableBuildError } from './parse-table-build-error.js';
|
|
5
|
+
import { ParseTableError } from './parse-table-error.js';
|
|
6
|
+
import { isParseTableJsonV2, } from './parse-table-json.js';
|
|
7
|
+
import { encodeProductionRhs, formatLrConflicts, } from './table/lr-parse-table.js';
|
|
8
|
+
import { tokenInventory } from './token-inventory.js';
|
|
9
|
+
/** Current on-disk JSON schema version for lexer-only parse tables. */
|
|
10
|
+
export const PARSE_TABLE_VERSION = 1;
|
|
11
|
+
/** JSON schema version for full LR parse tables. */
|
|
12
|
+
export const PARSE_TABLE_VERSION_FULL = 2;
|
|
13
|
+
/**
|
|
14
|
+
* LR parse table metadata, including lexer inventory and parser table entries.
|
|
15
|
+
*/
|
|
16
|
+
export class ParseTable {
|
|
17
|
+
grammarName;
|
|
18
|
+
startSymbol;
|
|
19
|
+
tokens;
|
|
20
|
+
tokenRules;
|
|
21
|
+
skipRules;
|
|
22
|
+
states;
|
|
23
|
+
algorithm;
|
|
24
|
+
parserStateCount;
|
|
25
|
+
actionByState;
|
|
26
|
+
gotoByState;
|
|
27
|
+
productionById;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a parse table from its serialized fields.
|
|
30
|
+
*
|
|
31
|
+
* @param grammarName - Grammar name from the `name` declaration.
|
|
32
|
+
* @param startSymbol - Entry production from the `start` declaration.
|
|
33
|
+
* @param tokens - Ordered token rule names from the grammar `tokens` section.
|
|
34
|
+
* @param tokenRules - Lexer token definitions.
|
|
35
|
+
* @param skipRules - Lexer skip definitions.
|
|
36
|
+
* @param states - Lexer state names from the `states` section.
|
|
37
|
+
* @param algorithm - LR algorithm used to build the table.
|
|
38
|
+
* @param parserStateCount - Number of parser states, or zero when absent.
|
|
39
|
+
* @param productions - Flat BNF production metadata for reduce actions.
|
|
40
|
+
* @param actions - ACTION entries keyed by state and terminal symbol.
|
|
41
|
+
* @param gotos - GOTO entries keyed by state and non-terminal name.
|
|
42
|
+
*/
|
|
43
|
+
constructor(grammarName, startSymbol, tokens, tokenRules, skipRules, states, algorithm, parserStateCount = 0, productions = [], actions = new Map(), gotos = new Map()) {
|
|
44
|
+
this.grammarName = grammarName;
|
|
45
|
+
this.startSymbol = startSymbol;
|
|
46
|
+
this.tokens = tokens;
|
|
47
|
+
this.tokenRules = tokenRules;
|
|
48
|
+
this.skipRules = skipRules;
|
|
49
|
+
this.states = states;
|
|
50
|
+
this.algorithm = algorithm;
|
|
51
|
+
this.parserStateCount = parserStateCount;
|
|
52
|
+
this.actionByState = actions;
|
|
53
|
+
this.gotoByState = gotos;
|
|
54
|
+
const productionById = new Map();
|
|
55
|
+
for (const production of productions) {
|
|
56
|
+
productionById.set(production.id, production);
|
|
57
|
+
}
|
|
58
|
+
this.productionById = productionById;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Whether the table includes parser ACTION/GOTO entries.
|
|
62
|
+
*/
|
|
63
|
+
get hasParserTable() {
|
|
64
|
+
return this.parserStateCount > 0 || this.actionByState.size > 0;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Builds a parse table from a parsed grammar.
|
|
68
|
+
*
|
|
69
|
+
* @param grammar - Parsed `.grammar` file model.
|
|
70
|
+
* @param algorithm - LR algorithm used to build the table.
|
|
71
|
+
* @returns A parse table ready for serialization or parsing.
|
|
72
|
+
*/
|
|
73
|
+
static fromGrammar(grammar, algorithm = 'lr1') {
|
|
74
|
+
const bnf = desugarEbnf(grammar);
|
|
75
|
+
const lrTable = buildLrTable(bnf, algorithm);
|
|
76
|
+
if (!lrTable.isConflictFree) {
|
|
77
|
+
throw new ParseTableBuildError(algorithm, formatLrConflicts(lrTable));
|
|
78
|
+
}
|
|
79
|
+
return ParseTable.fromLrParseTable(grammar, lrTable);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Restores a parse table from serialized JSON.
|
|
83
|
+
*
|
|
84
|
+
* @param json - Parsed table JSON object.
|
|
85
|
+
* @returns A parse table instance.
|
|
86
|
+
*/
|
|
87
|
+
static fromJson(json) {
|
|
88
|
+
if (json.version !== PARSE_TABLE_VERSION && json.version !== PARSE_TABLE_VERSION_FULL) {
|
|
89
|
+
throw new ParseTableError(`Unsupported parse table version ${String(json.version)}; `
|
|
90
|
+
+ `expected ${PARSE_TABLE_VERSION} or ${PARSE_TABLE_VERSION_FULL}`);
|
|
91
|
+
}
|
|
92
|
+
if (!isParseTableJsonV2(json)) {
|
|
93
|
+
return new ParseTable(json.grammarName, json.startSymbol, [...json.tokens], [...json.tokenRules], [...json.skipRules], [...json.states], json.algorithm);
|
|
94
|
+
}
|
|
95
|
+
return new ParseTable(json.grammarName, json.startSymbol, [...json.tokens], [...json.tokenRules], [...json.skipRules], [...json.states], json.algorithm, json.parserStateCount, [...json.productions], ParseTable.actionsFromJson(json.actions), ParseTable.gotosFromJson(json.gotos));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Parses a parse table from a JSON string.
|
|
99
|
+
*
|
|
100
|
+
* @param json - Serialized table JSON.
|
|
101
|
+
* @returns A parse table instance.
|
|
102
|
+
*/
|
|
103
|
+
static fromJsonString(json) {
|
|
104
|
+
let parsed;
|
|
105
|
+
try {
|
|
106
|
+
parsed = JSON.parse(json);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
const message = error instanceof Error ? error.message : 'Invalid JSON';
|
|
110
|
+
throw new ParseTableError(`Invalid parse table JSON: ${message}`);
|
|
111
|
+
}
|
|
112
|
+
return ParseTable.fromJson(parsed);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Serializes the parse table to a JSON string.
|
|
116
|
+
*
|
|
117
|
+
* @returns Pretty-printed JSON including lexer and parser table data.
|
|
118
|
+
*/
|
|
119
|
+
toJsonString() {
|
|
120
|
+
return JSON.stringify(this.toJson(), null, 4);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Converts the parse table to a plain JSON-serializable object.
|
|
124
|
+
*
|
|
125
|
+
* @returns Table metadata, token inventory, and parser table entries when present.
|
|
126
|
+
*/
|
|
127
|
+
toJson() {
|
|
128
|
+
if (!this.hasParserTable) {
|
|
129
|
+
return {
|
|
130
|
+
version: PARSE_TABLE_VERSION,
|
|
131
|
+
algorithm: this.algorithm,
|
|
132
|
+
grammarName: this.grammarName,
|
|
133
|
+
startSymbol: this.startSymbol,
|
|
134
|
+
tokens: [...this.tokens],
|
|
135
|
+
tokenRules: [...this.tokenRules],
|
|
136
|
+
skipRules: [...this.skipRules],
|
|
137
|
+
states: [...this.states],
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const json = {
|
|
141
|
+
version: PARSE_TABLE_VERSION_FULL,
|
|
142
|
+
algorithm: this.algorithm,
|
|
143
|
+
grammarName: this.grammarName,
|
|
144
|
+
startSymbol: this.startSymbol,
|
|
145
|
+
tokens: [...this.tokens],
|
|
146
|
+
tokenRules: [...this.tokenRules],
|
|
147
|
+
skipRules: [...this.skipRules],
|
|
148
|
+
states: [...this.states],
|
|
149
|
+
parserStateCount: this.parserStateCount,
|
|
150
|
+
productions: [...this.productionById.values()].sort((left, right) => left.id - right.id),
|
|
151
|
+
actions: ParseTable.actionsToJson(this.actionByState),
|
|
152
|
+
gotos: ParseTable.gotosToJson(this.gotoByState),
|
|
153
|
+
};
|
|
154
|
+
return json;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Builds a grammar containing lexer metadata from this table.
|
|
158
|
+
*
|
|
159
|
+
* @returns A grammar suitable for lexing; productions are empty.
|
|
160
|
+
*/
|
|
161
|
+
toGrammar() {
|
|
162
|
+
return new Grammar(this.grammarName, this.tokenRules, this.skipRules, this.states, this.startSymbol, []);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Returns the ACTION entry for a parser state and terminal symbol key.
|
|
166
|
+
*
|
|
167
|
+
* @param state - Parser state index.
|
|
168
|
+
* @param symbol - Encoded terminal or `$eof` key.
|
|
169
|
+
*/
|
|
170
|
+
action(state, symbol) {
|
|
171
|
+
return this.actionByState.get(state)?.get(symbol) ?? null;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Returns the GOTO state for a parser state and non-terminal name.
|
|
175
|
+
*
|
|
176
|
+
* @param state - Parser state index.
|
|
177
|
+
* @param nonTerminal - Non-terminal symbol name.
|
|
178
|
+
*/
|
|
179
|
+
goto(state, nonTerminal) {
|
|
180
|
+
return this.gotoByState.get(state)?.get(nonTerminal) ?? null;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Returns production metadata referenced by a reduce action.
|
|
184
|
+
*
|
|
185
|
+
* @param productionId - Production id from a reduce action.
|
|
186
|
+
*/
|
|
187
|
+
production(productionId) {
|
|
188
|
+
return this.productionById.get(productionId) ?? null;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Creates a {@link ParseTable} from a built LR table and source grammar.
|
|
192
|
+
*
|
|
193
|
+
* @param grammar - Parsed `.grammar` file model.
|
|
194
|
+
* @param lrTable - Conflict-free LR parse table.
|
|
195
|
+
*/
|
|
196
|
+
static fromLrParseTable(grammar, lrTable) {
|
|
197
|
+
const productions = lrTable.productions.map((production) => ({
|
|
198
|
+
id: production.id,
|
|
199
|
+
name: production.name,
|
|
200
|
+
rhs: encodeProductionRhs(production),
|
|
201
|
+
variant: production.variant,
|
|
202
|
+
origin: production.origin,
|
|
203
|
+
}));
|
|
204
|
+
return new ParseTable(grammar.name, grammar.startSymbol, tokenInventory(grammar), [...grammar.tokenRules], [...grammar.skipRules], [...grammar.states], lrTable.algorithm, lrTable.stateCount, productions, lrTable.actions, lrTable.gotos);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Converts ACTION maps into JSON rows.
|
|
208
|
+
*
|
|
209
|
+
* @param actions - ACTION entries keyed by state and terminal symbol.
|
|
210
|
+
*/
|
|
211
|
+
static actionsToJson(actions) {
|
|
212
|
+
const rows = [];
|
|
213
|
+
for (const [state, stateActions] of actions.entries()) {
|
|
214
|
+
for (const [symbol, action] of stateActions.entries()) {
|
|
215
|
+
switch (action.kind) {
|
|
216
|
+
case 'shift':
|
|
217
|
+
rows.push({
|
|
218
|
+
state,
|
|
219
|
+
symbol,
|
|
220
|
+
kind: 'shift',
|
|
221
|
+
target: action.state,
|
|
222
|
+
});
|
|
223
|
+
break;
|
|
224
|
+
case 'reduce':
|
|
225
|
+
rows.push({
|
|
226
|
+
state,
|
|
227
|
+
symbol,
|
|
228
|
+
kind: 'reduce',
|
|
229
|
+
productionId: action.productionId,
|
|
230
|
+
});
|
|
231
|
+
break;
|
|
232
|
+
case 'accept':
|
|
233
|
+
rows.push({
|
|
234
|
+
state,
|
|
235
|
+
symbol,
|
|
236
|
+
kind: 'accept',
|
|
237
|
+
});
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return rows.sort((left, right) => {
|
|
243
|
+
if (left.state !== right.state) {
|
|
244
|
+
return left.state - right.state;
|
|
245
|
+
}
|
|
246
|
+
return left.symbol.localeCompare(right.symbol);
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Converts GOTO maps into JSON rows.
|
|
251
|
+
*
|
|
252
|
+
* @param gotos - GOTO entries keyed by state and non-terminal name.
|
|
253
|
+
*/
|
|
254
|
+
static gotosToJson(gotos) {
|
|
255
|
+
const rows = [];
|
|
256
|
+
for (const [state, stateGotos] of gotos.entries()) {
|
|
257
|
+
for (const [symbol, target] of stateGotos.entries()) {
|
|
258
|
+
rows.push({ state, symbol, target });
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return rows.sort((left, right) => {
|
|
262
|
+
if (left.state !== right.state) {
|
|
263
|
+
return left.state - right.state;
|
|
264
|
+
}
|
|
265
|
+
return left.symbol.localeCompare(right.symbol);
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Restores ACTION maps from JSON rows.
|
|
270
|
+
*
|
|
271
|
+
* @param rows - Serialized ACTION rows.
|
|
272
|
+
*/
|
|
273
|
+
static actionsFromJson(rows) {
|
|
274
|
+
const actions = new Map();
|
|
275
|
+
for (const row of rows) {
|
|
276
|
+
const stateActions = actions.get(row.state) ?? new Map();
|
|
277
|
+
switch (row.kind) {
|
|
278
|
+
case 'shift':
|
|
279
|
+
if (row.target !== undefined) {
|
|
280
|
+
stateActions.set(row.symbol, { kind: 'shift', state: row.target });
|
|
281
|
+
}
|
|
282
|
+
break;
|
|
283
|
+
case 'reduce':
|
|
284
|
+
if (row.productionId !== undefined) {
|
|
285
|
+
stateActions.set(row.symbol, {
|
|
286
|
+
kind: 'reduce',
|
|
287
|
+
productionId: row.productionId,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
break;
|
|
291
|
+
case 'accept':
|
|
292
|
+
stateActions.set(row.symbol, { kind: 'accept' });
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
actions.set(row.state, stateActions);
|
|
296
|
+
}
|
|
297
|
+
return actions;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Restores GOTO maps from JSON rows.
|
|
301
|
+
*
|
|
302
|
+
* @param rows - Serialized GOTO rows.
|
|
303
|
+
*/
|
|
304
|
+
static gotosFromJson(rows) {
|
|
305
|
+
const gotos = new Map();
|
|
306
|
+
for (const row of rows) {
|
|
307
|
+
const stateGotos = gotos.get(row.state) ?? new Map();
|
|
308
|
+
stateGotos.set(row.symbol, row.target);
|
|
309
|
+
gotos.set(row.state, stateGotos);
|
|
310
|
+
}
|
|
311
|
+
return gotos;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=parse-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-table.js","sourceRoot":"","sources":["../../../src/lib/parse-table/parse-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACH,kBAAkB,GAKrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACH,mBAAmB,EACnB,iBAAiB,GAEpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,uEAAuE;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,oDAAoD;AACpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAqB1C;;GAEG;AACH,MAAM,OAAO,UAAU;IAsBC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IA3BH,aAAa,CAAwD;IACrE,WAAW,CAAmD;IAC9D,cAAc,CAAgD;IAE/E;;;;;;;;;;;;;;OAcG;IACH,YACoB,WAAmB,EACnB,WAAmB,EACnB,MAAyB,EACzB,UAAgC,EAChC,SAA+B,EAC/B,MAAyB,EACzB,SAAsB,EACtB,mBAA2B,CAAC,EAC5C,cAAmD,EAAE,EACrD,UAAiE,IAAI,GAAG,EAAE,EAC1E,QAA0D,IAAI,GAAG,EAAE;QAVnD,gBAAW,GAAX,WAAW,CAAQ;QACnB,gBAAW,GAAX,WAAW,CAAQ;QACnB,WAAM,GAAN,MAAM,CAAmB;QACzB,eAAU,GAAV,UAAU,CAAsB;QAChC,cAAS,GAAT,SAAS,CAAsB;QAC/B,WAAM,GAAN,MAAM,CAAmB;QACzB,cAAS,GAAT,SAAS,CAAa;QACtB,qBAAgB,GAAhB,gBAAgB,CAAY;QAM5C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoC,CAAC;QAEnE,KAAK,MAAM,UAAU,IAAI,WAAW,EACpC,CAAC;YACG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QAErB,OAAO,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,WAAW,CACrB,OAAgB,EAChB,YAAyB,KAAK;QAG9B,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAE7C,IAAI,CAAC,OAAO,CAAC,cAAc,EAC3B,CAAC;YACG,MAAM,IAAI,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,QAAQ,CAAC,IAAoB;QAEvC,IAAI,IAAI,CAAC,OAAO,KAAK,mBAAmB,IAAI,IAAI,CAAC,OAAO,KAAK,wBAAwB,EACrF,CAAC;YACG,MAAM,IAAI,eAAe,CACrB,mCAAmC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;kBACzD,YAAY,mBAAmB,OAAO,wBAAwB,EAAE,CACrE,CAAC;QACN,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAC7B,CAAC;YACG,OAAO,IAAI,UAAU,CACjB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAChB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EACpB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EACnB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAChB,IAAI,CAAC,SAAS,CACjB,CAAC;QACN,CAAC;QAED,OAAO,IAAI,UAAU,CACjB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAChB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EACpB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EACnB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAChB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,gBAAgB,EACrB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EACrB,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EACxC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CACvC,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,cAAc,CAAC,IAAY;QAErC,IAAI,MAAe,CAAC;QAEpB,IACA,CAAC;YACG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,KAAK,EACZ,CAAC;YACG,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;YAExE,MAAM,IAAI,eAAe,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAwB,CAAC,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACI,YAAY;QAEf,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACI,MAAM;QAET,IAAI,CAAC,IAAI,CAAC,cAAc,EACxB,CAAC;YACG,OAAO;gBACH,OAAO,EAAE,mBAAmB;gBAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBACxB,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;gBAChC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3B,CAAC;QACN,CAAC;QAED,MAAM,IAAI,GAAqB;YAC3B,OAAO,EAAE,wBAAwB;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YAChC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9B,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACxF,OAAO,EAAE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;YACrD,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;SAClD,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,SAAS;QAEZ,OAAO,IAAI,OAAO,CACd,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,EAAE,CACL,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAa,EAAE,MAAc;QAEvC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC9D,CAAC;IAED;;;;;OAKG;IACI,IAAI,CAAC,KAAa,EAAE,WAAmB;QAE1C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,YAAoB;QAElC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,gBAAgB,CAAC,OAAgB,EAAE,OAAqB;QAEnE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACzD,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,GAAG,EAAE,mBAAmB,CAAC,UAAU,CAAC;YACpC,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC5B,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,UAAU,CACjB,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,WAAW,EACnB,cAAc,CAAC,OAAO,CAAC,EACvB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,EACvB,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,EACtB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EACnB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,UAAU,EAClB,WAAW,EACX,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,KAAK,CAChB,CAAC;IACN,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,aAAa,CACxB,OAA8D;QAG9D,MAAM,IAAI,GAA2B,EAAE,CAAC;QAExC,KAAK,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EACrD,CAAC;YACG,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EACrD,CAAC;gBACG,QAAQ,MAAM,CAAC,IAAI,EACnB,CAAC;oBACG,KAAK,OAAO;wBACR,IAAI,CAAC,IAAI,CAAC;4BACN,KAAK;4BACL,MAAM;4BACN,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,MAAM,CAAC,KAAK;yBACvB,CAAC,CAAC;wBACH,MAAM;oBAEV,KAAK,QAAQ;wBACT,IAAI,CAAC,IAAI,CAAC;4BACN,KAAK;4BACL,MAAM;4BACN,IAAI,EAAE,QAAQ;4BACd,YAAY,EAAE,MAAM,CAAC,YAAY;yBACpC,CAAC,CAAC;wBACH,MAAM;oBAEV,KAAK,QAAQ;wBACT,IAAI,CAAC,IAAI,CAAC;4BACN,KAAK;4BACL,MAAM;4BACN,IAAI,EAAE,QAAQ;yBACjB,CAAC,CAAC;wBACH,MAAM;gBACd,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAE7B,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAC9B,CAAC;gBACG,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACpC,CAAC;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,WAAW,CACtB,KAAuD;QAGvD,MAAM,IAAI,GAAyB,EAAE,CAAC;QAEtC,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EACjD,CAAC;YACG,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EACnD,CAAC;gBACG,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAE7B,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAC9B,CAAC;gBACG,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACpC,CAAC;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,eAAe,CAC1B,IAAqC;QAGrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoC,CAAC;QAE5D,KAAK,MAAM,GAAG,IAAI,IAAI,EACtB,CAAC;YACG,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAuB,CAAC;YAE9E,QAAQ,GAAG,CAAC,IAAI,EAChB,CAAC;gBACG,KAAK,OAAO;oBACR,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAC5B,CAAC;wBACG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;oBACvE,CAAC;oBACD,MAAM;gBAEV,KAAK,QAAQ;oBACT,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAClC,CAAC;wBACG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE;4BACzB,IAAI,EAAE,QAAQ;4BACd,YAAY,EAAE,GAAG,CAAC,YAAY;yBACjC,CAAC,CAAC;oBACP,CAAC;oBACD,MAAM;gBAEV,KAAK,QAAQ;oBACT,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACjD,MAAM;YACd,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,aAAa,CACxB,IAAmC;QAGnC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;QAErD,KAAK,MAAM,GAAG,IAAI,IAAI,EACtB,CAAC;YACG,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAkB,CAAC;YACrE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACvC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { classifyParseConflict, formatParseAction, parseActionsEqual, } from './parse-action.js';
|
|
2
|
+
export type { ParseAction, ParseConflict, ParseConflictKind } from './parse-action.js';
|
|
3
|
+
export { buildSlrTable, formatSlrActions, formatSlrConflicts, formatSlrGotos, SlrTable, } from './slr-table.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/slr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EACH,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,QAAQ,GACX,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/slr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACH,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GAEjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-action.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/slr/parse-action.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-action.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/slr/parse-action.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { BnfGrammar } from '../bnf/bnf-grammar.js';
|
|
2
|
+
import { formatLrActions, formatLrConflicts, formatLrGotos, LrParseTable } from '../table/lr-parse-table.js';
|
|
3
|
+
/** SLR parse tables use the shared {@link LrParseTable} representation. */
|
|
4
|
+
export type SlrTable = LrParseTable;
|
|
5
|
+
/**
|
|
6
|
+
* Builds an SLR table from a plain BNF grammar, augmenting it automatically.
|
|
7
|
+
*
|
|
8
|
+
* @param grammar - Plain BNF grammar to analyze.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildSlrTable(grammar: BnfGrammar): SlrTable;
|
|
11
|
+
export { formatLrActions as formatSlrActions };
|
|
12
|
+
export { formatLrConflicts as formatSlrConflicts };
|
|
13
|
+
export { formatLrGotos as formatSlrGotos };
|
|
14
|
+
//# sourceMappingURL=slr-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slr-table.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/slr/slr-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACf,MAAM,4BAA4B,CAAC;AAEpC,2EAA2E;AAC3E,MAAM,MAAM,QAAQ,GAAG,YAAY,CAAC;AAEpC;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAG3D;AAED,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC;AAC/C,OAAO,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;AACnD,OAAO,EAAE,aAAa,IAAI,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { buildLrTable } from '../build-lr-table.js';
|
|
2
|
+
import { formatLrActions, formatLrConflicts, formatLrGotos, } from '../table/lr-parse-table.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds an SLR table from a plain BNF grammar, augmenting it automatically.
|
|
5
|
+
*
|
|
6
|
+
* @param grammar - Plain BNF grammar to analyze.
|
|
7
|
+
*/
|
|
8
|
+
export function buildSlrTable(grammar) {
|
|
9
|
+
return buildLrTable(grammar, 'slr');
|
|
10
|
+
}
|
|
11
|
+
export { formatLrActions as formatSlrActions };
|
|
12
|
+
export { formatLrConflicts as formatSlrConflicts };
|
|
13
|
+
export { formatLrGotos as formatSlrGotos };
|
|
14
|
+
//# sourceMappingURL=slr-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slr-table.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/slr/slr-table.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,aAAa,GAEhB,MAAM,4BAA4B,CAAC;AAKpC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAmB;IAE7C,OAAO,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC;AAC/C,OAAO,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;AACnD,OAAO,EAAE,aAAa,IAAI,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { classifyParseConflict, formatParseAction, parseActionsEqual, } from './parse-action.js';
|
|
2
|
+
export type { ParseAction, ParseConflict, ParseConflictKind } from './parse-action.js';
|
|
3
|
+
export { encodeProductionRhs, formatLrActions, formatLrConflicts, formatLrGotos, lrActionTerminalKeys, lrGotoNonTerminalNames, lrProduction, LrParseTable, } from './lr-parse-table.js';
|
|
4
|
+
export { TableBuilderBase } from './table-builder-base.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,YAAY,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { classifyParseConflict, formatParseAction, parseActionsEqual, } from './parse-action.js';
|
|
2
|
+
export { encodeProductionRhs, formatLrActions, formatLrConflicts, formatLrGotos, lrActionTerminalKeys, lrGotoNonTerminalNames, lrProduction, LrParseTable, } from './lr-parse-table.js';
|
|
3
|
+
export { TableBuilderBase } from './table-builder-base.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/parse-table/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,YAAY,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|