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); }
public void Match(NonTerminal terminal, ref Queue <Token> tokens) { LanguageRule workingNowRule = this.getRuleByTokenAndNonTerminal(terminal, tokens.Peek()); workingNowRule.MatchRule(ref tokens, this); }
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; }