anchor.diff:  	@init { $l = getStartLine(); $c = getStartColumn(); }
   	@after { $ast.setPositions($l, $c, getEndLine(), getEndColumn()); }
   	: id=identifier { $ast = new EmitStatement($id.ast); } (LBRACKET e=expression RBRACKET { $ast.addIndice($e.ast); })* EMIT e=expression { $ast.setValue($e.ast); } (WEIGHT w=expression { $ast.setWeight($w.ast); })? SEMICOLON
  -	| identifier (LBRACKET expression RBRACKET)* EMIT expression (WEIGHT expression)? { notifyErrorListeners("error: ';' expected"); }
  +	| id=identifier { $ast = new EmitStatement($id.ast); } (LBRACKET e=expression RBRACKET { $ast.addIndice($e.ast); })* EMIT e=expression { $ast.setValue($e.ast); } (WEIGHT w=expression { $ast.setWeight($w.ast); })? { notifyErrorListeners("error: ';' expected"); }
   	;
   
   forStatement returns [ForStatement ast]
  
positive.code: 	@init { $l = getStartLine(); $c = getStartColumn(); }
  	@after { $ast.setPositions($l, $c, getEndLine(), getEndColumn()); }
  	: STOP SEMICOLON { $ast = new StopStatement(); }
  	| STOP           { notifyErrorListeners("error: ';' expected"); }
  	;
  
  expression returns [Expression ast]
  
negative.code: expressionList returns [ArrayList<Expression> list]
  	@init { $list = new ArrayList<Expression>(); }
  	: e=expression { $list.add($e.ast); } (COMMA e=expression   { $list.add($e.ast); })*
  	| e=expression { $list.add($e.ast); } ({ notifyErrorListeners("error: ',' expected"); } e=expression { $list.add($e.ast); } | COMMA e=expression { $list.add($e.ast); })*
  	;
  
  conjunction returns [Conjunction ast]
  