コード例 #1
0
        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);
        }
コード例 #2
0
 public TokenVisitor(Boolean isMemoized, ParsnipModel model)
 {
     this.isMemoized = isMemoized;
     this.model      = model;
 }
コード例 #3
0
 public static ParsnipModel AddingInterfaceMethod(this ParsnipModel model, InterfaceMethod method) => new ParsnipModel(model.Rules, model.InterfaceMethods.Appending(method), model.LexemeIdentifiers);
コード例 #4
0
 public static ParsnipModel ReplacingRule(this ParsnipModel model, Rule oldRule, Rule newRule) => new ParsnipModel(model.Rules.Replacing(oldRule, newRule), model.InterfaceMethods, model.LexemeIdentifiers);
コード例 #5
0
 public static ParsnipModel AddingLexemeIdentifier(this ParsnipModel model, LexemeIdentifier id) => new ParsnipModel(model.Rules, model.InterfaceMethods, model.LexemeIdentifiers.Appending(id));
コード例 #6
0
 public static ParsnipModel AddingRule(this ParsnipModel model, Rule rule) => new ParsnipModel(model.Rules.Appending(rule), model.InterfaceMethods, model.LexemeIdentifiers);