Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "DFA.h"
- #include "header/FileScanner.h"
- //#include<bits/c++config>
- #include <iostream>
- #include <vector>
- #include <string>
- //#include <bits/stdc++.h>
- using namespace std;
- vector<vector<int>> newStates;
- vector<int> start;
- vector<int> sortVec;
- vector <int > closVec;
- void sortVector(vector<int> sVec);
- void closureState(int index);
- bool checkExistingVector(vector<int> vec);
- int main() {
- }
- void generateAcceptanceStates() {
- bool found = false;
- string stateMatchedString;
- int newNumber;
- for (int i = 0; i < newStates.size(); i++) {
- for (int j = 0; j < newStates[i].size(); j++) {
- for (int k = 0; k < acceptedStates.size(); k++) {
- if (acceptedStates[k].stateNumber == newStates[i][j]) {
- found = true;
- stateMatchedString = acceptedStates[k].stateName;
- break;
- }
- }
- if (found) {
- AcceptedState accept(stateMatchedString, j);
- finalacceptedStates.push_back(accept);
- found = false;
- break;
- }
- }
- }
- }
- void closureState(int index) {
- for (int i = 0; i < NFS[index].size(); i++) {
- if (NFS[index][i][1] == -1) {
- // lamda
- //check if state in vector or not
- if ((find(closVec.begin(), closVec.end(), NFS[index][i][2]) != closVec.end())) {
- /* v does not contain x */
- closVec.push_back(NFS[index][i][2]);
- closureState(NFS[index][i][2]);
- }
- }
- }
- for (int i=0; i<closVec.size(); i++)
- sortVec.push_back(closVec[i]);
- sortVector();
- closVec.clear();
- for (int i=0; i<sortVec.size(); i++)
- closVec.push_back(sortVec[i]);
- //newStates.push_back(vec);
- }
- void searchInput(int i, int j, int input) {
- for (int y = 0; y < newStates[i].size(); y++) {
- //int search = NFS[newStates[i][y]];
- int search = newStates[i][y];
- if (search != newStates[i][j]) {
- for (int x = 0; x < NFS[newStates[i][y]].size(); x++) {
- int searchInp = NFS[newStates[i][y]][x][1];
- if (input == searchInp) {
- closVec.push_back(NFS[newStates[i][y]][x][2]);
- closureState(NFS[newStates[i][y]][x][2]);
- break;
- }
- }
- }
- }
- }
- bool checkInput(int input, int row) {
- if (DFA[row].size() != 0) {
- for (int i = 0; i < DFA[row].size(); i++) {
- if (DFA[row][i][1] == input) {
- return false;
- }
- }
- }
- return true;
- }
- void NFAtoDFA() {
- start.push_back(0);
- for (int i=0; i<start.size(); i++)
- closVec.push_back(start[i]);
- closureState(0);
- newStates.push_back(sortVec);
- sortVec.clear();
- closVec.clear();
- int counter = 0;
- for (int i = 0; i < newStates.size(); i++) {
- for (int j = 0; j < newStates[i].size(); j++) {
- for (int k = 0; k < NFS[newStates[i][j]].size(); k++) {
- int input = NFS[newStates[i][j]][k][1];
- int state = NFS[newStates[i][j]][k][2];
- if (input != -1 && checkInput(input, i)) {
- vector<int> tempSates;
- tempSates.push_back(state);
- for (int i=0; i<tempSates.size(); i++)
- closVec.push_back(tempSates[i]);
- closureState(state);
- searchInput(i, j, input);
- if (!checkExistingVector(closVec)) {
- newStates.push_back(closVec);
- }
- DFA[i][counter][1] = input;
- DFA[i][counter][2] = i;
- counter++;
- tempSates.clear();
- closVec.clear();
- }
- }
- }
- counter = 0;
- }
- generateAcceptanceStates();
- }
- void sortVector() {
- int miniPos;
- int temp;
- for (int i = 0; i < sortVec->size(); i++) {
- miniPos = i;
- for (int j = i + 1; j < sortVec->size(); j++) {
- if (sortVec[j] < sortVec[miniPos]) {
- miniPos = j;
- }
- }
- temp = sortVec[miniPos]; ////////////err
- sortVec[miniPos] = sortVec[i];
- sortVec[i] = temp; //////////////err
- }
- }
- bool checkExistingVector(vector<int> vec) {
- for (int i = 0; i < newStates.size(); i++) {
- if (vec == newStates[i]) { ////errr
- return true;
- }
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement