示例#1
0
        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);
        }