예제 #1
0
        public RulePattern rulePattern;  //Whether the rule is an OR rule, meaning that it only has subrules within it and nothing else

        public RuleDescriptor()
        {
            name        = "";
            elements    = new List <IGrammar>();
            rPattern    = Pattern.NONE;
            rulePattern = RulePattern.NONE;
        }
예제 #2
0
 public RuleDescriptor(string name, List <IGrammar> elements, Pattern rPattern, RulePattern rulePattern)
 {
     this.name        = name;
     this.elements    = elements;
     this.rPattern    = rPattern;
     this.rulePattern = rulePattern;
 }
 public TokenDescriptor(String type, string pattern)
 {
     this.type        = type;
     this.pattern     = pattern;
     this.rPattern    = Pattern.NONE;
     this.rulePattern = RulePattern.NONE;
 }
예제 #4
0
        }                                            //Unused for token

        public Token(String type, String val)
        {
            this.type        = type;
            this.val         = val;
            rPattern         = Pattern.NONE;
            this.rulePattern = RulePattern.NONE;
        }
예제 #5
0
        public RulePattern rulePattern;  //Whether the rule is an OR rule, meaning that it only has subrules within it and nothing else

        public Rule()
        {
            this.name        = "";
            this.elements    = new List <IGrammar>();
            this.rPattern    = Pattern.NONE;
            this.rulePattern = RulePattern.NONE;
        }
예제 #6
0
 /// <summary>
 ///		Comprueba una regla a partir de un patrón de caracteres
 /// </summary>
 private void CheckRulePattern(RulePattern rule, TokenCollection tokens, ref bool found)
 {
     if (CharSeparator.CheckPatternStart(rule.PatternStart))
     {
         // Añade el token de un patrón
         tokens.Add(GetToken(rule, CharSeparator.GetCharsPattern(rule.PatternStart, rule.PatternContent), false));
         // Indica que se ha grabado
         found = true;
     }
 }
예제 #7
0
        protected PatternMatchResult TestRule(List <Token> tokens, int from = 0)
        {
            var matchResult = RulePattern.GetMatch(tokens, from);

            if (matchResult.Start == from)
            {
                return(matchResult);
            }

            return(PatternMatchResult.Empty);
        }
예제 #8
0
        public int Reduce(RulePattern rule)
        {
            Stack <Node> children = new Stack <Node>();

            for (int i = 0; i < rule.BodyLength; i++)
            {
                this.Content.Pop();
                children.Push((Node)this.Content.Pop());
            }

            int stateIndex = (int)this.Content.Peek();

            this.Content.Push(new NonTerminalNode(children.First().Location, rule.NonTerminal, children));
            return(stateIndex);
        }
예제 #9
0
        private Pattern NewPattern(string name, PatternConfig settings, string engineName)
        {
            var p = new Object();

            switch (name)
            {
            case "Spring":
            {
                p = new SpringPattern(logger, settings, engineName);
                break;
            }

            case "Streak":
            {
                p = new StreakPattern(logger, settings, engineName);
                break;
            }

            case "TrendShift":
            {
                p = new TrendShiftPattern(logger, settings, engineName);
                break;
            }

            case "TrendIncline":
            {
                p = new TrendInclinePattern(logger, settings, engineName);
                break;
            }

            case "RulePattern":
            {
                p = new RulePattern(logger, settings, engineName);
                break;
            }
            }

            return((Pattern)p);
        }
예제 #10
0
 public Rule(string name, List <IGrammar> elements, RulePattern rulePattern)
 {
     this.name        = name;
     this.elements    = elements;
     this.rulePattern = rulePattern;
 }
예제 #11
0
 public static ReduceTable From(ReduceTableDefinition definition, RuleDefinition[] rules) =>
 new ReduceTable(definition.ToDictionary(
                     reduce => StatePattern.From(reduce),
                     reduce => RulePattern.From(reduce, rules)));