grammar-composer 0.6.0 → 0.6.2

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 (55) hide show
  1. package/dist/exports/Exports.d.ts +4 -3
  2. package/dist/exports/Exports.d.ts.map +1 -1
  3. package/dist/exports/Exports.js +4 -3
  4. package/dist/exports/Exports.js.map +1 -1
  5. package/dist/parser/Builder.d.ts +11 -0
  6. package/dist/parser/Builder.d.ts.map +1 -0
  7. package/dist/{parser-generator/Grammar.js → parser/Builder.js} +10 -97
  8. package/dist/parser/Builder.js.map +1 -0
  9. package/dist/{parser-generator → parser}/Grammar.d.ts +8 -15
  10. package/dist/parser/Grammar.d.ts.map +1 -0
  11. package/dist/parser/Grammar.js +97 -0
  12. package/dist/parser/Grammar.js.map +1 -0
  13. package/dist/{parser-generator → parser}/ParseError.d.ts +0 -2
  14. package/dist/parser/ParseError.d.ts.map +1 -0
  15. package/dist/{parser-generator → parser}/ParseError.js +35 -8
  16. package/dist/parser/ParseError.js.map +1 -0
  17. package/dist/{parser-generator/TopDownParser.d.ts → parser/Parser.d.ts} +4 -3
  18. package/dist/parser/Parser.d.ts.map +1 -0
  19. package/dist/{parser-generator/TopDownParser.js → parser/Parser.js} +40 -6
  20. package/dist/parser/Parser.js.map +1 -0
  21. package/dist/parser/StaticAnalysis.d.ts.map +1 -0
  22. package/dist/{parser-generator → parser}/StaticAnalysis.js +16 -5
  23. package/dist/parser/StaticAnalysis.js.map +1 -0
  24. package/dist/parser/TerminalToText.d.ts.map +1 -0
  25. package/dist/{parser-generator → parser}/TerminalToText.js +1 -1
  26. package/dist/parser/TerminalToText.js.map +1 -0
  27. package/dist/tests/Test.js +2 -2
  28. package/dist/tests/Test.js.map +1 -1
  29. package/dist/utilities/Utilities.d.ts +2 -0
  30. package/dist/utilities/Utilities.d.ts.map +1 -1
  31. package/dist/utilities/Utilities.js +15 -1
  32. package/dist/utilities/Utilities.js.map +1 -1
  33. package/package.json +6 -4
  34. package/src/exports/Exports.ts +4 -3
  35. package/src/{parser-generator/Grammar.ts → parser/Builder.ts} +14 -191
  36. package/src/parser/Grammar.ts +194 -0
  37. package/src/{parser-generator → parser}/ParseError.ts +42 -11
  38. package/src/{parser-generator/TopDownParser.ts → parser/Parser.ts} +59 -10
  39. package/src/{parser-generator → parser}/StaticAnalysis.ts +17 -7
  40. package/src/{parser-generator → parser}/TerminalToText.ts +1 -1
  41. package/src/tests/Test.ts +2 -2
  42. package/src/utilities/Utilities.ts +21 -1
  43. package/tsconfig.json +51 -53
  44. package/dist/parser-generator/Grammar.d.ts.map +0 -1
  45. package/dist/parser-generator/Grammar.js.map +0 -1
  46. package/dist/parser-generator/ParseError.d.ts.map +0 -1
  47. package/dist/parser-generator/ParseError.js.map +0 -1
  48. package/dist/parser-generator/StaticAnalysis.d.ts.map +0 -1
  49. package/dist/parser-generator/StaticAnalysis.js.map +0 -1
  50. package/dist/parser-generator/TerminalToText.d.ts.map +0 -1
  51. package/dist/parser-generator/TerminalToText.js.map +0 -1
  52. package/dist/parser-generator/TopDownParser.d.ts.map +0 -1
  53. package/dist/parser-generator/TopDownParser.js.map +0 -1
  54. /package/dist/{parser-generator → parser}/StaticAnalysis.d.ts +0 -0
  55. /package/dist/{parser-generator → parser}/TerminalToText.d.ts +0 -0
@@ -158,10 +158,12 @@ export function detectAndAnnotateOptionalNodes(rootNode) {
158
158
  break;
159
159
  }
160
160
  }
161
- // All remaining unresolved nodes must now be optional,
162
- // since they are all mutually cyclic and all their non-cyclic grammar elements are known to be optional.
161
+ // All remaining unresolved nodes are part of a strongly-connected cyclic
162
+ // component with no resolvable nullable base case. The least fixed-point
163
+ // for nullability is `false` (not optional): a cycle without an empty
164
+ // alternative cannot derive the empty string.
163
165
  for (const node of unresolvedNodes.keys()) {
164
- resolvedNodes.set(node, true);
166
+ resolvedNodes.set(node, false);
165
167
  unresolvedNodes.delete(node);
166
168
  }
167
169
  // Finally set the 'optional' property of all nodes based on the detected values.
@@ -177,7 +179,12 @@ export function detectAndErrorOnLeftRecursion(rootNode) {
177
179
  throw new Error(`Detected left recursion for nonterminal '${node.name}'.`);
178
180
  }
179
181
  else {
180
- throw new Error(`Detected left recursion for node: ${JSON.stringify(node, undefined, 4)}`);
182
+ try {
183
+ throw new Error(`Detected left recursion for node: ${JSON.stringify(node, undefined, 4)}`);
184
+ }
185
+ catch {
186
+ throw new Error(`Detected left recursion for node type '${node.type}'.`);
187
+ }
181
188
  }
182
189
  }
183
190
  currentlyIteratedNodes.add(node);
@@ -245,7 +252,11 @@ export function validatePatternCaptureGroups(pattern) {
245
252
  walk(node.content);
246
253
  return;
247
254
  }
248
- // Composite nodes that wrap content without creating a capturing group:
255
+ // Composite nodes that wrap content without creating a capturing group.
256
+ // regexp-composer uses a `greedy` boolean to distinguish `zeroOrMore` vs
257
+ // `zeroOrMoreNonGreedy` etc, but both share the same `type` string
258
+ // (`zeroOrMore`, `oneOrMore`, `repeated`). Handle any type that wraps
259
+ // a single `content` field.
249
260
  case 'possibly':
250
261
  case 'zeroOrMore':
251
262
  case 'oneOrMore':
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticAnalysis.js","sourceRoot":"","sources":["../../src/parser/StaticAnalysis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAGxE,iGAAiG;AACjG,mCAAmC;AACnC,iGAAiG;AACjG,MAAM,UAAU,8BAA8B,CAAC,QAAwB;IACtE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;IAE9C,MAAM,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAA;IACxD,MAAM,eAAe,GAAG,IAAI,GAAG,EAA4E,CAAA;IAE3G,SAAS,iBAAiB,CAAC,IAAoB;QAC9C,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC/B,CAAC;QAED,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAEtB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,gBAAgB,CAAC;YACtB,KAAK,iBAAiB,EAAE,CAAC;gBACxB,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAEtC,OAAO,IAAI,CAAC,QAAQ,CAAA;YACrB,CAAC;YAED,KAAK,aAAa,CAAC;YACnB,KAAK,YAAY,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAE9C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACnB,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;oBAE7B,OAAO,IAAI,CAAA;gBACZ,CAAC;qBAAM,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;oBAE/B,OAAO,MAAM,CAAA;gBACd,CAAC;qBAAM,CAAC;oBACP,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;oBAErF,OAAO,SAAS,CAAA;gBACjB,CAAC;YACF,CAAC;YAED,KAAK,UAAU,EAAE,CAAC;gBACjB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;gBAE9C,IAAI,4BAA4B,GAAG,KAAK,CAAA;gBAExC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;oBAEzC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBACvB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;4BACtB,4BAA4B,GAAG,IAAI,CAAA;wBACpC,CAAC;oBACF,CAAC;yBAAM,CAAC;wBACP,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBAC1B,CAAC;gBACF,CAAC;gBAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC5B,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;oBAE7B,OAAO,IAAI,CAAA;gBACZ,CAAC;qBAAM,IAAI,4BAA4B,EAAE,CAAC;oBACzC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;oBAE9B,OAAO,KAAK,CAAA;gBACb,CAAC;qBAAM,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACpC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;oBAE7B,OAAO,IAAI,CAAA;gBACZ,CAAC;qBAAM,CAAC;oBACP,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;oBAE5D,OAAO,SAAS,CAAA;gBACjB,CAAC;YACF,CAAC;YAED,KAAK,QAAQ,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;gBAC9C,IAAI,yBAAyB,GAAG,KAAK,CAAA;gBAErC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;oBAEzC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBACvB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;4BACrB,yBAAyB,GAAG,IAAI,CAAA;wBACjC,CAAC;oBACF,CAAC;yBAAM,CAAC;wBACP,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBAC1B,CAAC;gBACF,CAAC;gBAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC5B,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;oBAE7B,OAAO,IAAI,CAAA;gBACZ,CAAC;qBAAM,IAAI,yBAAyB,EAAE,CAAC;oBACtC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;oBAE7B,OAAO,IAAI,CAAA;gBACZ,CAAC;qBAAM,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACpC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;oBAE9B,OAAO,KAAK,CAAA;gBACb,CAAC;qBAAM,CAAC;oBACP,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;oBAE3D,OAAO,SAAS,CAAA;gBACjB,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,8EAA8E;IAC9E,wBAAwB;IACxB,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAE3B,oGAAoG;IACpG,wEAAwE;IACxE,OAAO,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACjC,kFAAkF;QAClF,iFAAiF;QACjF,+BAA+B;QAC/B,IAAI,oCAAoC,GAAG,KAAK,CAAA;QAEhD,MAAM,aAAa,GAAqB,EAAE,CAAA;QAE1C,oEAAoE;QACpE,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC;YAClE,IAAI,YAAY,GAAG,KAAK,CAAA;YAExB,wDAAwD;YACxD,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnD,4CAA4C;gBAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBAE3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACzB,yDAAyD;oBACzD,oCAAoC,GAAG,IAAI,CAAA;oBAE3C,IAAI,QAAQ,EAAE,CAAC;wBACd,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BACpB,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;4BAC7B,YAAY,GAAG,IAAI,CAAA;4BACnB,MAAK;wBACN,CAAC;oBACF,CAAC;yBAAM,CAAC;wBACP,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;4BACrB,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;4BAC9B,YAAY,GAAG,IAAI,CAAA;4BACnB,MAAK;wBACN,CAAC;oBACF,CAAC;oBAED,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;gBAChC,CAAC;YACF,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBAClB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzB,CAAC;iBAAM,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpC,IAAI,QAAQ,EAAE,CAAC;oBACd,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBAC/B,CAAC;qBAAM,CAAC;oBACP,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBAC9B,CAAC;gBAED,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzB,CAAC;QACF,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YAClC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;QAED,0DAA0D;QAC1D,kFAAkF;QAClF,IAAI,CAAC,oCAAoC,EAAE,CAAC;YAC3C,MAAK;QACN,CAAC;IACF,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,sEAAsE;IACtE,8CAA8C;IAC9C,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC9B,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,iFAAiF;IACjF,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,aAAa,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAA;IAC3B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,QAAwB;IACrE,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAA;IAExD,SAAS,MAAM,CAAC,IAAoB;QACnC,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;YAC3E,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC;oBACJ,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC3F,CAAC;gBAAC,MAAM,CAAC;oBACR,MAAM,IAAI,KAAK,CAAC,0CAA2C,IAAY,CAAC,IAAI,IAAI,CAAC,CAAA;gBAClF,CAAC;YACF,CAAC;QACF,CAAC;QAED,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAEhC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,aAAa,CAAC;YACnB,KAAK,YAAY,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAEpB,MAAK;YACN,CAAC;YAED,KAAK,UAAU,EAAE,CAAC;gBACjB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnC,MAAM,CAAC,MAAM,CAAC,CAAA;oBAEd,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACtB,MAAK;oBACN,CAAC;gBACF,CAAC;gBAED,MAAK;YACN,CAAC;YAED,KAAK,QAAQ,EAAE,CAAC;gBACf,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnC,MAAM,CAAC,MAAM,CAAC,CAAA;gBACf,CAAC;gBAED,MAAK;YACN,CAAC;QACF,CAAC;QAED,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,CAAA;AACjB,CAAC;AAED,wEAAwE;AACxE,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AACjF,mFAAmF;AACnF,qFAAqF;AACrF,kBAAkB;AAClB,EAAE;AACF,oFAAoF;AACpF,MAAM,UAAU,4BAA4B,CAAC,OAAgB;IAC5D,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAU,CAAA;IACpD,IAAI,oBAAoB,GAAG,KAAK,CAAA;IAChC,IAAI,sBAAsB,GAAG,KAAK,CAAA;IAElC,SAAS,IAAI,CAAC,IAAa;QAC1B,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,OAAM;QACP,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,CAAA;YACd,CAAC;YAED,OAAM;QACP,CAAC;QAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC7B,IAAI,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC/C,MAAM,IAAI,KAAK,CAAC,6FAA8F,IAAY,CAAC,IAAI,iDAAiD,CAAC,CAAA;oBAClL,CAAC;oBAED,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACzC,oBAAoB,GAAG,IAAI,CAAA;gBAC5B,CAAC;qBAAM,CAAC;oBACP,sBAAsB,GAAG,IAAI,CAAA;gBAC9B,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAElB,OAAM;YACP,CAAC;YAED,wEAAwE;YACxE,yEAAyE;YACzE,mEAAmE;YACnE,sEAAsE;YACtE,4BAA4B;YAC5B,KAAK,UAAU,CAAC;YAChB,KAAK,YAAY,CAAC;YAClB,KAAK,WAAW,CAAC;YACjB,KAAK,UAAU,CAAC;YAChB,KAAK,YAAY,CAAC;YAClB,KAAK,eAAe,CAAC;YACrB,KAAK,YAAY,CAAC;YAClB,KAAK,eAAe,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAElB,OAAM;YACP,CAAC;YAED,KAAK,OAAO,EAAE,CAAC;gBACd,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACb,CAAC;gBAED,OAAM;YACP,CAAC;YAED,gEAAgE;YAChE,4CAA4C;YAC5C,KAAK,eAAe,CAAC;YACrB,KAAK,cAAc,CAAC;YACpB,KAAK,QAAQ,EAAE,CAAC;gBACf,OAAM;YACP,CAAC;YAED,SAAS,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,8BAA+B,IAAY,CAAC,IAAI,EAAE,CAAC,CAAA;YACpE,CAAC;QACF,CAAC;IACF,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,CAAA;IAEb,IAAI,oBAAoB,IAAI,sBAAsB,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,iSAAiS,CAAC,CAAA;IACnT,CAAC;AACF,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalToText.d.ts","sourceRoot":"","sources":["../../src/parser/TerminalToText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAK7E,qBAAa,cAAc;IACd,OAAO,CAAC,sBAAsB;IAA1C,YAAoB,sBAAsB,EAAE,MAAM,EACjD;IAED,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAM5C;IAED,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAExD;IAED,wBAAwB,CAAC,QAAQ,EAAE,eAAe,UAmBjD;IAED,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CA+FzC;IAED,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUlD;IAED,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAgBjD;IAED,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAMvD;CACD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgB/C"}
@@ -141,7 +141,7 @@ export class TerminalToText {
141
141
  }
142
142
  export function escapeChar(char) {
143
143
  const charMapping = {
144
- //'\\': '\\\\',
144
+ '\\': '\\\\',
145
145
  "'": "\\'",
146
146
  '\n': '\\n',
147
147
  '\r': '\\r',
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalToText.js","sourceRoot":"","sources":["../../src/parser/TerminalToText.ts"],"names":[],"mappings":"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"}
@@ -92,7 +92,7 @@ function test1() {
92
92
  //testParserError1()
93
93
  //testParserError2()
94
94
  //testJsonParser()
95
- testXmlParser();
96
- //testRegExpParser()
95
+ //testXmlParser()
96
+ testRegExpParser();
97
97
  //test1()
98
98
  //# sourceMappingURL=Test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Test.js","sourceRoot":"","sources":["../../src/tests/Test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Test.js","sourceRoot":"","sources":["../../src/tests/Test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ParseTreeNode } from '../exports/Exports.js';
1
2
  export declare function roundToDigits(val: number, digits?: number): number;
2
3
  export declare function isNumber(value: unknown): value is number;
3
4
  export declare function isString(value: unknown): value is string;
@@ -6,4 +7,5 @@ export declare function isObject(value: unknown): value is object;
6
7
  export declare function isArray(value: unknown): value is unknown[];
7
8
  export declare function isBoolean(value: unknown): value is boolean;
8
9
  export declare function isFunction(value: unknown): value is Function;
10
+ export declare function stringifyParseTree(parseTree: ParseTreeNode[], depth?: number): string;
9
11
  //# 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,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
+ {"version":3,"file":"Utilities.d.ts","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAE1D,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;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,KAAK,SAAI,GAAG,MAAM,CAgBhF"}
@@ -12,7 +12,7 @@ export function isBigInt(value) {
12
12
  return typeof value === 'bigint';
13
13
  }
14
14
  export function isObject(value) {
15
- return typeof value === 'object' && !Array.isArray(value);
15
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
16
16
  }
17
17
  export function isArray(value) {
18
18
  return Array.isArray(value);
@@ -23,4 +23,18 @@ export function isBoolean(value) {
23
23
  export function isFunction(value) {
24
24
  return typeof value === 'function';
25
25
  }
26
+ export function stringifyParseTree(parseTree, depth = 0) {
27
+ let result = '';
28
+ const getNewlineWithIndent = (depth) => `\n${'\t'.repeat(depth)}`;
29
+ for (const node of parseTree) {
30
+ result += `${getNewlineWithIndent(depth)}${node.name}`;
31
+ if (node.children && node.children.length > 0) {
32
+ result += stringifyParseTree(node.children, depth + 1);
33
+ }
34
+ else {
35
+ result += `${getNewlineWithIndent(depth + 1)}'${node.sourceText}'`;
36
+ }
37
+ }
38
+ return result;
39
+ }
26
40
  //# sourceMappingURL=Utilities.js.map
@@ -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,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"}
1
+ {"version":3,"file":"Utilities.js","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAEA,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,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC5E,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;AAED,MAAM,UAAU,kBAAkB,CAAC,SAA0B,EAAE,KAAK,GAAG,CAAC;IACvE,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;IAEzE,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAEtD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QACvD,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAA;QACnE,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "grammar-composer",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
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",
@@ -29,12 +29,14 @@
29
29
  "README.md"
30
30
  ],
31
31
  "scripts": {
32
- "test": "node dist/tests/Test.js"
32
+ "test": "vitest",
33
+ "test-manual": "node dist/tests/Test.js"
33
34
  },
34
35
  "dependencies": {
35
- "regexp-composer": "~0.5.0"
36
+ "regexp-composer": "~0.6.1"
36
37
  },
37
38
  "devDependencies": {
38
- "@types/node": "~26.4.0"
39
+ "@types/node": "~26.4.0",
40
+ "vitest": "~4.1.11"
39
41
  }
40
42
  }
@@ -1,3 +1,4 @@
1
- export * from '../parser-generator/Grammar.js'
2
- export { ParseError } from '../parser-generator/ParseError.js'
3
- export * from '../parser-generator/TopDownParser.js'
1
+ export * from '../parser/Grammar.js'
2
+ export * from '../parser/Builder.js'
3
+ export { ParseError } from '../parser/ParseError.js'
4
+ export * from '../parser/Parser.js'
@@ -1,13 +1,12 @@
1
- import { Pattern, buildRegExp, inputStart, isPatternOptional } from 'regexp-composer'
2
- import { isArray, isBoolean, isFunction, isString } from '../utilities/Utilities.js'
1
+ import { isArray, isFunction, isString } from '../utilities/Utilities.js'
3
2
 
4
- import { parse } from './TopDownParser.js'
5
- import { detectAndAnnotateOptionalNodes, detectAndErrorOnLeftRecursion, validatePatternCaptureGroups } from './StaticAnalysis.js'
3
+ import { detectAndAnnotateOptionalNodes, detectAndErrorOnLeftRecursion } from './StaticAnalysis.js'
4
+ import { Grammar, Nonterminal, GrammarElement, StringTerminal, Sequence, NonterminalReference, Production } from './Grammar.js'
6
5
 
7
6
  /////////////////////////////////////////////////////////////////////////////////////////////////
8
7
  // Grammar builder method
9
8
  /////////////////////////////////////////////////////////////////////////////////////////////////
10
- export function buildGrammar<T extends { [key: string]: any }>(
9
+ export function buildGrammar<T extends GrammarDefinition>(
11
10
  definitionObject: T | (new () => T),
12
11
  startProductionName: keyof T,
13
12
  options?: GrammarBuilderOptions<T>): Grammar<T> {
@@ -25,7 +24,7 @@ export function buildGrammar<T extends { [key: string]: any }>(
25
24
  const nonterminalLookup = new Map<Function, Nonterminal>()
26
25
  const optionalNonterminalLookup = new Map<Function, Nonterminal>()
27
26
 
28
- for (const key in definitionObject) {
27
+ for (const key of Object.keys(definitionObject)) {
29
28
  const objectProperty = definitionObject[key]
30
29
 
31
30
  nameLookup.set(objectProperty, key)
@@ -67,6 +66,12 @@ export function buildGrammar<T extends { [key: string]: any }>(
67
66
  nonterminal.content = preparedContent
68
67
 
69
68
  const optionalNonterminal = optionalNonterminalLookup.get(func)!
69
+
70
+ // The optional wrapper should share the already-resolved content
71
+ // object (which now contains only resolved Nonterminal refs, no
72
+ // NonterminalReferences left). Sharing is safe because optional
73
+ // detection works on canonical identity and nodes are mutated
74
+ // only via the `optional` flag on the wrapper itself.
70
75
  optionalNonterminal.content = preparedContent
71
76
  }
72
77
 
@@ -170,94 +175,6 @@ function prepareGrammarElement(
170
175
  return prepare(rootElement)
171
176
  }
172
177
 
173
- /////////////////////////////////////////////////////////////////////////////////////////////////
174
- // Exported AST builder functions
175
- /////////////////////////////////////////////////////////////////////////////////////////////////
176
- export function zeroOrMore(content: Production): Repetition {
177
- return {
178
- type: 'Repetition',
179
- content: productionToGrammarElement(content),
180
- optional: true,
181
- cached: false,
182
- }
183
- }
184
-
185
- export function oneOrMore(content: Production): Repetition {
186
- return {
187
- type: 'Repetition',
188
- content: productionToGrammarElement(content),
189
- optional: false,
190
- cached: false,
191
- }
192
- }
193
-
194
- export function anyOf(...members: Production[]): Choice {
195
- if (members.length === 0) {
196
- throw new Error(`'anyOf' requires at least one member.`)
197
- }
198
-
199
- const normalizedMembers = members.map(member => productionToGrammarElement(member))
200
-
201
- return {
202
- type: 'Choice',
203
- members: normalizedMembers,
204
- optional: false,
205
- exhaustive: false,
206
- cached: false,
207
- }
208
- }
209
-
210
- export function bestOf(...members: Production[]): Choice {
211
- if (members.length === 0) {
212
- throw new Error(`'bestOf' requires at least one member.`)
213
- }
214
-
215
- const normalizedMembers = members.map(member => productionToGrammarElement(member))
216
-
217
- return {
218
- type: 'Choice',
219
- members: normalizedMembers,
220
- optional: false,
221
- exhaustive: true,
222
-
223
- cached: false,
224
- }
225
- }
226
-
227
- export function possibly<T extends Production>(content: Production): T {
228
- return { ...productionToGrammarElement(content), optional: true } as T
229
- }
230
-
231
- export function pattern(pattern: Pattern): PatternTerminal {
232
- if (isArray(pattern)) {
233
- pattern = [inputStart, ...pattern]
234
- } else {
235
- pattern = [inputStart, pattern]
236
- }
237
-
238
- validatePatternCaptureGroups(pattern)
239
-
240
- const regExp = buildRegExp(pattern)
241
- const optional = isPatternOptional(pattern)
242
-
243
- return {
244
- type: 'PatternTerminal',
245
- pattern,
246
- regExp,
247
- optional,
248
-
249
- cached: false,
250
- }
251
- }
252
-
253
- export function cached<T extends Production>(content: Production): T {
254
- return { ...productionToGrammarElement(content), cached: true } as T
255
- }
256
-
257
- export function uncached<T extends Production>(content: Production): T {
258
- return { ...productionToGrammarElement(content), cached: false } as T
259
- }
260
-
261
178
  /////////////////////////////////////////////////////////////////////////////////////////////////
262
179
  // Internal AST builder methods
263
180
  /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -311,7 +228,7 @@ function unresolvedReference(reference: Function): NonterminalReference {
311
228
  }
312
229
  }
313
230
 
314
- function productionToGrammarElement(production: Production): GrammarElement {
231
+ export function productionToGrammarElement(production: Production): GrammarElement {
315
232
  if (isString(production)) {
316
233
  return stringTerminal(production)
317
234
  } else if (isArray(production)) {
@@ -325,102 +242,6 @@ function productionToGrammarElement(production: Production): GrammarElement {
325
242
  }
326
243
  }
327
244
 
328
- /////////////////////////////////////////////////////////////////////////////////////////////////
329
- // Grammar class
330
- /////////////////////////////////////////////////////////////////////////////////////////////////
331
- export class Grammar<T> {
332
- readonly productions: Record<keyof T, any>
333
- readonly startProductionName: keyof T
334
-
335
- readonly maxCacheId: number
336
-
337
- constructor(productions: Record<keyof T, any>, startProductionName: keyof T, maxCacheId: number) {
338
- this.startProductionName = startProductionName
339
- this.productions = productions
340
- this.maxCacheId = maxCacheId
341
- }
342
-
343
- parse(text: string) {
344
- return parse(text, this)
345
- }
346
-
347
- get rootElement() {
348
- return (this.productions as any)[this.startProductionName]
349
- }
350
- }
351
-
352
- /////////////////////////////////////////////////////////////////////////////////////////////////
353
- // Type definitions
354
- /////////////////////////////////////////////////////////////////////////////////////////////////
355
- export type Production = string | GrammarElement | (() => Production) | Production[]
356
-
357
- export type GrammarElement =
358
- StringTerminal |
359
- PatternTerminal |
360
- Nonterminal |
361
- Sequence |
362
- Repetition |
363
- Choice |
364
- NonterminalReference
365
-
366
- interface GrammarElementBase {
367
- type: string
368
- optional: boolean
369
-
370
- cached: boolean
371
- cacheId?: number
372
-
373
- // The name of the grammar property this element was assigned to, if any.
374
- // Used by the parser to refer to the element by name in error messages.
375
- name?: string
376
- }
377
-
378
- export type Terminal = StringTerminal | PatternTerminal
379
-
380
- export interface StringTerminal extends GrammarElementBase {
381
- type: 'StringTerminal'
382
- content: string
383
- }
384
-
385
- export interface PatternTerminal extends GrammarElementBase {
386
- type: 'PatternTerminal'
387
- pattern: Pattern
388
- regExp: RegExp
389
- }
390
-
391
- export interface Nonterminal extends GrammarElementBase {
392
- type: 'Nonterminal'
393
- name: string
394
- content: GrammarElement
395
- unwrapped: boolean
396
-
397
- // The canonical nonterminal as defined in the grammar. Clones created for
398
- // optional references and cached references keep a reference to the original,
399
- // so identity comparisons work across clones.
400
- grammarNonterminal?: Nonterminal
401
- }
402
-
403
- export interface Sequence extends GrammarElementBase {
404
- type: 'Sequence'
405
- members: GrammarElement[]
406
- }
407
-
408
- export interface Repetition extends GrammarElementBase {
409
- type: 'Repetition'
410
- content: GrammarElement
411
- }
412
-
413
- export interface Choice extends GrammarElementBase {
414
- type: 'Choice'
415
- members: GrammarElement[]
416
- exhaustive: boolean
417
- }
418
-
419
- export interface NonterminalReference extends GrammarElementBase {
420
- type: 'NonterminalReference'
421
- reference: Function
422
- }
423
-
424
245
  /////////////////////////////////////////////////////////////////////////////////////////////////
425
246
  // Builder type definitions
426
247
  /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -429,3 +250,5 @@ export interface GrammarBuilderOptions<T> {
429
250
  }
430
251
 
431
252
  export type GrammarNonterminalNames<T> = (keyof T)[]
253
+
254
+ export type GrammarDefinition = { [key: string]: any }