anchor.diff:      | BUILTINTYPE
       | CONSTANT
       ;
  -arrayDecl
  -    : '[' (expression (',' expression)*)? ']'
  -    ;
  -dictDecl
  -    : '{' (keyValue (',' keyValue)*)? '}'
  -    ;
  +    
   keyValue
       : expression ':' expression
       | IDENTIFIER '=' expression
       ;
  -
  -getNode
  -    : '$' (STRING | IDENTIFIER ('/' IDENTIFIER)*)
  -    ;
positive.code:     ;
  
  assignmentStmt
      : subscription ('='|'+='|'-='|'*='|'/='|'%='|'&='|'|='|'^=') expression stmtEnd
      ;
  varDeclStmt
      : 'var' IDENTIFIER ('=' expression)? stmtEnd
  
negative.code: preloadStmt
      : 'preload' '(' CONSTANT ')'
      ;
  
  exprStmt
      : expression stmtEnd
      ;
  expression
      : expression '[' expression ']' #subscription
      | expression 'as' typeHint #cast
      | expression 'if' expression 'else' expression #ternacyExpr
      | expression ('or'|'||')expression #logicOr
      | expression ('and'|'&&')expression #logicAnd
      | ('!'|'not') expression #logicNot
      | expression 'in' expression #in
      | expression ('<' | '>' | '<=' | '>=' | '==' | '!=' ) expression #comparison
      | expression '|' expression #bitOr
      | expression '^' expression #bitXor
      | expression '&' expression #bitAnd
      | expression ('<<'|'>>') expression #bitShift
      | expression '-' expression #minus
      | expression '+' expression #plus
      | expression ('*'|'/'|'%') expression #factor
      | ('-'|'+') expression #sign
      | '~' expression #bitNot
      | expression 'is' (IDENTIFIER|BUILTINTYPE) #is
      | expression '(' argList? ')' #call
      | '.' IDENTIFIER '(' argList? ')' #call
      | '$' (STRING | IDENTIFIER ('/' IDENTIFIER)*) #getNode
      | expression '.' IDENTIFIER #attribute
      | 'true' #primary
      | 'false' #primary
      | 'null' #primary
      | 'self' #primary
      | literal #primary
      | '[' (expression (',' expression)*)? ']' #arrayDecl
      | '{' (keyValue (',' keyValue)*)? '}' #dictDecl
      | '(' expression ')' #primary
      ;
  
  literal
  