public static TypeNode[] ParseGenericArgs(Parser parser) { TypeNode[] genericArgs = new TypeNode[0]; bool lessToken = true; try { parser.Eat(TokenInfo.TokenType.LESS); } catch (ParserError) { lessToken = false; } if (lessToken) { genericArgs = Utils.ParseSequence(parser, TypeNode.Consume); try { parser.Eat(TokenInfo.TokenType.GREATER); } catch (ParserError ex) { if (genericArgs.Count() > 1) { throw new ParserError( new ExpectedTokenException(TokenInfo.TokenType.GREATER), parser.Cursor ); } throw ex; } if (genericArgs.Count() == 0) { throw new ParserError( new ExpectedElementException("Expected one or more generic types"), parser.Cursor ); } } return(genericArgs); }