anchor.diff:    ;
   
   variable_name
  -  : ^(DOLLAR ID)
  +  : ^(DOLLAR ID { self.print_custom($ID.text) })
     | ^(DOLLAR variable_name)
     | ^(DOLLAR expr)
     ;
  
positive.code:   language = Python;
  }
  
  program
    : top_statement*
    ;
  
  top_statement
    : statement
    | function_def
    | class_def
    | interface_def
    ;
  
  function_def
    : ^(KW_FUNCTION name=ID (^(Parameter ID))* statement*)
    ;
  
  class_def
  
negative.code:   ;
  
  expr
    : ^(EQ expr { self.print_custom(' = ') } expr)
    | ^(PLUS_EQ expr { self.print_custom(' += ') } expr)
    | ^(MINUS_EQ expr expr)
    | ^(MUL_EQ expr expr)
    | ^(DIV_EQ expr expr)
  