Beispiel #1
0
        private void complete(DClass D, StateStruct stateToComplete)
        {
            string variableToComplete = stateToComplete.leftSide;
            bool   alreadyCompleted   = false;

            foreach (string variable in D.AlreadyCompletedList)
            {
                if (string.Equals(variableToComplete, variable))
                {
                    alreadyCompleted = true;
                }
            }

            if (!alreadyCompleted)
            {
                foreach (StateStruct state in DList[stateToComplete.origin].SList)
                {
                    if (state.pointer < state.rightSide.Count)
                    {
                        if (String.Equals(state.rightSide[state.pointer], variableToComplete))
                        {
                            StateStruct nState = new StateStruct(state.leftSide, state.rightSide, state.pointer + 1, state.origin);
                            D.SList.Add(nState);
                            if (nState.pointer >= nState.rightSide.Count)
                            {
                                complete(D, nState);
                                //predict(D, nState);
                            }
                        }
                    }
                }
                D.AlreadyCompletedList.Add(variableToComplete);
            }
        }
        private void predict(DClass D, StateStruct stateToPredict)
        {
            string variableToBeAdded = stateToPredict.rightSide[stateToPredict.pointer];

            if (gramatica.isVariavel(variableToBeAdded))
            {
                bool alreadyInAState = false;

                foreach (StateStruct ss in D.SList)
                {
                    if (string.Equals(ss.leftSide, variableToBeAdded))
                    {
                        alreadyInAState = true;
                    }
                }

                if (!alreadyInAState)
                {
                    foreach (List <string> producao in gramatica.regrasDeProducao[variableToBeAdded])
                    {
                        StateStruct state = new StateStruct(variableToBeAdded, producao, 0, inputPointer);
                        D.SList.Add(state);
                        predict(D, state);
                    }
                }
            }
        }
Beispiel #3
0
 private void scan(DClass D, string token)
 {
     if (gramatica.isTerminal(token))
     {
         foreach (StateStruct state in DList[inputPointer - 1].SList)
         {
             if (state.pointer < state.rightSide.Count)
             {
                 if (String.Equals(state.rightSide[state.pointer], token))
                 {
                     StateStruct nState = new StateStruct(state.leftSide, state.rightSide, state.pointer + 1, state.origin);
                     D.SList.Add(nState);
                     if (nState.pointer >= nState.rightSide.Count)
                     {
                         complete(D, nState);
                         //predict(D, nState);
                     }
                     //else
                     //{
                     //    predict(D, nState);
                     //}
                 }
             }
         }
     }
 }
Beispiel #4
0
        private void createInitial()
        {
            //List<StateStruct> D0 = new List<StateStruct>();

            DClass D0 = new DClass();

            foreach (List <string> regra in gramatica.regrasDeProducao[gramatica.inicial])
            {
                StateStruct D0Initializer = new StateStruct(gramatica.inicial, regra, 0, 0);
                D0.SList.Add(D0Initializer);
                //predict(D0, D0Initializer);
            }
            predict(D0);
            //StateStruct D0Initial = new StateStruct(gramatica.inicial, gramatica.regrasDeProducao[gramatica.inicial][0], 0, 0);



            //D0.SList.Add(D0Initial);

            DList.Add(D0);

            inputPointer = 1;

            //string variableToBeAdded = D0Initial.rightSide[D0Initial.pointer];
            //bool alreadyInAState = false;

            //if (gramatica.isVariavel(variableToBeAdded))
            //{
            //    foreach(StateStruct ss in D0.SList)
            //    {
            //        if(string.Equals(ss.leftSide,variableToBeAdded))
            //        {
            //            alreadyInAState = true;
            //        }
            //    }

            //    if (!alreadyInAState)
            //    {
            //        foreach (List<string> producao in gramatica.regrasDeProducao[variableToBeAdded])
            //        {
            //            StateStruct state = new StateStruct(variableToBeAdded, producao, 0, 0);
            //            D0.SList.Add(state);


            //        }
            //    }

            //    //StateStruct D = new StateStruct(D0Initial.rightSide[D0Initial.pointer],);
            //}

            //foreach (string prod in D0Initial.rightSide)
            //{

            //}  //codigo não usado
        }
        private void createInitial()
        {
            DClass D0 = new DClass();

            StateStruct D0Initial = new StateStruct(gramatica.inicial, gramatica.regrasDeProducao[gramatica.inicial][0], 0, 0);

            D0.SList.Add(D0Initial);

            predict(D0, D0Initial);

            DList.Add(D0);
        }