anchor.diff:  label: STRING (RENAME_TOKEN ID)?;
   
   /* Implicative clauses */
  -clause: (antecedent=aTermExpr ARROW)? consequence=cTermSeries EOL;
  +clause: (antecedent=aTermExpr ARROW)? consequence=cArgSeries EOL;
   
   /* Antecedent */
   aTerm: NOT aTerm                                                                                                        #notAntecedent
  -     | functor (PAR_OPEN arguments=aTermSeries? PAR_CLOSE)?                                                             #compoundAntecedent
  +     | functor (PAR_OPEN arguments=aArgSeries? PAR_CLOSE)?                                                              #compoundAntecedent
        | functor BRACE_OPEN (args+=aMultiArg COMMA)* args+=aMultiArg BRACE_CLOSE                                          #multiAndCompoundAntecedent
        | functor BRACE_OPEN (args+=aMultiArg SEMICOLON)* args+=aMultiArg BRACE_CLOSE                                      #multiOrCompoundAntecedent
  -     | BRACKET_OPEN (aTermSeries (VBAR BRACKET_OPEN aTerm? BRACKET_CLOSE)?)? BRACKET_CLOSE                              #listAntecedent
  +     | BRACKET_OPEN (aArgSeries (VBAR BRACKET_OPEN aTerm? BRACKET_CLOSE)?)? BRACKET_CLOSE                               #listAntecedent
        | PAR_OPEN aTermExpr PAR_CLOSE                                                                                     #parAntecedent
        | variable=HID                                                                                                     #variableAntecedent
        | wildcard=UNDERSCORE                                                                                              #wildcardAntecedent
  
positive.code:          | aTerm
           ;
  
  aMultiArg: PAR_OPEN aTermSeries? PAR_CLOSE
           | aTerm
           ;
  
  /* Consequence */
  cTerm: functor (PAR_OPEN arguments=cTermSeries? PAR_CLOSE)?                                                             #compoundConsequence
       | functor BRACE_OPEN (args+=cMultiArg COMMA)* args+=cMultiArg BRACE_CLOSE                                          #multiCompoundConsequence
       | BRACKET_OPEN (cTermSeries (VBAR BRACKET_OPEN cTerm? BRACKET_CLOSE)?)? BRACKET_CLOSE                              #listConsequence
       | variable=HID                                                                                                     #variableConsequence
       | STRING                                                                                                           #stringConsequence
       | NUMBER                                                                                                           #numberConsequence
       ;
  
  cMultiArg : PAR_OPEN cTermSeries? PAR_CLOSE
            | cTerm
            ;
  
  cTermSeries: (terms+=cTerm COMMA)* terms+=cTerm ;
  
  /* Functors */
  functor: ID                                                                                                             #idFunctor
  
negative.code:      | NUMBER                                                                                                           #numberAntecedent
       ;
  
  aArgSeries: args+=orSeries (COMMA args+=orSeries)*;
  
  orSeries : aTerm (SEMICOLON aTerm)*;
  
  
  aTermExpr: aTermExpr COMMA aTermExpr
           | aTermExpr SEMICOLON aTermExpr
  