@scinorandex/sparse 0.1.1 → 0.1.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.
Files changed (65) hide show
  1. package/.github/workflows/ci.yml +41 -0
  2. package/AGENTS.md +31 -11
  3. package/README.md +289 -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 +55 -35
  19. package/dist/parser.js +141 -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 +243 -51
  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 +110 -0
  61. package/test/parser.test.ts +377 -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
@@ -1,7 +1,7 @@
1
1
  import { Slex } from "@scinorandex/slex";
2
2
  import { Result, Sparse } from "../index";
3
3
  import { selfhosted } from "./states";
4
- import { GrammarToken, GrammarTokenMetadata, GrammarTokenType, Production } from "./common";
4
+ import { GrammarToken, GrammarTokenMetadata, GrammarTokenType, Production, ValidateProductionsOptions } from "./common";
5
5
  export declare const grammarLexerGenerator: Slex<GrammarTokenType, GrammarTokenMetadata>;
6
6
  export declare abstract class BaseNode {
7
7
  }
@@ -13,11 +13,10 @@ export declare class ListNode<T> extends BaseNode {
13
13
  getItemsReversed(): T[];
14
14
  }
15
15
  export declare function getSelfHostedParserGenerator(e?: typeof selfhosted): Sparse<GrammarTokenType, GrammarTokenMetadata, BaseNode>;
16
- export declare const tryBuildProductions: (lexer: LexerInterface | string) => Result<Production[]>;
17
- interface LexerInterface {
16
+ export declare const tryBuildProductions: (lexer: LexerInterface | string, options?: ValidateProductionsOptions) => Result<Production[]>;
17
+ export interface LexerInterface {
18
18
  peekNextToken(): GrammarToken;
19
19
  getNextToken(): GrammarToken;
20
20
  hasNextToken(): boolean;
21
21
  }
22
- export declare const buildProductions: (lexer: LexerInterface | string) => Production[];
23
- export {};
22
+ export declare const buildProductions: (lexer: LexerInterface | string, options?: ValidateProductionsOptions) => Production[];
@@ -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,39 @@ 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
+ onWarning?: (warning: ProductionWarning) => void;
49
+ onProgress?: (statesGenerated: number) => void;
50
+ };
33
51
  export declare class Sparse<TokenType, Metadata, Node> {
34
- readonly options: {
35
- productions: Production[];
36
- states: TableState[];
52
+ readonly options: SparseOptions<TokenType>;
53
+ constructor(options: SparseOptions<TokenType>);
54
+ static tryFromProductions<TokenType, Metadata, Node>(options: FromProductionsOptions<TokenType>): Result<Sparse<TokenType, Metadata, Node>>;
55
+ static fromProductions<TokenType, Metadata, Node>(options: FromProductionsOptions<TokenType>): Sparse<TokenType, Metadata, Node>;
56
+ static tryFromGrammarFile<TokenType, Metadata, Node>(options: {
57
+ grammarPath: string;
58
+ tablePath: string;
37
59
  toStringifiedTokenType: (tokenType: TokenType) => string;
38
- };
39
- constructor(options: {
40
- productions: Production[];
41
- states: TableState[];
60
+ onWarning?: (warning: ProductionWarning) => void;
61
+ validate?: boolean;
62
+ }): Promise<Result<Sparse<TokenType, Metadata, Node>>>;
63
+ static fromGrammarFile<TokenType, Metadata, Node>(options: {
64
+ grammarPath: string;
65
+ tablePath: string;
42
66
  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>;
67
+ onWarning?: (warning: ProductionWarning) => void;
68
+ validate?: boolean;
69
+ }): Promise<Sparse<TokenType, Metadata, Node>>;
54
70
  generate(lexer: ReturnType<Slex<TokenType, Metadata>["generate"]>, options: {
55
71
  reducer: ReducerType<TokenType, Metadata, Node>;
56
72
  recover?: ParserRecoveryFunction<TokenType, Metadata, Node>;
@@ -72,6 +88,10 @@ export type ParserRecoveryFunction<TokenType, Metadata, Node> = (options: {
72
88
  success: true;
73
89
  token?: Token<TokenType, Metadata>;
74
90
  };
91
+ insertToken: (token: Token<TokenType, Metadata>) => {
92
+ success: false;
93
+ reason: string;
94
+ } | undefined;
75
95
  states: TableState[];
76
96
  }) => {
77
97
  success: true;
@@ -88,28 +108,28 @@ export type ParserResult<TokenType, Metadata, Node> = {
88
108
  result: Node | null;
89
109
  errors: ParserError<TokenType, Metadata>[];
90
110
  };
91
- declare class LR1Parser<TokenType, Metadata, Node> {
92
- readonly options: {
93
- productions: Production[];
94
- states: TableState[];
95
- toStringifiedTokenType: (tokenType: TokenType) => string;
96
- };
111
+ export declare class LR1Parser<TokenType, Metadata, Node> {
112
+ readonly options: SparseOptions<TokenType>;
97
113
  readonly reducer: ReducerType<TokenType, Metadata, Node>;
98
114
  readonly recover: ParserRecoveryFunction<TokenType, Metadata, Node> | null;
99
115
  readonly lexer: ReturnType<Slex<TokenType, Metadata>["generate"]>;
100
116
  statesStack: Stack<number>;
101
117
  symbolsStack: Stack<LR1StackSymbol<TokenType, Metadata, Node>>;
102
118
  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"]>);
119
+ constructor(options: SparseOptions<TokenType>, reducer: ReducerType<TokenType, Metadata, Node>, recover: ParserRecoveryFunction<TokenType, Metadata, Node> | null, lexer: ReturnType<Slex<TokenType, Metadata>["generate"]>);
120
+ reset(): void;
108
121
  parse(): ParserResult<TokenType, Metadata, Node>;
122
+ private pushState;
123
+ private insertToken;
124
+ private syntaxErrorMessage;
109
125
  }
110
126
  export declare class LR1ParserGraveError<TokenType, Metadata> extends Error {
111
127
  readonly reason: string;
112
- readonly currentToken: Token<TokenType, Metadata>;
113
- constructor(reason: string, currentToken: Token<TokenType, Metadata>, err?: Error);
128
+ readonly currentToken: Token<TokenType, Metadata> | null;
129
+ constructor(reason: string, currentToken: Token<TokenType, Metadata> | null, err?: Error);
130
+ }
131
+ export declare class SparseGrammarError extends Error {
132
+ readonly reason: string;
133
+ readonly token: GrammarToken;
134
+ constructor(reason: string, token: GrammarToken);
114
135
  }
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;
@@ -40,7 +71,37 @@ class Sparse {
40
71
  static fromProductions(options) {
41
72
  const result = Sparse.tryFromProductions(options);
42
73
  if (result.success === false)
43
- throw new Error(`Encountered error "${result.reason}" at ${result.token.line}:${result.token.column}`);
74
+ throw new SparseGrammarError(result.reason, result.token);
75
+ return result.value;
76
+ }
77
+ static async tryFromGrammarFile(options) {
78
+ const productionsResult = await (0, loadFiles_1.loadGrammar)(options.grammarPath, { onWarning: options.onWarning });
79
+ if (productionsResult.success === false)
80
+ return productionsResult;
81
+ const statesResult = await (0, loadFiles_1.loadTable)(options.tablePath, { productions: productionsResult.value });
82
+ if (statesResult.success === false)
83
+ return statesResult;
84
+ if (options.validate !== false) {
85
+ const tableResult = (0, validate_1.validateTable)(productionsResult.value, statesResult.value, {
86
+ source: options.tablePath,
87
+ });
88
+ if (tableResult.success === false)
89
+ return tableResult;
90
+ }
91
+ return {
92
+ success: true,
93
+ value: new Sparse({
94
+ productions: productionsResult.value,
95
+ states: statesResult.value,
96
+ toStringifiedTokenType: options.toStringifiedTokenType,
97
+ source: options.grammarPath,
98
+ }),
99
+ };
100
+ }
101
+ static async fromGrammarFile(options) {
102
+ const result = await Sparse.tryFromGrammarFile(options);
103
+ if (result.success === false)
104
+ throw new SparseGrammarError(result.reason, result.token);
44
105
  return result.value;
45
106
  }
46
107
  generate(lexer, options) {
@@ -59,16 +120,29 @@ class LR1Parser {
59
120
  this.symbolsStack = new Stack_1.Stack();
60
121
  this.exceptions = [];
61
122
  }
123
+ reset() {
124
+ this.statesStack = new Stack_1.Stack([0]);
125
+ this.symbolsStack = new Stack_1.Stack();
126
+ this.exceptions = [];
127
+ }
62
128
  parse() {
63
129
  var _a;
64
130
  const { productions, states, toStringifiedTokenType } = this.options;
131
+ if (states.length === 0)
132
+ throw new LR1ParserGraveError("The parsing table is empty, so no token can be parsed", null);
133
+ const currentStates = () => {
134
+ const state = states[this.statesStack.peek()];
135
+ if (state == null)
136
+ 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);
137
+ return state;
138
+ };
65
139
  while (true) {
66
- let currentState = this.statesStack.peek();
140
+ let currentState = currentStates();
67
141
  let token = this.lexer.peekNextToken();
68
- let action = states[currentState].getTerminalAction(toStringifiedTokenType(token.type));
142
+ let action = currentState.getTerminalAction(toStringifiedTokenType(token.type));
69
143
  if (action == null) {
70
144
  if (this.recover === null)
71
- throw new LR1ParserGraveError(`Invalid syntax. Expected ${[...states[currentState].actions.keys()].join(",")} but got ${toStringifiedTokenType(token.type)}`, token);
145
+ throw new LR1ParserGraveError(this.syntaxErrorMessage(currentState, token), token);
72
146
  const recoveryResult = this.recover({
73
147
  lexer: this.lexer,
74
148
  states,
@@ -77,24 +151,29 @@ class LR1Parser {
77
151
  addError: (reason) => this.exceptions.push({ message: reason, token: this.lexer.peekNextToken() }),
78
152
  crash: (reason) => ({ success: false, reason }),
79
153
  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)}]`),
154
+ insertToken: (newToken) => this.insertToken(newToken),
155
+ isSafe: () => currentStates().actions.has(`[${toStringifiedTokenType(this.lexer.peekNextToken().type)}]`),
81
156
  });
82
157
  if (recoveryResult.success === false)
83
158
  throw new LR1ParserGraveError(recoveryResult.reason, token);
84
159
  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));
160
+ currentState = currentStates();
161
+ action = currentState.getTerminalAction(toStringifiedTokenType(token.type));
162
+ if (action == null)
163
+ throw new LR1ParserGraveError(this.syntaxErrorMessage(currentState, token), token);
87
164
  }
88
165
  const fixedAction = action;
89
166
  if (fixedAction.type === "shift") {
90
167
  token = this.lexer.getNextToken();
91
- this.statesStack.push(fixedAction.value);
168
+ this.pushState(fixedAction.value);
92
169
  this.symbolsStack.push({ type: "token", token: token });
93
170
  }
94
171
  else if (fixedAction.type === "reduce") {
95
172
  if (fixedAction.value === 0)
96
173
  break;
97
174
  const production = productions[fixedAction.value];
175
+ if (production == null)
176
+ 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
177
  const popped = [];
99
178
  for (let i = 0; i < production.rhs.length; i++) {
100
179
  popped.unshift(this.symbolsStack.pop());
@@ -115,29 +194,73 @@ class LR1Parser {
115
194
  this.symbolsStack.push({ type: "node", node });
116
195
  }
117
196
  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);
197
+ const cause = err instanceof Error ? err.message : String(err);
198
+ const input = truncate(JSON.stringify(popped), 500);
199
+ throw new LR1ParserGraveError(`Error while performing the reduction for production ${productionIndex}${describeProduction(production)}: ${cause}\nReduction input: ${input}`, token, err instanceof Error ? err : undefined);
121
200
  }
122
201
  const topNode = this.statesStack.peek();
123
- const gotoAction = states[topNode].getVariableAction(production.identifier);
202
+ const gotoAction = currentStates().getVariableAction(production.identifier);
124
203
  if (gotoAction == undefined)
125
204
  throw new LR1ParserGraveError(`No GOTO action for for state: ${topNode} and production: ${production.identifier}. Actions: Reduce by production ${productionIndex}`, token);
126
205
  else if (gotoAction.type !== "goto")
127
206
  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);
207
+ this.pushState(gotoAction.value);
129
208
  }
130
209
  }
210
+ if (this.symbolsStack.isEmpty)
211
+ return { result: null, errors: this.exceptions };
131
212
  const top = this.symbolsStack.peek();
132
213
  return { result: top.type === "node" ? top.node : null, errors: this.exceptions };
133
214
  }
215
+ pushState(state) {
216
+ if (state === undefined || this.options.states[state] == null)
217
+ 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);
218
+ this.statesStack.push(state);
219
+ }
220
+ insertToken(token) {
221
+ var _a;
222
+ const state = this.options.states[this.statesStack.peek()];
223
+ const action = state === null || state === void 0 ? void 0 : state.getTerminalAction(this.options.toStringifiedTokenType(token.type));
224
+ if (action == null)
225
+ return {
226
+ success: false,
227
+ 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"}`,
228
+ };
229
+ if (action.type !== "shift")
230
+ return {
231
+ success: false,
232
+ reason: `Cannot insert ${this.options.toStringifiedTokenType(token.type)} here: state ${this.statesStack.peek()} reduces on it instead of shifting it`,
233
+ };
234
+ this.pushState(action.value);
235
+ this.symbolsStack.push({ type: "token", token });
236
+ return undefined;
237
+ }
238
+ syntaxErrorMessage(state, token) {
239
+ const expected = state.getTerminalKeys();
240
+ const got = this.options.toStringifiedTokenType(token.type);
241
+ const lexeme = token.lexeme === "" ? "" : ` ("${token.lexeme}")`;
242
+ 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("], [")}]`}`;
243
+ }
134
244
  }
245
+ exports.LR1Parser = LR1Parser;
135
246
  class LR1ParserGraveError extends Error {
136
247
  constructor(reason, currentToken, err) {
137
- super(reason);
248
+ super(reason, err === undefined ? undefined : { cause: err });
138
249
  this.reason = reason;
139
250
  this.currentToken = currentToken;
251
+ this.name = "LR1ParserGraveError";
140
252
  }
141
253
  }
142
254
  exports.LR1ParserGraveError = LR1ParserGraveError;
255
+ class SparseGrammarError extends Error {
256
+ constructor(reason, token) {
257
+ super(`Encountered error "${reason}" at ${token.line}:${token.column}`);
258
+ this.reason = reason;
259
+ this.token = token;
260
+ this.name = "SparseGrammarError";
261
+ }
262
+ }
263
+ exports.SparseGrammarError = SparseGrammarError;
264
+ const truncate = (value, max) => value.length <= max ? value : `${value.slice(0, max)}... (${value.length} characters)`;
265
+ const describeProduction = (production) => production.name == null ? ` (${production.identifier})` : ` ("${production.name}")`;
143
266
  //# sourceMappingURL=parser.js.map