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