Advertisement
osipyonok

Untitled

Mar 7th, 2017
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.90 KB | None | 0 0
  1. /**
  2. * Created by Max on 25.02.2017.
  3. */
  4. import java.lang.*;
  5. import java.util.*;
  6. import java.io.*;
  7. import java.nio.charset.Charset;
  8.  
  9. import JavaTeacherLib.MyLang;
  10. import JavaTeacherLib.LlkContext;
  11.  
  12. public class Main {
  13.  
  14. public static void main(String[] args) {
  15. byte [] readline=new byte [80];
  16. boolean result;
  17. String fileName;
  18. MyLang testLang=null;
  19. int codeAction, llk=1, textLen;
  20. String [] menu= { "*1. Прочитати граматику з файла ",
  21. " 2. Лабораторна робота. Клас будує студент",
  22. " 3. Надрукувати граматику",
  23. "*4. Побудувати списки терміналів та нетерміналів",
  24. "*5. Пошук непродуктивних нетерміналів",
  25. "*6. Пошук недосяжних нетерміналів",
  26. "*7. Побудова списку епсілон-нетерміналів",
  27. " 8. Друк списку епсілон-нетерміналів",
  28. " 9. Пошук ліворекурсивних нетерміналів",
  29. " 10. Пошук різних ліворекурсивних виводів мінімальної довжини",
  30. " 11. Пошук праворекурсивних нетерміналів",
  31. " 12. Пошук різних праворекурсивних виводів мінімальної довжини",
  32. "*13. Побудувати множини FirstK(A), A-нетермінал",
  33. " 14. Вивести на термінал множини FirstK(A), A-нетермінал",
  34. "*15. Побудувати множини FollowK(A), A-нетермінал",
  35. " 16. Вивести на термінал множини FollowK(A), A-нетермінал",
  36. "*17. Побудувати множини FirstK(w) + FollowK(A) для правила А->w",
  37. " 18. Вивести на термінал FirstK(w) + FollowK(A) для всіх правил А->w",
  38. " 19. Вивести на термінал FirstK(w) + FollowK(A) для вибраних правил А->w",
  39. "*20. Перевірка сильної LL(1)-властивості",
  40. " 21. Побудова таблиці LL(1)-синтаксичного аналізатора",
  41. " 22. Синтаксичний аналізатор. Клас будує студент",
  42. "*23. Побудувати множини LocalK(A), A-нетермінал",
  43. " 24. Вивести на термінал множини LocalK(A), A-нетермінал",
  44. "*25. Перевірка LL(k)-властивості, k>1",
  45. " 26. Вихід з системи"
  46. };
  47. do {
  48. codeAction=0;
  49. String upr;
  50. for (String ss: menu) System.out.println(ss); // вивести меню
  51. System.out.println("Введіть код дії або end:");
  52. do { // цикл перебору даних
  53. try {
  54. textLen=System.in.read(readline);
  55. upr = new String (readline,0,textLen, "ISO-8859-1");
  56. if (upr.trim().equals("end") ) return;
  57. codeAction=new Integer (upr.trim());
  58. }
  59. catch(Exception ee)
  60. { System.out.println ("Невірний код дії, повторіть: ");
  61. continue;
  62. }
  63. if (codeAction >=1 && codeAction<=menu.length ) {
  64. if (menu [codeAction-1].substring(0, 1).equals("+")) {
  65. System.out.println("Елемент меню " +codeAction+" повторно виконати неможливо");
  66. continue ;
  67. }
  68. int itmp;
  69. for (itmp=0; itmp < codeAction-1; itmp++)
  70. if (menu[itmp].substring(0, 1).equals("*")) break;
  71. if (itmp !=codeAction-1) {
  72. System.out.println ("Виконайте попередні елементи меню, що позначені * : ");
  73. continue ;
  74. }
  75. break;
  76. }
  77. else {
  78. System.out.println ("Невірний код дії, повторіть: ");
  79. continue ;
  80. }
  81. } while (true);
  82. // перевірка на виконання усіх попередніх дій
  83. result=false;
  84. switch (codeAction) {
  85. case 1: //1. Прочитати граматику з файла",
  86. System.out.print ("Введіть ім'я файлу граматики:");
  87. try {
  88. textLen=System.in.read(readline);
  89. fileName = new String (readline,0,textLen, "ISO-8859-1");
  90. fileName = fileName.trim();
  91. }
  92. catch(Exception ee)
  93. { System.out.println ("Системна помилка: "+ee.toString());
  94. return;
  95. }
  96. System.out.print ("Введіть значення параметра k : ");
  97. try {
  98. textLen=System.in.read(readline);
  99. String llkText = new String (readline,0,textLen, "ISO-8859-1");
  100. llkText = llkText.trim();
  101. llk=Integer.parseInt(llkText);
  102. }
  103. catch(Exception ee)
  104. { System.out.println ("Системна помилка: "+ee.toString());
  105. return;
  106. }
  107. testLang = new MyLang (fileName,llk);
  108. if (!testLang.isCreate()) break; //не створили об'єкт
  109. System.out.println ("Граматика прочитана успішно");
  110. result=true;
  111. for (int jj=0; jj<menu.length; jj++) {
  112. if (menu [jj].substring(0, 1).equals(" ")) continue;
  113. menu [jj]=menu [jj].replace(menu [jj].charAt(0), '*') ;
  114. }
  115. break;
  116. case 2: //2. Лабораторна робота студента
  117. break;
  118. case 3: // Надрукувати граматику
  119. testLang.printGramma();
  120. break;
  121. case 4: // надрукувати список терміналів та нетерміналів
  122. testLang.printTerminals();
  123. testLang.printNonterminals();
  124. result=true;
  125. break;
  126. case 5: // вивести непродуктивні правила
  127. result=testLang.createNonProdRools();
  128. break;
  129. case 6: // недосяжні нетермінали
  130. result=testLang.createNonDosNeterminals();
  131. break;
  132. case 7: //Побудова списку епсілон-нетерміналів
  133. int [] epsilon=testLang.createEpsilonNonterminals ();
  134. testLang.setEpsilonNonterminals (epsilon);
  135. result=true;
  136. break;
  137. case 8: //Друк списку епсілон-нетерміналів
  138. testLang.printEpsilonNonterminals();
  139. break;
  140. case 9: //Пошук ліворекурсивних нетерміналів"
  141. testLang.leftRecursNonnerminal();
  142. break;
  143. case 10: //Пошук різних ліворекурсивних виводів мінімальної довжини"
  144. testLang.leftRecusionTrace();
  145. break;
  146. case 11: //Пошук праворекурсивних нетерміналів"
  147. testLang.rightRecursNonnerminal();
  148. break;
  149. case 12: //Пошук різних праворекурсивних виводів мінімальної довжини"
  150. testLang.rigthRecusionTrace();
  151. break;
  152. case 13: //Побудувати множини FirstK
  153. LlkContext [] firstContext = testLang.firstK();
  154. testLang.setFirstK(firstContext);
  155. result=true;
  156. break;
  157. case 14: //Друк множини FirstK
  158. testLang.printFirstkContext ( );
  159. break;
  160. case 15: //Побудувати множини FollowK
  161. LlkContext [] followContext = testLang.followK();
  162. testLang.setFollowK(followContext);
  163. result=true;
  164. break;
  165. case 16: //Друк множини FollowK
  166. testLang.printFollowkContext ( );
  167. break;
  168. case 17: //Побудувати множини FirstK(w) + FollowK(A) для правила А->w
  169. testLang.firstFollowK ( );
  170. result=true;
  171. break;
  172. case 18: //Друк множини FirstK(w) + FollowK(A) для правила А->w
  173. testLang.printFirstFollowK( );
  174. break;
  175. case 19: //Друк множини FirstK(w) + FollowK(A) для вибраних правил А->w
  176. testLang.printFirstFollowForRoole();
  177. break;
  178. case 20: //Перевірка сильної LL(k)-властивості",
  179. result=testLang. strongLlkCondition () ;
  180. break;
  181. case 21: //Побудова таблиці LL(1)-синтаксичного аналізатора
  182. int [][] uprTable=testLang.createUprTable ();
  183. testLang.setUprTable(uprTable);
  184. break;
  185. case 22: // PASCAL
  186. break;
  187.  
  188. case 23: // 23. Побудувати множини LocalK(A), A-нетермінал
  189. LinkedList <LlkContext> [] Localk=testLang.createLocalK();
  190. testLang.setLocalkContext(Localk);
  191. result=true;
  192. break;
  193. case 24: // 24. Вивести на термінал множини LocalK(A), A-нетермінал
  194. testLang.printLocalk();
  195. break;
  196. case 25: // 25. Перевірка LL(k)-властивості, k>1
  197. result= testLang.llkCondition();
  198. break;
  199. case 26: // rtrtrtr
  200. return;
  201. case 27:
  202. break;
  203. } // кінець switch
  204. // блокуємо елемент обробки
  205. if (result) // функція виконана успішно
  206. if (menu [codeAction-1].substring(0, 1).equals("*"))
  207. menu [codeAction-1]=menu [codeAction-1].replace('*', '+') ;
  208. } while (true); //глобальний цикл обробки
  209.  
  210. } // кінець main
  211.  
  212. static void tesrReadWrite(String fname)
  213. { String readline;
  214. BufferedReader s;
  215. BufferedWriter bw;
  216. try {
  217. s = new BufferedReader(new FileReader(fname));
  218. bw = new BufferedWriter (new FileWriter("c:\\rez.txt"));
  219. // s=new FileInputStream (fname);
  220. //s=new FileInputStream ("C:\\Eclipse\\C1.txt");
  221. //s=new FileInputStream ("C:\\test1.txt");
  222. while ( s.ready() ) {
  223. readline= s.readLine();
  224. System.out.println(readline);
  225. //System.out.println("Read Line");
  226. //bw.write(readline, 0,readline.length() );
  227. //bw.write((int)'\r'); bw.flush();
  228. //System.out.println("Print Line");
  229. }
  230.  
  231. //bw.close();
  232. }
  233. catch(Exception ee)
  234. {
  235. System.out.print("File: " +fname + "not found\n");
  236. //return;
  237. }
  238. }
  239.  
  240. static MyLang task1(){
  241. Scanner sc = new Scanner(System.in);
  242. System.out.println("Введiть адресу вхiдного файла:");
  243. String path = sc.nextLine();
  244. System.out.println("Введiть значення LLK-контексту:");
  245. int llk = sc.nextInt();
  246.  
  247. MyLang res = null;
  248.  
  249. // res.set
  250.  
  251. return res;
  252. }
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement