anchor.diff:    Parser cascadeMessage() => ref(token, ';').seq(ref(message));
     Parser character() => char('\$').seq(any());
     Parser characterLiteral() => ref(characterToken);
  -  Parser characterToken() => ref(token, ref(character));
  +  Parser characterToken() => ref(token, ref(character), 'character');
     Parser expression() => ref(assignment).star().seq(ref(cascadeExpression));
     Parser falseLiteral() => ref(falseToken);
     Parser falseToken() => ref(token, 'false').seq(word().not());
     Parser identifier() => pattern('a-zA-Z_').seq(word().star());
  -  Parser identifierToken() => ref(token, ref(identifier));
  +  Parser identifierToken() => ref(token, ref(identifier), 'identifier');
     Parser keyword() => ref(identifier).seq(char(':'));
     Parser keywordExpression() =>
         ref(binaryExpression).seq(ref(keywordMessage).optional());
  
positive.code:   Parser binaryMessage() => ref(binaryToken).seq(ref(unaryExpression));
    Parser binaryMethod() => ref(binaryToken).seq(ref(variable));
    Parser binaryPragma() => ref(binaryToken).seq(ref(arrayItem));
    Parser binaryToken() => ref(token, ref(binary));
    Parser block() => ref(token, '[').seq(ref(blockBody)).seq(ref(token, ']'));
    Parser blockArgument() => ref(token, ':').seq(ref(variable));
    Parser blockArguments() =>
  
negative.code:   Parser unaryMessage() => ref(unaryToken);
    Parser unaryMethod() => ref(identifierToken);
    Parser unaryPragma() => ref(identifierToken);
    Parser unaryToken() => ref(token, ref(unary), 'unary selector');
    Parser variable() => ref(identifierToken);
  }
  