Exemplo n.º 1
0
        public static List <Parameter> ParseHeading(IList <string> queue, ref int start)
        {
            var parameters = new List <Parameter>();

            string verb = null, complement = null;

            try
            {
                switch (Regex.Match(queue[start], Patterns.punctuation).Value)
                {
                case ":":
                {
                    bool isOutParameter;

                    try
                    {
                        Verbs.SplitSentence(queue[start + 1], ref verb, ref complement);

                        isOutParameter = ParameterOrientation(verb);

                        while (Operators.parameterOrientations.Contains(verb))
                        {
                            start = start + 1;

                            foreach (string declaration in complement.Split(','))
                            {
                                if (!String.IsNullOrWhiteSpace(declaration))
                                {
                                    parameters.Add(new Parameter(isOutParameter, declaration));
                                }
                            }

                            if (Regex.IsMatch(queue[start], ",\\s*$"))
                            {
                                complement = queue[start + 1];
                            }
                            else
                            {
                                Verbs.SplitSentence(queue[start + 1], ref verb, ref complement);

                                isOutParameter = ParameterOrientation(verb);
                            }
                        }
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        throw new Exception("Bug: Attempting to parse an unfinished definition.");
                    }
                }

                break;

                case "(":
                {
                    foreach (string declaration in

                             Regex.Match(queue[start], Patterns.getdefparams).Value.Split(','))
                    {
                        if (!String.IsNullOrWhiteSpace(declaration))
                        {
                            Verbs.SplitSentence(declaration, ref verb, ref complement);

                            if (Operators.parameterOrientations.Contains(verb))
                            {
                                parameters.Add(new Parameter(verb, complement));
                            }
                            else
                            {
                                parameters.Add(new Parameter(false, declaration));
                            }
                        }
                    }
                }

                break;
                }
            }
            catch (Exception e)
            {
                throw new Exception(CommandLineInterface.GetErrorMessageWithLineNumberAndHeading(start, "Syntax Error", e));
            }

            start = start + 1;

            return(parameters);
        }