Example #1
0
 private void LogScan(int origin, EarleyItem state, IToken token)
 {
     if (Options.LoggingEnabled)
     {
         Debug.WriteLine($"{GetOriginStateOperationString("Scan", origin, state)} \"{token.Value}\"");
     }
 }
Example #2
0
 private void Log(string operation, int origin, EarleyItem state)
 {
     if (Options.LoggingEnabled)
     {
         Debug.WriteLine(GetOriginStateOperationString(operation, origin, state));
     }
 }
Example #3
0
        private void Parse(string word, List <List <EarleyItem> > positionArray)
        {
            for (int i = 0; i < positionArray.Count; i++)
            {
                for (int j = 0; j < positionArray[i].Count; j++)
                {
                    EarleyItem item = positionArray[i][j];
                    if (item.Completed)
                    {
                        Complete(positionArray, i, item);
                    }
                    else if (item.CurrentSymbol is NonTerminal nt)
                    {
                        Predict(positionArray, i, nt);
                    }
                    else if (i < word.Length) // next symbol is a terminal, so we scan if able
                    {
                        if (word[i].ToString() == item.CurrentSymbol.Name)
                        {
                            EarleyItem newItem = item with {
                                CurrentPosition = item.CurrentPosition + 1
                            };

                            AddToPosition(positionArray, i + 1, newItem);
                        }
                    }
                }
            }
        }
Example #4
0
        private void Complete(List <List <EarleyItem> > positionArray, int position, EarleyItem item)
        {
            int startPositon = item.StartPosition;

            foreach (EarleyItem starter in positionArray[startPositon])
            {
                if (!starter.Completed && starter.CurrentSymbol == item.ReplacedSymbol)
                {
                    AddToPosition(positionArray, position, starter with {
                        CurrentPosition = starter.CurrentPosition + 1
                    });
Example #5
0
        private void PredictAycockHorspool(EarleyItem evidence, int location)
        {
            var nullParseNode = CreateNullParseNode(evidence.DottedRule.PostDotSymbol as NonTerminal, location);
            var dottedRule    = DottedRules.GetNext(evidence.DottedRule);

            //var evidenceParseNode = evidence.ParseNode as IInternalForestNode;
            IForestNode parseNode;

            if (evidence.ParseNode is IInternalForestNode evidenceParseNode && evidenceParseNode.Children.Count > 0)
            {
                parseNode = CreateParseNode(
                    dottedRule,
                    evidence.Origin,
                    evidenceParseNode,
                    nullParseNode,
                    location);
            }
Example #6
0
 private static string GetOriginStateOperationString(string operation, int origin, EarleyItem state)
 {
     return($"{origin.ToString().PadRight(9)}{state.ToString().PadRight(100)}{operation}");
 }