Example

Making the example slightly more complex, with rules like

         result[1]=a1+b1+c1
         result[2]=a2+b2+c2
      

using this grammar:

         +uses expr from expr.ixml; identity from id.ixml
         rules: rule+.
          rule: identity, -"=", expr, -#a.
      

Module expr.ixml

         +shares expr
            expr: operand++op.
         operand: id; number.
              id: [L], [L; Nd]*.
              op: ["+-×÷"].
          number: ["0"-"9"]+.
      

Module identity.ixml has a clash with both id and number from expr.ixml:

         +shares identity
         identity: id; id, -"[", number, -"]".
               id: [L]+.
           number: digits, (".", digits)?.
          -digits: [Nd]+.
      

The invoking grammar never changes:

         rules: rule+.
          rule: identity, -"=", expr.
      

In module expr.ixml nothing needs changing

            expr: operand++op.
         operand: id; number.
              id: [L], [L; Nd]*.
              op: ["+-×÷"].
          number: ["0"-"9"]+.
      

In identity.ixml both id and number are renamed:

               identity: id_; id_, -"[", number_, -"]".
                 id_>id: -"@", [L]+.
         number_>number: digits, ".", digits.
                -digits: [Nd]+.
      

The rules allow either or both to be renamed in expr.ixml instead.