Ejemplo n.º 1
0
        public Parser Generate(ParserGenerationContext ctx)
        {
            if (Defined)
            {
                return(GeneratedParser);
            }
            Defined = true;

            GeneratedParser.Definition = Expression.Generate(ctx);

            var matchWhitespace  = Options.Any(x => x.Option == "match-whitespace");
            var ignoreWhitespace = Options.Any(x => x.Option == "skip-whitespace");

            foreach (var option in Options.Where(x => x.Option == "whitespace-rule"))
            {
                var arg  = option.Args.First();
                var rule = ctx.GetRule(arg, ((Identifier)arg).Value);
                GeneratedParser.Definition = new WhitespaceRuleParser(GeneratedParser.Definition, rule);
            }

            if (matchWhitespace && !ignoreWhitespace)
            {
                GeneratedParser.Definition = GeneratedParser.Definition.MatchWhitespace;
            }
            else if (ignoreWhitespace && !matchWhitespace)
            {
                GeneratedParser.Definition = GeneratedParser.Definition.IgnoreWhitespace;
            }

            return(GeneratedParser);
        }
Ejemplo n.º 2
0
        public Parser Generate(string rootParserName = null)
        {
            if (rootParserName == null)
            {
                return(ParserGenerationContext.Generate(Rules));
            }

            var root = Rules.FirstOrDefault(x => x.Identifier == rootParserName);

            if (root == null)
            {
                throw new ArgumentException("No rule found with the given name.", "rootParserName");
            }

            return(ParserGenerationContext.Generate(new[] { root }.Concat(Rules.Where(x => x != root)).ToArray()));
        }
Ejemplo n.º 3
0
        public static Parser Generate(params Rule[] rules)
        {
            if (rules.Length == 0)
            {
                return(Parser.Null("No rules specified"));
            }

            var ctx = new ParserGenerationContext();

            ctx.AddRules(rules);
            var result = rules.First().Generate(ctx);

            if (ctx._errors.Any())
            {
                throw new ParserGenerationException(ctx._errors.ToArray());
            }

            return(result);
        }
Ejemplo n.º 4
0
        public Parser Generate(ParserGenerationContext ctx)
        {
            if (Defined)
            {
                return(GeneratedParser);
            }
            Defined = true;

            GeneratedParser.Definition = Expression.Generate(ctx);

            var matchWhitespace  = Options.Contains("match-whitespace");
            var ignoreWhitespace = Options.Contains("skip-whitespace");

            if (matchWhitespace && !ignoreWhitespace)
            {
                GeneratedParser.Definition = GeneratedParser.Definition.MatchWhitespace;
            }
            else if (ignoreWhitespace && !matchWhitespace)
            {
                GeneratedParser.Definition = GeneratedParser.Definition.IgnoreWhitespace;
            }

            return(GeneratedParser);
        }
Ejemplo n.º 5
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return base.Generate(ctx).Repeated;
 }
Ejemplo n.º 6
0
        public static Parser Generate(params Rule[] rules)
        {
            if (rules.Length == 0) {
                return Parser.Null("No rules specified");
            }

            var ctx = new ParserGenerationContext();
            ctx.AddRules(rules);
            var result = rules.First().Generate(ctx);

            if (ctx._errors.Any()) {
                throw new ParserGenerationException(ctx._errors.ToArray());
            }

            return result;
        }
Ejemplo n.º 7
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return Value;
 }
Ejemplo n.º 8
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return Expression.Generate(ctx);
 }
Ejemplo n.º 9
0
 public Parser Generate(ParserGenerationContext ctx)
 {
     return Alternation.Generate(ctx);
 }
Ejemplo n.º 10
0
 public abstract Parser Generate(ParserGenerationContext ctx);
Ejemplo n.º 11
0
 public Parser Generate(ParserGenerationContext ctx)
 {
     return(Parser.Concat(Factors.Select(x => x.Generate(ctx)).ToArray()));
 }
Ejemplo n.º 12
0
 public Parser Generate(ParserGenerationContext ctx)
 {
     return(Parser.Alternation(Concatenations.Select(x => x.Generate(ctx)).ToArray()));
 }
Ejemplo n.º 13
0
 public Parser Generate(ParserGenerationContext ctx)
 {
     return(Alternation.Generate(ctx));
 }
Ejemplo n.º 14
0
 public Parser Generate(ParserGenerationContext ctx)
 {
     return Parser.Alternation(Concatenations.Select(x => x.Generate(ctx)).ToArray());
 }
Ejemplo n.º 15
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return(ctx.GetRule(this, Value));
 }
Ejemplo n.º 16
0
 public Parser Generate(ParserGenerationContext ctx)
 {
     return Parser.Concat(Factors.Select(x => x.Generate(ctx)).ToArray());
 }
Ejemplo n.º 17
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return(Value);
 }
Ejemplo n.º 18
0
 public abstract Parser Generate(ParserGenerationContext ctx);
Ejemplo n.º 19
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return(Regex);
 }
Ejemplo n.º 20
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return ctx.GetRule(this, Value);
 }
Ejemplo n.º 21
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return(Expression.Generate(ctx));
 }
Ejemplo n.º 22
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return base.Generate(ctx).Optional;
 }
Ejemplo n.º 23
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return(base.Generate(ctx).Optional);
 }
Ejemplo n.º 24
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return Regex;
 }
Ejemplo n.º 25
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return(base.Generate(ctx).Repeated);
 }
Ejemplo n.º 26
0
        public Parser Generate(ParserGenerationContext ctx)
        {
            if (Defined) return GeneratedParser;
            Defined = true;

            GeneratedParser.Definition = Expression.Generate(ctx);

            var matchWhitespace = Options.Contains("match-whitespace");
            var ignoreWhitespace = Options.Contains("skip-whitespace");

            if (matchWhitespace && !ignoreWhitespace) {
                GeneratedParser.Definition = GeneratedParser.Definition.MatchWhitespace;
            } else if (ignoreWhitespace && !matchWhitespace) {
                GeneratedParser.Definition = GeneratedParser.Definition.IgnoreWhitespace;
            }

            return GeneratedParser;
        }
Ejemplo n.º 27
0
        public Parser Generate(ParserGenerationContext ctx)
        {
            if (Defined) return GeneratedParser;
            Defined = true;

            GeneratedParser.Definition = Expression.Generate(ctx);

            var matchWhitespace = Options.Any(x => x.Option == "match-whitespace");
            var ignoreWhitespace = Options.Any(x => x.Option == "skip-whitespace");

            foreach (var option in Options.Where(x => x.Option == "whitespace-rule"))
            {
                var arg = option.Args.First();
                var rule = ctx.GetRule(arg, ((Identifier) arg).Value);
                GeneratedParser.Definition = new WhitespaceRuleParser(GeneratedParser.Definition, rule);
            }

            if (matchWhitespace && !ignoreWhitespace) {
                GeneratedParser.Definition = GeneratedParser.Definition.MatchWhitespace;
            } else if (ignoreWhitespace && !matchWhitespace) {
                GeneratedParser.Definition = GeneratedParser.Definition.IgnoreWhitespace;
            }

            return GeneratedParser;
        }