Example #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);
        }
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return ctx.GetRule(this, Value);
 }
Example #3
0
 public override Parser Generate(ParserGenerationContext ctx)
 {
     return(ctx.GetRule(this, Value));
 }
Example #4
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;
        }