@scinorandex/sparse 0.1.1 → 0.1.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.
Files changed (65) hide show
  1. package/.github/workflows/ci.yml +41 -0
  2. package/AGENTS.md +31 -11
  3. package/README.md +283 -29
  4. package/dist/cli.js +113 -24
  5. package/dist/cli.js.map +1 -1
  6. package/dist/generator.d.ts +3 -1
  7. package/dist/generator.js +29 -5
  8. package/dist/generator.js.map +1 -1
  9. package/dist/index.d.ts +16 -4
  10. package/dist/index.js +34 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/meta/common.d.ts +17 -0
  13. package/dist/meta/common.js +66 -1
  14. package/dist/meta/common.js.map +1 -1
  15. package/dist/meta/selfhosted.d.ts +4 -5
  16. package/dist/meta/selfhosted.js +49 -36
  17. package/dist/meta/selfhosted.js.map +1 -1
  18. package/dist/parser.d.ts +56 -35
  19. package/dist/parser.js +146 -18
  20. package/dist/parser.js.map +1 -1
  21. package/dist/table/selfhosted.d.ts +10 -1
  22. package/dist/table/selfhosted.js +32 -12
  23. package/dist/table/selfhosted.js.map +1 -1
  24. package/dist/table/validate.d.ts +17 -0
  25. package/dist/table/validate.js +84 -0
  26. package/dist/table/validate.js.map +1 -0
  27. package/dist/utils/Stack.d.ts +4 -0
  28. package/dist/utils/Stack.js +16 -1
  29. package/dist/utils/Stack.js.map +1 -1
  30. package/dist/utils/errorWindowBuilder.js +11 -11
  31. package/dist/utils/errorWindowBuilder.js.map +1 -1
  32. package/dist/utils/loadFiles.d.ts +8 -0
  33. package/dist/utils/loadFiles.js +47 -0
  34. package/dist/utils/loadFiles.js.map +1 -0
  35. package/dist/utils/reducers.d.ts +9 -0
  36. package/dist/utils/reducers.js +56 -0
  37. package/dist/utils/reducers.js.map +1 -0
  38. package/example/LoLang/example.ts +16 -15
  39. package/example/kleene-test/example.ts +35 -17
  40. package/example/math/example.ts +12 -7
  41. package/example/selfhosted/example.ts +30 -24
  42. package/opencode.json +1 -1
  43. package/package.json +2 -2
  44. package/src/cli.ts +132 -23
  45. package/src/generator.ts +49 -8
  46. package/src/index.ts +55 -3
  47. package/src/meta/common.ts +116 -0
  48. package/src/meta/selfhosted.ts +42 -11
  49. package/src/parser.ts +259 -49
  50. package/src/table/selfhosted.ts +48 -12
  51. package/src/table/validate.ts +143 -0
  52. package/src/utils/Stack.ts +22 -2
  53. package/src/utils/errorWindowBuilder.ts +15 -13
  54. package/src/utils/loadFiles.ts +54 -0
  55. package/src/utils/reducers.ts +93 -0
  56. package/test/cli.test.ts +144 -0
  57. package/test/codegen.test.ts +75 -0
  58. package/test/grammar.test.ts +243 -0
  59. package/test/helpers.ts +59 -0
  60. package/test/lalr.test.ts +114 -0
  61. package/test/parser.test.ts +392 -0
  62. package/test/table.test.ts +144 -0
  63. package/tsconfig.json +1 -1
  64. package/example/LoLang/table2.txt +0 -497
  65. package/example/complicated/grammar.txt +0 -37
@@ -3,38 +3,39 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildProductions = exports.tryBuildProductions = exports.ListNode = exports.BaseNode = exports.grammarLexerGenerator = void 0;
4
4
  exports.getSelfHostedParserGenerator = getSelfHostedParserGenerator;
5
5
  const slex_1 = require("@scinorandex/slex");
6
+ const common_1 = require("../meta/common");
6
7
  const index_1 = require("../index");
7
8
  const states_1 = require("./states");
8
9
  const parser_1 = require("../parser");
9
- const common_1 = require("./common");
10
+ const common_2 = require("./common");
10
11
  exports.grammarLexerGenerator = new slex_1.Slex({
11
- EOF_TYPE: common_1.GrammarTokenType.EOF,
12
+ EOF_TYPE: common_2.GrammarTokenType.EOF,
12
13
  isHigherPrecedence: () => false,
13
- ignoreTokens: [common_1.GrammarTokenType.SINGLE_LINE_COMMENT, common_1.GrammarTokenType.MULTI_LINE_COMMENT],
14
+ ignoreTokens: [common_2.GrammarTokenType.SINGLE_LINE_COMMENT, common_2.GrammarTokenType.MULTI_LINE_COMMENT],
14
15
  });
15
16
  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");
16
17
  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");
17
18
  exports.grammarLexerGenerator.addRule("letter", "${lowercase} | ${uppercase}");
18
19
  exports.grammarLexerGenerator.addRule("digit", "0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9");
19
20
  exports.grammarLexerGenerator.addRule("alphanumeric", "${letter} | ${digit}");
20
- exports.grammarLexerGenerator.addRule("identifier", "(${letter} | $_) (${letter} | ${digit} | $_)*", common_1.GrammarTokenType.IDENTIFIER);
21
- exports.grammarLexerGenerator.addRule("colon", "$:", common_1.GrammarTokenType.COLON);
22
- exports.grammarLexerGenerator.addRule("semicolon", "$;", common_1.GrammarTokenType.SEMICOLON);
23
- exports.grammarLexerGenerator.addRule("langle", "$<", common_1.GrammarTokenType.L_ANGLE);
24
- exports.grammarLexerGenerator.addRule("rangle", "$>", common_1.GrammarTokenType.R_ANGLE);
25
- exports.grammarLexerGenerator.addRule("lbracket", "$[", common_1.GrammarTokenType.L_BRACKET);
26
- exports.grammarLexerGenerator.addRule("rbracket", "$]", common_1.GrammarTokenType.R_BRACKET);
27
- exports.grammarLexerGenerator.addRule("lparen", "$(", common_1.GrammarTokenType.L_PAREN);
28
- exports.grammarLexerGenerator.addRule("rparen", "$)", common_1.GrammarTokenType.R_PAREN);
29
- exports.grammarLexerGenerator.addRule("pipe", "$|", common_1.GrammarTokenType.PIPE);
30
- exports.grammarLexerGenerator.addRule("equals", "$=", common_1.GrammarTokenType.EQUALS);
31
- exports.grammarLexerGenerator.addRule("comma", "$,", common_1.GrammarTokenType.COMMA);
32
- exports.grammarLexerGenerator.addRule("question_mark", "$?", common_1.GrammarTokenType.QUESTION_MARK);
33
- exports.grammarLexerGenerator.addRule("star", "$*", common_1.GrammarTokenType.STAR);
34
- exports.grammarLexerGenerator.addRule("plus", "$+", common_1.GrammarTokenType.PLUS);
35
- exports.grammarLexerGenerator.addRule("number", "(${digit})+", common_1.GrammarTokenType.NUMBER);
36
- exports.grammarLexerGenerator.addRule("single_line_comment", "$/$/(($\n)!)*", common_1.GrammarTokenType.SINGLE_LINE_COMMENT);
37
- exports.grammarLexerGenerator.addRule("multi_line_comment", "$/$*(($*)!|($*($/)!))*$*$/", common_1.GrammarTokenType.MULTI_LINE_COMMENT);
21
+ exports.grammarLexerGenerator.addRule("identifier", "(${letter} | $_) (${letter} | ${digit} | $_ | $-)*", common_2.GrammarTokenType.IDENTIFIER);
22
+ exports.grammarLexerGenerator.addRule("colon", "$:", common_2.GrammarTokenType.COLON);
23
+ exports.grammarLexerGenerator.addRule("semicolon", "$;", common_2.GrammarTokenType.SEMICOLON);
24
+ exports.grammarLexerGenerator.addRule("langle", "$<", common_2.GrammarTokenType.L_ANGLE);
25
+ exports.grammarLexerGenerator.addRule("rangle", "$>", common_2.GrammarTokenType.R_ANGLE);
26
+ exports.grammarLexerGenerator.addRule("lbracket", "$[", common_2.GrammarTokenType.L_BRACKET);
27
+ exports.grammarLexerGenerator.addRule("rbracket", "$]", common_2.GrammarTokenType.R_BRACKET);
28
+ exports.grammarLexerGenerator.addRule("lparen", "$(", common_2.GrammarTokenType.L_PAREN);
29
+ exports.grammarLexerGenerator.addRule("rparen", "$)", common_2.GrammarTokenType.R_PAREN);
30
+ exports.grammarLexerGenerator.addRule("pipe", "$|", common_2.GrammarTokenType.PIPE);
31
+ exports.grammarLexerGenerator.addRule("equals", "$=", common_2.GrammarTokenType.EQUALS);
32
+ exports.grammarLexerGenerator.addRule("comma", "$,", common_2.GrammarTokenType.COMMA);
33
+ exports.grammarLexerGenerator.addRule("question_mark", "$?", common_2.GrammarTokenType.QUESTION_MARK);
34
+ exports.grammarLexerGenerator.addRule("star", "$*", common_2.GrammarTokenType.STAR);
35
+ exports.grammarLexerGenerator.addRule("plus", "$+", common_2.GrammarTokenType.PLUS);
36
+ exports.grammarLexerGenerator.addRule("number", "(${digit})+", common_2.GrammarTokenType.NUMBER);
37
+ exports.grammarLexerGenerator.addRule("single_line_comment", "$/$/(($\n)!)*", common_2.GrammarTokenType.SINGLE_LINE_COMMENT);
38
+ exports.grammarLexerGenerator.addRule("multi_line_comment", "$/$*(($*)!|($*($/)!))*$*$/", common_2.GrammarTokenType.MULTI_LINE_COMMENT);
38
39
  class BaseNode {
39
40
  }
40
41
  exports.BaseNode = BaseNode;
@@ -108,23 +109,23 @@ function expandProduction(production, ctx) {
108
109
  const beforeItems = rhs.slice(0, i);
109
110
  const afterItems = rhs.slice(i + 1);
110
111
  if (item instanceof GroupedTokenNode) {
111
- if (item.modifier === common_1.GrammarTokenType.QUESTION_MARK) {
112
+ if (item.modifier === common_2.GrammarTokenType.QUESTION_MARK) {
112
113
  const withoutCurrentItem = production.fork(new ListNode([...beforeItems, ...afterItems].toReversed()));
113
114
  const withCurrentItem = production.fork(new ListNode([...beforeItems, ...item.inside.getItemsReversed(), ...afterItems].toReversed()));
114
115
  const newProductions = [withoutCurrentItem, withCurrentItem];
115
116
  return newProductions.flatMap((prod) => expandProduction(prod, ctx));
116
117
  }
117
- else if (item.modifier === common_1.GrammarTokenType.STAR || item.modifier === common_1.GrammarTokenType.PLUS) {
118
+ else if (item.modifier === common_2.GrammarTokenType.STAR || item.modifier === common_2.GrammarTokenType.PLUS) {
118
119
  const inside = item.inside.getItemsReversed();
119
120
  const newProductionIdentifier = ctx.getAutogeneratedId();
120
121
  const raw = new StubTokenNode("variable", new ListNode([production.lhs]), "rest", newProductionIdentifier);
121
- const pump = new GroupedTokenNode(new ListNode([raw]), common_1.GrammarTokenType.QUESTION_MARK);
122
+ const pump = new GroupedTokenNode(new ListNode([raw]), common_2.GrammarTokenType.QUESTION_MARK);
122
123
  const stub = new ProductionNode(production.lhs, new ListNode([...inside, pump].toReversed()), ctx.getNextProductionIndex(), newProductionIdentifier, "autogenerated-kleene");
123
- const currentReplacement = production.fork(new ListNode([...beforeItems, item.modifier === common_1.GrammarTokenType.STAR ? pump : raw, ...afterItems].toReversed()));
124
+ const currentReplacement = production.fork(new ListNode([...beforeItems, item.modifier === common_2.GrammarTokenType.STAR ? pump : raw, ...afterItems].toReversed()));
124
125
  return [currentReplacement, stub].flatMap((prod) => expandProduction(prod, ctx));
125
126
  }
126
127
  else
127
- throw new Error(`Unknown modifier ${common_1.GrammarTokenType[item.modifier]}`);
128
+ throw new Error(`Unknown modifier ${common_2.GrammarTokenType[item.modifier]}`);
128
129
  }
129
130
  else if (item instanceof TokenNode) {
130
131
  if (item.variables.getItems().length > 1) {
@@ -206,9 +207,9 @@ class ProgramNode extends BaseNode {
206
207
  }
207
208
  function getSelfHostedParserGenerator(e = states_1.selfhosted) {
208
209
  return new index_1.Sparse({
209
- productions: e.productions.map((production) => (0, common_1.hydrateProduction)(production)),
210
+ productions: e.productions.map((production) => (0, common_2.hydrateProduction)(production)),
210
211
  states: e.states.map((state) => parser_1.TableState.fromJSObject(state)),
211
- toStringifiedTokenType: (type) => common_1.GrammarTokenType[type],
212
+ toStringifiedTokenType: (type) => common_2.GrammarTokenType[type],
212
213
  });
213
214
  }
214
215
  const reducers = {
@@ -237,22 +238,34 @@ const reducers = {
237
238
  return bag.rest.add(bag.identifier);
238
239
  },
239
240
  };
240
- const tryBuildProductions = (lexer) => {
241
- if (typeof lexer === "string")
242
- lexer = exports.grammarLexerGenerator.generate(lexer, () => ({}));
241
+ const tryBuildProductions = (lexer, options = {}) => {
242
+ try {
243
+ if (typeof lexer === "string")
244
+ lexer = exports.grammarLexerGenerator.generate(lexer, () => ({}));
245
+ }
246
+ catch (err) {
247
+ return { success: false, reason: (0, common_1.describeThrowable)(err), token: (0, common_1.syntheticGrammarToken)() };
248
+ }
243
249
  const parserGenerator = getSelfHostedParserGenerator();
244
250
  const parser = parserGenerator.generate(lexer, {
245
251
  reducer: ({ bag, name }) => {
246
252
  return reducers[name !== null && name !== void 0 ? name : ""](bag);
247
253
  },
248
254
  });
249
- const parsingResult = parser.parse().result;
250
- const productions = parsingResult.getProductions();
251
- return { success: true, value: productions };
255
+ let programNode;
256
+ try {
257
+ programNode = parser.parse().result;
258
+ }
259
+ catch (err) {
260
+ if (err instanceof parser_1.LR1ParserGraveError && err.currentToken != null)
261
+ return { success: false, reason: err.reason, token: err.currentToken };
262
+ return { success: false, reason: (0, common_1.describeThrowable)(err), token: (0, common_1.syntheticGrammarToken)() };
263
+ }
264
+ return (0, common_2.validateProductions)(programNode.getProductions(), options);
252
265
  };
253
266
  exports.tryBuildProductions = tryBuildProductions;
254
- const buildProductions = (lexer) => {
255
- const result = (0, exports.tryBuildProductions)(lexer);
267
+ const buildProductions = (lexer, options = {}) => {
268
+ const result = (0, exports.tryBuildProductions)(lexer, options);
256
269
  if (result.success === false)
257
270
  throw new Error(`Encountered error "${result.reason}" while parsing grammar at ${result.token.line}:${result.token.column}`);
258
271
  return result.value;
@@ -1 +1 @@
1
- {"version":3,"file":"selfhosted.js","sourceRoot":"","sources":["../../src/meta/selfhosted.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selfhosted.js","sourceRoot":"","sources":["../../src/meta/selfhosted.ts"],"names":[],"mappings":"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"}
package/dist/parser.d.ts CHANGED
@@ -1,22 +1,26 @@
1
1
  import { Slex, Token } from "@scinorandex/slex";
2
2
  import { Stack } from "./utils/Stack";
3
3
  import { Result } from "./utils/Result";
4
- import { Production } from "./meta/common";
4
+ import { GrammarToken, Production, ProductionWarning } from "./meta/common";
5
5
  export type TableAction = {
6
6
  type: "shift" | "reduce" | "goto";
7
7
  value: number;
8
8
  };
9
9
  export declare class TableState {
10
10
  readonly actions: Map<string, TableAction>;
11
- constructor(actions?: Map<string, TableAction>);
11
+ readonly rawActions: Map<string, string>;
12
+ constructor(actions?: Map<string, TableAction>, rawActions?: Map<string, string>);
12
13
  getTerminalAction(terminal: string): TableAction | undefined;
13
14
  getVariableAction(variable: string): TableAction | undefined;
15
+ getTerminalKeys(): string[];
16
+ getVariableKeys(): string[];
17
+ private getKeys;
14
18
  toJSObject(): {
15
19
  [k: string]: TableAction;
16
20
  };
17
21
  static fromJSObject(json: ReturnType<TableState["toJSObject"]>): TableState;
18
22
  }
19
- type ReducerType<TokenType, Metadata, Node> = (newInput: {
23
+ export type ReducerType<TokenType, Metadata, Node> = (newInput: {
20
24
  bag: any;
21
25
  name: string | null;
22
26
  }, oldInput: {
@@ -30,27 +34,40 @@ export type LR1StackSymbol<TokenType, Metadata, Node> = {
30
34
  type: "node";
31
35
  node: Node;
32
36
  };
37
+ export type SparseOptions<TokenType> = {
38
+ productions: Production[];
39
+ states: TableState[];
40
+ toStringifiedTokenType: (tokenType: TokenType) => string;
41
+ validate?: boolean;
42
+ source?: string;
43
+ };
44
+ export type FromProductionsOptions<TokenType> = {
45
+ productions: Production[];
46
+ toStringifiedTokenType: (tokenType: TokenType) => string;
47
+ mode?: "lr1" | "lalr1";
48
+ quiet?: boolean;
49
+ onWarning?: (warning: ProductionWarning) => void;
50
+ onProgress?: (statesGenerated: number) => void;
51
+ };
33
52
  export declare class Sparse<TokenType, Metadata, Node> {
34
- readonly options: {
35
- productions: Production[];
36
- states: TableState[];
53
+ readonly options: SparseOptions<TokenType>;
54
+ constructor(options: SparseOptions<TokenType>);
55
+ static tryFromProductions<TokenType, Metadata, Node>(options: FromProductionsOptions<TokenType>): Result<Sparse<TokenType, Metadata, Node>>;
56
+ static fromProductions<TokenType, Metadata, Node>(options: FromProductionsOptions<TokenType>): Sparse<TokenType, Metadata, Node>;
57
+ static tryFromGrammarFile<TokenType, Metadata, Node>(options: {
58
+ grammarPath: string;
59
+ tablePath: string;
37
60
  toStringifiedTokenType: (tokenType: TokenType) => string;
38
- };
39
- constructor(options: {
40
- productions: Production[];
41
- states: TableState[];
61
+ onWarning?: (warning: ProductionWarning) => void;
62
+ validate?: boolean;
63
+ }): Promise<Result<Sparse<TokenType, Metadata, Node>>>;
64
+ static fromGrammarFile<TokenType, Metadata, Node>(options: {
65
+ grammarPath: string;
66
+ tablePath: string;
42
67
  toStringifiedTokenType: (tokenType: TokenType) => string;
43
- });
44
- static tryFromProductions<TokenType, Metadata, Node>(options: {
45
- productions: Production[];
46
- toStringifiedTokenType: (tokenType: TokenType) => string;
47
- mode?: "lr1" | "lalr1";
48
- }): Result<Sparse<TokenType, Metadata, Node>>;
49
- static fromProductions<TokenType, Metadata, Node>(options: {
50
- productions: Production[];
51
- toStringifiedTokenType: (tokenType: TokenType) => string;
52
- mode?: "lr1" | "lalr1";
53
- }): Sparse<TokenType, Metadata, Node>;
68
+ onWarning?: (warning: ProductionWarning) => void;
69
+ validate?: boolean;
70
+ }): Promise<Sparse<TokenType, Metadata, Node>>;
54
71
  generate(lexer: ReturnType<Slex<TokenType, Metadata>["generate"]>, options: {
55
72
  reducer: ReducerType<TokenType, Metadata, Node>;
56
73
  recover?: ParserRecoveryFunction<TokenType, Metadata, Node>;
@@ -72,6 +89,10 @@ export type ParserRecoveryFunction<TokenType, Metadata, Node> = (options: {
72
89
  success: true;
73
90
  token?: Token<TokenType, Metadata>;
74
91
  };
92
+ insertToken: (token: Token<TokenType, Metadata>) => {
93
+ success: false;
94
+ reason: string;
95
+ } | undefined;
75
96
  states: TableState[];
76
97
  }) => {
77
98
  success: true;
@@ -88,28 +109,28 @@ export type ParserResult<TokenType, Metadata, Node> = {
88
109
  result: Node | null;
89
110
  errors: ParserError<TokenType, Metadata>[];
90
111
  };
91
- declare class LR1Parser<TokenType, Metadata, Node> {
92
- readonly options: {
93
- productions: Production[];
94
- states: TableState[];
95
- toStringifiedTokenType: (tokenType: TokenType) => string;
96
- };
112
+ export declare class LR1Parser<TokenType, Metadata, Node> {
113
+ readonly options: SparseOptions<TokenType>;
97
114
  readonly reducer: ReducerType<TokenType, Metadata, Node>;
98
115
  readonly recover: ParserRecoveryFunction<TokenType, Metadata, Node> | null;
99
116
  readonly lexer: ReturnType<Slex<TokenType, Metadata>["generate"]>;
100
117
  statesStack: Stack<number>;
101
118
  symbolsStack: Stack<LR1StackSymbol<TokenType, Metadata, Node>>;
102
119
  exceptions: ParserError<TokenType, Metadata>[];
103
- constructor(options: {
104
- productions: Production[];
105
- states: TableState[];
106
- toStringifiedTokenType: (tokenType: TokenType) => string;
107
- }, reducer: ReducerType<TokenType, Metadata, Node>, recover: ParserRecoveryFunction<TokenType, Metadata, Node> | null, lexer: ReturnType<Slex<TokenType, Metadata>["generate"]>);
120
+ constructor(options: SparseOptions<TokenType>, reducer: ReducerType<TokenType, Metadata, Node>, recover: ParserRecoveryFunction<TokenType, Metadata, Node> | null, lexer: ReturnType<Slex<TokenType, Metadata>["generate"]>);
121
+ reset(): void;
108
122
  parse(): ParserResult<TokenType, Metadata, Node>;
123
+ private pushState;
124
+ private insertToken;
125
+ private syntaxErrorMessage;
109
126
  }
110
127
  export declare class LR1ParserGraveError<TokenType, Metadata> extends Error {
111
128
  readonly reason: string;
112
- readonly currentToken: Token<TokenType, Metadata>;
113
- constructor(reason: string, currentToken: Token<TokenType, Metadata>, err?: Error);
129
+ readonly currentToken: Token<TokenType, Metadata> | null;
130
+ constructor(reason: string, currentToken: Token<TokenType, Metadata> | null, err?: Error);
131
+ }
132
+ export declare class SparseGrammarError extends Error {
133
+ readonly reason: string;
134
+ readonly token: GrammarToken;
135
+ constructor(reason: string, token: GrammarToken);
114
136
  }
115
- export {};
package/dist/parser.js CHANGED
@@ -1,11 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LR1ParserGraveError = exports.Sparse = exports.TableState = void 0;
3
+ exports.SparseGrammarError = exports.LR1ParserGraveError = exports.LR1Parser = exports.Sparse = exports.TableState = void 0;
4
4
  const generator_1 = require("./generator");
5
5
  const Stack_1 = require("./utils/Stack");
6
+ const loadFiles_1 = require("./utils/loadFiles");
7
+ const validate_1 = require("./table/validate");
6
8
  class TableState {
7
- constructor(actions = new Map()) {
9
+ constructor(actions = new Map(), rawActions = new Map()) {
8
10
  this.actions = actions;
11
+ this.rawActions = rawActions;
9
12
  }
10
13
  getTerminalAction(terminal) {
11
14
  return this.actions.get(`[${terminal}]`);
@@ -13,20 +16,48 @@ class TableState {
13
16
  getVariableAction(variable) {
14
17
  return this.actions.get(variable);
15
18
  }
19
+ getTerminalKeys() {
20
+ return this.getKeys("[", "]");
21
+ }
22
+ getVariableKeys() {
23
+ return this.getKeys("<", ">");
24
+ }
25
+ getKeys(prefix, suffix) {
26
+ const keys = [];
27
+ for (const key of this.actions.keys())
28
+ if (key.startsWith(prefix) && key.endsWith(suffix))
29
+ keys.push(key.substring(prefix.length, key.length - suffix.length));
30
+ return keys.sort();
31
+ }
16
32
  toJSObject() {
17
33
  return Object.fromEntries(this.actions);
18
34
  }
19
35
  static fromJSObject(json) {
20
- return new TableState(new Map(Object.entries(json)));
36
+ const actions = new Map(Object.entries(json));
37
+ const rawActions = new Map([...actions].map(([key, action]) => [
38
+ key,
39
+ action.type === "goto" ? `${action.value}` : `${action.type === "shift" ? "s" : "r"}${action.value}`,
40
+ ]));
41
+ return new TableState(actions, rawActions);
21
42
  }
22
43
  }
23
44
  exports.TableState = TableState;
24
45
  class Sparse {
25
46
  constructor(options) {
26
47
  this.options = options;
48
+ if (options.validate === true) {
49
+ const result = (0, validate_1.validateTable)(options.productions, options.states, { source: options.source });
50
+ if (result.success === false)
51
+ throw new Error(`The parsing table does not match the grammar: ${result.reason}`);
52
+ }
27
53
  }
28
54
  static tryFromProductions(options) {
29
- const statesResult = (0, generator_1.generateStates)(options.productions, { mode: options.mode });
55
+ const startedAt = Date.now();
56
+ const statesResult = (0, generator_1.generateStates)(options.productions, {
57
+ mode: options.mode,
58
+ onWarning: options.onWarning,
59
+ onProgress: options.onProgress,
60
+ });
30
61
  if (statesResult.success === false)
31
62
  return statesResult;
32
63
  const states = statesResult.value;
@@ -35,12 +66,47 @@ class Sparse {
35
66
  states: states.toStates(),
36
67
  toStringifiedTokenType: options.toStringifiedTokenType,
37
68
  });
69
+ if (options.quiet !== true) {
70
+ const elapsed = Date.now() - startedAt;
71
+ const label = options.mode === "lalr1" ? "LALR(1)" : "LR(1)";
72
+ console.error(`Sparse generated ${sparse.options.states.length} ${label} states in ${elapsed}ms`);
73
+ }
38
74
  return { success: true, value: sparse };
39
75
  }
40
76
  static fromProductions(options) {
41
77
  const result = Sparse.tryFromProductions(options);
42
78
  if (result.success === false)
43
- throw new Error(`Encountered error "${result.reason}" at ${result.token.line}:${result.token.column}`);
79
+ throw new SparseGrammarError(result.reason, result.token);
80
+ return result.value;
81
+ }
82
+ static async tryFromGrammarFile(options) {
83
+ const productionsResult = await (0, loadFiles_1.loadGrammar)(options.grammarPath, { onWarning: options.onWarning });
84
+ if (productionsResult.success === false)
85
+ return productionsResult;
86
+ const statesResult = await (0, loadFiles_1.loadTable)(options.tablePath, { productions: productionsResult.value });
87
+ if (statesResult.success === false)
88
+ return statesResult;
89
+ if (options.validate !== false) {
90
+ const tableResult = (0, validate_1.validateTable)(productionsResult.value, statesResult.value, {
91
+ source: options.tablePath,
92
+ });
93
+ if (tableResult.success === false)
94
+ return tableResult;
95
+ }
96
+ return {
97
+ success: true,
98
+ value: new Sparse({
99
+ productions: productionsResult.value,
100
+ states: statesResult.value,
101
+ toStringifiedTokenType: options.toStringifiedTokenType,
102
+ source: options.grammarPath,
103
+ }),
104
+ };
105
+ }
106
+ static async fromGrammarFile(options) {
107
+ const result = await Sparse.tryFromGrammarFile(options);
108
+ if (result.success === false)
109
+ throw new SparseGrammarError(result.reason, result.token);
44
110
  return result.value;
45
111
  }
46
112
  generate(lexer, options) {
@@ -59,16 +125,29 @@ class LR1Parser {
59
125
  this.symbolsStack = new Stack_1.Stack();
60
126
  this.exceptions = [];
61
127
  }
128
+ reset() {
129
+ this.statesStack = new Stack_1.Stack([0]);
130
+ this.symbolsStack = new Stack_1.Stack();
131
+ this.exceptions = [];
132
+ }
62
133
  parse() {
63
134
  var _a;
64
135
  const { productions, states, toStringifiedTokenType } = this.options;
136
+ if (states.length === 0)
137
+ throw new LR1ParserGraveError("The parsing table is empty, so no token can be parsed", null);
138
+ const currentStates = () => {
139
+ const state = states[this.statesStack.peek()];
140
+ if (state == null)
141
+ throw new LR1ParserGraveError(`The parsing table is out of sync with the grammar: state ${this.statesStack.peek()} does not exist (the table has ${states.length} states)`, null);
142
+ return state;
143
+ };
65
144
  while (true) {
66
- let currentState = this.statesStack.peek();
145
+ let currentState = currentStates();
67
146
  let token = this.lexer.peekNextToken();
68
- let action = states[currentState].getTerminalAction(toStringifiedTokenType(token.type));
147
+ let action = currentState.getTerminalAction(toStringifiedTokenType(token.type));
69
148
  if (action == null) {
70
149
  if (this.recover === null)
71
- throw new LR1ParserGraveError(`Invalid syntax. Expected ${[...states[currentState].actions.keys()].join(",")} but got ${toStringifiedTokenType(token.type)}`, token);
150
+ throw new LR1ParserGraveError(this.syntaxErrorMessage(currentState, token), token);
72
151
  const recoveryResult = this.recover({
73
152
  lexer: this.lexer,
74
153
  states,
@@ -77,24 +156,29 @@ class LR1Parser {
77
156
  addError: (reason) => this.exceptions.push({ message: reason, token: this.lexer.peekNextToken() }),
78
157
  crash: (reason) => ({ success: false, reason }),
79
158
  finish: (options) => ({ success: true, token: options === null || options === void 0 ? void 0 : options.newToken }),
80
- isSafe: () => states[this.statesStack.peek()].actions.has(`[${toStringifiedTokenType(this.lexer.peekNextToken().type)}]`),
159
+ insertToken: (newToken) => this.insertToken(newToken),
160
+ isSafe: () => currentStates().actions.has(`[${toStringifiedTokenType(this.lexer.peekNextToken().type)}]`),
81
161
  });
82
162
  if (recoveryResult.success === false)
83
163
  throw new LR1ParserGraveError(recoveryResult.reason, token);
84
164
  token = (_a = recoveryResult.token) !== null && _a !== void 0 ? _a : this.lexer.peekNextToken();
85
- currentState = this.statesStack.peek();
86
- action = states[currentState].getTerminalAction(toStringifiedTokenType(token.type));
165
+ currentState = currentStates();
166
+ action = currentState.getTerminalAction(toStringifiedTokenType(token.type));
167
+ if (action == null)
168
+ throw new LR1ParserGraveError(this.syntaxErrorMessage(currentState, token), token);
87
169
  }
88
170
  const fixedAction = action;
89
171
  if (fixedAction.type === "shift") {
90
172
  token = this.lexer.getNextToken();
91
- this.statesStack.push(fixedAction.value);
173
+ this.pushState(fixedAction.value);
92
174
  this.symbolsStack.push({ type: "token", token: token });
93
175
  }
94
176
  else if (fixedAction.type === "reduce") {
95
177
  if (fixedAction.value === 0)
96
178
  break;
97
179
  const production = productions[fixedAction.value];
180
+ if (production == null)
181
+ throw new LR1ParserGraveError(`The parsing table is out of sync with the grammar: it reduces by production ${fixedAction.value}, but the grammar only has ${productions.length} productions`, token);
98
182
  const popped = [];
99
183
  for (let i = 0; i < production.rhs.length; i++) {
100
184
  popped.unshift(this.symbolsStack.pop());
@@ -115,29 +199,73 @@ class LR1Parser {
115
199
  this.symbolsStack.push({ type: "node", node });
116
200
  }
117
201
  catch (err) {
118
- const input = JSON.stringify(popped, null, 2);
119
- console.log(err);
120
- throw new LR1ParserGraveError(`Error while performing reduction for production: ${productionIndex}. Reduction input: ${input}`, token);
202
+ const cause = err instanceof Error ? err.message : String(err);
203
+ const input = truncate(JSON.stringify(popped), 500);
204
+ throw new LR1ParserGraveError(`Error while performing the reduction for production ${productionIndex}${describeProduction(production)}: ${cause}\nReduction input: ${input}`, token, err instanceof Error ? err : undefined);
121
205
  }
122
206
  const topNode = this.statesStack.peek();
123
- const gotoAction = states[topNode].getVariableAction(production.identifier);
207
+ const gotoAction = currentStates().getVariableAction(production.identifier);
124
208
  if (gotoAction == undefined)
125
209
  throw new LR1ParserGraveError(`No GOTO action for for state: ${topNode} and production: ${production.identifier}. Actions: Reduce by production ${productionIndex}`, token);
126
210
  else if (gotoAction.type !== "goto")
127
211
  throw new LR1ParserGraveError(`Expected GOTO action for state: ${topNode} and production: ${production.identifier}. Actions: Reduce by production ${productionIndex}. Received: ${gotoAction.type}`, token);
128
- this.statesStack.push(gotoAction.value);
212
+ this.pushState(gotoAction.value);
129
213
  }
130
214
  }
215
+ if (this.symbolsStack.isEmpty)
216
+ return { result: null, errors: this.exceptions };
131
217
  const top = this.symbolsStack.peek();
132
218
  return { result: top.type === "node" ? top.node : null, errors: this.exceptions };
133
219
  }
220
+ pushState(state) {
221
+ if (state === undefined || this.options.states[state] == null)
222
+ throw new LR1ParserGraveError(`The parsing table is out of sync with the grammar: it points at state ${state}, but the table only has ${this.options.states.length} states`, null);
223
+ this.statesStack.push(state);
224
+ }
225
+ insertToken(token) {
226
+ var _a;
227
+ const state = this.options.states[this.statesStack.peek()];
228
+ const action = state === null || state === void 0 ? void 0 : state.getTerminalAction(this.options.toStringifiedTokenType(token.type));
229
+ if (action == null)
230
+ return {
231
+ success: false,
232
+ reason: `Cannot insert ${this.options.toStringifiedTokenType(token.type)} here: state ${this.statesStack.peek()} does not accept it. Expected ${(_a = state === null || state === void 0 ? void 0 : state.getTerminalKeys().join(", ")) !== null && _a !== void 0 ? _a : "nothing"}`,
233
+ };
234
+ if (action.type !== "shift")
235
+ return {
236
+ success: false,
237
+ reason: `Cannot insert ${this.options.toStringifiedTokenType(token.type)} here: state ${this.statesStack.peek()} reduces on it instead of shifting it`,
238
+ };
239
+ this.pushState(action.value);
240
+ this.symbolsStack.push({ type: "token", token });
241
+ return undefined;
242
+ }
243
+ syntaxErrorMessage(state, token) {
244
+ const expected = state.getTerminalKeys();
245
+ const got = this.options.toStringifiedTokenType(token.type);
246
+ const lexeme = token.lexeme === "" ? "" : ` ("${token.lexeme}")`;
247
+ return (`Invalid syntax at ${token.line}:${token.column}: got ${got}${lexeme}, but expected ${expected.length === 0 ? "the end of the input" : `one of [${expected.join("], [")}]`}`);
248
+ }
134
249
  }
250
+ exports.LR1Parser = LR1Parser;
135
251
  class LR1ParserGraveError extends Error {
136
252
  constructor(reason, currentToken, err) {
137
- super(reason);
253
+ super(reason, err === undefined ? undefined : { cause: err });
138
254
  this.reason = reason;
139
255
  this.currentToken = currentToken;
256
+ this.name = "LR1ParserGraveError";
140
257
  }
141
258
  }
142
259
  exports.LR1ParserGraveError = LR1ParserGraveError;
260
+ class SparseGrammarError extends Error {
261
+ constructor(reason, token) {
262
+ super(`Encountered error "${reason}" at ${token.line}:${token.column}`);
263
+ this.reason = reason;
264
+ this.token = token;
265
+ this.name = "SparseGrammarError";
266
+ }
267
+ }
268
+ exports.SparseGrammarError = SparseGrammarError;
269
+ const truncate = (value, max) => value.length <= max ? value : `${value.slice(0, max)}... (${value.length} characters)`;
270
+ const describeProduction = (production) => production.name == null ? ` (${production.identifier})` : ` ("${production.name}")`;
143
271
  //# sourceMappingURL=parser.js.map