anchor.diff:  //          component as string role = MEASURE,
   //          component as string role = ATTRIBUTE
   // ]
  -renameParam : from=componentRef 'as' to=componentRef ( 'role' '=' role )? ;
  +renameParam : from=componentRef 'as' to=identifier ( 'role' '=' role )? ;
   
   role : ( 'IDENTIFIER' | 'MEASURE' | 'ATTRIBUTE' ) ;
   
  
positive.code:            | joinUnfoldExpression               # joinUnfoldClause
             ;
  
  joinFoldExpression      : 'fold' elements=foldUnfoldElements 'to' dimension=identifier ',' measure=identifier ;
  joinUnfoldExpression    : 'unfold' dimension=componentRef ',' measure=componentRef 'to' elements=foldUnfoldElements ;
  // TODO: The spec writes examples with parentheses, but it seems unecessary to me.
  // TODO: The spec is unclear regarding types of the elements, we support strings only for now.
  
negative.code: booleanEquallity
      : booleanEquallity ( ( EQ | NE | LE | GE ) booleanEquallity )
      | datasetExpression
      | constant
      // typed constant?
      ;
  
  