parser-lr 0.5.0 → 0.6.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.
@@ -3,6 +3,7 @@ export { AstSchema } from './ast-schema.js';
3
3
  export type { Alternative, BoundReferenceExpression, ChoiceExpression, Expression, GroupExpression, OptionalExpression, ReferenceExpression, RepeatExpression, SequenceExpression, TerminalExpression, } from './expression.js';
4
4
  export { Grammar } from './grammar.js';
5
5
  export { grammarFromCst } from './grammar-from-cst.js';
6
+ export { setBootstrapTableJson } from './meta-grammar-table.js';
6
7
  export { readGrammar } from './read-grammar.js';
7
8
  export { ReadGrammarError } from './read-grammar-error.js';
8
9
  export type { Production } from './production.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EACR,WAAW,EACX,wBAAwB,EACxB,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACR,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,GACtB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACH,2BAA2B,EAC3B,oBAAoB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EACR,WAAW,EACX,wBAAwB,EACxB,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACR,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,GACtB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACH,2BAA2B,EAC3B,oBAAoB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export { AstSchema } from './ast-schema.js';
2
2
  export { Grammar } from './grammar.js';
3
3
  export { grammarFromCst } from './grammar-from-cst.js';
4
+ export { setBootstrapTableJson } from './meta-grammar-table.js';
4
5
  export { readGrammar } from './read-grammar.js';
5
6
  export { ReadGrammarError } from './read-grammar-error.js';
6
7
  export { TransformSchema } from './transform-schema.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/grammar/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAa5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAa3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACH,2BAA2B,EAC3B,oBAAoB,GACvB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/grammar/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAa5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAa3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACH,2BAA2B,EAC3B,oBAAoB,GACvB,MAAM,sBAAsB,CAAC"}
@@ -1,6 +1,18 @@
1
1
  import type { Token } from '../lexer/token.js';
2
2
  import { ParseTable } from '../parse-table/parse-table.js';
3
+ import type { ParseTableJson } from '../parse-table/parse-table.js';
3
4
  import type { Grammar } from './grammar.js';
5
+ /**
6
+ * Overrides the bootstrapped meta-grammar table before any grammar file is read.
7
+ *
8
+ * @remarks
9
+ * The bundled CLI injects its inlined `grammar.json` here so it never depends on
10
+ * a `grammar.json` file on disk. Library consumers do not call this; they fall
11
+ * back to the lazy filesystem read in {@link bootstrapTableJson}.
12
+ *
13
+ * @param table - Serialized meta-grammar parse table.
14
+ */
15
+ export declare function setBootstrapTableJson(table: ParseTableJson): void;
4
16
  /**
5
17
  * Returns the bootstrapped meta-grammar table for `.grammar` files.
6
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"meta-grammar-table.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/meta-grammar-table.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAS5C;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAG7C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAQrC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,EAAE,CAKjE"}
1
+ {"version":3,"file":"meta-grammar-table.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/meta-grammar-table.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAM5C;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAIjE;AAsBD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAG7C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAQrC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,EAAE,CAKjE"}
@@ -4,13 +4,41 @@ import { Lexer } from '../lexer/lexer.js';
4
4
  import { isEofToken } from '../lexer/token.js';
5
5
  import { ParseTable } from '../parse-table/parse-table.js';
6
6
  import { grammarJsonDirectory } from './grammar-json-path.js';
7
- const bootstrapTable = JSON.parse(readFileSync(join(grammarJsonDirectory(), 'grammar.json'), 'utf8'));
7
+ let bootstrapTable = null;
8
8
  let bootstrapMetaGrammar = null;
9
+ /**
10
+ * Overrides the bootstrapped meta-grammar table before any grammar file is read.
11
+ *
12
+ * @remarks
13
+ * The bundled CLI injects its inlined `grammar.json` here so it never depends on
14
+ * a `grammar.json` file on disk. Library consumers do not call this; they fall
15
+ * back to the lazy filesystem read in {@link bootstrapTableJson}.
16
+ *
17
+ * @param table - Serialized meta-grammar parse table.
18
+ */
19
+ export function setBootstrapTableJson(table) {
20
+ bootstrapTable = table;
21
+ bootstrapMetaGrammar = null;
22
+ }
23
+ /**
24
+ * Reads and caches the bootstrapped `grammar.json` on first use.
25
+ *
26
+ * @remarks
27
+ * Loading is deferred so that importing the parse runtime (for example
28
+ * {@link ParseContext.fromTableJson}) never touches the filesystem or evaluates
29
+ * `import.meta`. Only grammar-file consumers pay this cost.
30
+ */
31
+ function bootstrapTableJson() {
32
+ if (bootstrapTable === null) {
33
+ bootstrapTable = JSON.parse(readFileSync(join(grammarJsonDirectory(), 'grammar.json'), 'utf8'));
34
+ }
35
+ return bootstrapTable;
36
+ }
9
37
  /**
10
38
  * Returns the bootstrapped meta-grammar table for `.grammar` files.
11
39
  */
12
40
  export function metaGrammarTable() {
13
- return ParseTable.fromJson(bootstrapTable);
41
+ return ParseTable.fromJson(bootstrapTableJson());
14
42
  }
15
43
  /**
16
44
  * Returns the bootstrapped meta-grammar model used to lex `.grammar` files.
@@ -1 +1 @@
1
- {"version":3,"file":"meta-grammar-table.js","sourceRoot":"","sources":["../../../src/lib/grammar/meta-grammar-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC7B,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACnD,CAAC;AAEpB,IAAI,oBAAoB,GAAmB,IAAI,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAE5B,OAAO,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IAEvB,IAAI,oBAAoB,KAAK,IAAI,EACjC,CAAC;QACG,oBAAoB,GAAG,gBAAgB,EAAE,CAAC,SAAS,EAAE,CAAC;IAC1D,CAAC;IAED,OAAO,oBAAoB,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAE3C,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"meta-grammar-table.js","sourceRoot":"","sources":["../../../src/lib/grammar/meta-grammar-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,IAAI,cAAc,GAA0B,IAAI,CAAC;AACjD,IAAI,oBAAoB,GAAmB,IAAI,CAAC;AAEhD;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAqB;IAEvD,cAAc,GAAG,KAAK,CAAC;IACvB,oBAAoB,GAAG,IAAI,CAAC;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,kBAAkB;IAEvB,IAAI,cAAc,KAAK,IAAI,EAC3B,CAAC;QACG,cAAc,GAAG,IAAI,CAAC,KAAK,CACvB,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACnD,CAAC;IACxB,CAAC;IAED,OAAO,cAAc,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAE5B,OAAO,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IAEvB,IAAI,oBAAoB,KAAK,IAAI,EACjC,CAAC;QACG,oBAAoB,GAAG,gBAAgB,EAAE,CAAC,SAAS,EAAE,CAAC;IAC1D,CAAC;IAED,OAAO,oBAAoB,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAE3C,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-validator.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/table-validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAO5C;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAEjC,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,EAAE,CA+B7E;AA2QD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,MAAM,EAAE,CAM7F"}
1
+ {"version":3,"file":"table-validator.d.ts","sourceRoot":"","sources":["../../../src/lib/grammar/table-validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAO5C;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAEjC,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,EAAE,CAiC7E;AA4VD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,MAAM,EAAE,CAM7F"}
@@ -9,6 +9,7 @@ export function validateGrammarTable(grammar) {
9
9
  const issues = [];
10
10
  const bnf = new EbnfDesugarer(grammar).desugar();
11
11
  const bnfProductionNames = new Set(bnf.productions.map((production) => production.name));
12
+ collectDuplicateDefinitionWarnings(grammar, issues);
12
13
  if (grammar.transformSchema !== null) {
13
14
  for (const rule of grammar.transformSchema.rules) {
14
15
  validateTransformProductionExists(rule, bnfProductionNames, issues);
@@ -20,6 +21,52 @@ export function validateGrammarTable(grammar) {
20
21
  }
21
22
  return issues;
22
23
  }
24
+ /**
25
+ * Warns when a grammar redeclares a production, ast type, or transform rule.
26
+ *
27
+ * @remarks
28
+ * Later definitions silently replace earlier ones during grammar loading, so a
29
+ * duplicate almost always signals a copy-paste mistake (for example EduBASIC's
30
+ * duplicated statement blocks).
31
+ *
32
+ * @param grammar - Parsed grammar model.
33
+ * @param issues - Issue list to append to.
34
+ */
35
+ function collectDuplicateDefinitionWarnings(grammar, issues) {
36
+ // Flag repeated production names in the grammar section.
37
+ reportDuplicateNames(grammar.productions.map((production) => production.name), 'grammar', 'production', issues);
38
+ // Flag repeated ast type names.
39
+ if (grammar.astSchema !== null) {
40
+ reportDuplicateNames(grammar.astSchema.types.map((type) => type.name), 'ast', 'type', issues);
41
+ }
42
+ // Flag repeated transform rules for the same production.
43
+ if (grammar.transformSchema !== null) {
44
+ reportDuplicateNames(grammar.transformSchema.rules.map((rule) => rule.production), 'transform', 'rule', issues);
45
+ }
46
+ }
47
+ /**
48
+ * Records a warning for each name that appears more than once.
49
+ *
50
+ * @param names - Declared names in source order.
51
+ * @param section - Grammar section name for the message.
52
+ * @param kind - Declaration kind for the message.
53
+ * @param issues - Issue list to append to.
54
+ */
55
+ function reportDuplicateNames(names, section, kind, issues) {
56
+ const seen = new Set();
57
+ const reported = new Set();
58
+ for (const name of names) {
59
+ if (seen.has(name) && !reported.has(name)) {
60
+ issues.push({
61
+ severity: 'warning',
62
+ message: `duplicate ${section} ${kind} ${JSON.stringify(name)}; `
63
+ + `the later definition overrides the earlier one`,
64
+ });
65
+ reported.add(name);
66
+ }
67
+ seen.add(name);
68
+ }
69
+ }
23
70
  /**
24
71
  * Records an error when a transform rule names an unknown production.
25
72
  *
@@ -1 +1 @@
1
- {"version":3,"file":"table-validator.js","sourceRoot":"","sources":["../../../src/lib/grammar/table-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-validator.js","sourceRoot":"","sources":["../../../src/lib/grammar/table-validator.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateGrammarTable = exports.formatTableValidationIssues = exports.TransformSchema = exports.ReadGrammarError = exports.readGrammar = exports.grammarFromCst = exports.Grammar = exports.AstSchema = void 0;
3
+ exports.validateGrammarTable = exports.formatTableValidationIssues = exports.TransformSchema = exports.ReadGrammarError = exports.readGrammar = exports.setBootstrapTableJson = exports.grammarFromCst = exports.Grammar = exports.AstSchema = void 0;
4
4
  var ast_schema_js_1 = require("./ast-schema.js");
5
5
  Object.defineProperty(exports, "AstSchema", { enumerable: true, get: function () { return ast_schema_js_1.AstSchema; } });
6
6
  var grammar_js_1 = require("./grammar.js");
7
7
  Object.defineProperty(exports, "Grammar", { enumerable: true, get: function () { return grammar_js_1.Grammar; } });
8
8
  var grammar_from_cst_js_1 = require("./grammar-from-cst.js");
9
9
  Object.defineProperty(exports, "grammarFromCst", { enumerable: true, get: function () { return grammar_from_cst_js_1.grammarFromCst; } });
10
+ var meta_grammar_table_js_1 = require("./meta-grammar-table.js");
11
+ Object.defineProperty(exports, "setBootstrapTableJson", { enumerable: true, get: function () { return meta_grammar_table_js_1.setBootstrapTableJson; } });
10
12
  var read_grammar_js_1 = require("./read-grammar.js");
11
13
  Object.defineProperty(exports, "readGrammar", { enumerable: true, get: function () { return read_grammar_js_1.readGrammar; } });
12
14
  var read_grammar_error_js_1 = require("./read-grammar-error.js");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/grammar/index.ts"],"names":[],"mappings":";;;AACA,iDAA4C;AAAnC,0GAAA,SAAS,OAAA;AAalB,2CAAuC;AAA9B,qGAAA,OAAO,OAAA;AAChB,6DAAuD;AAA9C,qHAAA,cAAc,OAAA;AACvB,qDAAgD;AAAvC,8GAAA,WAAW,OAAA;AACpB,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AAazB,6DAAwD;AAA/C,sHAAA,eAAe,OAAA;AACxB,2DAG8B;AAF1B,iIAAA,2BAA2B,OAAA;AAC3B,0HAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/grammar/index.ts"],"names":[],"mappings":";;;AACA,iDAA4C;AAAnC,0GAAA,SAAS,OAAA;AAalB,2CAAuC;AAA9B,qGAAA,OAAO,OAAA;AAChB,6DAAuD;AAA9C,qHAAA,cAAc,OAAA;AACvB,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,qDAAgD;AAAvC,8GAAA,WAAW,OAAA;AACpB,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AAazB,6DAAwD;AAA/C,sHAAA,eAAe,OAAA;AACxB,2DAG8B;AAF1B,iIAAA,2BAA2B,OAAA;AAC3B,0HAAA,oBAAoB,OAAA"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setBootstrapTableJson = setBootstrapTableJson;
3
4
  exports.metaGrammarTable = metaGrammarTable;
4
5
  exports.metaGrammar = metaGrammar;
5
6
  exports.lexGrammarSource = lexGrammarSource;
@@ -9,13 +10,41 @@ const lexer_js_1 = require("../lexer/lexer.js");
9
10
  const token_js_1 = require("../lexer/token.js");
10
11
  const parse_table_js_1 = require("../parse-table/parse-table.js");
11
12
  const grammar_json_path_js_1 = require("./grammar-json-path.js");
12
- const bootstrapTable = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)((0, grammar_json_path_js_1.grammarJsonDirectory)(), 'grammar.json'), 'utf8'));
13
+ let bootstrapTable = null;
13
14
  let bootstrapMetaGrammar = null;
15
+ /**
16
+ * Overrides the bootstrapped meta-grammar table before any grammar file is read.
17
+ *
18
+ * @remarks
19
+ * The bundled CLI injects its inlined `grammar.json` here so it never depends on
20
+ * a `grammar.json` file on disk. Library consumers do not call this; they fall
21
+ * back to the lazy filesystem read in {@link bootstrapTableJson}.
22
+ *
23
+ * @param table - Serialized meta-grammar parse table.
24
+ */
25
+ function setBootstrapTableJson(table) {
26
+ bootstrapTable = table;
27
+ bootstrapMetaGrammar = null;
28
+ }
29
+ /**
30
+ * Reads and caches the bootstrapped `grammar.json` on first use.
31
+ *
32
+ * @remarks
33
+ * Loading is deferred so that importing the parse runtime (for example
34
+ * {@link ParseContext.fromTableJson}) never touches the filesystem or evaluates
35
+ * `import.meta`. Only grammar-file consumers pay this cost.
36
+ */
37
+ function bootstrapTableJson() {
38
+ if (bootstrapTable === null) {
39
+ bootstrapTable = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)((0, grammar_json_path_js_1.grammarJsonDirectory)(), 'grammar.json'), 'utf8'));
40
+ }
41
+ return bootstrapTable;
42
+ }
14
43
  /**
15
44
  * Returns the bootstrapped meta-grammar table for `.grammar` files.
16
45
  */
17
46
  function metaGrammarTable() {
18
- return parse_table_js_1.ParseTable.fromJson(bootstrapTable);
47
+ return parse_table_js_1.ParseTable.fromJson(bootstrapTableJson());
19
48
  }
20
49
  /**
21
50
  * Returns the bootstrapped meta-grammar model used to lex `.grammar` files.
@@ -1 +1 @@
1
- {"version":3,"file":"meta-grammar-table.js","sourceRoot":"","sources":["../../../src/lib/grammar/meta-grammar-table.ts"],"names":[],"mappings":";;AAqBA,4CAGC;AAKD,kCAQC;AAQD,4CAKC;AAlDD,qCAAuC;AACvC,yCAAiC;AAEjC,gDAA0C;AAC1C,gDAA+C;AAE/C,kEAA2D;AAI3D,iEAA8D;AAE9D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC7B,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,IAAA,2CAAoB,GAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACnD,CAAC;AAEpB,IAAI,oBAAoB,GAAmB,IAAI,CAAC;AAEhD;;GAEG;AACH,SAAgB,gBAAgB;IAE5B,OAAO,2BAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IAEvB,IAAI,oBAAoB,KAAK,IAAI,EACjC,CAAC;QACG,oBAAoB,GAAG,gBAAgB,EAAE,CAAC,SAAS,EAAE,CAAC;IAC1D,CAAC;IAED,OAAO,oBAAoB,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,MAAc;IAE3C,MAAM,MAAM,GAAG,IAAI,gBAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAA,qBAAU,EAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"meta-grammar-table.js","sourceRoot":"","sources":["../../../src/lib/grammar/meta-grammar-table.ts"],"names":[],"mappings":";;AAyBA,sDAIC;AAyBD,4CAGC;AAKD,kCAQC;AAQD,4CAKC;AAnFD,qCAAuC;AACvC,yCAAiC;AAEjC,gDAA0C;AAC1C,gDAA+C;AAE/C,kEAA2D;AAI3D,iEAA8D;AAE9D,IAAI,cAAc,GAA0B,IAAI,CAAC;AACjD,IAAI,oBAAoB,GAAmB,IAAI,CAAC;AAEhD;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CAAC,KAAqB;IAEvD,cAAc,GAAG,KAAK,CAAC;IACvB,oBAAoB,GAAG,IAAI,CAAC;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,kBAAkB;IAEvB,IAAI,cAAc,KAAK,IAAI,EAC3B,CAAC;QACG,cAAc,GAAG,IAAI,CAAC,KAAK,CACvB,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,IAAA,2CAAoB,GAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACnD,CAAC;IACxB,CAAC;IAED,OAAO,cAAc,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAE5B,OAAO,2BAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IAEvB,IAAI,oBAAoB,KAAK,IAAI,EACjC,CAAC;QACG,oBAAoB,GAAG,gBAAgB,EAAE,CAAC,SAAS,EAAE,CAAC;IAC1D,CAAC;IAED,OAAO,oBAAoB,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,MAAc;IAE3C,MAAM,MAAM,GAAG,IAAI,gBAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAA,qBAAU,EAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -13,6 +13,7 @@ function validateGrammarTable(grammar) {
13
13
  const issues = [];
14
14
  const bnf = new desugar_ebnf_js_1.EbnfDesugarer(grammar).desugar();
15
15
  const bnfProductionNames = new Set(bnf.productions.map((production) => production.name));
16
+ collectDuplicateDefinitionWarnings(grammar, issues);
16
17
  if (grammar.transformSchema !== null) {
17
18
  for (const rule of grammar.transformSchema.rules) {
18
19
  validateTransformProductionExists(rule, bnfProductionNames, issues);
@@ -24,6 +25,52 @@ function validateGrammarTable(grammar) {
24
25
  }
25
26
  return issues;
26
27
  }
28
+ /**
29
+ * Warns when a grammar redeclares a production, ast type, or transform rule.
30
+ *
31
+ * @remarks
32
+ * Later definitions silently replace earlier ones during grammar loading, so a
33
+ * duplicate almost always signals a copy-paste mistake (for example EduBASIC's
34
+ * duplicated statement blocks).
35
+ *
36
+ * @param grammar - Parsed grammar model.
37
+ * @param issues - Issue list to append to.
38
+ */
39
+ function collectDuplicateDefinitionWarnings(grammar, issues) {
40
+ // Flag repeated production names in the grammar section.
41
+ reportDuplicateNames(grammar.productions.map((production) => production.name), 'grammar', 'production', issues);
42
+ // Flag repeated ast type names.
43
+ if (grammar.astSchema !== null) {
44
+ reportDuplicateNames(grammar.astSchema.types.map((type) => type.name), 'ast', 'type', issues);
45
+ }
46
+ // Flag repeated transform rules for the same production.
47
+ if (grammar.transformSchema !== null) {
48
+ reportDuplicateNames(grammar.transformSchema.rules.map((rule) => rule.production), 'transform', 'rule', issues);
49
+ }
50
+ }
51
+ /**
52
+ * Records a warning for each name that appears more than once.
53
+ *
54
+ * @param names - Declared names in source order.
55
+ * @param section - Grammar section name for the message.
56
+ * @param kind - Declaration kind for the message.
57
+ * @param issues - Issue list to append to.
58
+ */
59
+ function reportDuplicateNames(names, section, kind, issues) {
60
+ const seen = new Set();
61
+ const reported = new Set();
62
+ for (const name of names) {
63
+ if (seen.has(name) && !reported.has(name)) {
64
+ issues.push({
65
+ severity: 'warning',
66
+ message: `duplicate ${section} ${kind} ${JSON.stringify(name)}; `
67
+ + `the later definition overrides the earlier one`,
68
+ });
69
+ reported.add(name);
70
+ }
71
+ seen.add(name);
72
+ }
73
+ }
27
74
  /**
28
75
  * Records an error when a transform rule names an unknown production.
29
76
  *
@@ -1 +1 @@
1
- {"version":3,"file":"table-validator.js","sourceRoot":"","sources":["../../../src/lib/grammar/table-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-validator.js","sourceRoot":"","sources":["../../../src/lib/grammar/table-validator.ts"],"names":[],"mappings":"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"}
package/docs/grammar.md CHANGED
@@ -165,7 +165,40 @@ transform
165
165
 
166
166
  **Production symbols are preserved.** When a CST node has parse-table metadata, transforms keep its production name even if it has only one terminal child. Bare `CLS` through `pass(stmt)` where `[stmt]:cls_stmt` yields an `cls_stmt` node, not `kw_cls`.
167
167
 
168
- Run `parser-lr table validate -g mylang.grammar` to check `ast` / `transform` consistency. The validator warns when `pass(boundSlot)` targets a production that can match a single terminal and has no transform rule.
168
+ ### Transform contract
169
+
170
+ The transformer applies these rules to every CST node:
171
+
172
+ | Situation | Behavior |
173
+ |-----------|----------|
174
+ | `pass(slot)` | Preserve the bound production's symbol and `#` variant; never collapse to its sole terminal child. |
175
+ | No transform rule for production `P` | Emit an identity node `{ symbol: P, variant, children }`. A named non-terminal is kept even when it has a single child; the child is not hoisted in its place. |
176
+ | `build(type.#variant, …)` | Absent optional bindings are omitted from `children`, not shifted into other slots. |
177
+ | `flatten(type.#list, head, tail)` | Repeat tails produce no empty placeholder nodes and drop no items. |
178
+
179
+ **Nested non-terminals stay wrapped.** A production referenced inside another production keeps its own node, so consumers match the grammar non-terminal (for example `comparison_op`) rather than a lexer token name (`less`). To retain a token *inside* that wrapper, bind it: write `comparison_op = #less [tok]:less` and reference `tok` from the transform. Without the binding, `build(comparison_op.#less, tok)` has no slot to read and the child is dropped.
180
+
181
+ Before / after for `CASE IS < 0` with `case_selector = #relational kw_is comparison_op integer`:
182
+
183
+ ```json
184
+ {
185
+ "symbol": "case_selector",
186
+ "variant": "relational",
187
+ "children": [
188
+ { "symbol": "kw_is" },
189
+ { "symbol": "comparison_op", "variant": "less", "children": [ { "symbol": "less" } ] },
190
+ { "symbol": "integer" }
191
+ ]
192
+ }
193
+ ```
194
+
195
+ Run `parser-lr table validate -g mylang.grammar` to check `ast` / `transform` consistency. The validator:
196
+
197
+ - warns when `pass(boundSlot)` targets a production that can match a single terminal and has no transform rule;
198
+ - errors when a `build` / `fold` / `flatten` references a `type.#variant` not declared in `ast`;
199
+ - warns when a production, `ast` type, or `transform` rule is declared more than once (the later definition silently overrides the earlier one).
200
+
201
+ Add `--strict` to fail on warnings in CI.
169
202
 
170
203
  ## Statement authoring
171
204