private TypeDescriptor ParseTypeDescriptor()
{
var td = new TypeDescriptor() { Token = Next() };
var name = new StringBuilder();
name.Append(ParseIdentifier().Value);
bool hasTypeDescriptor = false;
while (Next().Is(TokenType.Dot) || Next().Is(TokenType.LessThan))
{
if (Next().Is(TokenType.Dot))
{
if (hasTypeDescriptor)
Error("Invalid type definition", Next());
Match(TokenType.Dot);
name.Append(".");
name.Append(ParseIdentifier().Value);
}
else
{
hasTypeDescriptor = true;
Match(TokenType.LessThan);
td.TypeDescriptors.Add(ParseTypeDescriptor());
while (Next().Is(TokenType.Comma))
{
Match(TokenType.Comma);
td.TypeDescriptors.Add(ParseTypeDescriptor());
}
Match(TokenType.GreaterThan);
}
}
td.Name = name.ToString();
return td;
}