anchor.diff:  subexpression : OPEN_PAREN ws expression ws CLOSE_PAREN;
   literal : runtimeLiteral | parsetimeLiteral;
   runtimeLiteral : dynamicDictionary | dynamicArray | block;
  -block : BLOCK_START blockParamList? sequence? ws BLOCK_END;
  +block : BLOCK_START blockParamList? ws sequence? BLOCK_END;
   blockParamList : (ws BLOCK_PARAM)+ ws PIPE?;
   dynamicDictionary : DYNDICT_START ws expressions? ws DYNARR_END;
   dynamicArray : DYNARR_START ws expressions? ws DYNARR_END;
  
positive.code: BLOCK_END : ']';
  LT : '<';
  GT : '>';
  RESERVED_WORD : 'self' | 'nil' | 'true' | 'false' | 'super';
  DIGIT : '0'..'9';
  HEXDIGIT : 'a'..'z' | 'A'..'Z' | DIGIT;
  BINARY_SELECTOR : ('-' | '\\' | '+' | '*' | '/' | '=' | '>' | '<' | ',' | '@' | '%' | '~' | '|' | '&' | '?')+;
  IDENTIFIER : ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*;
  KEYWORD : IDENTIFIER COLON;
  BLOCK_PARAM : COLON IDENTIFIER;
  CHARACTER_CONSTANT : DOLLAR (HEXDIGIT | DOLLAR);
  SEPARATOR : (' ' | '\t' | '\r' | '\n' | '\u00A0' | '\uFEFF' | '\u2028' | '\u2029')+;
  STRING : '\'' (.)*? '\'';
  COMMENT : '"' (.)*? '"';
  
  
negative.code: literalArray : LITARR_START literalArrayRest;
  literalArrayRest : ws ((parsetimeLiteral | bareLiteralArray | bareSymbol) ws)* CLOSE_PAREN;
  bareLiteralArray : OPEN_PAREN literalArrayRest;
  unaryTail : unaryMessage ws unaryTail? ws;
  unaryMessage : ws unarySelector;
  unarySelector : IDENTIFIER;
  keywords : KEYWORD+;
  