Exemple #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);
        }
Exemple #2
0
        public static ClassIdentNode Parse(Lexer lex)
        {
            ClassIdentNode n = new ClassIdentNode();

            var tkn = lex.Dequeue(TokenType.Identifier);

            n.Identifier = tkn.Value;

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

            return(n);
        }
Exemple #3
0
        public static GenericParamNode Parse(Lexer lex)
        {
            GenericParamNode n = new GenericParamNode();

            lex.Dequeue(TokenType.Less);
            Token tkn;

            do
            {
                n.Parameters.Add(ClassIdentNode.Parse(lex));
            } while(lex.DequeueIf(TokenType.Comma, out tkn));
            lex.Dequeue(TokenType.Greater);

            return(n);
        }