anchor.diff:  
   private scTerm[Token unitIdToken] returns[ElementFactory.Item item]
   {
  +    item = null;    
  +}
  +    : ( (scSubstitute[unitIdToken]) => item=scSubstitute[unitIdToken]
  +      | item=scBasicTerm[unitIdToken]
  +      )                     {if (item != null) builder.setParent(item, null);}
  +    ;
  +
  +// These are the non-left-recursive terms
  +private scBasicTerm[Token unitIdToken] returns[ElementFactory.Item item]
  +{
       item = null;
   }
  -    : ( item=specDefinition[unitIdToken]
  -      | item=scProve[unitIdToken]
  -      )                     {if (item != null) builder.setParent(item, null);}
  -    ;
  -
  -//---------------------------------------------------------------------------
  +    : item=scPrint[unitIdToken]
  +    | item=scURI[unitIdToken]
  +    | item=specDefinition[unitIdToken]
  +    | item=scLet[unitIdToken]
  +    | item=scTranslate[unitIdToken]
  +    | item=scQualify[unitIdToken]
  +    | item=scDiag[unitIdToken]
  +    | item=scColimit[unitIdToken]
  +    | item=scSpecMorph[unitIdToken]
  +    | item=scGenerate[unitIdToken]
  +    | item=scObligations[unitIdToken]
  +    | item=scProve[unitIdToken]
  +    ;
  +
  +//---------------------------------------------------------------------------
  +
  +private scPrint[Token unitIdToken] returns[ElementFactory.Item print]
  +{
  +    print = null;
  +    ElementFactory.Item ignore = null;
  +}
  +    : "print"
  +      ignore=scTerm[null]
  +    ;
  +
   // TODO: scURI should really be an object that has parameters (bool relOrAbs, string path, scTermItem optionalRef)
  -private scURI returns[ElementFactory.Item uri]
  +private scURI[Token unitIdToken] returns[ElementFactory.Item uri]
   {
       uri = null;
       String strURI = null;
  
positive.code:     : strURI=fullURIPath
      ;
  
  private fullURIPath returns[String path]
  {
      path = null;
      String item = null;
  }
      : (   (nonWordSymbol["/"]) => nonWordSymbol["/"] 
                                    item=partialURIPath        {path = "/" + item;}
          | item=partialURIPath                                {path = item;}
        )
        (ref:INNER_UNIT_REF)?
      ;
  
  private partialURIPath returns[String path]
  {
      path = "";
      String item = null;
  }
      : id:IDENTIFIER                                     {path = path + id.getText();} 
        ( (nonWordSymbol["/"]) => nonWordSymbol["/"] 
                                  item=partialURIPath     {path = path + "/" + item;}
        |
        )
      ;
  
  //---------------------------------------------------------------------------
  private specDefinition[Token unitIdToken] returns[ElementFactory.Item spec]
  {
      spec = null;
  
negative.code:                                  }
      ;
  
  private claimDefinition returns[ElementFactory.Item claimDef]
  {
      claimDef = null;
      String name = null;
      String kind = null;
      Token begin = null;
  