Esempio n. 1
0
        private bool IsLastSymbolBeforeDotTerminal(List <Symbol> prev)
        {
            if (prev.Count == 0)
            {
                return(false);
            }
            Symbol symBeforeDot = prev[prev.Count - 1];

            return(_grammar.DoesBelongToTerminals(symBeforeDot));
        }
Esempio n. 2
0
        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;
                }
            }
        }