public static IEnumerable<ParameterNode> Parse(string parameters)
        {
            var matches = regex.Matches(parameters);

            foreach (Match match in matches)
            {
                if (!match.Success)
                {
                    continue;
                }

                var optional = match.Groups["optional"].Value == ReservedKeywords.Optional;
                var defaultValue = match.Groups["default"].Value;

                var paramArray = match.Groups["paramarray"].Value == ReservedKeywords.ParamArray;

                var by = match.Groups["by"].Value;
                var passedBy = by == ReservedKeywords.ByRef ? ParameterType.ByRef
                                                            : by == ReservedKeywords.ByVal ? ParameterType.ByVal
                                                                                           : ParameterType.Default;

                var name = match.Groups["identifier"].Value;
                var type = match.Groups["type"].Value;
                var identifier = new IdentifierNode(name, paramArray ? "()" : null, null, type);

                yield return new ParameterNode(identifier, passedBy, paramArray, optional, defaultValue);
            }
        }
        public ParameterNode(IdentifierNode identifier, ParameterType passedBy, bool isParamArray, bool isOptional, string defaultValue)
            : base(SyntaxTreeNodeType.ParameterNode, identifier.NodeName)
        {
            Nodes.Add(identifier);

            IsOptional = isOptional;
            DefaultValue = defaultValue;
            IsParamArray = isParamArray;
            PassedBy = passedBy;
        }