As a simple example, imagine a language of identity statements of the style
total=price+tax+shipping
tax=price×10÷100
shipping=5
expressed by this grammar that uses the definition of
expr from another module:
+uses expr from expr.ixml
data: identity+.
identity: id, -"=", expr, -#a.
id: [L]+.
The only problem is that the expr module has a
clashing rule for id:
+shares expr
expr: id++op.
id: [L; Nd]+.
op: ["+-×÷"].
Since the invoking grammar never gets changed, the rule in the module gets renamed, resulting in the following complete grammar:
data: identity+.
identity: id, -"=", expr, -#a.
id: [L]+.
expr: id_++op.
id_>id: [L; Nd]+.
op: ["+-×÷"].
If the module's rule for id had instead been a
renaming, it could have looked like this:
id>ident: [L; Nd]+.
and the renaming would have ended up as:
id_>ident: [L; Nd]+.