public override IEnumerable<ParseNode> Parse(ParseNode node)
        {
            var c = node.ReadChar();
            while (c != '\0')
            {
                if (c == '[')
                {
                    while (c != ']')
                        c = node.ReadChar();
                    var statement = new StatementNode
                                        {
                                            Name = "customAttribute",
                                            Data = new StringReader(node.Buffer.ToString())
                                        };
                    yield return statement;
                    c = node.ReadChar();
                    while (c == ' ' || c == '\r' || c == '\n')
                    {
                        node.ResetBuffer();
                        c = node.ReadChar();
                    }

                }
                while (c != ' ' && c != '.' && c != '\0')
                    c = node.ReadChar();

                var value = node.Buffer.ToString(0, node.Buffer.Length - 1);
                if (c == ' ')
                {
                    if (value == "using")
                    {
                        node.ResetBuffer();
                        var statement = new StatementNode
                                            {
                                                Name = "using",
                                                Data = new StringReader(node.GetStringData())
                                            };
                        yield return statement;
                        continue;
                    }

                    if (value == "class")
                    {
                        node.ResetBuffer();
                        c = node.ReadChar();
                        while (c == ' ')
                        {
                            node.ResetBuffer();
                            c = node.ReadChar();
                        }

                        while (c != ' ' && c != '\r' && c != '\n' && c != '\0')
                            c = node.ReadChar();

                        var statement = new StatementNode
                                            {
                                                Name = "class",
                                                Data = new StringReader(node.Buffer.ToString())
                                            };
                        yield return statement;

                        continue;
                    }

                    if (value == "public")
                    {
                        node.ResetBuffer();
                        var statement = new StatementNode
                                            {
                                                Name = "accessModifier",
                                                Data = new StringReader("public")
                                            };
                        yield return statement;
                        c = node.ReadChar();
                        while (c == ' ')
                            c = node.ReadChar();
                        continue;
                    }

                    if (value == "namespace")
                    {
                        node.ResetBuffer();
                        var statement = new StatementNode()
                                            {
                                                Name = "namespace",
                                                Data = new StringReader(node.GetStringData())
                                            };
                        yield return statement;
                        continue;
                    }
                }
                yield break;
            }
            yield break;
        }