Advertisement
Guest User

Untitled

a guest
Mar 24th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.65 KB | None | 0 0
  1. #include "DFA.h"
  2. #include "header/FileScanner.h"
  3. //#include<bits/c++config>
  4. #include <iostream>
  5. #include <vector>
  6. #include <string>
  7. //#include <bits/stdc++.h>
  8.  
  9. using namespace std;
  10. vector<vector<int>> newStates;
  11. vector<int> start;
  12. vector<int> sortVec;
  13. vector <int > closVec;
  14. void sortVector(vector<int> sVec);
  15. void closureState(int index);
  16. bool checkExistingVector(vector<int> vec);
  17.  
  18.  
  19. int main() {
  20.  
  21. }
  22. void generateAcceptanceStates() {
  23. bool found = false;
  24. string stateMatchedString;
  25. int newNumber;
  26. for (int i = 0; i < newStates.size(); i++) {
  27. for (int j = 0; j < newStates[i].size(); j++) {
  28.  
  29. for (int k = 0; k < acceptedStates.size(); k++) {
  30. if (acceptedStates[k].stateNumber == newStates[i][j]) {
  31. found = true;
  32. stateMatchedString = acceptedStates[k].stateName;
  33. break;
  34. }
  35. }
  36. if (found) {
  37. AcceptedState accept(stateMatchedString, j);
  38. finalacceptedStates.push_back(accept);
  39. found = false;
  40. break;
  41.  
  42. }
  43. }
  44. }
  45.  
  46. }
  47. void closureState(int index) {
  48. for (int i = 0; i < NFS[index].size(); i++) {
  49. if (NFS[index][i][1] == -1) {
  50. // lamda
  51. //check if state in vector or not
  52. if ((find(closVec.begin(), closVec.end(), NFS[index][i][2]) != closVec.end())) {
  53. /* v does not contain x */
  54. closVec.push_back(NFS[index][i][2]);
  55. closureState(NFS[index][i][2]);
  56. }
  57. }
  58.  
  59. }
  60. for (int i=0; i<closVec.size(); i++)
  61. sortVec.push_back(closVec[i]);
  62.  
  63. sortVector();
  64. closVec.clear();
  65. for (int i=0; i<sortVec.size(); i++)
  66. closVec.push_back(sortVec[i]);
  67. //newStates.push_back(vec);
  68.  
  69. }
  70. void searchInput(int i, int j, int input) {
  71. for (int y = 0; y < newStates[i].size(); y++) {
  72. //int search = NFS[newStates[i][y]];
  73. int search = newStates[i][y];
  74. if (search != newStates[i][j]) {
  75. for (int x = 0; x < NFS[newStates[i][y]].size(); x++) {
  76. int searchInp = NFS[newStates[i][y]][x][1];
  77. if (input == searchInp) {
  78. closVec.push_back(NFS[newStates[i][y]][x][2]);
  79. closureState(NFS[newStates[i][y]][x][2]);
  80. break;
  81. }
  82. }
  83. }
  84.  
  85. }
  86.  
  87. }
  88.  
  89. bool checkInput(int input, int row) {
  90. if (DFA[row].size() != 0) {
  91. for (int i = 0; i < DFA[row].size(); i++) {
  92. if (DFA[row][i][1] == input) {
  93. return false;
  94. }
  95. }
  96. }
  97. return true;
  98. }
  99. void NFAtoDFA() {
  100. start.push_back(0);
  101. for (int i=0; i<start.size(); i++)
  102. closVec.push_back(start[i]);
  103. closureState(0);
  104. newStates.push_back(sortVec);
  105. sortVec.clear();
  106. closVec.clear();
  107. int counter = 0;
  108. for (int i = 0; i < newStates.size(); i++) {
  109. for (int j = 0; j < newStates[i].size(); j++) {
  110. for (int k = 0; k < NFS[newStates[i][j]].size(); k++) {
  111. int input = NFS[newStates[i][j]][k][1];
  112. int state = NFS[newStates[i][j]][k][2];
  113. if (input != -1 && checkInput(input, i)) {
  114. vector<int> tempSates;
  115. tempSates.push_back(state);
  116. for (int i=0; i<tempSates.size(); i++)
  117. closVec.push_back(tempSates[i]);
  118. closureState(state);
  119. searchInput(i, j, input);
  120. if (!checkExistingVector(closVec)) {
  121. newStates.push_back(closVec);
  122. }
  123. DFA[i][counter][1] = input;
  124. DFA[i][counter][2] = i;
  125. counter++;
  126. tempSates.clear();
  127. closVec.clear();
  128. }
  129.  
  130. }
  131.  
  132. }
  133. counter = 0;
  134. }
  135.  
  136. generateAcceptanceStates();
  137.  
  138. }
  139. void sortVector() {
  140. int miniPos;
  141. int temp;
  142. for (int i = 0; i < sortVec->size(); i++) {
  143. miniPos = i;
  144. for (int j = i + 1; j < sortVec->size(); j++) {
  145. if (sortVec[j] < sortVec[miniPos]) {
  146. miniPos = j;
  147. }
  148. }
  149.  
  150. temp = sortVec[miniPos]; ////////////err
  151. sortVec[miniPos] = sortVec[i];
  152. sortVec[i] = temp; //////////////err
  153. }
  154. }
  155.  
  156. bool checkExistingVector(vector<int> vec) {
  157. for (int i = 0; i < newStates.size(); i++) {
  158. if (vec == newStates[i]) { ////errr
  159. return true;
  160. }
  161. }
  162. return false;
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement