コード例 #1
0
ファイル: ASTData.cs プロジェクト: lucashorward/ZDragon.NET
        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);
        }
コード例 #2
0
        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);
            }
        }