Beispiel #1
0
        public static InterfaceEntryNode Parse(Lexer lex)
        {
            InterfaceEntryNode n = new InterfaceEntryNode();

            Token tkn;

            n.IsVirtual = lex.DequeueIf("virtual", out tkn);
            n.IsUnsafe  = lex.DequeueIf("unsafe", out tkn);

            n.TypeName = TypeNode.Parse(lex);

            if (GenericParamNode.IsPresent(lex))
            {
                n.GenericParams = GenericParamNode.Parse(lex);
            }

            tkn          = lex.Dequeue(TokenType.Identifier);
            n.Identifier = tkn.Value;

            if (InterfaceFunctionNode.IsPresent(lex))
            {
                n.Entry = InterfaceFunctionNode.Parse(lex);
            }
            else if (InterfacePropertyNode.IsPresent(lex))
            {
                n.Entry = InterfacePropertyNode.Parse(lex);
            }
            else
            {
                throw ExceptionProvider.Syntax(lex.Peek().Cursor, "Unrecognized definition");
            }
            return(n);
        }
        public static InterfaceDefNode Parse(Lexer lex)
        {
            InterfaceDefNode n = new InterfaceDefNode();

            lex.Dequeue("interface");
            n.Identifier = ClassIdentNode.Parse(lex);

            if (ClassInheritNode.IsPresent(lex))
            {
                n.Parents = ClassInheritNode.Parse(lex);
            }

            while (GenericConstraintNode.IsPresent(lex))
            {
                n.Constraints.Add(GenericConstraintNode.Parse(lex));
            }

            lex.Dequeue(TokenType.LBrace);
            while (InterfaceEntryNode.IsPresent(lex))
            {
                n.Entries.Add(InterfaceEntryNode.Parse(lex));
            }
            lex.Dequeue(TokenType.RBrace);

            return(n);
        }