grammar-well 1.1.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 (117) hide show
  1. package/.eslintrc.cjs +14 -0
  2. package/README.md +288 -0
  3. package/bootstrap.ts +35 -0
  4. package/build/compiler/compiler.d.ts +48 -0
  5. package/build/compiler/compiler.js +227 -0
  6. package/build/compiler/compiler.js.map +1 -0
  7. package/build/compiler/generator.d.ts +23 -0
  8. package/build/compiler/generator.js +213 -0
  9. package/build/compiler/generator.js.map +1 -0
  10. package/build/compiler/import-resolver.d.ts +15 -0
  11. package/build/compiler/import-resolver.js +37 -0
  12. package/build/compiler/import-resolver.js.map +1 -0
  13. package/build/compiler/outputs/javascript.d.ts +3 -0
  14. package/build/compiler/outputs/javascript.js +29 -0
  15. package/build/compiler/outputs/javascript.js.map +1 -0
  16. package/build/compiler/outputs/json.d.ts +2 -0
  17. package/build/compiler/outputs/json.js +8 -0
  18. package/build/compiler/outputs/json.js.map +1 -0
  19. package/build/compiler/outputs/typescript.d.ts +2 -0
  20. package/build/compiler/outputs/typescript.js +108 -0
  21. package/build/compiler/outputs/typescript.js.map +1 -0
  22. package/build/grammars/gwell.d.ts +997 -0
  23. package/build/grammars/gwell.js +537 -0
  24. package/build/grammars/gwell.js.map +1 -0
  25. package/build/grammars/json.d.ts +151 -0
  26. package/build/grammars/json.js +112 -0
  27. package/build/grammars/json.js.map +1 -0
  28. package/build/grammars/number.d.ts +239 -0
  29. package/build/grammars/number.js +115 -0
  30. package/build/grammars/number.js.map +1 -0
  31. package/build/grammars/number.json +1 -0
  32. package/build/grammars/string.d.ts +116 -0
  33. package/build/grammars/string.js +50 -0
  34. package/build/grammars/string.js.map +1 -0
  35. package/build/grammars/string.json +1 -0
  36. package/build/grammars/whitespace.d.ts +51 -0
  37. package/build/grammars/whitespace.js +30 -0
  38. package/build/grammars/whitespace.js.map +1 -0
  39. package/build/grammars/whitespace.json +1 -0
  40. package/build/index.d.ts +4 -0
  41. package/build/index.js +21 -0
  42. package/build/index.js.map +1 -0
  43. package/build/lexers/character-lexer.d.ts +27 -0
  44. package/build/lexers/character-lexer.js +71 -0
  45. package/build/lexers/character-lexer.js.map +1 -0
  46. package/build/lexers/stateful-lexer.d.ts +48 -0
  47. package/build/lexers/stateful-lexer.js +309 -0
  48. package/build/lexers/stateful-lexer.js.map +1 -0
  49. package/build/lexers/token-buffer.d.ts +32 -0
  50. package/build/lexers/token-buffer.js +92 -0
  51. package/build/lexers/token-buffer.js.map +1 -0
  52. package/build/parser/algorithms/cyk.d.ts +16 -0
  53. package/build/parser/algorithms/cyk.js +58 -0
  54. package/build/parser/algorithms/cyk.js.map +1 -0
  55. package/build/parser/algorithms/earley.d.ts +48 -0
  56. package/build/parser/algorithms/earley.js +158 -0
  57. package/build/parser/algorithms/earley.js.map +1 -0
  58. package/build/parser/algorithms/lr.d.ts +10 -0
  59. package/build/parser/algorithms/lr.js +34 -0
  60. package/build/parser/algorithms/lr.js.map +1 -0
  61. package/build/parser/parser.d.ts +26 -0
  62. package/build/parser/parser.js +74 -0
  63. package/build/parser/parser.js.map +1 -0
  64. package/build/typings.d.ts +198 -0
  65. package/build/typings.js +3 -0
  66. package/build/typings.js.map +1 -0
  67. package/build/utility/general.d.ts +46 -0
  68. package/build/utility/general.js +112 -0
  69. package/build/utility/general.js.map +1 -0
  70. package/build/utility/lint.d.ts +2 -0
  71. package/build/utility/lint.js +28 -0
  72. package/build/utility/lint.js.map +1 -0
  73. package/build/utility/lr.d.ts +56 -0
  74. package/build/utility/lr.js +131 -0
  75. package/build/utility/lr.js.map +1 -0
  76. package/build/utility/text-format.d.ts +11 -0
  77. package/build/utility/text-format.js +84 -0
  78. package/build/utility/text-format.js.map +1 -0
  79. package/licenses/LICENSE.txt +165 -0
  80. package/licenses/moo.license +29 -0
  81. package/licenses/nearley.license +21 -0
  82. package/package.json +52 -0
  83. package/src/compiler/compiler.ts +239 -0
  84. package/src/compiler/generator.ts +229 -0
  85. package/src/compiler/import-resolver.ts +36 -0
  86. package/src/compiler/outputs/javascript.ts +27 -0
  87. package/src/compiler/outputs/json.ts +5 -0
  88. package/src/compiler/outputs/typescript.ts +105 -0
  89. package/src/grammars/gwell.gwell +278 -0
  90. package/src/grammars/gwell.js +539 -0
  91. package/src/grammars/gwell.json +1 -0
  92. package/src/grammars/json.gwell +75 -0
  93. package/src/grammars/json.js +121 -0
  94. package/src/grammars/json.json +1 -0
  95. package/src/grammars/number.gwell +20 -0
  96. package/src/grammars/number.js +117 -0
  97. package/src/grammars/number.json +1 -0
  98. package/src/grammars/string.gwell +15 -0
  99. package/src/grammars/string.js +52 -0
  100. package/src/grammars/string.json +1 -0
  101. package/src/grammars/whitespace.gwell +6 -0
  102. package/src/grammars/whitespace.js +32 -0
  103. package/src/grammars/whitespace.json +1 -0
  104. package/src/index.ts +4 -0
  105. package/src/lexers/character-lexer.ts +73 -0
  106. package/src/lexers/stateful-lexer.ts +335 -0
  107. package/src/lexers/token-buffer.ts +102 -0
  108. package/src/parser/algorithms/cyk.ts +74 -0
  109. package/src/parser/algorithms/earley.ts +193 -0
  110. package/src/parser/algorithms/lr.ts +37 -0
  111. package/src/parser/parser.ts +77 -0
  112. package/src/typings.ts +221 -0
  113. package/src/utility/general.ts +120 -0
  114. package/src/utility/lint.ts +26 -0
  115. package/src/utility/lr.ts +153 -0
  116. package/src/utility/text-format.ts +84 -0
  117. package/testing.ts +18 -0
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Earley = void 0;
4
+ const text_format_1 = require("../../utility/text-format");
5
+ const parser_1 = require("../parser");
6
+ function Earley(language, options = {}) {
7
+ const { tokens } = language;
8
+ const { rules, start } = language.grammar;
9
+ const column = new Column(rules, 0);
10
+ const table = [column];
11
+ column.wants[start] = [];
12
+ column.predict(start);
13
+ column.process();
14
+ let current = 0;
15
+ for (const token of tokens) {
16
+ const previousColumn = table[current];
17
+ if (!(options.keepHistory)) {
18
+ delete table[current - 1];
19
+ }
20
+ current++;
21
+ const nextColumn = new Column(rules, current);
22
+ table.push(nextColumn);
23
+ const literal = token.value;
24
+ const data = token;
25
+ nextColumn.data = literal;
26
+ const { scannable } = previousColumn;
27
+ for (let w = scannable.length; w--;) {
28
+ const state = scannable[w];
29
+ const symbol = state.rule.symbols[state.dot];
30
+ if (parser_1.ParserUtility.TokenMatchesSymbol(token, symbol)) {
31
+ const next = state.nextState({ data, token, isToken: true, reference: current - 1 });
32
+ nextColumn.states.push(next);
33
+ }
34
+ }
35
+ nextColumn.process();
36
+ if (nextColumn.states.length === 0) {
37
+ throw text_format_1.TextFormatter.UnexpectedToken(tokens, previousColumn.expects());
38
+ }
39
+ }
40
+ const results = [];
41
+ const { states } = table[table.length - 1];
42
+ for (const { rule: { name, symbols }, dot, reference, data } of states) {
43
+ if (name === start && dot === symbols.length && reference == 0) {
44
+ results.push(data);
45
+ }
46
+ }
47
+ return { results, info: { table } };
48
+ }
49
+ exports.Earley = Earley;
50
+ class Column {
51
+ rules;
52
+ index;
53
+ data;
54
+ states = [];
55
+ wants = Object.create(null);
56
+ scannable = [];
57
+ completed = Object.create(null);
58
+ constructor(rules, index) {
59
+ this.rules = rules;
60
+ this.index = index;
61
+ }
62
+ process() {
63
+ let w = 0;
64
+ let state;
65
+ while (state = this.states[w++]) {
66
+ if (state.isComplete) {
67
+ state.finish();
68
+ const { wantedBy } = state;
69
+ for (let i = wantedBy.length; i--;) {
70
+ this.complete(wantedBy[i], state);
71
+ }
72
+ if (state.reference === this.index) {
73
+ const { name } = state.rule;
74
+ this.completed[name] = this.completed[name] || [];
75
+ this.completed[name].push(state);
76
+ }
77
+ }
78
+ else {
79
+ const exp = state.rule.symbols[state.dot];
80
+ if (typeof exp !== 'string') {
81
+ this.scannable.push(state);
82
+ continue;
83
+ }
84
+ if (this.wants[exp]) {
85
+ this.wants[exp].push(state);
86
+ if (this.completed[exp]) {
87
+ for (const right of this.completed[exp]) {
88
+ this.complete(state, right);
89
+ }
90
+ }
91
+ }
92
+ else {
93
+ this.wants[exp] = [state];
94
+ this.predict(exp);
95
+ }
96
+ }
97
+ }
98
+ }
99
+ predict(exp) {
100
+ if (!this.rules[exp])
101
+ return;
102
+ for (const rule of this.rules[exp]) {
103
+ this.states.push(new State(rule, 0, this.index, this.wants[exp]));
104
+ }
105
+ }
106
+ expects() {
107
+ return this.states
108
+ .filter((state) => {
109
+ const nextSymbol = state.rule.symbols[state.dot];
110
+ return nextSymbol && typeof nextSymbol !== "string";
111
+ })
112
+ .map(v => ({ ...v.rule, index: v.dot }));
113
+ }
114
+ complete(left, right) {
115
+ const copy = left.nextState(right);
116
+ this.states.push(copy);
117
+ }
118
+ }
119
+ class State {
120
+ rule;
121
+ dot;
122
+ reference;
123
+ wantedBy;
124
+ isComplete;
125
+ data = [];
126
+ left;
127
+ right;
128
+ constructor(rule, dot, reference, wantedBy) {
129
+ this.rule = rule;
130
+ this.dot = dot;
131
+ this.reference = reference;
132
+ this.wantedBy = wantedBy;
133
+ this.isComplete = this.dot === rule.symbols.length;
134
+ }
135
+ nextState(child) {
136
+ const state = new State(this.rule, this.dot + 1, this.reference, this.wantedBy);
137
+ state.left = this;
138
+ state.right = child;
139
+ if (state.isComplete) {
140
+ state.data = state.build();
141
+ state.right = undefined;
142
+ }
143
+ return state;
144
+ }
145
+ finish() {
146
+ this.data = parser_1.ParserUtility.PostProcess(this.rule, this.data, { reference: this.reference, dot: this.dot });
147
+ }
148
+ build() {
149
+ const children = [];
150
+ let node = this;
151
+ do {
152
+ children[node.dot - 1] = node.right.data;
153
+ node = node.left;
154
+ } while (node.left);
155
+ return children;
156
+ }
157
+ }
158
+ //# sourceMappingURL=earley.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"earley.js","sourceRoot":"","sources":["../../../src/parser/algorithms/earley.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { TokenBuffer } from "../../lexers/token-buffer";
2
+ import { LanguageDefinition } from "../../typings";
3
+ import { CanonicalCollection } from "../../utility/lr";
4
+ export declare function LR(language: LanguageDefinition & {
5
+ tokens: TokenBuffer;
6
+ canonical?: CanonicalCollection;
7
+ }, _options?: {}): {
8
+ results: any[];
9
+ canonical: CanonicalCollection;
10
+ };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LR = void 0;
4
+ const lr_1 = require("../../utility/lr");
5
+ const parser_1 = require("../parser");
6
+ function LR(language, _options = {}) {
7
+ const { grammar, tokens, canonical } = language;
8
+ const collection = canonical || new lr_1.CanonicalCollection(grammar);
9
+ const stack = new lr_1.LRStack();
10
+ const s = collection.states['0.0'];
11
+ stack.add(null);
12
+ stack.shift(s);
13
+ let token;
14
+ while (token = tokens.next()) {
15
+ for (const [symbol, state] of stack.current.state.actions) {
16
+ if (parser_1.ParserUtility.TokenMatchesSymbol(token, symbol)) {
17
+ stack.add(symbol);
18
+ stack.shift(collection.states[state]);
19
+ stack.current.value = token;
20
+ break;
21
+ }
22
+ }
23
+ while (stack.current.state?.isFinal) {
24
+ const rule = stack.current.state.reduce;
25
+ stack.reduce(rule);
26
+ stack.current.value = parser_1.ParserUtility.PostProcess(rule, stack.current.children.map(v => v.value));
27
+ const s = stack.previous.state.goto.get(rule.name);
28
+ stack.shift(collection.states[s]);
29
+ }
30
+ }
31
+ return { results: [stack.current.value], canonical: collection };
32
+ }
33
+ exports.LR = LR;
34
+ //# sourceMappingURL=lr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lr.js","sourceRoot":"","sources":["../../../src/parser/algorithms/lr.ts"],"names":[],"mappings":";;;AAEA,yCAAgE;AAChE,sCAA0C;AAE1C,SAAgB,EAAE,CAAC,QAAuF,EAAE,QAAQ,GAAG,EAAE;IACrH,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;IAChD,MAAM,UAAU,GAAG,SAAS,IAAI,IAAI,wBAAmB,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,YAAO,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,KAAK,CAAC;IAGV,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE;QAC1B,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE;YACvD,IAAI,sBAAa,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;gBACjD,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClB,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC5B,MAAM;aACT;SACJ;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;YACjC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YACxC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,sBAAa,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,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAErC;KACJ;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACpE,CAAC;AA/BD,gBA+BC"}
@@ -0,0 +1,26 @@
1
+ import { GrammarRule, GrammarRuleSymbol, LanguageDefinition, LexerToken, ParserAlgorithm } from "../typings";
2
+ declare const ParserRegistry: {
3
+ [key: string]: ParserAlgorithm;
4
+ };
5
+ export declare function Parse(language: LanguageDefinition, input: string, options?: ParserOptions): {
6
+ results: any[];
7
+ };
8
+ export declare class Parser {
9
+ private language;
10
+ private options;
11
+ constructor(language: LanguageDefinition, options?: ParserOptions);
12
+ run(input: string): {
13
+ results: any[];
14
+ };
15
+ private getTokenQueue;
16
+ }
17
+ export declare class ParserUtility {
18
+ static TokenMatchesSymbol(token: LexerToken, symbol: GrammarRuleSymbol): boolean;
19
+ static SymbolIsTerminal<T extends GrammarRuleSymbol>(symbol: T): boolean;
20
+ static PostProcess(rule: GrammarRule, data: any, meta?: any): any;
21
+ }
22
+ interface ParserOptions {
23
+ algorithm: (keyof typeof ParserRegistry) | ParserAlgorithm;
24
+ parserOptions?: any;
25
+ }
26
+ export {};
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParserUtility = exports.Parser = exports.Parse = void 0;
4
+ const character_lexer_1 = require("../lexers/character-lexer");
5
+ const stateful_lexer_1 = require("../lexers/stateful-lexer");
6
+ const token_buffer_1 = require("../lexers/token-buffer");
7
+ const cyk_1 = require("./algorithms/cyk");
8
+ const earley_1 = require("./algorithms/earley");
9
+ const lr_1 = require("./algorithms/lr");
10
+ const ParserRegistry = {
11
+ earley: earley_1.Earley,
12
+ cyk: cyk_1.CYK,
13
+ lr: lr_1.LR
14
+ };
15
+ function Parse(language, input, options) {
16
+ const i = new Parser(language, options);
17
+ return i.run(input);
18
+ }
19
+ exports.Parse = Parse;
20
+ class Parser {
21
+ language;
22
+ options;
23
+ constructor(language, options = { algorithm: 'earley', parserOptions: {} }) {
24
+ this.language = language;
25
+ this.options = options;
26
+ }
27
+ run(input) {
28
+ const tokenQueue = this.getTokenQueue();
29
+ tokenQueue.feed(input);
30
+ if (typeof this.options.algorithm == 'function')
31
+ return this.options.algorithm({ ...this.language, tokens: tokenQueue, utility: ParserUtility }, this.options.parserOptions);
32
+ return ParserRegistry[this.options.algorithm]({ ...this.language, tokens: tokenQueue, utility: ParserUtility }, this.options.parserOptions);
33
+ }
34
+ getTokenQueue() {
35
+ const { lexer } = this.language;
36
+ if (!lexer) {
37
+ return new token_buffer_1.TokenBuffer(new character_lexer_1.CharacterLexer());
38
+ }
39
+ else if ("feed" in lexer && typeof lexer.feed == 'function') {
40
+ return new token_buffer_1.TokenBuffer(lexer);
41
+ }
42
+ else if ('states' in lexer) {
43
+ return new token_buffer_1.TokenBuffer(new stateful_lexer_1.StatefulLexer(lexer));
44
+ }
45
+ }
46
+ }
47
+ exports.Parser = Parser;
48
+ class ParserUtility {
49
+ static TokenMatchesSymbol(token, symbol) {
50
+ if (typeof symbol === 'string')
51
+ throw 'Attempted to match token against non-terminal';
52
+ if (typeof symbol == 'function')
53
+ return symbol(token);
54
+ if (!symbol)
55
+ return;
56
+ if ("test" in symbol)
57
+ return symbol.test(token.value);
58
+ if ("token" in symbol)
59
+ return symbol.token === token.type || token.tag?.has(symbol.token);
60
+ if ("literal" in symbol)
61
+ return symbol.literal === token.value;
62
+ }
63
+ static SymbolIsTerminal(symbol) {
64
+ return typeof symbol != 'string';
65
+ }
66
+ static PostProcess(rule, data, meta) {
67
+ if (rule.postprocess) {
68
+ return rule.postprocess({ rule, data, meta });
69
+ }
70
+ return data;
71
+ }
72
+ }
73
+ exports.ParserUtility = ParserUtility;
74
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ import { TokenBuffer } from "./lexers/token-buffer";
2
+ import { ParserUtility } from "./parser/parser";
3
+ export interface Dictionary<T> {
4
+ [key: string]: T;
5
+ }
6
+ export interface CompileOptions {
7
+ version?: string;
8
+ noscript?: boolean;
9
+ basedir?: string;
10
+ resolver?: ImportResolverConstructor;
11
+ resolverInstance?: ImportResolver;
12
+ exportName?: string;
13
+ format?: OutputFormat;
14
+ }
15
+ export type OutputFormat = '_default' | 'object' | 'json' | 'js' | 'javascript' | 'module' | 'esmodule' | 'ts' | 'typescript';
16
+ export interface GrammarBuilderContext {
17
+ alreadyCompiled: Set<string>;
18
+ resolver: ImportResolver;
19
+ uuids: Dictionary<number>;
20
+ }
21
+ export interface ImportResolver {
22
+ path(path: string): string;
23
+ body(path: string): Promise<string>;
24
+ }
25
+ export interface ImportResolverConstructor {
26
+ new (basePath: string): ImportResolver;
27
+ }
28
+ export type PostProcessor = (payload: PostProcessorPayload) => any;
29
+ interface PostProcessorPayload {
30
+ data: any[];
31
+ rule: GrammarRule;
32
+ meta: any;
33
+ }
34
+ export type JavascriptDirective = {
35
+ body: GrammarTypeJS;
36
+ } | {
37
+ head: GrammarTypeJS;
38
+ };
39
+ export interface ImportDirective {
40
+ import: string;
41
+ path?: boolean;
42
+ }
43
+ export interface ConfigDirective {
44
+ config: Dictionary<any>;
45
+ }
46
+ export interface GrammarDirective {
47
+ grammar: {
48
+ config?: Dictionary<any>;
49
+ rules: GrammarBuilderRule[];
50
+ };
51
+ }
52
+ export interface LexerDirective {
53
+ lexer: {
54
+ start?: string;
55
+ states: LexerStateDefinition[];
56
+ };
57
+ }
58
+ export interface GrammarBuilderRule {
59
+ name: string;
60
+ expressions: GrammarBuilderExpression[];
61
+ postprocess?: GrammarTypeJS | GrammarTypeBuiltIn | GrammarTypeTemplate;
62
+ }
63
+ export interface GrammarBuilderExpression {
64
+ symbols: GrammarBuilderSymbol[];
65
+ postprocess?: GrammarTypeJS | GrammarTypeBuiltIn | GrammarTypeTemplate;
66
+ }
67
+ export type GrammarBuilderSymbol = GrammarTypeRule | GrammarTypeRegex | GrammarTypeToken | GrammarTypeLiteral | GrammarBuilderSymbolRepeat | GrammarBuilderSymbolSubexpression;
68
+ export interface GrammarBuilderSymbolSubexpression {
69
+ subexpression: GrammarBuilderExpression[];
70
+ }
71
+ export interface GrammarBuilderSymbolRepeat {
72
+ expression: GrammarBuilderSymbol;
73
+ repeat: "+" | "*" | "?";
74
+ }
75
+ export interface GrammarTypeRule {
76
+ rule: string;
77
+ }
78
+ export interface GrammarTypeRegex {
79
+ regex: string;
80
+ flags?: string;
81
+ }
82
+ export interface GrammarTypeToken {
83
+ token: string;
84
+ }
85
+ export interface GrammarTypeLiteral {
86
+ literal: string;
87
+ insensitive?: boolean;
88
+ }
89
+ export type GrammarTypeBuiltIn = {
90
+ builtin: string;
91
+ };
92
+ export type GrammarTypeTemplate = {
93
+ template: string;
94
+ };
95
+ export type GrammarTypeJS = {
96
+ js: string;
97
+ };
98
+ export type ParserAlgorithm = ((language: LanguageDefinition & {
99
+ tokens: TokenBuffer;
100
+ utility: ParserUtility;
101
+ }, options?: any) => {
102
+ results: any[];
103
+ info?: any;
104
+ });
105
+ export type LanguageDirective = (JavascriptDirective | ImportDirective | ConfigDirective | GrammarDirective | LexerDirective);
106
+ type GrammarRuleSymbolFunction = (data: LexerToken) => boolean;
107
+ export interface GrammarRule {
108
+ name: string;
109
+ symbols: GrammarRuleSymbol[];
110
+ postprocess?: PostProcessor;
111
+ }
112
+ export type GrammarRuleSymbol = string | RegExp | GrammarTypeLiteral | GrammarTypeToken | GrammarRuleSymbolFunction;
113
+ export interface GeneratorGrammarRule {
114
+ name: string;
115
+ symbols: GeneratorGrammarSymbol[];
116
+ postprocess?: GrammarTypeTemplate | GrammarTypeBuiltIn | GrammarTypeJS;
117
+ }
118
+ export type GeneratorGrammarSymbol = {
119
+ alias?: string;
120
+ } & (GrammarTypeRule | GrammarTypeRegex | GrammarTypeLiteral | GrammarTypeToken | GrammarTypeJS);
121
+ export interface LanguageDefinition {
122
+ lexer?: Lexer | LexerConfig;
123
+ grammar: {
124
+ start: string;
125
+ rules: Dictionary<GrammarRule[]>;
126
+ };
127
+ }
128
+ export interface TQRestorePoint {
129
+ historyIndex: number;
130
+ offset: number;
131
+ }
132
+ export interface Lexer {
133
+ next(): LexerToken | undefined;
134
+ feed(chunk?: string, state?: ReturnType<Lexer['state']>): void;
135
+ state(): any;
136
+ flush?(): void;
137
+ }
138
+ export interface LexerToken {
139
+ type?: string | undefined;
140
+ tag?: Set<string>;
141
+ value: string;
142
+ offset: number;
143
+ line: number;
144
+ column: number;
145
+ }
146
+ export interface LexerStatus {
147
+ index: number;
148
+ line: number;
149
+ column: number;
150
+ state: string;
151
+ }
152
+ export interface LexerStateDefinition {
153
+ name: string;
154
+ unmatched?: string;
155
+ default?: string;
156
+ rules: (LexerStateImportRule | LexerStateMatchRule)[];
157
+ }
158
+ export interface LexerStateImportRule {
159
+ import: string[];
160
+ }
161
+ export interface LexerStateMatchRule {
162
+ when: string | RegExp;
163
+ type?: string;
164
+ tag?: string[];
165
+ pop?: number | 'all';
166
+ inset?: number;
167
+ goto?: string;
168
+ set?: string;
169
+ }
170
+ export interface ResolvedStateDefinition {
171
+ name: string;
172
+ unmatched?: string;
173
+ rules: LexerStateMatchRule[];
174
+ }
175
+ export interface CompiledStateDefinition {
176
+ regexp: RegExp;
177
+ unmatched?: LexerStateMatchRule;
178
+ rules: LexerStateMatchRule[];
179
+ }
180
+ export interface LexerConfig {
181
+ start?: string;
182
+ states: Dictionary<LexerStateDefinition>;
183
+ }
184
+ export interface GeneratorState {
185
+ version: string;
186
+ config: Dictionary<string>;
187
+ head: string[];
188
+ body: string[];
189
+ lexer?: LexerConfig;
190
+ grammar: {
191
+ start: string;
192
+ rules: Dictionary<GeneratorGrammarRule[]>;
193
+ uuids: {
194
+ [key: string]: number;
195
+ };
196
+ };
197
+ }
198
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=typings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typings.js","sourceRoot":"","sources":["../src/typings.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { Dictionary, GrammarRuleSymbol } from "../typings";
2
+ export declare class Collection<T> {
3
+ categorized: Dictionary<Dictionary<number>>;
4
+ private uncategorized;
5
+ private items;
6
+ constructor(ref?: T[]);
7
+ encode(ref: T): number;
8
+ decode(id: number | string): T;
9
+ resolve(_: T): {
10
+ category: keyof Collection<T>['categorized'];
11
+ key: string;
12
+ } | void;
13
+ private addCategorized;
14
+ private addUncategorized;
15
+ }
16
+ export declare class SymbolCollection extends Collection<GrammarRuleSymbol> {
17
+ categorized: {
18
+ nonTerminal: {};
19
+ literalI: {};
20
+ literalS: {};
21
+ token: {};
22
+ regex: {};
23
+ function: {};
24
+ };
25
+ resolve(symbol: GrammarRuleSymbol): {
26
+ category: string;
27
+ key: string;
28
+ };
29
+ }
30
+ export declare class Matrix<T> {
31
+ private initial?;
32
+ private $x;
33
+ private $y;
34
+ get x(): number;
35
+ set x(x: number);
36
+ get y(): number;
37
+ set y(y: number);
38
+ matrix: GetCallbackOrValue<T>[][];
39
+ constructor(x: number, y: number, initial?: T | ((...args: any) => T));
40
+ get(x: number, y: number): T;
41
+ set(x: number, y: number, value: any): any;
42
+ resize(x: number, y: number): void;
43
+ static Array<T>(length: any, initial?: T | ((...args: any) => T)): GetCallbackOrValue<T>[];
44
+ }
45
+ type GetCallbackOrValue<T> = T extends (...args: any) => any ? ReturnType<T> : T;
46
+ export {};