示例#1
0
        private LanguageRule getRuleByTokenAndNonTerminal(NonTerminal terminal, Token token)
        {
            IEnumerable <LanguageRule> terminalRules = languageRules.Where(lR => lR.Symbol == terminal);

            LanguageRule workingNowRule = null;

            foreach (LanguageRule rule in terminalRules)
            {
                if (rule.CanMatchRule(token, this))
                {
                    workingNowRule = rule;
                }
            }
            return(workingNowRule);
        }
示例#2
0
        public void Match(NonTerminal terminal, ref Queue <Token> tokens)
        {
            LanguageRule workingNowRule = this.getRuleByTokenAndNonTerminal(terminal, tokens.Peek());

            workingNowRule.MatchRule(ref tokens, this);
        }
示例#3
0
        public bool CanMatch(NonTerminal terminal, Token token)
        {
            LanguageRule workingNowRule = getRuleByTokenAndNonTerminal(terminal, token);

            return(workingNowRule != null);
        }
 public ProcessStepper(ILanguage language)
 {
     this.startRule = language.StartRule;
     this.rules     = language.Rules;
 }