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 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); }
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); }