anchor.diff:      | '-'? FLOAT        # float
       // structure / compound term
       | atom '(' termlist ')'     # compound_term
  -    | term operator term        # binary_operator //FIXME: , should have precedence over :- see e.g. `head :- one, two.`
  +    |<assoc=right> term operator term        # binary_operator
       | operator term             # unary_operator
  -    | '[' termlist ( '|' term )? ']' # list_term //TODO: priority <= 999 //TODO: find out what [|] list syntax means
  +    | '[' termlist ( '|' term )? ']' # list_term  //TODO: find out what [|] list syntax means
       | '{' termlist '}'          # curly_bracketed_term
  +
       | atom              # atom_term
       ;
  +//TODO: operator priority, associativity, arity. valid priority ranges for e.g. [list] syntax
  +//TODO: modifying operator table
   
  -operator //TODO: modifying operator table
  +operator
       : ':-' | '-->'
       | '?-'
  +    | 'dynamic' | 'multifile' | 'discontiguous' | 'public'
       | ';'
       | '->'
       | ','
  
positive.code:     | '=..'
      | 'is' | '=:=' | '=\\=' | '<' | '=<' | '>' | '>='
      | '+' | '-' | '/\\' | '\\/'
      | '*' | '/' | '//' | 'rem' | 'mod' | '<<' | '>>'
      | '**'
      | '^'
      | '\\'
  
negative.code: 
  p_text: (directive | clause) * EOF ;
  
  directive: ':-' term '.' ; // also 3.58
  
  clause: term '.' ; // also 3.33
  
  
  // Abstract Syntax (6.3): terms formed from tokens
  
  termlist
      : term ( ',' term )*
      ;
  
  term 
  