public static ParsnipModel Analyze(ParsnipDefinition syntacticModel) { var model = new ParsnipModel(); // Capture Lexemes var lexVisitor = new LexVisitor(model); foreach (var i in syntacticModel.Items) { model = i.ApplyVisitor(lexVisitor); } // Populate rules var ruleVisitor = new RuleVisitor(model); foreach (var i in syntacticModel.Items) { model = i.ApplyVisitor(ruleVisitor); } // Populate parse functions var funcVisitor = new CreateParseFunctionVisitor(model, isMemoized: true); foreach (var i in syntacticModel.Items) { model = i.ApplyVisitor(funcVisitor); } return(model); }
public TokenVisitor(Boolean isMemoized, ParsnipModel model) { this.isMemoized = isMemoized; this.model = model; }
public static ParsnipModel AddingInterfaceMethod(this ParsnipModel model, InterfaceMethod method) => new ParsnipModel(model.Rules, model.InterfaceMethods.Appending(method), model.LexemeIdentifiers);
public static ParsnipModel ReplacingRule(this ParsnipModel model, Rule oldRule, Rule newRule) => new ParsnipModel(model.Rules.Replacing(oldRule, newRule), model.InterfaceMethods, model.LexemeIdentifiers);
public static ParsnipModel AddingLexemeIdentifier(this ParsnipModel model, LexemeIdentifier id) => new ParsnipModel(model.Rules, model.InterfaceMethods, model.LexemeIdentifiers.Appending(id));
public static ParsnipModel AddingRule(this ParsnipModel model, Rule rule) => new ParsnipModel(model.Rules.Appending(rule), model.InterfaceMethods, model.LexemeIdentifiers);