anchor.diff:  function_call returns [String code]
       : ID method_params { $code = "(" + $ID.text + $method_params.code + ")"; }
       ;
  -
  -
  -/*
  -Method calls are inverted functions
  -obj.func(x, y, z) <--> func(obj, x, y, z)
  -*/
  -
   
   
   /*
  
positive.code:     | for_loop {$code = $for_loop.code; }
      | conditional {$code = $conditional.code; }
      | let_statement {$code = $let_statement.code; }
     /* | method_call_chain {$code = $method_call_chain.code; }*/
      | '(' expression ')' {$code = $expression.code; }
      ;
  
  
negative.code:     : (method_call PERIOD) => method_call {$code=$method_call.code;}
          (PERIOD ID method_params {$code="("+$ID.text+" "+$code+$method_params.code+")";})+
      | method_call {$code=$method_call.code;}
      ;
  
  
  /*
  Method calls are inverted functions
  obj.func(x, y, z) <--> func(obj, x, y, z)
  They can take any expression atom and transform it
  into a function call on that atom
  */
  
  method_call returns [String code]
      : ( expression_atom PERIOD ID method_params) => obj=expression_atom PERIOD func=ID method_params { $code = "(" + $func.text + " " + $obj.code + $method_params.code + ")"; }
      ;
  
  
  /*
  An expression atom is an undividable component
  of an expression.  Each atom itself is an expression
  but can be composed with each other (using other sytax)
  to create more complicated expressions
  (The obvious exception is the final line, but that
  is present to make the code simpler)
  */
  
  fragment
  expression_atom returns [String code]
  