Example

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