private bool IsLastSymbolBeforeDotTerminal(List <Symbol> prev) { if (prev.Count == 0) { return(false); } Symbol symBeforeDot = prev[prev.Count - 1]; return(_grammar.DoesBelongToTerminals(symBeforeDot)); }
private void RunMarpa(String input, int fromPosition) { for (int i = fromPosition; i <= input.Length; i++) { EarleySet set = Sets[i]; List <EarleyItem> items = set.GetEarleyItemList(); for (int j = 0; j < items.Count; j++) { EarleyItem current = items[j]; if (current.IsCompleted()) { Completer(current, i); } else { bool condition = Grammar.DoesBelongToTerminals(current.GetCurrentNextSymbol()); if (!condition) { Predictor(current, i); } else if (input.Length > i) { Scanner(current, i, input[i]); } } } if (i + 1 < Sets.Count && Sets[i + 1].GetEarleyItemList().Count == 0) { errorHandler.AddNewError(ErrorCode.UNRECOGNISED_SYMBOL, input[i], i); return; } } }