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: ["+-×÷"].