Exemplo n.º 1
0
        public override void Init(AstContext context, ParseTreeNode parseNode)
        {
            // _(".class") + classAttr + id + extendsClause + implClause
            var idChildren = AstChildren.Empty()
                             .Add(".class")
                             .Add <ClassAttrAstNode>()
                             .Add <IdAstNode>()
                             .Add <ExtendsClauseAstNode>()
                             .Add <ImplClauseAstNode>();

            if (idChildren.PopulateWith(parseNode))
            {
                ClassName        = idChildren.Child3.Value;
                ExtendsClassName = idChildren.Child4.ClassName;
                ClassAttributes  = idChildren.Child2.ClassAttributes;

                return;
            }

            // _(".class") + classAttr + name1 + extendsClause + implClause
            var name1Children = AstChildren.Empty()
                                .Add(".class")
                                .Add <ClassAttrAstNode>()
                                .Add <Name1AstNode>()
                                .Add <ExtendsClauseAstNode>()
                                .Add <ImplClauseAstNode>();

            if (name1Children.PopulateWith(parseNode))
            {
                ClassName        = name1Children.Child3.Value;
                ExtendsClassName = name1Children.Child4.ClassName;
                ClassAttributes  = name1Children.Child2.ClassAttributes;

                return;
            }

            throw new InitAstNodeException(nameof(ClassHeadAstNode));
        }
Exemplo n.º 2
0
        public override void Init(AstContext context, ParseTreeNode parseNode)
        {
            // Empty
            var emptyChildren = AstChildren.Empty();

            if (emptyChildren.PopulateWith(parseNode))
            {
                // TODO - handle
                return;
            }

            // classAttr + _("private")
            var privateChildren = AstChildren.Empty()
                                  .Add <ClassAttrAstNode>()
                                  .Add("private");

            if (privateChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= privateChildren.Child1.ClassAttributes;

                return;
            }

            // classAttr + _("auto")
            var autoChildren = AstChildren.Empty()
                               .Add <ClassAttrAstNode>()
                               .Add("auto");

            if (autoChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= autoChildren.Child1.ClassAttributes;

                return;
            }

            // classAttr + _("ansi")
            var ansiChildren = AstChildren.Empty()
                               .Add <ClassAttrAstNode>()
                               .Add("ansi");

            if (ansiChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= ansiChildren.Child1.ClassAttributes;

                return;
            }

            // classAttr + _("beforefieldinit")
            var beforeFieldInitChildren = AstChildren.Empty()
                                          .Add <ClassAttrAstNode>()
                                          .Add("beforefieldinit");

            if (beforeFieldInitChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= beforeFieldInitChildren.Child1.ClassAttributes;

                return;
            }

            // classAttr + _("public")
            var publicChildren = AstChildren.Empty()
                                 .Add <ClassAttrAstNode>()
                                 .Add("public");

            if (publicChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= publicChildren.Child1.ClassAttributes;

                return;
            }

            // classAttr + _("abstract")
            var abstractChildren = AstChildren.Empty()
                                   .Add <ClassAttrAstNode>()
                                   .Add("abstract");

            if (abstractChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= abstractChildren.Child1.ClassAttributes;

                return;
            }

            // classAttr + _("sealed")
            var sealedChildren = AstChildren.Empty()
                                 .Add <ClassAttrAstNode>()
                                 .Add("sealed");

            if (sealedChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= sealedChildren.Child1.ClassAttributes;

                return;
            }

            // classAttr + _("sequential")
            var sequentialChildren = AstChildren.Empty()
                                     .Add <ClassAttrAstNode>()
                                     .Add("sequential");

            if (sequentialChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= sequentialChildren.Child1.ClassAttributes | CilClassAttributes.Sequential;

                return;
            }

            // classAttr + _("nested") + _("private")
            var nestedPrivateChildren = AstChildren.Empty()
                                        .Add <ClassAttrAstNode>()
                                        .Add("nested")
                                        .Add("private");

            if (nestedPrivateChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= nestedPrivateChildren.Child1.ClassAttributes;

                return;
            }

            // classAttr + _("explicit")
            var explicitChildren = AstChildren.Empty()
                                   .Add <ClassAttrAstNode>()
                                   .Add("explicit");

            if (explicitChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= explicitChildren.Child1.ClassAttributes;

                return;
            }

            // classAttr + _("interface")
            var interfaceChildren = AstChildren.Empty()
                                    .Add <ClassAttrAstNode>()
                                    .Add("interface");

            if (interfaceChildren.PopulateWith(parseNode))
            {
                ClassAttributes |= interfaceChildren.Child1.ClassAttributes | CilClassAttributes.Interface;

                return;
            }

            throw new NotImplementedException();
        }