grammar-composer 0.3.1 → 0.5.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 (64) hide show
  1. package/README.md +144 -89
  2. package/dist/exports/Exports.d.ts +2 -0
  3. package/dist/exports/Exports.d.ts.map +1 -1
  4. package/dist/exports/Exports.js +2 -0
  5. package/dist/exports/Exports.js.map +1 -1
  6. package/dist/parser-generator/Grammar.d.ts +12 -5
  7. package/dist/parser-generator/Grammar.d.ts.map +1 -1
  8. package/dist/parser-generator/Grammar.js +81 -263
  9. package/dist/parser-generator/Grammar.js.map +1 -1
  10. package/dist/parser-generator/ParseError.d.ts +37 -0
  11. package/dist/parser-generator/ParseError.d.ts.map +1 -0
  12. package/dist/parser-generator/ParseError.js +226 -0
  13. package/dist/parser-generator/ParseError.js.map +1 -0
  14. package/dist/parser-generator/StaticAnalysis.d.ts +6 -0
  15. package/dist/parser-generator/StaticAnalysis.d.ts.map +1 -0
  16. package/dist/parser-generator/StaticAnalysis.js +283 -0
  17. package/dist/parser-generator/StaticAnalysis.js.map +1 -0
  18. package/dist/parser-generator/TerminalToText.d.ts +15 -0
  19. package/dist/parser-generator/TerminalToText.d.ts.map +1 -0
  20. package/dist/parser-generator/TerminalToText.js +158 -0
  21. package/dist/parser-generator/TerminalToText.js.map +1 -0
  22. package/dist/parser-generator/TopDownParser.d.ts +4 -2
  23. package/dist/parser-generator/TopDownParser.d.ts.map +1 -1
  24. package/dist/parser-generator/TopDownParser.js +52 -52
  25. package/dist/parser-generator/TopDownParser.js.map +1 -1
  26. package/dist/tests/Test.js +36 -26
  27. package/dist/tests/Test.js.map +1 -1
  28. package/dist/tests/test-grammars/JsonGrammar.d.ts +12 -11
  29. package/dist/tests/test-grammars/JsonGrammar.d.ts.map +1 -1
  30. package/dist/tests/test-grammars/JsonGrammar.js +25 -10
  31. package/dist/tests/test-grammars/JsonGrammar.js.map +1 -1
  32. package/dist/tests/test-grammars/RegExpGrammar.d.ts +34 -28
  33. package/dist/tests/test-grammars/RegExpGrammar.d.ts.map +1 -1
  34. package/dist/tests/test-grammars/RegExpGrammar.js +104 -60
  35. package/dist/tests/test-grammars/RegExpGrammar.js.map +1 -1
  36. package/dist/tests/test-grammars/SimpleTestGrammar1.d.ts +5 -0
  37. package/dist/tests/test-grammars/SimpleTestGrammar1.d.ts.map +1 -0
  38. package/dist/tests/test-grammars/SimpleTestGrammar1.js +7 -0
  39. package/dist/tests/test-grammars/SimpleTestGrammar1.js.map +1 -0
  40. package/dist/tests/test-grammars/XmlGrammar.d.ts +11 -10
  41. package/dist/tests/test-grammars/XmlGrammar.d.ts.map +1 -1
  42. package/dist/tests/test-grammars/XmlGrammar.js +19 -8
  43. package/dist/tests/test-grammars/XmlGrammar.js.map +1 -1
  44. package/dist/utilities/LineAndColumn.d.ts +7 -0
  45. package/dist/utilities/LineAndColumn.d.ts.map +1 -0
  46. package/dist/utilities/LineAndColumn.js +52 -0
  47. package/dist/utilities/LineAndColumn.js.map +1 -0
  48. package/dist/utilities/Utilities.d.ts +7 -7
  49. package/dist/utilities/Utilities.d.ts.map +1 -1
  50. package/dist/utilities/Utilities.js.map +1 -1
  51. package/package.json +2 -2
  52. package/src/exports/Exports.ts +2 -0
  53. package/src/parser-generator/Grammar.ts +120 -308
  54. package/src/parser-generator/ParseError.ts +337 -0
  55. package/src/parser-generator/StaticAnalysis.ts +340 -0
  56. package/src/parser-generator/TerminalToText.ts +196 -0
  57. package/src/parser-generator/TopDownParser.ts +76 -64
  58. package/src/tests/Test.ts +44 -28
  59. package/src/tests/test-grammars/JsonGrammar.ts +28 -10
  60. package/src/tests/test-grammars/RegExpGrammar.ts +193 -96
  61. package/src/tests/test-grammars/SimpleTestGrammar1.ts +10 -0
  62. package/src/tests/test-grammars/XmlGrammar.ts +20 -8
  63. package/src/utilities/LineAndColumn.ts +61 -0
  64. package/src/utilities/Utilities.ts +7 -7
@@ -0,0 +1,7 @@
1
+ export declare function getLineAndColumn(input: string, offset: number): {
2
+ line: number;
3
+ column: number;
4
+ };
5
+ export declare function expandTabs(text: string): string;
6
+ export declare function buildCaretSpacing(text: string, caretColumn: number): string;
7
+ //# sourceMappingURL=LineAndColumn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineAndColumn.d.ts","sourceRoot":"","sources":["../../src/utilities/LineAndColumn.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAehG;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiB/C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAmB3E"}
@@ -0,0 +1,52 @@
1
+ /////////////////////////////////////////////////////////////////////////////////////////////////
2
+ // Position helpers
3
+ /////////////////////////////////////////////////////////////////////////////////////////////////
4
+ export function getLineAndColumn(input, offset) {
5
+ let line = 1;
6
+ let lineStartOffset = 0;
7
+ for (let i = 0; i < offset && i < input.length; i++) {
8
+ if (input[i] === '\n') {
9
+ line += 1;
10
+ lineStartOffset = i + 1;
11
+ }
12
+ }
13
+ return {
14
+ line,
15
+ column: offset - lineStartOffset + 1
16
+ };
17
+ }
18
+ const tabSize = 4;
19
+ export function expandTabs(text) {
20
+ let result = '';
21
+ let column = 0;
22
+ for (const char of text) {
23
+ if (char === '\t') {
24
+ const spacesToNextTabStop = tabSize - (column % tabSize);
25
+ result += ' '.repeat(spacesToNextTabStop);
26
+ column += spacesToNextTabStop;
27
+ }
28
+ else {
29
+ result += char;
30
+ column += 1;
31
+ }
32
+ }
33
+ return result;
34
+ }
35
+ export function buildCaretSpacing(text, caretColumn) {
36
+ let spacing = '';
37
+ let column = 0;
38
+ for (let i = 0; i < caretColumn - 1 && i < text.length; i++) {
39
+ const char = text[i];
40
+ if (char === '\t') {
41
+ const spacesToNextTabStop = tabSize - (column % tabSize);
42
+ spacing += ' '.repeat(spacesToNextTabStop);
43
+ column += spacesToNextTabStop;
44
+ }
45
+ else {
46
+ spacing += ' ';
47
+ column += 1;
48
+ }
49
+ }
50
+ return spacing;
51
+ }
52
+ //# sourceMappingURL=LineAndColumn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineAndColumn.js","sourceRoot":"","sources":["../../src/utilities/LineAndColumn.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,mBAAmB;AACnB,iGAAiG;AACjG,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,MAAc;IAC7D,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,eAAe,GAAG,CAAC,CAAA;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,CAAA;YACT,eAAe,GAAG,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;IACF,CAAC;IAED,OAAO;QACN,IAAI;QACJ,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,CAAC;KACpC,CAAA;AACF,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,CAAA;AAEjB,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,mBAAmB,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAA;YAExD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;YACzC,MAAM,IAAI,mBAAmB,CAAA;QAC9B,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,IAAI,CAAA;YACd,MAAM,IAAI,CAAC,CAAA;QACZ,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,WAAmB;IAClE,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEpB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,mBAAmB,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAA;YAExD,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC1C,MAAM,IAAI,mBAAmB,CAAA;QAC9B,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,GAAG,CAAA;YACd,MAAM,IAAI,CAAC,CAAA;QACZ,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAA;AACf,CAAC"}
@@ -1,9 +1,9 @@
1
1
  export declare function roundToDigits(val: number, digits?: number): number;
2
- export declare function isNumber(value: any): value is number;
3
- export declare function isString(value: any): value is string;
4
- export declare function isBigInt(value: any): value is bigint;
5
- export declare function isObject(value: any): value is object;
6
- export declare function isArray(value: any): value is any[];
7
- export declare function isBoolean(value: any): value is boolean;
8
- export declare function isFunction(value: any): value is Function;
2
+ export declare function isNumber(value: unknown): value is number;
3
+ export declare function isString(value: unknown): value is string;
4
+ export declare function isBigInt(value: unknown): value is bigint;
5
+ export declare function isObject(value: unknown): value is object;
6
+ export declare function isArray(value: unknown): value is unknown[];
7
+ export declare function isBoolean(value: unknown): value is boolean;
8
+ export declare function isFunction(value: unknown): value is Function;
9
9
  //# sourceMappingURL=Utilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Utilities.d.ts","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,UAIpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,EAAE,CAElD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAEtD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,QAAQ,CAExD"}
1
+ {"version":3,"file":"Utilities.d.ts","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,UAIpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,EAAE,CAE1D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE1D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"Utilities.js","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,MAAM,GAAG,CAAC;IACpD,MAAM,UAAU,GAAG,EAAE,IAAI,MAAM,CAAA;IAE/B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,UAAU,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAU;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAU;IACnC,OAAO,OAAO,KAAK,KAAK,SAAS,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAU;IACpC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"Utilities.js","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,MAAM,GAAG,CAAC;IACpD,MAAM,UAAU,GAAG,EAAE,IAAI,MAAM,CAAA;IAE/B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,UAAU,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAc;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,SAAS,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAA;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "grammar-composer",
3
- "version": "0.3.1",
4
- "description": "Defines and generates parsers from composable grammar definitions. Includes advanced features like lexer-free parsing, selective packrat memoization and static analysis.",
3
+ "version": "0.5.0",
4
+ "description": "Creates and generates parsers from composable grammar definitions. Includes advanced features like lexer-free parsing, selective packrat memoization and static analysis.",
5
5
  "author": "Rotem Dan",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -1 +1,3 @@
1
1
  export * from '../parser-generator/Grammar.js'
2
+ export { ParseError } from '../parser-generator/ParseError.js'
3
+ export * from '../parser-generator/TopDownParser.js'