grammar-well 2.0.7 → 2.2.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 (121) hide show
  1. package/build/generator/artifacts/basic.d.ts +1 -1
  2. package/build/generator/artifacts/basic.js.map +1 -1
  3. package/build/generator/artifacts/lexer.d.ts +2 -2
  4. package/build/generator/artifacts/lexer.js +1 -1
  5. package/build/generator/artifacts/lexer.js.map +1 -1
  6. package/build/generator/artifacts/lr.d.ts +5 -5
  7. package/build/generator/artifacts/lr.js +2 -2
  8. package/build/generator/artifacts/lr.js.map +1 -1
  9. package/build/generator/generator.d.ts +3 -3
  10. package/build/generator/generator.js +3 -3
  11. package/build/generator/generator.js.map +1 -1
  12. package/build/generator/grammars/index.d.ts +2 -2
  13. package/build/generator/grammars/index.js +2 -2
  14. package/build/generator/import-resolvers/auto.d.ts +1 -1
  15. package/build/generator/import-resolvers/browser.d.ts +1 -1
  16. package/build/generator/import-resolvers/browser.js.map +1 -1
  17. package/build/generator/import-resolvers/dictionary.d.ts +1 -1
  18. package/build/generator/import-resolvers/dictionary.js.map +1 -1
  19. package/build/generator/import-resolvers/filesystem.d.ts +1 -1
  20. package/build/generator/index.d.ts +3 -3
  21. package/build/generator/index.js +3 -3
  22. package/build/generator/state.d.ts +1 -1
  23. package/build/generator/stringify/common.d.ts +2 -2
  24. package/build/generator/stringify/common.js.map +1 -1
  25. package/build/generator/stringify/exports/javascript.d.ts +1 -1
  26. package/build/generator/stringify/exports/json.d.ts +1 -1
  27. package/build/generator/stringify/exports/registry.d.ts +6 -6
  28. package/build/generator/stringify/exports/typescript.d.ts +1 -1
  29. package/build/generator/stringify/grammar/v2.d.ts +1 -1
  30. package/build/generator/stringify/javascript.d.ts +2 -2
  31. package/build/generator/stringify/javascript.js.map +1 -1
  32. package/build/index.d.ts +7 -7
  33. package/build/index.js +7 -7
  34. package/build/lexers/character-lexer.d.ts +1 -1
  35. package/build/lexers/stateful-lexer.d.ts +1 -1
  36. package/build/lexers/token-buffer.d.ts +3 -3
  37. package/build/lexers/token-buffer.js +2 -2
  38. package/build/lexers/token-buffer.js.map +1 -1
  39. package/build/parser/algorithms/cyk.d.ts +2 -2
  40. package/build/parser/algorithms/earley.d.ts +15 -12
  41. package/build/parser/algorithms/earley.js +39 -14
  42. package/build/parser/algorithms/earley.js.map +1 -1
  43. package/build/parser/algorithms/lrk/algorithm.d.ts +2 -2
  44. package/build/parser/algorithms/lrk/algorithm.js +31 -21
  45. package/build/parser/algorithms/lrk/algorithm.js.map +1 -1
  46. package/build/parser/algorithms/lrk/canonical-collection.d.ts +10 -10
  47. package/build/parser/algorithms/lrk/canonical-collection.js +73 -49
  48. package/build/parser/algorithms/lrk/canonical-collection.js.map +1 -1
  49. package/build/parser/algorithms/lrk/closure.d.ts +1 -1
  50. package/build/parser/algorithms/lrk/closure.js.map +1 -1
  51. package/build/parser/algorithms/lrk/stack.d.ts +8 -18
  52. package/build/parser/algorithms/lrk/stack.js +11 -24
  53. package/build/parser/algorithms/lrk/stack.js.map +1 -1
  54. package/build/parser/algorithms/lrk/state.d.ts +1 -1
  55. package/build/parser/algorithms/lrk/typings.d.ts +16 -0
  56. package/build/parser/algorithms/lrk/typings.js +2 -0
  57. package/build/parser/algorithms/lrk/typings.js.map +1 -0
  58. package/build/parser/parse.d.ts +1 -1
  59. package/build/typings/ast.d.ts +1 -1
  60. package/build/typings/generator.d.ts +4 -4
  61. package/build/typings/index.d.ts +8 -8
  62. package/build/typings/index.js +4 -4
  63. package/build/typings/runtime.d.ts +3 -3
  64. package/build/utility/format.js +3 -3
  65. package/build/utility/general.d.ts +2 -2
  66. package/build/utility/general.js +1 -1
  67. package/build/utility/general.js.map +1 -1
  68. package/build/utility/index.d.ts +4 -4
  69. package/build/utility/index.js +4 -4
  70. package/build/utility/lint.d.ts +1 -1
  71. package/build/utility/monarch.d.ts +1 -1
  72. package/build/utility/parsing.d.ts +2 -2
  73. package/build/utility/text-format.d.ts +2 -2
  74. package/build/version.json +1 -1
  75. package/package.json +8 -9
  76. package/src/generator/artifacts/basic.ts +6 -4
  77. package/src/generator/artifacts/lexer.ts +6 -4
  78. package/src/generator/artifacts/lr.ts +10 -7
  79. package/src/generator/generator.ts +17 -11
  80. package/src/generator/grammars/index.ts +2 -2
  81. package/src/generator/grammars/v1.ts +1 -1
  82. package/src/generator/grammars/v2.ts +1 -1
  83. package/src/generator/import-resolvers/auto.ts +3 -3
  84. package/src/generator/import-resolvers/browser.ts +5 -2
  85. package/src/generator/import-resolvers/dictionary.ts +5 -2
  86. package/src/generator/import-resolvers/filesystem.ts +1 -1
  87. package/src/generator/index.ts +3 -3
  88. package/src/generator/state.ts +1 -1
  89. package/src/generator/stringify/common.ts +6 -3
  90. package/src/generator/stringify/exports/javascript.ts +1 -1
  91. package/src/generator/stringify/exports/json.ts +1 -1
  92. package/src/generator/stringify/exports/registry.ts +4 -4
  93. package/src/generator/stringify/exports/typescript.ts +1 -1
  94. package/src/generator/stringify/grammar/v2.ts +1 -1
  95. package/src/generator/stringify/javascript.ts +12 -8
  96. package/src/index.ts +7 -7
  97. package/src/lexers/character-lexer.ts +1 -1
  98. package/src/lexers/stateful-lexer.ts +1 -1
  99. package/src/lexers/token-buffer.ts +16 -3
  100. package/src/parser/algorithms/cyk.ts +4 -4
  101. package/src/parser/algorithms/earley.ts +68 -20
  102. package/src/parser/algorithms/lrk/algorithm.ts +40 -25
  103. package/src/parser/algorithms/lrk/canonical-collection.ts +84 -55
  104. package/src/parser/algorithms/lrk/stack.ts +12 -37
  105. package/src/parser/algorithms/lrk/typings.ts +13 -0
  106. package/src/parser/parse.ts +8 -8
  107. package/src/typings/ast.ts +1 -1
  108. package/src/typings/generator.ts +4 -4
  109. package/src/typings/index.ts +8 -8
  110. package/src/typings/runtime.ts +3 -3
  111. package/src/utility/format.ts +4 -4
  112. package/src/utility/general.ts +4 -3
  113. package/src/utility/index.ts +4 -4
  114. package/src/utility/lint.ts +1 -1
  115. package/src/utility/monarch.ts +1 -1
  116. package/src/utility/parsing.ts +1 -1
  117. package/src/utility/text-format.ts +2 -2
  118. package/src/version.json +1 -1
  119. package/tsconfig.tsbuildinfo +1 -1
  120. package/src/parser/algorithms/lrk/closure.ts +0 -37
  121. package/src/parser/algorithms/lrk/state.ts +0 -10
@@ -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
+ private rules;
22
+ index: number;
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,19 +43,36 @@ export function Earley(language, options = {}) {
42
43
  results.push(data);
43
44
  }
44
45
  }
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
+ }
51
+ }
45
52
  return { results, info: { table } };
46
53
  }
54
+ function PostProcess(ast, clone) {
55
+ if (!Array.isArray(ast))
56
+ return clone ? { ...ast } : ast;
57
+ const data = [];
58
+ for (let i = 0; i < ast[1].length; i++) {
59
+ data[i] = PostProcess(ast[1][i], clone);
60
+ }
61
+ return ParserUtility.PostProcess(ast[0], data, ast[2]);
62
+ }
47
63
  class Column {
48
- rules;
49
- index;
50
64
  data;
51
65
  states = [];
52
66
  wants = Object.create(null);
53
67
  scannable = [];
54
68
  completed = Object.create(null);
55
- constructor(rules, index) {
69
+ rules;
70
+ index;
71
+ StateClass;
72
+ constructor(rules, index, StateClass) {
56
73
  this.rules = rules;
57
74
  this.index = index;
75
+ this.StateClass = StateClass;
58
76
  }
59
77
  process() {
60
78
  let w = 0;
@@ -97,7 +115,7 @@ class Column {
97
115
  if (!this.rules[exp])
98
116
  return;
99
117
  for (const rule of this.rules[exp]) {
100
- 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]));
101
119
  }
102
120
  }
103
121
  expects() {
@@ -115,14 +133,14 @@ class Column {
115
133
  }
116
134
  }
117
135
  class State {
118
- rule;
119
- dot;
120
- reference;
121
- wantedBy;
122
136
  isComplete;
123
137
  data = [];
124
138
  left;
125
139
  right;
140
+ rule;
141
+ dot;
142
+ reference;
143
+ wantedBy;
126
144
  constructor(rule, dot, reference, wantedBy) {
127
145
  this.rule = rule;
128
146
  this.dot = dot;
@@ -131,7 +149,7 @@ class State {
131
149
  this.isComplete = this.dot === rule.symbols.length;
132
150
  }
133
151
  nextState(child) {
134
- 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);
135
153
  state.left = this;
136
154
  state.right = child;
137
155
  if (state.isComplete) {
@@ -140,9 +158,6 @@ class State {
140
158
  }
141
159
  return state;
142
160
  }
143
- finish() {
144
- this.data = ParserUtility.PostProcess(this.rule, this.data, { reference: this.reference, dot: this.dot });
145
- }
146
161
  build() {
147
162
  const children = [];
148
163
  let node = this;
@@ -153,4 +168,14 @@ class State {
153
168
  return children;
154
169
  }
155
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
+ }
156
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":"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"}
1
+ {"version":3,"file":"canonical-collection.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/canonical-collection.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { RuntimeGrammarProductionRule, RuntimeParserClass } from "../../../typings/index.js";
1
+ import type { RuntimeGrammarProductionRule, RuntimeParserClass } from "../../../typings/index.ts";
2
2
  export declare class ClosureBuilder {
3
3
  private grammar;
4
4
  constructor(grammar: RuntimeParserClass['artifacts']['grammar']);
@@ -1 +1 @@
1
- {"version":3,"file":"closure.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/closure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,OAAO,cAAc;IAEX;IADZ,YACY,OAAmD;QAAnD,YAAO,GAAP,OAAO,CAA4C;IAC3D,CAAC;IAEL,GAAG,CAAC,IAAY;QACZ,MAAM,OAAO,GAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC,KAAK,CAAC;IACzB,CAAC;IAEO,UAAU,CAAC,OAAoB,EAAE,MAAgC;QACrE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,MAAgB,CAAC;YAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;oBACpC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;CACJ"}
1
+ {"version":3,"file":"closure.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/closure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,OAAO,cAAc;IACf,OAAO,CAA6C;IAC5D,YACI,OAAmD;QAEnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,IAAY;QACZ,MAAM,OAAO,GAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC,KAAK,CAAC;IACzB,CAAC;IAEO,UAAU,CAAC,OAAoB,EAAE,MAAgC;QACrE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,MAAgB,CAAC;YAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;oBACpC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;CACJ"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/stack.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,OAAO;IAEhB,KAAK,GAAkB,EAAE,CAAC;IAE1B,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAGD,KAAK,CAAC,KAAY;QACd,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,IAAkC;QACrC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC9B,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;QACd,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,MAAgC;QACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,OAAO;QACV,OAAO;YACH,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;SACd,CAAA;IACL,CAAC;CACJ"}
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/stack.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,KAAK;IAEN,KAAK,GAAQ,EAAE,CAAC;IAExB,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO,CAAC,IAAO;QACf,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,GAAG,KAAU;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,IAAY,CAAC;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;CACJ"}
@@ -1,4 +1,4 @@
1
- import { RuntimeGrammarProductionRule, RuntimeGrammarRuleSymbol } from "../../../typings/index.js";
1
+ import type { RuntimeGrammarProductionRule, RuntimeGrammarRuleSymbol } from "../../../typings/index.ts";
2
2
  export interface State {
3
3
  items: {
4
4
  rule: RuntimeGrammarProductionRule;
@@ -0,0 +1,16 @@
1
+ import type { RuntimeGrammarProductionRule, RuntimeGrammarRuleSymbol } from "../../../typings/index.ts";
2
+ export interface LRItem {
3
+ rule: RuntimeGrammarProductionRule;
4
+ dot: number;
5
+ }
6
+ export interface State {
7
+ id: string;
8
+ actions?: {
9
+ symbol: RuntimeGrammarRuleSymbol;
10
+ state: State;
11
+ }[];
12
+ goto?: {
13
+ [key: string]: State;
14
+ };
15
+ reduce?: RuntimeGrammarProductionRule;
16
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=typings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typings.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/typings.ts"],"names":[],"mappings":""}