anchor.diff:  		{
   			MTutor.getOrCreateGoalNode(n.getText()).addHint(h.getText());
   		}
  +		| #(ONCOMPLETE o:STRINGLIT)
  +		{
  +		  MTutor.getOrCreateGoalNode(n.getText()).addOnComplete(o.getText());
  +		}
   		| (#(JIT STRINGLIT)) => #(JIT j2:STRINGLIT)
   		{
   			MTutor.getOrCreateGoalNode(n.getText()).addJIT(null, j2.getText());
  
positive.code: 	UNTIL="until";
  	AND="and";
  	OR="or";
  }
  
  // ID component
  
negative.code: jitdecl:
  	JIT^ (LBRACE! valexpr RBRACE!) COLON! stringlit
  	| JIT^ COLON! s:stringlit { #jitdecl = #(JIT, s); };
  compdecl: ONCOMPLETE^ COLON! stringlit;
  answerdecl: ANSWER^ COLON! constructor;
  constructor: literal | callconstructor;
  callconstructor: ID^ LPAREN! literal (COMMA literal)* RPAREN!;
  