anchor.diff:    group('literals', () {
       group('IntegerLiteral', () {
         // TODO(JonasWanke): negative literals
  -      tableTestExpressionParser<Literal<int>>(
  +      tableTestExpressionParser<int, Literal<int>>(
           'decimal',
           table: {
             '0': 0,
  
positive.code:         source.length,
          reason: "Didn't match the whole input string.",
        );
        return result.value as R;
      },
    );
  }
  
  @isTestGroup
  void tableTestExpressionParser<R extends AstNode>(
    String description, {
    @required Map<String, R> table,
  }) {
    assert(table != null);
  
    tableTestParser<R>(
      description,
      table: table,
      parser: ParserGrammar.expression,
    );
  }
  
negative.code:           '1_0_0': 100,
            '1000': 1000,
            '1_000': 1000,
          },
          astMapper: (value, fullSpan) =>
              Literal(IntegerLiteralToken(value, span: fullSpan)),
        );
        tableTestExpressionParser<int, Literal<int>>(
          'hexadecimal',
          table: {
            '0x0': 0,
  