anchor.diff:    ;
   
   query
  -  : name=ident test=logic_test (name2=ident | val=(Literal | '[]'))
  +  : name=ident test=logic_test (name2=ident | val=literal)
   {
   if $name2.ctx is not None:
     return ($name.ctx, $test.text, $name2.ctx)
  
positive.code:   {return $props}
    ;
  
  prop_value
    : (v=(Literal | '[]'))
    {return $v.text}
    ;
  
  insert_relation
    : K_RELATION (n1=node_query) (r=relation_with_props) (n2=node_query)
  
negative.code:   ;
  
  // Literals
  
  array_literal
    : '[' literal (',' literal)* ']'
    | '[' ']'
    ;
  
  literal
    : IntLiteral | FloatLiteral | StringLiteral | BooleanLiteral
    | array_literal // recursion
    ;
  
  IntLiteral : ('-' | '+')? DIGIT+;
  FloatLiteral : ('-' | '+')? DIGIT+ '.' DIGIT* ;
  StringLiteral : '"' StringChars? '"' ;
  BooleanLiteral : (T R U E | F A L S E) ;
  
  // Keywords
  K_MATCH : M A T C H ;
  