public DottedRuleFactory(IEnumerable <Production> productions) { foreach (var production in productions) { var rules = new DottedRule[production.Count + 1]; this.index.Add(production, rules); for (var dot = 0; dot <= production.Count; dot++) { rules[dot] = new DottedRule(this, production, dot); } } }
public bool Contains(DottedRule dottedRule, int origin) { if (dottedRule.IsComplete) { return(CompletionsContains(dottedRule, origin)); } var currentSymbol = dottedRule.PostDot; return(currentSymbol is Nonterminal ? NonterminalsContains(dottedRule, origin) : TerminalsContains(dottedRule, origin)); }
public EarleyState NewState(DottedRule dottedRule, int origin) { if (dottedRule.IsComplete) { return(new CompletedState(dottedRule, origin)); } if (dottedRule.PostDot is Nonterminal) { return(new NonterminalState(dottedRule, origin)); } return(new TerminalState(dottedRule, origin)); }
private bool TerminalsContains(DottedRule rule, int origin) { return(this.terminalStates.Contains(rule, origin)); }
private bool CompletionsContains(DottedRule rule, int origin) { return(this.completionStates.Contains(rule, origin)); }
public bool Contains(int location, DottedRule dottedRule, int origin) { return(this[location].Contains(dottedRule, origin)); }
public CompletedState(DottedRule dottedRule, int origin) : base(dottedRule, origin) { Debug.Assert(dottedRule.Dot == dottedRule.Count); }
public TerminalState(DottedRule dottedRule, int origin) : base(dottedRule, origin) { Debug.Assert(dottedRule.PostDot is Terminal); }
protected EarleyState(DottedRule dottedRule, int origin) { DottedRule = dottedRule; Origin = origin; }
public bool Contains(DottedRule rule, int origin) { return(this.lookup.TryGetValue(rule, out var origins) && origins.TryGetValue(origin, out var _)); }