anchor.diff:  	@init { $l = getStartLine(); $c = getStartColumn(); }
   	@after { $ast.setPositions($l, $c, getEndLine(), getEndColumn()); }
   	: CONTINUE SEMICOLON { $ast = new ContinueStatement(); }
  -	| CONTINUE           { notifyErrorListeners("error: ';' expected"); }
  +	| CONTINUE           { $ast = new ContinueStatement(); notifyErrorListeners("error: ';' expected"); }
   	;
   
   doStatement returns [DoStatement 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: 	@init { $l = getStartLine(); $c = getStartColumn(); }
  	@after { $ast.setPositions($l, $c, getEndLine(), getEndColumn()); }
  	: DO s=statement WHILE LPAREN e=expression RPAREN SEMICOLON { $ast = new DoStatement($e.ast, $s.ast); }
  	| DO s=statement WHILE LPAREN e=expression RPAREN           { $ast = new DoStatement($e.ast, $s.ast); notifyErrorListeners("error: ';' expected"); }
  	;
  
  emitStatement returns [EmitStatement ast]
  