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); } } } }
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); //} } } } } }
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); }