@scinorandex/sparse 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/generator.d.ts +4 -1
- package/dist/generator.js +47 -32
- package/dist/generator.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/meta/common.d.ts +57 -0
- package/dist/meta/common.js +62 -0
- package/dist/meta/common.js.map +1 -0
- package/dist/meta/handwritten.d.ts +12 -0
- package/dist/{grammarParser.js → meta/handwritten.js} +24 -24
- package/dist/meta/handwritten.js.map +1 -0
- package/dist/meta/selfhosted.d.ts +23 -0
- package/dist/meta/selfhosted.js +206 -0
- package/dist/meta/selfhosted.js.map +1 -0
- package/dist/meta/states.d.ts +1580 -0
- package/dist/meta/states.js +1493 -0
- package/dist/meta/states.js.map +1 -0
- package/dist/parser.d.ts +16 -5
- package/dist/parser.js +25 -7
- package/dist/parser.js.map +1 -1
- package/dist/{tableParser.d.ts → table/handwritten.d.ts} +1 -1
- package/dist/{tableParser.js → table/handwritten.js} +2 -2
- package/dist/table/handwritten.js.map +1 -0
- package/dist/table/selfhosted.d.ts +2 -0
- package/dist/table/selfhosted.js +65 -0
- package/dist/table/selfhosted.js.map +1 -0
- package/dist/table/states.d.ts +592 -0
- package/dist/table/states.js +593 -0
- package/dist/table/states.js.map +1 -0
- package/dist/utils/Result.d.ts +1 -1
- package/dist/utils/errorWindowBuilder.d.ts +1 -1
- package/example/LoLang/example.ts +14 -7
- package/example/complicated/grammar.txt +37 -0
- package/example/math/example.ts +1 -4
- package/example/selfhosted/01-meta-grammar.txt +10 -0
- package/example/selfhosted/02-table-grammar.txt +6 -0
- package/example/selfhosted/codegen-meta.ts +1489 -0
- package/example/selfhosted/codegen-table.ts +589 -0
- package/example/selfhosted/example.ts +39 -0
- package/package.json +4 -4
- package/src/cli.ts +1 -1
- package/src/generator.ts +52 -34
- package/src/index.ts +3 -2
- package/src/meta/common.ts +74 -0
- package/src/{grammarParser.ts → meta/handwritten.ts} +17 -21
- package/src/meta/selfhosted.ts +272 -0
- package/src/meta/states.ts +1489 -0
- package/src/parser.ts +53 -19
- package/src/{tableParser.ts → table/handwritten.ts} +5 -5
- package/src/table/selfhosted.ts +67 -0
- package/src/table/states.ts +589 -0
- package/src/utils/Result.ts +1 -1
- package/src/utils/errorWindowBuilder.ts +1 -1
- package/tsconfig.build.json +30 -0
- package/tsconfig.json +6 -6
- package/dist/grammarParser.d.ts +0 -27
- package/dist/grammarParser.js.map +0 -1
- package/dist/tableParser.js.map +0 -1
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildProductions = exports.tryBuildProductions = exports.getSelfHostedParserGenerator = exports.ListNode = exports.BaseNode = exports.grammarLexerGenerator = void 0;
|
|
4
|
+
const slex_1 = require("@scinorandex/slex");
|
|
5
|
+
const index_1 = require("../index");
|
|
6
|
+
const states_1 = require("./states");
|
|
7
|
+
const parser_1 = require("../parser");
|
|
8
|
+
const common_1 = require("./common");
|
|
9
|
+
exports.grammarLexerGenerator = new slex_1.Slex({
|
|
10
|
+
EOF_TYPE: common_1.GrammarTokenType.EOF,
|
|
11
|
+
isHigherPrecedence: () => false,
|
|
12
|
+
});
|
|
13
|
+
exports.grammarLexerGenerator.addRule("lowercase", "a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z");
|
|
14
|
+
exports.grammarLexerGenerator.addRule("uppercase", "A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z");
|
|
15
|
+
exports.grammarLexerGenerator.addRule("letter", "${lowercase} | ${uppercase}");
|
|
16
|
+
exports.grammarLexerGenerator.addRule("digit", "0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9");
|
|
17
|
+
exports.grammarLexerGenerator.addRule("alphanumeric", "${letter} | ${digit}");
|
|
18
|
+
exports.grammarLexerGenerator.addRule("identifier", "(${letter} | $_) (${letter} | ${digit} | $_)*", common_1.GrammarTokenType.IDENTIFIER);
|
|
19
|
+
exports.grammarLexerGenerator.addRule("colon", "$:", common_1.GrammarTokenType.COLON);
|
|
20
|
+
exports.grammarLexerGenerator.addRule("semicolon", "$;", common_1.GrammarTokenType.SEMICOLON);
|
|
21
|
+
exports.grammarLexerGenerator.addRule("langle", "$<", common_1.GrammarTokenType.L_ANGLE);
|
|
22
|
+
exports.grammarLexerGenerator.addRule("rangle", "$>", common_1.GrammarTokenType.R_ANGLE);
|
|
23
|
+
exports.grammarLexerGenerator.addRule("lbracket", "$[", common_1.GrammarTokenType.L_BRACKET);
|
|
24
|
+
exports.grammarLexerGenerator.addRule("rbracket", "$]", common_1.GrammarTokenType.R_BRACKET);
|
|
25
|
+
exports.grammarLexerGenerator.addRule("lparen", "$(", common_1.GrammarTokenType.L_PAREN);
|
|
26
|
+
exports.grammarLexerGenerator.addRule("rparen", "$)", common_1.GrammarTokenType.R_PAREN);
|
|
27
|
+
exports.grammarLexerGenerator.addRule("pipe", "$|", common_1.GrammarTokenType.PIPE);
|
|
28
|
+
exports.grammarLexerGenerator.addRule("equals", "$=", common_1.GrammarTokenType.EQUALS);
|
|
29
|
+
exports.grammarLexerGenerator.addRule("comma", "$,", common_1.GrammarTokenType.COMMA);
|
|
30
|
+
exports.grammarLexerGenerator.addRule("question_mark", "$?", common_1.GrammarTokenType.QUESTION_MARK);
|
|
31
|
+
exports.grammarLexerGenerator.addRule("number", "(${digit})+", common_1.GrammarTokenType.NUMBER);
|
|
32
|
+
class BaseNode {
|
|
33
|
+
}
|
|
34
|
+
exports.BaseNode = BaseNode;
|
|
35
|
+
class ListNode extends BaseNode {
|
|
36
|
+
constructor(items) {
|
|
37
|
+
super();
|
|
38
|
+
if (Array.isArray(items))
|
|
39
|
+
this.items = items;
|
|
40
|
+
else
|
|
41
|
+
this.items = [items];
|
|
42
|
+
}
|
|
43
|
+
add(item) {
|
|
44
|
+
this.items.push(item);
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
getItems() {
|
|
48
|
+
return this.items;
|
|
49
|
+
}
|
|
50
|
+
getItemsReversed() {
|
|
51
|
+
return this.items.toReversed();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.ListNode = ListNode;
|
|
55
|
+
class ProductionNode extends BaseNode {
|
|
56
|
+
constructor(lhs, rhs, originalProductionIndex, name) {
|
|
57
|
+
super();
|
|
58
|
+
this.lhs = lhs;
|
|
59
|
+
this.rhs = rhs;
|
|
60
|
+
this.originalProductionIndex = originalProductionIndex;
|
|
61
|
+
this.name = name;
|
|
62
|
+
}
|
|
63
|
+
toStruct() {
|
|
64
|
+
var _a;
|
|
65
|
+
if (this.originalProductionIndex === -1)
|
|
66
|
+
throw new Error("ProductionNode has no originalProductionIndex");
|
|
67
|
+
const hasGrouped = this.rhs.getItemsReversed().some((node) => node instanceof GroupedTokenNode);
|
|
68
|
+
if (hasGrouped)
|
|
69
|
+
throw new Error("Need to unroll before serializing");
|
|
70
|
+
return {
|
|
71
|
+
lhs: this.lhs,
|
|
72
|
+
identifier: `<${this.lhs.lexeme}>`,
|
|
73
|
+
name: (_a = this.name) !== null && _a !== void 0 ? _a : null,
|
|
74
|
+
originalProductionIndex: this.originalProductionIndex,
|
|
75
|
+
rhs: this.rhs.getItemsReversed().map((node) => node.toStruct()),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
setOriginalProductionIndex(index) {
|
|
79
|
+
this.originalProductionIndex = index;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function expandProduction(production) {
|
|
83
|
+
const rhs = production.rhs.getItemsReversed();
|
|
84
|
+
for (let i = 0; i < rhs.length; i++) {
|
|
85
|
+
const item = rhs[i];
|
|
86
|
+
const beforeItems = rhs.slice(0, i);
|
|
87
|
+
const afterItems = rhs.slice(i + 1);
|
|
88
|
+
if (item instanceof GroupedTokenNode) {
|
|
89
|
+
const withoutCurrentItem = new ProductionNode(production.lhs, new ListNode([...beforeItems, ...afterItems].toReversed()), production.originalProductionIndex, production.name);
|
|
90
|
+
const withCurrentItem = new ProductionNode(production.lhs, new ListNode([...beforeItems, ...item.inside.getItemsReversed(), ...afterItems].toReversed()), production.originalProductionIndex, production.name);
|
|
91
|
+
const newProductions = [withoutCurrentItem, withCurrentItem];
|
|
92
|
+
return newProductions.flatMap((prod) => expandProduction(prod));
|
|
93
|
+
}
|
|
94
|
+
else if (item instanceof TokenNode) {
|
|
95
|
+
if (item.variables.getItems().length > 1) {
|
|
96
|
+
const variables = item.variables.getItemsReversed();
|
|
97
|
+
const newProductions = variables.map((variable) => {
|
|
98
|
+
return new ProductionNode(production.lhs, new ListNode([
|
|
99
|
+
...beforeItems,
|
|
100
|
+
new TokenNode("variable", new ListNode([variable]), item.name),
|
|
101
|
+
]), production.originalProductionIndex, production.name);
|
|
102
|
+
});
|
|
103
|
+
return newProductions.flatMap((prod) => expandProduction(prod));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
throw new Error("shoudn't reach here, ProductionNode RHS is neither GroupedTokenNode nor TokenNode");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return [production];
|
|
111
|
+
}
|
|
112
|
+
class TokenNode extends BaseNode {
|
|
113
|
+
constructor(type, variables, name) {
|
|
114
|
+
super();
|
|
115
|
+
this.type = type;
|
|
116
|
+
this.variables = variables;
|
|
117
|
+
this.name = name;
|
|
118
|
+
}
|
|
119
|
+
toStruct() {
|
|
120
|
+
var _a;
|
|
121
|
+
const items = this.variables.getItems();
|
|
122
|
+
if (items.length > 1)
|
|
123
|
+
throw new Error("Not yet unrolled");
|
|
124
|
+
const lexeme = items[0].lexeme;
|
|
125
|
+
const identifier = this.type === "variable" ? `<${lexeme}>` : `[${lexeme}]`;
|
|
126
|
+
const name = (_a = this.name) !== null && _a !== void 0 ? _a : null;
|
|
127
|
+
return { type: this.type, token: items[0], identifier, name };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
class GroupedTokenNode extends BaseNode {
|
|
131
|
+
constructor(inside) {
|
|
132
|
+
super();
|
|
133
|
+
this.inside = inside;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
class ProgramNode extends BaseNode {
|
|
137
|
+
constructor(productions) {
|
|
138
|
+
super();
|
|
139
|
+
this.productions = productions;
|
|
140
|
+
}
|
|
141
|
+
unrollProductions() {
|
|
142
|
+
const productions = this.productions.getItemsReversed();
|
|
143
|
+
for (let i = 0; i < productions.length; i++)
|
|
144
|
+
productions[i].setOriginalProductionIndex(i);
|
|
145
|
+
return productions.flatMap((node) => expandProduction(node));
|
|
146
|
+
}
|
|
147
|
+
getProductions() {
|
|
148
|
+
return this.unrollProductions().map((node) => node.toStruct());
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function getSelfHostedParserGenerator(e = states_1.selfhosted) {
|
|
152
|
+
return new index_1.Sparse({
|
|
153
|
+
productions: e.productions.map((production) => (0, common_1.hydrateProduction)(production)),
|
|
154
|
+
states: e.states.map((state) => parser_1.TableState.fromJSObject(state)),
|
|
155
|
+
toStringifiedTokenType: (type) => common_1.GrammarTokenType[type],
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
exports.getSelfHostedParserGenerator = getSelfHostedParserGenerator;
|
|
159
|
+
const reducers = {
|
|
160
|
+
program: (bag) => { var _a; return new ProgramNode((_a = bag.productions) !== null && _a !== void 0 ? _a : new ListNode([])); },
|
|
161
|
+
productions: (bag) => {
|
|
162
|
+
if (bag.rest == null)
|
|
163
|
+
return new ListNode([bag.production]);
|
|
164
|
+
else
|
|
165
|
+
return bag.rest.add(bag.production);
|
|
166
|
+
},
|
|
167
|
+
production: (bag) => { var _a; return new ProductionNode(bag.production_name, bag.tokens, -1, (_a = bag.uuid) === null || _a === void 0 ? void 0 : _a.lexeme); },
|
|
168
|
+
tokens: (bag) => {
|
|
169
|
+
if (bag.rest == null)
|
|
170
|
+
return new ListNode([bag.token]);
|
|
171
|
+
else
|
|
172
|
+
return bag.rest.add(bag.token);
|
|
173
|
+
},
|
|
174
|
+
token: (bag) => bag.token,
|
|
175
|
+
grouped_token: (bag) => new GroupedTokenNode(bag.tokens),
|
|
176
|
+
variable: (bag) => { var _a; return new TokenNode("variable", bag.inside, (_a = bag.token_name) === null || _a === void 0 ? void 0 : _a.lexeme); },
|
|
177
|
+
terminal: (bag) => { var _a; return new TokenNode("terminal", bag.inside, (_a = bag.token_name) === null || _a === void 0 ? void 0 : _a.lexeme); },
|
|
178
|
+
inside: (bag) => {
|
|
179
|
+
if (bag.rest == null)
|
|
180
|
+
return new ListNode([bag.identifier]);
|
|
181
|
+
else
|
|
182
|
+
return bag.rest.add(bag.identifier);
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
const tryBuildProductions = (lexer) => {
|
|
186
|
+
if (typeof lexer === "string")
|
|
187
|
+
lexer = exports.grammarLexerGenerator.generate(lexer, () => ({}));
|
|
188
|
+
const parserGenerator = getSelfHostedParserGenerator();
|
|
189
|
+
const parser = parserGenerator.generate(lexer, {
|
|
190
|
+
reducer: ({ bag, name }) => {
|
|
191
|
+
return reducers[name !== null && name !== void 0 ? name : ""](bag);
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
const parsingResult = parser.parse().result;
|
|
195
|
+
const productions = parsingResult.getProductions();
|
|
196
|
+
return { success: true, value: productions };
|
|
197
|
+
};
|
|
198
|
+
exports.tryBuildProductions = tryBuildProductions;
|
|
199
|
+
const buildProductions = (lexer) => {
|
|
200
|
+
const result = (0, exports.tryBuildProductions)(lexer);
|
|
201
|
+
if (result.success === false)
|
|
202
|
+
throw new Error(`Encountered error "${result.reason}" while parsing grammar at ${result.token.line}:${result.token.column}`);
|
|
203
|
+
return result.value;
|
|
204
|
+
};
|
|
205
|
+
exports.buildProductions = buildProductions;
|
|
206
|
+
//# sourceMappingURL=selfhosted.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selfhosted.js","sourceRoot":"","sources":["../../src/meta/selfhosted.ts"],"names":[],"mappings":"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"}
|