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