The invoking grammar:
+uses id from ident.ixml; expr from expr.ixml
rules: rule+.
rule: id, -"=", expr.
Module ident.ixml
+shares id
id: [L]+.
Module expr.ixml
+uses id, number from id.ixml
+shares expr
expr: operand++op.
operand: id; number.
op: ["+-×÷"].
Module id.ixml
+shares id, number
id: [L], [L; Nd]*.
number: [Nd]+.
Here there are two rules called id both shared
and used by two different modules.
The invoking grammar is never changed:
rules: rule+.
rule: id, -"=", expr.
and since the id rule is used from
module ident.ixml, the rule
may not be renamed there:
id: [L]+.
This means that the id rule in module
id.ixml has to be renamed:
id_>id: [L], [L; Nd]*.
number: [Nd]+.
and in module expr.ixml that uses it
expr: operand++op.
operand: id_; number.
op: ["+-×÷"].