anchor.diff:              ;
   
   // while statement
  -while_stmt  :   WHILE^ n_expr LB! block_instructions RB!
  +while_stmt  :   WHILE^ LP! n_expr RP! LB! block_instructions RB!
  +            ;
  +            
  +// for statement
  +for_stmt  :   FOR^ LP! assign ';' n_expr ';' assign RP! LB! block_instructions RB!
               ;
   
   // Return statement with an expression
  
positive.code: // Atom of the expressions (variables, integer and boolean literals).
  // An atom can also be a function call or another expression
  // in parenthesis
  atom    :   ID 
          |   INT
          |   (b=TRUE | b=FALSE)  -> ^(BOOLEAN[$b,$b.text])
          |   funcall
          |   '('! expr ')'!
          ;
  
  
  // A function call has a lits of arguments in parenthesis (possibly empty)
  funcall :   ID '(' expr_list? ')' -> ^(FUNCALL ID ^(ARGLIST expr_list?))
          ;
  
negative.code:         :   assign          // Assignment
          |   ite_stmt        // if-then-else
          |   while_stmt      // while statement
          |	for_stmt		//for statement
          |   funcall         // Call to a procedure (when no result is produced)
          |   return_stmt     // Return statement
          |   playable        // Play
  