anchor.diff:  	;
   
   duration: INT 
  -    | '(' num_expr ')'
  +    | '('! num_expr ')'!
       ;
   
  -polifon : 'Poli' ID LB! ((VOICE ID)? (melodia '|'!))* RB!
  +polifon : 'Poli' ID LB! (VOICE ID (melodia '|'!))* RB!
           ;
   
   speed	:	'Speed' n_expr;
  
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
  