grammar-well 1.1.11 → 1.2.1

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 (89) hide show
  1. package/README.md +1 -1
  2. package/bootstrap.ts +1 -1
  3. package/build/compiler/compiler.d.ts +1 -1
  4. package/build/compiler/compiler.js +2 -1
  5. package/build/compiler/compiler.js.map +1 -1
  6. package/build/compiler/generator/artifacts/lr.d.ts +51 -0
  7. package/build/{utility → compiler/generator/artifacts}/lr.js +53 -58
  8. package/build/compiler/generator/artifacts/lr.js.map +1 -0
  9. package/build/compiler/generator/artifacts/standard.d.ts +7 -0
  10. package/build/compiler/generator/artifacts/standard.js +28 -0
  11. package/build/compiler/generator/artifacts/standard.js.map +1 -0
  12. package/build/compiler/generator/generator.d.ts +24 -0
  13. package/build/compiler/{generator.js → generator/generator.js} +71 -75
  14. package/build/compiler/generator/generator.js.map +1 -0
  15. package/build/compiler/outputs/javascript.d.ts +1 -1
  16. package/build/compiler/outputs/json.d.ts +1 -1
  17. package/build/compiler/outputs/typescript.d.ts +1 -1
  18. package/build/grammars/gwell.js +1 -1
  19. package/build/index.d.ts +1 -0
  20. package/build/index.js +1 -0
  21. package/build/index.js.map +1 -1
  22. package/build/parser/algorithms/cyk.js +1 -1
  23. package/build/parser/algorithms/cyk.js.map +1 -1
  24. package/build/parser/algorithms/earley.js +10 -8
  25. package/build/parser/algorithms/earley.js.map +1 -1
  26. package/build/parser/algorithms/lr.d.ts +2 -5
  27. package/build/parser/algorithms/lr.js +88 -14
  28. package/build/parser/algorithms/lr.js.map +5 -1
  29. package/build/parser/algorithms/lr0.d.ts +7 -0
  30. package/build/parser/algorithms/lr0.js +156 -0
  31. package/build/parser/algorithms/lr0.js.map +1 -0
  32. package/build/parser/algorithms/lrk/algorithm.d.ts +7 -0
  33. package/build/parser/algorithms/lrk/algorithm.js +35 -0
  34. package/build/parser/algorithms/lrk/algorithm.js.map +1 -0
  35. package/build/parser/algorithms/lrk/bimap.d.ts +6 -0
  36. package/build/parser/algorithms/lrk/bimap.js +19 -0
  37. package/build/parser/algorithms/lrk/bimap.js.map +1 -0
  38. package/build/parser/algorithms/lrk/canonical-collection.d.ts +14 -0
  39. package/build/parser/algorithms/lrk/canonical-collection.js +73 -0
  40. package/build/parser/algorithms/lrk/canonical-collection.js.map +1 -0
  41. package/build/parser/algorithms/lrk/closure.d.ts +10 -0
  42. package/build/parser/algorithms/lrk/closure.js +30 -0
  43. package/build/parser/algorithms/lrk/closure.js.map +1 -0
  44. package/build/parser/algorithms/lrk/stack.d.ts +19 -0
  45. package/build/parser/algorithms/lrk/stack.js +39 -0
  46. package/build/parser/algorithms/lrk/stack.js.map +1 -0
  47. package/build/parser/algorithms/lrk/state.d.ts +12 -0
  48. package/build/parser/algorithms/lrk/state.js +3 -0
  49. package/build/parser/algorithms/lrk/state.js.map +1 -0
  50. package/build/parser/parser.d.ts +3 -3
  51. package/build/parser/parser.js +3 -3
  52. package/build/parser/parser.js.map +1 -1
  53. package/build/typings.d.ts +18 -1
  54. package/build/utility/general.d.ts +3 -4
  55. package/build/utility/general.js +6 -10
  56. package/build/utility/general.js.map +1 -1
  57. package/build/utility/monarch.d.ts +5 -0
  58. package/build/utility/monarch.js +42 -0
  59. package/build/utility/monarch.js.map +1 -0
  60. package/package.json +1 -1
  61. package/src/compiler/compiler.ts +3 -2
  62. package/src/compiler/generator/artifacts/lr.ts +155 -0
  63. package/src/compiler/generator/artifacts/standard.ts +26 -0
  64. package/src/compiler/{generator.ts → generator/generator.ts} +75 -75
  65. package/src/compiler/outputs/javascript.ts +1 -1
  66. package/src/compiler/outputs/json.ts +1 -1
  67. package/src/compiler/outputs/typescript.ts +1 -1
  68. package/src/grammars/gwell.gwell +1 -1
  69. package/src/grammars/gwell.js +1 -1
  70. package/src/grammars/gwell.json +1 -1
  71. package/src/index.ts +2 -1
  72. package/src/parser/algorithms/cyk.ts +1 -1
  73. package/src/parser/algorithms/earley.ts +10 -10
  74. package/src/parser/algorithms/lrk/algorithm.ts +36 -0
  75. package/src/parser/algorithms/lrk/bimap.ts +17 -0
  76. package/src/parser/algorithms/lrk/canonical-collection.ts +79 -0
  77. package/src/parser/algorithms/lrk/closure.ts +37 -0
  78. package/src/parser/algorithms/lrk/stack.ts +53 -0
  79. package/src/parser/algorithms/lrk/state.ts +10 -0
  80. package/src/parser/parser.ts +5 -5
  81. package/src/typings.ts +17 -1
  82. package/src/utility/general.ts +6 -9
  83. package/src/utility/monarch.ts +36 -0
  84. package/build/compiler/generator.d.ts +0 -23
  85. package/build/compiler/generator.js.map +0 -1
  86. package/build/utility/lr.d.ts +0 -52
  87. package/build/utility/lr.js.map +0 -1
  88. package/src/parser/algorithms/lr.ts +0 -37
  89. package/src/utility/lr.ts +0 -152
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClosureBuilder = void 0;
4
+ const parser_1 = require("../../parser");
5
+ class ClosureBuilder {
6
+ grammar;
7
+ constructor(grammar) {
8
+ this.grammar = grammar;
9
+ }
10
+ get(rule) {
11
+ const closure = { items: [], visited: new Set() };
12
+ this.addClosure(closure, rule);
13
+ return closure.items;
14
+ }
15
+ addClosure(closure, symbol) {
16
+ if (!parser_1.ParserUtility.SymbolIsTerminal(symbol)) {
17
+ const key = symbol;
18
+ if (!(closure.visited.has(key))) {
19
+ closure.visited.add(key);
20
+ const rules = this.grammar.rules[key];
21
+ for (const rule of rules) {
22
+ closure.items.push({ rule, dot: 0 });
23
+ this.addClosure(closure, rule.symbols[0]);
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
29
+ exports.ClosureBuilder = ClosureBuilder;
30
+ //# sourceMappingURL=closure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closure.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/closure.ts"],"names":[],"mappings":";;;AACA,yCAA4C;AAE5C,MAAa,cAAc;IAEX;IADZ,YACY,OAAsC;QAAtC,YAAO,GAAP,OAAO,CAA+B;IAC9C,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,MAAyB;QAC9D,IAAI,CAAC,sBAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YACzC,MAAM,GAAG,GAAG,MAAgB,CAAC;YAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC7B,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;oBACtB,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;iBAC7C;aACJ;SACJ;IACL,CAAC;CACJ;AAzBD,wCAyBC"}
@@ -0,0 +1,19 @@
1
+ import { GrammarRule, GrammarRuleSymbol } from "../../../typings";
2
+ import { State } from "./state";
3
+ export declare class LRStack {
4
+ stack: LRStackItem[];
5
+ get current(): LRStackItem;
6
+ get previous(): LRStackItem;
7
+ shift(state: State): void;
8
+ reduce(rule: GrammarRule): void;
9
+ append(symbol: GrammarRuleSymbol): void;
10
+ static NewItem(): LRStackItem;
11
+ }
12
+ interface LRStackItem {
13
+ children: LRStackItem[];
14
+ state: State;
15
+ symbol: GrammarRuleSymbol;
16
+ rule: GrammarRule;
17
+ value: any;
18
+ }
19
+ export {};
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LRStack = void 0;
4
+ class LRStack {
5
+ stack = [];
6
+ get current() {
7
+ return this.stack[this.stack.length - 1];
8
+ }
9
+ get previous() {
10
+ return this.stack[this.stack.length - 2];
11
+ }
12
+ shift(state) {
13
+ this.current.state = state;
14
+ }
15
+ reduce(rule) {
16
+ const n = LRStack.NewItem();
17
+ const l = rule.symbols.length;
18
+ n.children = this.stack.splice(l * -1, l);
19
+ n.children.forEach(v => delete v.state);
20
+ n.rule = rule;
21
+ n.symbol = rule.name;
22
+ this.stack.push(n);
23
+ }
24
+ append(symbol) {
25
+ this.stack.push(LRStack.NewItem());
26
+ this.current.symbol = symbol;
27
+ }
28
+ static NewItem() {
29
+ return {
30
+ children: [],
31
+ state: null,
32
+ symbol: null,
33
+ rule: null,
34
+ value: null
35
+ };
36
+ }
37
+ }
38
+ exports.LRStack = LRStack;
39
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/stack.ts"],"names":[],"mappings":";;;AAGA,MAAa,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,IAAiB;QACpB,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,MAAyB;QAC5B,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;AAzCD,0BAyCC"}
@@ -0,0 +1,12 @@
1
+ import { GrammarRule, GrammarRuleSymbol } from "../../../typings";
2
+ export interface State {
3
+ items: {
4
+ rule: GrammarRule;
5
+ dot: number;
6
+ }[];
7
+ isFinal: boolean;
8
+ actions: Map<GrammarRuleSymbol, string>;
9
+ goto: Map<GrammarRuleSymbol, string>;
10
+ reduce: number;
11
+ rule: GrammarRule;
12
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/parser/algorithms/lrk/state.ts"],"names":[],"mappings":""}
@@ -14,9 +14,9 @@ export declare class Parser {
14
14
  };
15
15
  private getTokenQueue;
16
16
  }
17
- export declare class ParserUtility {
18
- static TokenMatchesSymbol(token: LexerToken, symbol: GrammarRuleSymbol): boolean;
19
- static SymbolIsTerminal<T extends GrammarRuleSymbol>(symbol: T): boolean;
17
+ export declare abstract class ParserUtility {
18
+ static SymbolMatchesToken(symbol: GrammarRuleSymbol, token: LexerToken): boolean;
19
+ static SymbolIsTerminal(symbol: GrammarRuleSymbol): boolean;
20
20
  static PostProcess(rule: GrammarRule, data: any, meta?: any): any;
21
21
  }
22
22
  interface ParserOptions {
@@ -6,11 +6,11 @@ const stateful_lexer_1 = require("../lexers/stateful-lexer");
6
6
  const token_buffer_1 = require("../lexers/token-buffer");
7
7
  const cyk_1 = require("./algorithms/cyk");
8
8
  const earley_1 = require("./algorithms/earley");
9
- const lr_1 = require("./algorithms/lr");
9
+ const algorithm_1 = require("./algorithms/lrk/algorithm");
10
10
  const ParserRegistry = {
11
11
  earley: earley_1.Earley,
12
12
  cyk: cyk_1.CYK,
13
- lr: lr_1.LR
13
+ lr0: algorithm_1.LRK
14
14
  };
15
15
  function Parse(language, input, options) {
16
16
  const i = new Parser(language, options);
@@ -46,7 +46,7 @@ class Parser {
46
46
  }
47
47
  exports.Parser = Parser;
48
48
  class ParserUtility {
49
- static TokenMatchesSymbol(token, symbol) {
49
+ static SymbolMatchesToken(symbol, token) {
50
50
  if (typeof symbol === 'string')
51
51
  throw 'Attempted to match token against non-terminal';
52
52
  if (typeof symbol == 'function')
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ export interface CompileOptions {
11
11
  resolverInstance?: ImportResolver;
12
12
  exportName?: string;
13
13
  template?: TemplateFormat;
14
+ overrides?: Dictionary<string>;
14
15
  }
15
16
  export type TemplateFormat = '_default' | 'object' | 'json' | 'js' | 'javascript' | 'module' | 'esmodule' | 'esm' | 'ts' | 'typescript';
16
17
  export interface GrammarBuilderContext {
@@ -117,14 +118,30 @@ export interface GeneratorGrammarRule {
117
118
  }
118
119
  export type GeneratorGrammarSymbol = {
119
120
  alias?: string;
120
- } & (GrammarTypeRule | GrammarTypeRegex | GrammarTypeLiteral | GrammarTypeToken | GrammarTypeJS);
121
+ } & (GrammarTypeRule | GrammarTypeRegex | GrammarTypeLiteral | GrammarTypeToken);
121
122
  export interface LanguageDefinition {
122
123
  lexer?: Lexer | LexerConfig;
123
124
  grammar: {
124
125
  start: string;
125
126
  rules: Dictionary<GrammarRule[]>;
126
127
  };
128
+ lr?: {
129
+ k: number;
130
+ table: Dictionary<LRState>;
131
+ };
132
+ }
133
+ export interface LRState {
134
+ actions: Next[];
135
+ goto: {
136
+ [key: string]: string;
137
+ };
138
+ reduce?: GrammarRule;
139
+ isFinal: boolean;
127
140
  }
141
+ type Next = {
142
+ symbol: GrammarRuleSymbol;
143
+ next: string;
144
+ };
128
145
  export interface TQRestorePoint {
129
146
  historyIndex: number;
130
147
  offset: number;
@@ -1,4 +1,4 @@
1
- import { Dictionary, GrammarRuleSymbol } from "../typings";
1
+ import { Dictionary, GeneratorGrammarSymbol } from "../typings";
2
2
  export declare class Collection<T> {
3
3
  categorized: Dictionary<Dictionary<number>>;
4
4
  uncategorized: Map<T, number>;
@@ -15,16 +15,15 @@ export declare class Collection<T> {
15
15
  private addCategorized;
16
16
  private addUncategorized;
17
17
  }
18
- export declare class SymbolCollection extends Collection<GrammarRuleSymbol> {
18
+ export declare class GeneratorSymbolCollection extends Collection<GeneratorGrammarSymbol> {
19
19
  categorized: {
20
20
  nonTerminal: {};
21
21
  literalI: {};
22
22
  literalS: {};
23
23
  token: {};
24
24
  regex: {};
25
- function: {};
26
25
  };
27
- resolve(symbol: GrammarRuleSymbol): {
26
+ resolve(symbol: GeneratorGrammarSymbol): {
28
27
  category: string;
29
28
  key: string;
30
29
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Unflatten = exports.Flatten = exports.Matrix = exports.SymbolCollection = exports.Collection = void 0;
3
+ exports.Unflatten = exports.Flatten = exports.Matrix = exports.GeneratorSymbolCollection = exports.Collection = void 0;
4
4
  class Collection {
5
5
  categorized = {};
6
6
  uncategorized = new Map();
@@ -45,14 +45,13 @@ class Collection {
45
45
  }
46
46
  }
47
47
  exports.Collection = Collection;
48
- class SymbolCollection extends Collection {
48
+ class GeneratorSymbolCollection extends Collection {
49
49
  categorized = {
50
50
  nonTerminal: {},
51
51
  literalI: {},
52
52
  literalS: {},
53
53
  token: {},
54
- regex: {},
55
- function: {},
54
+ regex: {}
56
55
  };
57
56
  resolve(symbol) {
58
57
  if (typeof symbol == 'string') {
@@ -66,15 +65,12 @@ class SymbolCollection extends Collection {
66
65
  else if ('token' in symbol) {
67
66
  return { category: 'token', key: symbol.token };
68
67
  }
69
- else if (symbol instanceof RegExp) {
70
- return { category: 'regex', key: symbol.toString() };
71
- }
72
- else if (typeof symbol == 'function') {
73
- return { category: 'function', key: symbol.toString() };
68
+ else if ('regex' in symbol) {
69
+ return { category: 'regex', key: symbol.flags + ':' + symbol.regex };
74
70
  }
75
71
  }
76
72
  }
77
- exports.SymbolCollection = SymbolCollection;
73
+ exports.GeneratorSymbolCollection = GeneratorSymbolCollection;
78
74
  class Matrix {
79
75
  initial;
80
76
  $x = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","sourceRoot":"","sources":["../../src/utility/general.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"general.js","sourceRoot":"","sources":["../../src/utility/general.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { LexerConfig } from "../typings";
2
+ export declare function CreateMonarchTokenizer(lexer: LexerConfig): {
3
+ start: string;
4
+ tokenizer: any;
5
+ };
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateMonarchTokenizer = void 0;
4
+ function CreateMonarchTokenizer(lexer) {
5
+ const tokenizer = {};
6
+ const { start, states } = lexer;
7
+ for (const key in states) {
8
+ const { name, rules } = states[key];
9
+ tokenizer[name] = [];
10
+ for (const rule of rules) {
11
+ if ('import' in rule) {
12
+ for (const i of rule.import) {
13
+ tokenizer[name].push({ include: i });
14
+ }
15
+ }
16
+ else if ('pop' in rule) {
17
+ tokenizer[name].push([TransformWhen(rule.when), { token: rule.highlight || 'source', next: '@pop' }]);
18
+ }
19
+ else if ('goto' in rule) {
20
+ tokenizer[name].push([TransformWhen(rule.when), { token: rule.highlight || 'source', next: '@' + rule.goto }]);
21
+ }
22
+ else if ('set' in rule) {
23
+ tokenizer[name].push([TransformWhen(rule.when), { token: rule.highlight || 'source', switchTo: '@' + rule.set }]);
24
+ }
25
+ else if ('inset' in rule) {
26
+ tokenizer[name].push([TransformWhen(rule.when), { token: rule.highlight || 'source', next: '@push' }]);
27
+ }
28
+ else if ('when' in rule) {
29
+ tokenizer[name].push([TransformWhen(rule.when), { token: rule.highlight || 'source' }]);
30
+ }
31
+ }
32
+ }
33
+ return { start, tokenizer };
34
+ }
35
+ exports.CreateMonarchTokenizer = CreateMonarchTokenizer;
36
+ function TransformWhen(obj) {
37
+ return typeof obj == 'string' ? new RegExp(RegexEscape(obj)) : new RegExp(obj.regex, obj.flags);
38
+ }
39
+ function RegexEscape(string) {
40
+ return string.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
41
+ }
42
+ //# sourceMappingURL=monarch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monarch.js","sourceRoot":"","sources":["../../src/utility/monarch.ts"],"names":[],"mappings":";;;AAEA,SAAgB,sBAAsB,CAAC,KAAkB;IACrD,MAAM,SAAS,GAAQ,EAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACtB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAClB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;oBACzB,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;iBACvC;aACJ;iBAAM,IAAI,KAAK,IAAI,IAAI,EAAE;gBACtB,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;aACxG;iBAAM,IAAI,MAAM,IAAI,IAAI,EAAE;gBACvB,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;aACjH;iBAAM,IAAI,KAAK,IAAI,IAAI,EAAE;gBACtB,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;aACpH;iBAAM,IAAI,OAAO,IAAI,IAAI,EAAE;gBACxB,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;aACzG;iBAAM,IAAI,MAAM,IAAI,IAAI,EAAE;gBACvB,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAA;aAC1F;SACJ;KACJ;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC;AAzBD,wDAyBC;AAED,SAAS,aAAa,CAAC,GAAG;IACtB,OAAO,OAAO,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,WAAW,CAAC,MAAM;IACvB,OAAO,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAA;AAC1D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "grammar-well",
3
- "version": "1.1.11",
3
+ "version": "1.2.1",
4
4
  "description": "Cross-platform Parser written in TypeScript",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -11,7 +11,7 @@ import { JSONFormatter } from "./outputs/json";
11
11
  import * as number from '../grammars/number.json';
12
12
  import * as string from '../grammars/string.json';
13
13
  import * as whitespace from '../grammars/whitespace.json';
14
- import { Generator } from "./generator";
14
+ import { Generator } from "./generator/generator";
15
15
 
16
16
  const BuiltInRegistry = {
17
17
  number,
@@ -34,11 +34,12 @@ const TemplateFormats = {
34
34
  export async function Compile(rules: string | LanguageDirective | (LanguageDirective[]), config: CompileOptions = {}) {
35
35
  const builder = new GrammarBuilder(config);
36
36
  await builder.import(rules as any);
37
+ Object.assign(builder.generator.state.config, config.overrides);
37
38
  return builder.export(config.template);
38
39
  }
39
40
 
40
41
  export class GrammarBuilder {
41
- private parser = new Parser(Language());
42
+ private parser = new Parser(Language() as any);
42
43
  private context: GrammarBuilderContext;
43
44
 
44
45
  generator = new Generator();
@@ -0,0 +1,155 @@
1
+ import { Generator } from "../generator";
2
+ import { Dictionary, GeneratorGrammarRule, GeneratorGrammarSymbol, GrammarTypeRule } from "../../../typings";
3
+ import { Collection, GeneratorSymbolCollection } from "../../../utility/general";
4
+
5
+
6
+ export class LRParseTableBuilder {
7
+ rules: Collection<GeneratorGrammarRule> = new Collection();
8
+ table: Dictionary<StateBuilder> = Object.create(null)
9
+ symbols: GeneratorSymbolCollection = new GeneratorSymbolCollection();
10
+
11
+ constructor(public generator: Generator) {
12
+ const augmented = { name: Symbol() as unknown as string, symbols: [{ rule: generator.state.grammar.start }] }
13
+ generator.state.grammar.rules[augmented.name] = [augmented];
14
+ this.addState([{ rule: augmented, dot: 0 }]);
15
+ }
16
+
17
+ addState(seed: StateItem[]) {
18
+ const id = this.encodeStateItems(seed);
19
+ if (id in this.table)
20
+ return this.table[id];
21
+
22
+ const state = new StateBuilder(this, seed);
23
+ this.table[id] = state;
24
+ for (const q in state.queue) {
25
+ this.addState(state.queue[q])
26
+ }
27
+ state.queue = {};
28
+ }
29
+
30
+ encodeRule(rule: GeneratorGrammarRule, dot: number) {
31
+ return this.rules.encode(rule) + '.' + dot;
32
+ }
33
+
34
+ encodeStateItems(seed: StateItem[]) {
35
+ return Array.from(new Set(seed)).map(v => this.encodeRule(v.rule, v.dot)).sort().join()
36
+ }
37
+
38
+ serialize(depth: number = 0) {
39
+ const map = {};
40
+ for (const key in this.table) {
41
+ map[key] = this.serializeState(this.table[key].serialize(), depth + 1);
42
+ }
43
+
44
+ return Generator.Pretty(map, depth)
45
+ }
46
+
47
+ serializeState(state: State, depth: number = 0) {
48
+ return Generator.Pretty({
49
+ actions: state.actions.map(v => this.serializeNext(v, depth + 1)),
50
+ goto: Generator.Pretty(state.goto, depth + 1),
51
+ reduce: state.reduce ? this.generator.serializeGrammarRule(state.reduce) : null,
52
+ isFinal: state.isFinal ? 'true' : 'false'
53
+ }, depth);
54
+ }
55
+ serializeNext(next: Next, depth: number) {
56
+ return Generator.Pretty({
57
+ symbol: Generator.SerializeSymbol(next.symbol),
58
+ next: JSON.stringify(next.next)
59
+ }, -1);
60
+ }
61
+ }
62
+
63
+ class StateBuilder {
64
+ isFinal = false;
65
+
66
+ outputs: StateOut = {
67
+ goto: {},
68
+ action: {}
69
+ };
70
+
71
+ queue: { [key: string]: StateItem[] } = {};
72
+ actions: Map<GeneratorGrammarSymbol, string> = new Map();
73
+ goto: Map<GeneratorGrammarSymbol, string> = new Map();
74
+ reduce?: GeneratorGrammarRule;
75
+
76
+ constructor(private collection: LRParseTableBuilder, items: StateItem[]) {
77
+ const visited = new Set<GeneratorGrammarSymbol>();
78
+ for (const item of items) {
79
+ this.closure(item.rule, item.dot, visited);
80
+ }
81
+
82
+ if (this.isFinal) {
83
+ this.reduce = items[0].rule;
84
+ }
85
+
86
+ for (const k in this.outputs.goto) {
87
+ const seed = this.outputs.goto[k];
88
+ const stateId = this.collection.encodeStateItems(seed);
89
+ this.queue[stateId] = seed;
90
+ this.goto.set(this.collection.symbols.decode(k), stateId);
91
+ }
92
+
93
+ for (const k in this.outputs.action) {
94
+ const seed = this.outputs.action[k];
95
+ const stateId = this.collection.encodeStateItems(seed);
96
+ this.queue[stateId] = seed;
97
+ this.actions.set(this.collection.symbols.decode(k), stateId);
98
+ }
99
+ }
100
+
101
+ private closure(rule: GeneratorGrammarRule, dot: number, visited: Set<GeneratorGrammarSymbol>) {
102
+ const isFinal = rule.symbols.length == dot;
103
+ this.isFinal = isFinal || this.isFinal;
104
+ const symbol = rule.symbols[dot];
105
+
106
+ if (isFinal || visited.has(symbol))
107
+ return;
108
+
109
+ visited.add(symbol);
110
+ const stateItem = { rule, dot: dot + 1 };
111
+
112
+ if (Generator.SymbolIsTerminal(symbol)) {
113
+ const id = this.collection.symbols.encode(symbol);
114
+ this.outputs.action[id] = this.outputs.action[id] || [];
115
+ this.outputs.action[id].push(stateItem);
116
+ } else {
117
+ const id = this.collection.symbols.encode(symbol);
118
+ const name = typeof symbol === 'string' ? symbol : (symbol as GrammarTypeRule).rule;
119
+ this.outputs.goto[id] = this.outputs.goto[id] || [];
120
+ this.outputs.goto[id].push(stateItem);
121
+ for (const rule of this.collection.generator.state.grammar.rules[name]) {
122
+ this.closure(rule, 0, visited)
123
+ }
124
+ }
125
+ }
126
+
127
+ serialize(): State {
128
+ const actions: Next[] = [];
129
+ const goto: { [key: string]: string } = {}
130
+ for (const [symbol, next] of this.actions) {
131
+ actions.push({ symbol, next });
132
+ }
133
+ for (const [symbol, next] of this.goto) {
134
+ goto[typeof symbol == 'object' ? (symbol as any).rule : symbol] = JSON.stringify(next);
135
+ }
136
+
137
+ return { actions, goto, reduce: this.reduce, isFinal: this.isFinal };
138
+ }
139
+ }
140
+
141
+ interface State {
142
+ actions: Next[];
143
+ goto: { [key: string]: string };
144
+ reduce: GeneratorGrammarRule;
145
+ isFinal: boolean;
146
+ }
147
+
148
+ type Next = { symbol: GeneratorGrammarSymbol, next: string };
149
+
150
+ type StateItem = { rule: GeneratorGrammarRule, dot: number };
151
+
152
+ interface StateOut {
153
+ action: Dictionary<StateItem[]>;
154
+ goto: Dictionary<StateItem[]>;
155
+ }
@@ -0,0 +1,26 @@
1
+ import { GeneratorGrammarRule, } from "../../../typings";
2
+ import { Generator } from "../generator";
3
+
4
+ export class StandardGrammar {
5
+
6
+ constructor(private generator: Generator) { }
7
+
8
+ serialize(depth: number = 0) {
9
+ if (!this.generator.state.grammar) {
10
+ return null;
11
+ }
12
+ return Generator.Pretty({
13
+ start: JSON.stringify(this.generator.state.grammar.start),
14
+ rules: this.serializeGrammarRules(depth + 1)
15
+ }, depth);
16
+ }
17
+
18
+ private serializeGrammarRules(depth: number = 0) {
19
+ const map = {};
20
+ for (const rule in this.generator.state.grammar.rules) {
21
+ map[rule] = this.generator.state.grammar.rules[rule].map(v => this.generator.serializeGrammarRule(v))
22
+ }
23
+ return Generator.Pretty(map, depth);
24
+ }
25
+
26
+ }