grammar-well 2.1.0 → 2.3.0

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 (134) hide show
  1. package/README.md +74 -1
  2. package/build/generator/artifacts/basic.d.ts +1 -1
  3. package/build/generator/artifacts/basic.js.map +1 -1
  4. package/build/generator/artifacts/lexer.d.ts +2 -2
  5. package/build/generator/artifacts/lexer.js +1 -1
  6. package/build/generator/artifacts/lexer.js.map +1 -1
  7. package/build/generator/artifacts/lr.d.ts +5 -5
  8. package/build/generator/artifacts/lr.js +2 -2
  9. package/build/generator/artifacts/lr.js.map +1 -1
  10. package/build/generator/generator.d.ts +3 -3
  11. package/build/generator/generator.js +3 -3
  12. package/build/generator/generator.js.map +1 -1
  13. package/build/generator/grammars/index.d.ts +2 -2
  14. package/build/generator/grammars/index.js +2 -2
  15. package/build/generator/import-resolvers/auto.d.ts +1 -1
  16. package/build/generator/import-resolvers/browser.d.ts +1 -1
  17. package/build/generator/import-resolvers/browser.js.map +1 -1
  18. package/build/generator/import-resolvers/dictionary.d.ts +1 -1
  19. package/build/generator/import-resolvers/dictionary.js.map +1 -1
  20. package/build/generator/import-resolvers/filesystem.d.ts +1 -1
  21. package/build/generator/index.d.ts +3 -3
  22. package/build/generator/index.js +3 -3
  23. package/build/generator/state.d.ts +1 -1
  24. package/build/generator/stringify/common.d.ts +2 -2
  25. package/build/generator/stringify/common.js.map +1 -1
  26. package/build/generator/stringify/exports/javascript.d.ts +1 -1
  27. package/build/generator/stringify/exports/json.d.ts +1 -1
  28. package/build/generator/stringify/exports/registry.d.ts +6 -6
  29. package/build/generator/stringify/exports/typescript.d.ts +1 -1
  30. package/build/generator/stringify/grammar/v2.d.ts +1 -1
  31. package/build/generator/stringify/javascript.d.ts +2 -2
  32. package/build/generator/stringify/javascript.js.map +1 -1
  33. package/build/index.d.ts +7 -7
  34. package/build/index.js +7 -7
  35. package/build/lexers/character-lexer.d.ts +1 -1
  36. package/build/lexers/stateful-lexer.d.ts +1 -1
  37. package/build/lexers/token-buffer.d.ts +3 -3
  38. package/build/lexers/token-buffer.js +2 -2
  39. package/build/lexers/token-buffer.js.map +1 -1
  40. package/build/parser/algorithms/cyk.d.ts +2 -2
  41. package/build/parser/algorithms/earley.d.ts +15 -12
  42. package/build/parser/algorithms/earley.js +29 -17
  43. package/build/parser/algorithms/earley.js.map +1 -1
  44. package/build/parser/algorithms/lrk/algorithm.d.ts +2 -2
  45. package/build/parser/algorithms/lrk/algorithm.js +31 -21
  46. package/build/parser/algorithms/lrk/algorithm.js.map +1 -1
  47. package/build/parser/algorithms/lrk/canonical-collection.d.ts +10 -10
  48. package/build/parser/algorithms/lrk/canonical-collection.js +73 -49
  49. package/build/parser/algorithms/lrk/canonical-collection.js.map +1 -1
  50. package/build/parser/algorithms/lrk/stack.d.ts +8 -18
  51. package/build/parser/algorithms/lrk/stack.js +11 -24
  52. package/build/parser/algorithms/lrk/stack.js.map +1 -1
  53. package/build/parser/algorithms/lrk/typings.d.ts +16 -0
  54. package/build/parser/algorithms/lrk/typings.js +2 -0
  55. package/build/parser/algorithms/lrk/typings.js.map +1 -0
  56. package/build/parser/algorithms/noop.d.ts +7 -0
  57. package/build/parser/algorithms/noop.js +9 -0
  58. package/build/parser/algorithms/noop.js.map +1 -0
  59. package/build/parser/parse.d.ts +1 -1
  60. package/build/parser/parse.js +3 -1
  61. package/build/parser/parse.js.map +1 -1
  62. package/build/typings/ast.d.ts +1 -1
  63. package/build/typings/generator.d.ts +4 -4
  64. package/build/typings/index.d.ts +8 -8
  65. package/build/typings/index.js +4 -4
  66. package/build/typings/runtime.d.ts +3 -3
  67. package/build/utility/format.js +3 -3
  68. package/build/utility/general.d.ts +2 -2
  69. package/build/utility/general.js +1 -1
  70. package/build/utility/general.js.map +1 -1
  71. package/build/utility/index.d.ts +4 -4
  72. package/build/utility/index.js +4 -4
  73. package/build/utility/lint.d.ts +1 -1
  74. package/build/utility/monarch.d.ts +1 -1
  75. package/build/utility/parsing.d.ts +2 -2
  76. package/build/utility/parsing.js.map +1 -1
  77. package/build/utility/text-format.d.ts +3 -3
  78. package/build/utility/text-format.js +4 -4
  79. package/build/utility/text-format.js.map +1 -1
  80. package/build/version.json +1 -1
  81. package/package.json +13 -11
  82. package/src/generator/artifacts/basic.ts +6 -4
  83. package/src/generator/artifacts/lexer.ts +6 -4
  84. package/src/generator/artifacts/lr.ts +10 -7
  85. package/src/generator/generator.ts +17 -11
  86. package/src/generator/grammars/index.ts +2 -2
  87. package/src/generator/grammars/v1.ts +1 -1
  88. package/src/generator/grammars/v2.ts +1 -1
  89. package/src/generator/import-resolvers/auto.ts +3 -3
  90. package/src/generator/import-resolvers/browser.ts +5 -2
  91. package/src/generator/import-resolvers/dictionary.ts +5 -2
  92. package/src/generator/import-resolvers/filesystem.ts +1 -1
  93. package/src/generator/index.ts +3 -3
  94. package/src/generator/state.ts +1 -1
  95. package/src/generator/stringify/common.ts +6 -3
  96. package/src/generator/stringify/exports/javascript.ts +1 -1
  97. package/src/generator/stringify/exports/json.ts +1 -1
  98. package/src/generator/stringify/exports/registry.ts +4 -4
  99. package/src/generator/stringify/exports/typescript.ts +1 -1
  100. package/src/generator/stringify/grammar/v2.ts +1 -1
  101. package/src/generator/stringify/javascript.ts +12 -8
  102. package/src/index.ts +7 -7
  103. package/src/lexers/character-lexer.ts +1 -1
  104. package/src/lexers/stateful-lexer.ts +1 -1
  105. package/src/lexers/token-buffer.ts +16 -3
  106. package/src/parser/algorithms/cyk.ts +4 -4
  107. package/src/parser/algorithms/earley.ts +67 -36
  108. package/src/parser/algorithms/lrk/algorithm.ts +40 -25
  109. package/src/parser/algorithms/lrk/canonical-collection.ts +84 -55
  110. package/src/parser/algorithms/lrk/stack.ts +12 -37
  111. package/src/parser/algorithms/lrk/typings.ts +13 -0
  112. package/src/parser/algorithms/noop.ts +11 -0
  113. package/src/parser/parse.ts +11 -9
  114. package/src/typings/ast.ts +1 -1
  115. package/src/typings/generator.ts +4 -4
  116. package/src/typings/index.ts +8 -8
  117. package/src/typings/runtime.ts +3 -3
  118. package/src/utility/format.ts +4 -4
  119. package/src/utility/general.ts +4 -3
  120. package/src/utility/index.ts +4 -4
  121. package/src/utility/lint.ts +1 -1
  122. package/src/utility/monarch.ts +1 -1
  123. package/src/utility/parsing.ts +3 -2
  124. package/src/utility/text-format.ts +6 -6
  125. package/src/version.json +1 -1
  126. package/tsconfig.tsbuildinfo +1 -1
  127. package/build/parser/algorithms/lrk/closure.d.ts +0 -10
  128. package/build/parser/algorithms/lrk/closure.js +0 -26
  129. package/build/parser/algorithms/lrk/closure.js.map +0 -1
  130. package/build/parser/algorithms/lrk/state.d.ts +0 -12
  131. package/build/parser/algorithms/lrk/state.js +0 -2
  132. package/build/parser/algorithms/lrk/state.js.map +0 -1
  133. package/src/parser/algorithms/lrk/closure.ts +0 -37
  134. package/src/parser/algorithms/lrk/state.ts +0 -10
@@ -1,10 +1,10 @@
1
- import { RuntimeLexer, RuntimeLexerToken, TQRestorePoint } from '../typings/index.js';
1
+ import type { RuntimeLexer, RuntimeLexerToken, TQRestorePoint } from '../typings/index.ts';
2
2
  export declare class TokenBuffer {
3
- lexer: RuntimeLexer;
4
- private tokenProcessor?;
5
3
  private history;
6
4
  private queued;
7
5
  private $historyIndex;
6
+ lexer: RuntimeLexer;
7
+ private tokenProcessor?;
8
8
  get offset(): number;
9
9
  get line(): number;
10
10
  get column(): number;
@@ -1,9 +1,9 @@
1
1
  export class TokenBuffer {
2
- lexer;
3
- tokenProcessor;
4
2
  history = [];
5
3
  queued = '';
6
4
  $historyIndex = -1;
5
+ lexer;
6
+ tokenProcessor;
7
7
  get offset() { return this.active?.offset || 0; }
8
8
  get line() { return this.active?.line || 0; }
9
9
  get column() { return this.active?.column || 0; }
@@ -1 +1 @@
1
- {"version":3,"file":"token-buffer.js","sourceRoot":"","sources":["../../src/lexers/token-buffer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-buffer.js","sourceRoot":"","sources":["../../src/lexers/token-buffer.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { RuntimeGrammarProductionRule, RuntimeParserClass, RuntimeLexerToken } from "../../typings/index.js";
2
- import { TokenBuffer } from "../../lexers/token-buffer.js";
1
+ import type { RuntimeGrammarProductionRule, RuntimeParserClass, RuntimeLexerToken } from "../../typings/index.ts";
2
+ import { TokenBuffer } from "../../lexers/token-buffer.ts";
3
3
  export declare function CYK(language: RuntimeParserClass & {
4
4
  tokens: TokenBuffer;
5
5
  }, _options?: {}): {
@@ -1,7 +1,8 @@
1
- import { Dictionary, RuntimeGrammarProductionRule, RuntimeParserClass } from "../../typings/index.js";
2
- import { TokenBuffer } from "../../lexers/token-buffer.js";
1
+ import type { Dictionary, RuntimeGrammarProductionRule, RuntimeParserClass } from "../../typings/index.ts";
2
+ import { TokenBuffer } from "../../lexers/token-buffer.ts";
3
3
  export interface EarleyParserOptions {
4
4
  keepHistory?: boolean;
5
+ postProcessing?: 'eager' | 'lazy';
5
6
  }
6
7
  export declare function Earley(language: RuntimeParserClass & {
7
8
  tokens: TokenBuffer;
@@ -12,31 +13,32 @@ export declare function Earley(language: RuntimeParserClass & {
12
13
  };
13
14
  };
14
15
  declare class Column {
15
- private rules;
16
- index: number;
17
16
  data: any;
18
17
  states: State[];
19
18
  wants: Dictionary<State[]>;
20
19
  scannable: State[];
21
20
  completed: Dictionary<State[]>;
22
- constructor(rules: Dictionary<RuntimeGrammarProductionRule[]>, index: number);
21
+ index: number;
22
+ private rules;
23
+ private StateClass;
24
+ constructor(rules: Dictionary<RuntimeGrammarProductionRule[]>, index: number, StateClass: Concrete<typeof State>);
23
25
  process(): void;
24
26
  predict(exp: string): void;
25
27
  expects(): RuntimeGrammarProductionRule[];
26
28
  private complete;
27
29
  }
28
- declare class State {
29
- rule: RuntimeGrammarProductionRule;
30
- dot: number;
31
- reference: number;
32
- wantedBy: State[];
30
+ declare abstract class State {
33
31
  isComplete: boolean;
34
32
  data: any;
35
33
  left: State;
36
34
  right: State | StateToken;
35
+ rule: RuntimeGrammarProductionRule;
36
+ dot: number;
37
+ reference: number;
38
+ wantedBy: State[];
37
39
  constructor(rule: RuntimeGrammarProductionRule, dot: number, reference: number, wantedBy: State[]);
38
- nextState(child: State | StateToken): State;
39
- finish(): void;
40
+ nextState(child: State | StateToken): any;
41
+ abstract finish(): void;
40
42
  protected build(): any[];
41
43
  }
42
44
  interface StateToken {
@@ -45,4 +47,5 @@ interface StateToken {
45
47
  isToken: boolean;
46
48
  reference: number;
47
49
  }
50
+ type Concrete<T extends abstract new (...args: any) => any> = new (...args: ConstructorParameters<T>) => InstanceType<T>;
48
51
  export {};
@@ -3,7 +3,8 @@ import { ParserUtility } from "../../utility/parsing.js";
3
3
  export function Earley(language, options = {}) {
4
4
  const { tokens } = language;
5
5
  const { rules, start } = language.artifacts.grammar;
6
- const column = new Column(rules, 0);
6
+ const StateClass = options.postProcessing === 'eager' ? EagerState : LazyState;
7
+ const column = new Column(rules, 0, StateClass);
7
8
  const table = [column];
8
9
  column.wants[start] = [];
9
10
  column.predict(start);
@@ -15,7 +16,7 @@ export function Earley(language, options = {}) {
15
16
  delete table[current - 1];
16
17
  }
17
18
  current++;
18
- const nextColumn = new Column(rules, current);
19
+ const nextColumn = new Column(rules, current, StateClass);
19
20
  table.push(nextColumn);
20
21
  const literal = token.value;
21
22
  const data = token;
@@ -42,9 +43,11 @@ export function Earley(language, options = {}) {
42
43
  results.push(data);
43
44
  }
44
45
  }
45
- const clone = results.length > 1;
46
- for (let i = 0; i < results.length; i++) {
47
- results[i] = PostProcess(results[i], clone);
46
+ if (StateClass == LazyState) {
47
+ const clone = results.length > 1;
48
+ for (let i = 0; i < results.length; i++) {
49
+ results[i] = PostProcess(results[i], clone);
50
+ }
48
51
  }
49
52
  return { results, info: { table } };
50
53
  }
@@ -58,16 +61,18 @@ function PostProcess(ast, clone) {
58
61
  return ParserUtility.PostProcess(ast[0], data, ast[2]);
59
62
  }
60
63
  class Column {
61
- rules;
62
- index;
63
64
  data;
64
65
  states = [];
65
66
  wants = Object.create(null);
66
67
  scannable = [];
67
68
  completed = Object.create(null);
68
- constructor(rules, index) {
69
+ index;
70
+ rules;
71
+ StateClass;
72
+ constructor(rules, index, StateClass) {
69
73
  this.rules = rules;
70
74
  this.index = index;
75
+ this.StateClass = StateClass;
71
76
  }
72
77
  process() {
73
78
  let w = 0;
@@ -110,7 +115,7 @@ class Column {
110
115
  if (!this.rules[exp])
111
116
  return;
112
117
  for (const rule of this.rules[exp]) {
113
- this.states.push(new State(rule, 0, this.index, this.wants[exp]));
118
+ this.states.push(new this.StateClass(rule, 0, this.index, this.wants[exp]));
114
119
  }
115
120
  }
116
121
  expects() {
@@ -128,14 +133,14 @@ class Column {
128
133
  }
129
134
  }
130
135
  class State {
131
- rule;
132
- dot;
133
- reference;
134
- wantedBy;
135
136
  isComplete;
136
137
  data = [];
137
138
  left;
138
139
  right;
140
+ rule;
141
+ dot;
142
+ reference;
143
+ wantedBy;
139
144
  constructor(rule, dot, reference, wantedBy) {
140
145
  this.rule = rule;
141
146
  this.dot = dot;
@@ -144,7 +149,7 @@ class State {
144
149
  this.isComplete = this.dot === rule.symbols.length;
145
150
  }
146
151
  nextState(child) {
147
- const state = new State(this.rule, this.dot + 1, this.reference, this.wantedBy);
152
+ const state = new this.constructor(this.rule, this.dot + 1, this.reference, this.wantedBy);
148
153
  state.left = this;
149
154
  state.right = child;
150
155
  if (state.isComplete) {
@@ -153,9 +158,6 @@ class State {
153
158
  }
154
159
  return state;
155
160
  }
156
- finish() {
157
- this.data = [this.rule, this.data, { reference: this.reference, dot: this.dot }];
158
- }
159
161
  build() {
160
162
  const children = [];
161
163
  let node = this;
@@ -166,4 +168,14 @@ class State {
166
168
  return children;
167
169
  }
168
170
  }
171
+ class EagerState extends State {
172
+ finish() {
173
+ this.data = ParserUtility.PostProcess(this.rule, this.data, { reference: this.reference, dot: this.dot });
174
+ }
175
+ }
176
+ class LazyState extends State {
177
+ finish() {
178
+ this.data = [this.rule, this.data, { reference: this.reference, dot: this.dot }];
179
+ }
180
+ }
169
181
  //# sourceMappingURL=earley.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"earley.js","sourceRoot":"","sources":["../../../src/parser/algorithms/earley.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"earley.js","sourceRoot":"","sources":["../../../src/parser/algorithms/earley.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { RuntimeParserClass } from "../../../typings/index.js";
2
- import { TokenBuffer } from "../../../lexers/token-buffer.js";
1
+ import type { RuntimeParserClass } from "../../../typings/index.ts";
2
+ import { TokenBuffer } from "../../../lexers/token-buffer.ts";
3
3
  export declare function LRK(language: RuntimeParserClass & {
4
4
  tokens: TokenBuffer;
5
5
  }, options?: {}): {
@@ -1,32 +1,42 @@
1
1
  import { ParserUtility } from "../../../utility/parsing.js";
2
2
  import { CanonicalCollection } from "./canonical-collection.js";
3
- import { LRStack } from "./stack.js";
3
+ import { Stack } from "./stack.js";
4
4
  export function LRK(language, options = {}) {
5
5
  const { grammar } = language.artifacts;
6
6
  const { tokens } = language;
7
- const { states, rules: rules } = new CanonicalCollection(grammar);
8
- const stack = new LRStack();
9
- const s = states.get('0.0');
10
- stack.append(s.rule.name);
11
- stack.shift(s);
7
+ const { start } = new CanonicalCollection(grammar);
8
+ const stateStack = new Stack();
9
+ const inputStack = new Stack();
10
+ stateStack.push(start);
12
11
  let token;
13
- while (token = tokens.next()) {
14
- for (const [symbol, state] of stack.current.state.actions) {
15
- if (ParserUtility.SymbolMatchesToken(symbol, token)) {
16
- stack.append(symbol);
17
- stack.shift(states.get(state));
18
- stack.current.value = token;
19
- break;
20
- }
12
+ tokenloop: while (token = tokens.next()) {
13
+ const match = stateStack.current.actions.find(a => ParserUtility.SymbolMatchesToken(a.symbol, token));
14
+ if (match) {
15
+ inputStack.push(token);
16
+ stateStack.push(match.state);
21
17
  }
22
- while (stack.current.state?.isFinal) {
23
- const rule = rules.fetch(stack.current.state.reduce);
24
- stack.reduce(rule);
25
- stack.current.value = ParserUtility.PostProcess(rule, stack.current.children.map(v => v.value));
26
- const s = stack.previous.state.goto.get(rule.name);
27
- stack.shift(states.get(s));
18
+ else {
19
+ throw new Error("Syntax Error: Unexpected Token");
28
20
  }
21
+ while (stateStack.current.reduce) {
22
+ const rule = stateStack.current.reduce;
23
+ const value = inputStack.pop(rule.symbols.length);
24
+ stateStack.pop(rule.symbols.length);
25
+ inputStack.push(ParserUtility.PostProcess(rule, value));
26
+ const nextState = stateStack.current.goto[rule.name];
27
+ if (!nextState)
28
+ break tokenloop;
29
+ stateStack.push(nextState);
30
+ }
31
+ }
32
+ if (stateStack.size > 1) {
33
+ throw new Error("Syntax Error: Unexpected End of Input");
34
+ }
35
+ const peek = tokens.next();
36
+ if (peek) {
37
+ console.log(peek);
38
+ throw new Error("Syntax Error: Expected End of Input");
29
39
  }
30
- return { results: [stack.current.value] };
40
+ return { results: [inputStack.current[0]] };
31
41
  }
32
42
  //# sourceMappingURL=algorithm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"algorithm.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/algorithm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,UAAU,GAAG,CAAC,QAAsD,EAAE,OAAO,GAAG,EAAE;IACpF,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;IACvC,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,KAAK,CAAC;IAEV,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxD,IAAI,aAAa,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;gBAClD,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACrB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/B,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC5B,MAAM;YACV,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAChG,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/B,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAA;AAC7C,CAAC"}
1
+ {"version":3,"file":"algorithm.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/algorithm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,UAAU,GAAG,CAAC,QAAsD,EAAE,OAAO,GAAG,EAAE;IACpF,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;IACvC,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,KAAK,EAAS,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,KAAK,EAAO,CAAC;IACpC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEvB,IAAI,KAAK,CAAC;IAEV,SAAS,EAAE,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAEtG,IAAI,KAAK,EAAE,CAAC;YACR,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;YACvC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACxD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAErD,IAAI,CAAC,SAAS;gBACV,MAAM,SAAS,CAAC;YAEpB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,IAAI,EAAE,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC/C,CAAC"}
@@ -1,14 +1,14 @@
1
- import { RuntimeGrammarProductionRule, RuntimeGrammarRuleSymbol, RuntimeParserClass } from "../../../typings/index.js";
2
- import { BiMap } from "./bimap.js";
3
- import { State } from "./state.js";
1
+ import type { RuntimeGrammarProductionRule, RuntimeParserClass } from "../../../typings/index.ts";
2
+ import { BiMap } from "./bimap.ts";
3
+ import type { State } from "./typings.ts";
4
4
  export declare class CanonicalCollection {
5
- grammar: RuntimeParserClass['artifacts']['grammar'];
6
- states: Map<string, State>;
5
+ start: State;
7
6
  rules: BiMap<RuntimeGrammarProductionRule>;
8
- terminals: BiMap<RuntimeGrammarRuleSymbol>;
9
- private closure;
7
+ grammar: RuntimeParserClass['artifacts']['grammar'];
8
+ private cache;
10
9
  constructor(grammar: RuntimeParserClass['artifacts']['grammar']);
11
- private addState;
12
- private linkStates;
13
- private getStateId;
10
+ private generateState;
11
+ private canonicalStateId;
12
+ private canonicalLRItemId;
13
+ private canonicalSymbolId;
14
14
  }
@@ -1,69 +1,93 @@
1
1
  import { ParserUtility } from "../../../utility/parsing.js";
2
+ import { TextFormatter } from "../../../utility/text-format.js";
2
3
  import { BiMap } from "./bimap.js";
3
- import { ClosureBuilder } from "./closure.js";
4
4
  export class CanonicalCollection {
5
- grammar;
6
- states = new Map();
5
+ start;
7
6
  rules = new BiMap();
8
- terminals = new BiMap();
9
- closure;
7
+ grammar;
8
+ cache = {};
10
9
  constructor(grammar) {
11
10
  this.grammar = grammar;
12
11
  const augmented = {
13
12
  name: Symbol(),
14
13
  symbols: [this.grammar.start]
15
14
  };
16
- this.grammar['rules'][augmented.name] = [augmented];
17
- this.closure = new ClosureBuilder(this.grammar);
15
+ this.grammar.rules[augmented.name] = [augmented];
18
16
  this.rules.id(augmented);
19
- this.addState(this.grammar['rules'][augmented.name][0], 0);
20
- this.linkStates('0.0');
17
+ this.start = this.generateState([{ rule: augmented, dot: 0 }]);
21
18
  }
22
- addState(rule, dot) {
23
- const id = this.getStateId(rule, dot);
24
- if (this.states.has(id))
25
- return;
26
- const state = {
27
- items: [],
28
- isFinal: false,
29
- actions: new Map(),
30
- goto: new Map(),
31
- reduce: null,
32
- rule: rule
33
- };
34
- state.items.push({ rule, dot });
35
- if (rule.symbols.length == dot)
36
- state.isFinal = true;
37
- this.states.set(id, state);
38
- state.items.push(...this.closure.get(rule.symbols[dot]));
39
- if (!state.isFinal)
40
- for (const { rule, dot } of state.items) {
41
- this.addState(rule, dot + 1);
42
- }
43
- }
44
- linkStates(id, completed = new Set()) {
45
- completed.add(id);
46
- const state = this.states.get(id);
47
- if (!state.isFinal) {
48
- for (const { rule, dot } of state.items) {
49
- const symbol = rule.symbols[dot];
50
- const itemStateId = this.getStateId(rule, dot + 1);
51
- if (ParserUtility.SymbolIsTerminal(symbol) && typeof symbol != 'symbol') {
52
- state.actions.set(symbol, itemStateId);
53
- }
54
- else {
55
- state.goto.set(symbol, itemStateId);
19
+ generateState(kernel) {
20
+ const id = this.canonicalStateId(kernel);
21
+ if (this.cache[id])
22
+ return this.cache[id];
23
+ this.cache[id] = { id };
24
+ if (kernel.length == 1 && kernel[0].rule.symbols.length == kernel[0].dot) {
25
+ this.cache[id].reduce = kernel[0].rule;
26
+ return this.cache[id];
27
+ }
28
+ const items = [...kernel];
29
+ const visited = new Set();
30
+ const refs = {};
31
+ const actions = {};
32
+ const goto = {};
33
+ for (let i = 0; i < items.length; i++) {
34
+ const { rule, dot } = items[i];
35
+ const id = this.canonicalLRItemId(items[i]);
36
+ if (dot == rule.symbols.length)
37
+ throw new Error('Reduce Conflict on state: ' + id + `\n${items.map(v => TextFormatter.GrammarRule(v.rule, v.dot)).join('\n')}`);
38
+ if (visited.has(id))
39
+ continue;
40
+ visited.add(id);
41
+ const symbol = rule.symbols[dot];
42
+ const name = this.canonicalSymbolId(symbol);
43
+ refs[name] = symbol;
44
+ if (symbol && !ParserUtility.SymbolIsTerminal(symbol)) {
45
+ const prods = this.grammar.rules[symbol] || [];
46
+ for (const rule of prods) {
47
+ items.push({ rule, dot: 0 });
56
48
  }
57
- if (!completed.has(itemStateId))
58
- this.linkStates(itemStateId, completed);
49
+ goto[name] = goto[name] || [];
50
+ goto[name].push({ rule, dot: dot + 1 });
51
+ }
52
+ else {
53
+ actions[name] = actions[name] || [];
54
+ actions[name].push({ rule, dot: dot + 1 });
59
55
  }
60
56
  }
61
- else {
62
- state.reduce = this.rules.id(state.rule);
57
+ this.cache[id].actions = [];
58
+ this.cache[id].goto = {};
59
+ for (const key in actions) {
60
+ this.cache[id].actions.push({ symbol: refs[key], state: this.generateState(actions[key]) });
61
+ }
62
+ for (const key in goto) {
63
+ this.cache[id].goto[refs[key]] = this.generateState(goto[key]);
63
64
  }
65
+ return this.cache[id];
64
66
  }
65
- getStateId(rule, dot) {
66
- return this.rules.id(rule) + '.' + dot;
67
+ canonicalStateId(items) {
68
+ return items
69
+ .map(item => this.canonicalLRItemId(item))
70
+ .sort()
71
+ .join('|');
72
+ }
73
+ canonicalLRItemId(item) {
74
+ return `${this.rules.id(item.rule)}:${item.dot}`;
75
+ }
76
+ canonicalSymbolId(symbol) {
77
+ if (typeof symbol === 'symbol')
78
+ return `SY:START`;
79
+ if (typeof symbol === 'string')
80
+ return `NT:${symbol}`;
81
+ if (typeof symbol == 'function')
82
+ return `FN:${symbol.toString()}`;
83
+ if (!symbol)
84
+ return;
85
+ if (symbol instanceof RegExp)
86
+ return `RG:${symbol.source}`;
87
+ if ("token" in symbol)
88
+ return `TK:${symbol.token}`;
89
+ if ("literal" in symbol)
90
+ return `LT:${symbol.literal}`;
67
91
  }
68
92
  }
69
93
  //# sourceMappingURL=canonical-collection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canonical-collection.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/canonical-collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,OAAO,mBAAmB;IAOjB;IANX,MAAM,GAAuB,IAAI,GAAG,EAAE,CAAC;IACvC,KAAK,GAAwC,IAAI,KAAK,EAAE,CAAC;IACzD,SAAS,GAAoC,IAAI,KAAK,EAAE,CAAC;IAEjD,OAAO,CAAiB;IAChC,YACW,OAAoD;QAApD,YAAO,GAAP,OAAO,CAA6C;QAE3D,MAAM,SAAS,GAAG;YACd,IAAI,EAAE,MAAM,EAAuB;YACnC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;SAChC,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAEO,QAAQ,CAAC,IAAkC,EAAE,GAAW;QAC5D,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO;QAEX,MAAM,KAAK,GAAU;YACjB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,IAAI,EAAE,IAAI,GAAG,EAAE;YACf,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;SACb,CAAA;QAED,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG;YAC1B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAE3B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAW,CAAC,CAAC,CAAA;QAElE,IAAI,CAAC,KAAK,CAAC,OAAO;YACd,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACjC,CAAC;IACT,CAAC;IAEO,UAAU,CAAC,EAAU,EAAE,YAAyB,IAAI,GAAG,EAAE;QAC7D,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACjB,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;gBACnD,IAAI,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE,CAAC;oBACtE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACJ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBACxC,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;oBAC3B,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAChD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,IAAkC,EAAE,GAAW;QAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3C,CAAC;CACJ"}
1
+ {"version":3,"file":"canonical-collection.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/canonical-collection.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,9 @@
1
- import { RuntimeGrammarProductionRule, RuntimeGrammarRuleSymbol } from "../../../typings/index.js";
2
- import { State } from "./state.js";
3
- export declare class LRStack {
4
- stack: LRStackItem[];
5
- get current(): LRStackItem;
6
- get previous(): LRStackItem;
7
- shift(state: State): void;
8
- reduce(rule: RuntimeGrammarProductionRule): void;
9
- append(symbol: RuntimeGrammarRuleSymbol): void;
10
- static NewItem(): LRStackItem;
1
+ export declare class Stack<T> {
2
+ private stack;
3
+ get size(): number;
4
+ get previous(): T;
5
+ get current(): T;
6
+ set current(item: T);
7
+ push(...items: T[]): number;
8
+ pop(n?: number): T[];
11
9
  }
12
- interface LRStackItem {
13
- children: LRStackItem[];
14
- state: State;
15
- symbol: RuntimeGrammarRuleSymbol;
16
- rule: RuntimeGrammarProductionRule;
17
- value: any;
18
- }
19
- export {};
@@ -1,35 +1,22 @@
1
- export class LRStack {
1
+ export class Stack {
2
2
  stack = [];
3
- get current() {
4
- return this.stack[this.stack.length - 1];
3
+ get size() {
4
+ return this.stack.length;
5
5
  }
6
6
  get previous() {
7
7
  return this.stack[this.stack.length - 2];
8
8
  }
9
- shift(state) {
10
- this.current.state = state;
9
+ get current() {
10
+ return this.stack[this.stack.length - 1];
11
11
  }
12
- reduce(rule) {
13
- const n = LRStack.NewItem();
14
- const l = rule.symbols.length;
15
- n.children = this.stack.splice(l * -1, l);
16
- n.children.forEach(v => delete v.state);
17
- n.rule = rule;
18
- n.symbol = rule.name;
19
- this.stack.push(n);
12
+ set current(item) {
13
+ this.stack[this.stack.length - 1] = item;
20
14
  }
21
- append(symbol) {
22
- this.stack.push(LRStack.NewItem());
23
- this.current.symbol = symbol;
15
+ push(...items) {
16
+ return this.stack.push(...items);
24
17
  }
25
- static NewItem() {
26
- return {
27
- children: [],
28
- state: null,
29
- symbol: null,
30
- rule: null,
31
- value: null
32
- };
18
+ pop(n = 1) {
19
+ return this.stack.splice(n * -1, n);
33
20
  }
34
21
  }
35
22
  //# sourceMappingURL=stack.js.map