public PrimitiveParts parsePrimitiveParts() {
      PrimitiveParts parts = new PrimitiveParts();
      Token t = expect("type");
      parts.typeName = t.text;
      parts.typeParams = parseParams();
      return parts;
    }
Tokenize the typeInfoString. The rule is simple: all consecutive
alphadigits and '_', '.' are in one token, and all other characters are
one character per token.

tokenize("map<int,string>") should return
["map","<","int",",","string",">"]

Note that we add '$' in new Calcite return path. As '$' will not appear
in any type in Hive, it is safe to do so.
serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java