public static GenericConstraintNode Parse(Lexer lex) { GenericConstraintNode n = new GenericConstraintNode(); lex.Dequeue("where"); var tkn = lex.Dequeue(TokenType.Identifier); n.Parameter = tkn.Value; lex.Dequeue(TokenType.Colon); do { if (GenericConstraintTypeSet.Match(lex)) { lex.Dequeue(); n.KeywordConstraints.Add(tkn.Value); } else { n.Constraints.Add(TRefNode.Parse(lex)); } } while(lex.DequeueIf(TokenType.Comma, out tkn)); return(n); }
public static UsingNode Parse(Lexer lex) { UsingNode n = new UsingNode(); lex.Dequeue("using"); n.Identifier = TRefNode.Parse(lex); lex.Dequeue(TokenType.Semi); return(n); }
public static bool IsPresent(Lexer lex) { if (BuiltinTypeSet.Match(lex)) { return(true); } if (TRefNode.IsPresent(lex)) { return(true); } return(false); }
public static AttributeNode Parse(Lexer lex) { AttributeNode n = new AttributeNode(); lex.Dequeue(TokenType.LBracket); n.Identifier = TRefNode.Parse(lex); lex.Dequeue(TokenType.LParen); //TODO: Add parameter parsing lex.Dequeue(TokenType.RParen); lex.Dequeue(TokenType.RBracket); return(n); }
public static ClassInheritNode Parse(Lexer lex) { ClassInheritNode n = new ClassInheritNode(); lex.Dequeue(TokenType.Colon); Token tkn; do { n.Bases.Add(TRefNode.Parse(lex)); } while(lex.DequeueIf(TokenType.Comma, out tkn)); return(n); }
public static TypeNode Parse(Lexer lex) { TypeNode n = new TypeNode(); if (BuiltinTypeSet.Match(lex)) { n.BuiltinType = lex.Dequeue().Value; } else if (TRefNode.IsPresent(lex)) { n.CustomType = TRefNode.Parse(lex); } return(n); }
public static TRefNode Parse(Lexer lex) { TRefNode r = new TRefNode(); Token t = lex.Dequeue(TokenType.Identifier); r.Identifier.Add(t.Value); while (lex.DequeueIf(TokenType.Dot, out t)) { t = lex.Dequeue(TokenType.Identifier); r.Identifier.Add(t.Value);; } return(r); }
public static NamespaceNode Parse(Lexer lex) { var n = new NamespaceNode(); lex.Dequeue("namespace"); n.Identifier = TRefNode.Parse(lex); lex.Dequeue(TokenType.LBrace); while (SubdefNode.IsPresent(lex)) { n.Subdefinitions.Add(SubdefNode.Parse(lex)); } lex.Dequeue(TokenType.RBrace); return(n); }