public static (List <ASTError>, ASTData) Parse( IParser parser, IEnumerable <ASTAnnotation> annotations, IEnumerable <ASTDirective> directives) { var errors = new List <ASTError>(); var result = new ASTData { Annotations = annotations, Directives = directives }; if (parser.HasNext()) { parser.Next(); } var nameId = parser.Consume(TokenType.Identifier); result.Name = nameId.Value; result.Parameters = parser.ConsumeWhile(TokenType.GenericParameter).Select(p => p.Value).ToList(); parser.Consume(TokenType.Equal); result.Options = ASTDataOption.Parse(parser).ToList(); parser.Consume(TokenType.ContextEnded); return(errors, result); }
public static IEnumerable <ASTDataOption> Parse(IParser parser) { var annotations = ASTAnnotation.Parse(parser); parser.TryConsume(TokenType.Or, out Token? t); while (!(t is null)) { var id = parser.Consume(TokenType.Identifier); var parameters = parser.ConsumeWhile(TokenType.GenericParameter); ASTDataOption r = new ASTDataOption(); r.Name = id.Value; r.Parameters = parameters.Select(p => p.Value).ToList(); r.Annotations = annotations; yield return(r); annotations = ASTAnnotation.Parse(parser); parser.TryConsume(TokenType.Or, out t); } }