Advertisement
osipyonok

sp backup

Apr 17th, 2017
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 29.55 KB | None | 0 0
  1. /**
  2.  * Created by max on 09.04.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. import JavaTeacherLib.Node;
  12. import JavaTeacherLib.TableNode;
  13.  
  14. import java.io.File;
  15. import java.io.FileInputStream;
  16. import java.io.FileNotFoundException;
  17. import java.io.IOException;
  18. import java.util.regex.*;
  19.  
  20. enum Tokens {
  21.     Keyword,
  22.     Atom,
  23.     Int,
  24.     Hex,
  25.     Double,
  26.     Comment,
  27.     String,
  28.     Char,
  29.     Directive,
  30.     Operator,
  31.     Punctuation,
  32.     CONST_NAME,
  33.     DIGIT,
  34.     IDN,
  35.     LITER_STR,
  36.     PROC_NAME,
  37.     FUNC_NAME,
  38.     TYPE_NAME
  39. }
  40.  
  41. class LexPascal{
  42.     private String path = "";
  43.     private static Map<Tokens , Pattern> regular = new HashMap<Tokens , Pattern>();
  44.     private static Map<Tokens , Integer> priority = new HashMap<Tokens , Integer>();
  45.  
  46.     public LexPascal(String _path){
  47.         path = path;
  48.         InitRegex();
  49.         InitPriority();
  50.     }
  51.  
  52.     private void InitRegex(){
  53.         regular.put(Tokens.IDN , Pattern.compile("^(_|[a-z])([a-z]|[0-9]|_)*"));
  54.         regular.put(Tokens.Keyword , Pattern.compile("^(program|var|const|type|begin|repeat|until|end|if|then|else|while|do|for|of|record|with|procedure|function|case|in|set|array|nil|true|false)"));
  55.         regular.put(Tokens.DIGIT , Pattern.compile("^(0|[1-9]\\d*)"));
  56.         regular.put(Tokens.LITER_STR, Pattern.compile("^'(?:[^']+|(''))*'$"));
  57.         regular.put(Tokens.Comment, Pattern.compile("^(//(.*?)//|\\{(.*?)\\}|\\(\\*(.*?)\\*\\))"));
  58.         regular.put(Tokens.Punctuation, Pattern.compile("^(\\(|\\)|;|,|\\.|:|\\[|\\]|\\^|\\.\\.)"));
  59. //        regular.put(Tokens.Hex, Pattern.compile("^0[xX]((0|[1-9a-fA-F][\\da-fA-F]*))"));
  60.         regular.put(Tokens.Operator, Pattern.compile("^\\+|\\-|\\*|/|:=|<>|=|>|<|>=|<=|!=|div|mod|and|not"));
  61.         regular.put(Tokens.Double, Pattern.compile("^(((0|[1-9]\\d*)?\\.\\d+([eE][+-]?\\d+)?[FfDdMm]?)|((0|[1-9]\\d*)([eE][+-]?\\d+)[FfDdMm]?)|((0|[1-9]\\d*)[FfDdMm]))"));
  62. //        regular.put(Tokens.Directive, Pattern.compile("^mp:.*"));
  63.         regular.put(Tokens.TYPE_NAME , Pattern.compile("^(integer|real|char|boolean)"));
  64.     }
  65.  
  66.     private void InitPriority(){
  67.         priority.put(Tokens.Operator, 1);
  68.         priority.put(Tokens.Punctuation, 2);
  69.         priority.put(Tokens.Double, 3);
  70.         priority.put(Tokens.DIGIT, 4);
  71.         priority.put(Tokens.Hex, 4);
  72.         priority.put(Tokens.IDN, 5);
  73.         priority.put(Tokens.Keyword, 6);
  74.         priority.put(Tokens.LITER_STR, 7);
  75.         priority.put(Tokens.TYPE_NAME, 8);
  76.         priority.put(Tokens.Comment, 9);
  77.     }
  78.  
  79.     private String Prepare(String text){
  80.         String code = "";
  81.         boolean ck = false;
  82.         for(int i = 0 ; i < text.length() ; ++i){
  83.             char ch = text.charAt(i);
  84.             String small = "йцукенгшщзхъфывапролджэёячсмитьбю";
  85.             String big = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЁЯЧСМИТЬБЮ";
  86.             if(small.indexOf(ch) != -1 && !ck){
  87.                 code += 'a';
  88.                 ck = true;
  89.             }else if(big.indexOf(ch) != -1 && !ck){
  90.                 code += 'A';
  91.                 ck = true;
  92.             }else if(small.indexOf(ch) == -1 && big.indexOf(ch) == -1){
  93.                 code += ch;
  94.                 ck = false;
  95.             }
  96.         }
  97.         String temp = "";
  98.         boolean add = false;
  99.         int st = 0;
  100.         for(int i = 0 ; i < code.length() ; ++i){
  101.             char ch = code.charAt(i);
  102.             if(st == 0 && ch == '\''){
  103.                 add = false;
  104.                 temp += ch;
  105.                 st = 1;
  106.                 continue;
  107.             }
  108.             if(st == 1 && ch == '\''){
  109.                 st = 0;
  110.                 temp += ch;
  111.                 continue;
  112.             }
  113.             if(st == 1 && ch == '\\'){
  114.                 st = 2;
  115.                 continue;
  116.             }
  117.             if(st == 2){
  118.                 st = 1;
  119.                 continue;
  120.             }
  121.             if(st == 1) {
  122.                 if(add == false){
  123.                     temp += ch;
  124.                     add = true;
  125.                 }
  126.                 continue;
  127.             }
  128.             temp += ch;
  129.         }
  130.         return temp.toLowerCase();
  131.     }
  132.  
  133.     public ArrayList<Map<Tokens , String>> Tokenize() throws Exception{
  134.         File file = new File("C:\\Users\\максим\\IdeaProjects\\SysProgrammingMainAlgorithm\\Example1.txt");
  135.         String text = "";
  136.         try {
  137.             FileInputStream fis = new FileInputStream(file);
  138.             byte[] data = new byte[(int) file.length()];
  139.             fis.read(data);
  140.             fis.close();
  141.             text = new String(data, "UTF-8");
  142.         }catch(FileNotFoundException e){
  143.             System.out.print("File not found");
  144.         }catch(IOException e) {
  145.             e.printStackTrace();
  146.         }
  147.  
  148.         ArrayList<Map<Tokens , String>> ans = new ArrayList<>();
  149.         String code = Prepare(text);
  150.         //    System.out.println(code);
  151.         while(code.length() > 0 && (code.charAt(0) == ' ' || code.charAt(0) == '\n' || code.charAt(0) == '\t'))code = code.substring(1);
  152.         while(code.length() > 0){
  153.             Tokens tokType = Tokens.Comment;
  154.             int len = -1;
  155.             for(Tokens tok : regular.keySet()){
  156.                 Pattern trg = regular.get(tok);
  157.  
  158.                 String tmp = code;
  159.                 for(int j = code.length() ; j > 0 ; --j){
  160.                     Matcher tmat = trg.matcher(tmp);
  161.                     if(tmat.matches()){
  162.                         if(j > len || (j == len && priority.get(tok) > priority.get(tokType))){
  163.                             len = j;
  164.                             tokType = tok;
  165.                             break;
  166.                         }
  167.                     }
  168.                     tmp = tmp.substring(0 , tmp.length() - 1);
  169.                 }
  170.  
  171.  
  172.                 Matcher tmat = trg.matcher(code);
  173.  
  174.                 MatchResult res1 = tmat.toMatchResult();
  175.                 try{
  176.                     System.out.println(res1.end());
  177.                 }catch(java.lang.IllegalStateException e){}
  178.                 if(tmat.matches()){
  179.                     MatchResult res = tmat.toMatchResult();
  180.                     if(res.start() == 0){
  181.                         if(res.end() > len){
  182.                             len = res.end();
  183.                             tokType = tok;
  184.                         }
  185.                     }
  186.                 }
  187.             }
  188.             if(len <= 0){
  189.                 throw new Exception("Unknown lexeme " + code);
  190.             }
  191.  
  192.             if(tokType == Tokens.IDN){
  193.                 if(ans.size() > 0){
  194.                     for(Tokens tk : ans.get(ans.size() - 1).keySet()){
  195.                         if(tk == Tokens.Keyword && (ans.get(ans.size() - 1).get(tk).equals("procedure")
  196.                                                     || ans.get(ans.size() - 1).get(tk).equals("function"))){
  197.                             tokType = ans.get(ans.size() - 1).get(tk).equals("function") ? Tokens.FUNC_NAME : Tokens.PROC_NAME;
  198.                         }
  199.                     }
  200.                 }
  201.             }
  202.  
  203.             Map<Tokens , String> curans = new HashMap<>();
  204.             curans.put(tokType , code.substring(0 , len));
  205.             ans.add(curans);
  206.             //      System.out.println(code.substring(0 , len) + " " + tokType.toString());
  207.             code = code.substring(len);
  208.             code = code.trim();
  209.         }
  210.         return ans;
  211.     }
  212. }
  213.  
  214. public class SysProgrammingMainAlgorithm {
  215.  
  216.     public static void main(String[] args) {
  217.         byte [] readline=new byte [80];
  218.         boolean result;
  219.         String fileName;
  220.         MyLang testLang=null;
  221.         int codeAction, llk=1, textLen;
  222.         String [] menu= { "*1.  Прочитати граматику з файла  ",
  223.                 " 2.  Лабораторна робота. Клас будує студент",
  224.                 " 3.  Надрукувати граматику",
  225.                 "*4.  Побудувати списки терміналів та нетерміналів",
  226.                 "*5.  Пошук непродуктивних нетерміналів",
  227.                 "*6.  Пошук недосяжних нетерміналів",
  228.                 "*7.  Побудова списку епсілон-нетерміналів",
  229.                 " 8.  Друк списку епсілон-нетерміналів",
  230.                 " 9.  Пошук ліворекурсивних нетерміналів",
  231.                 " 10. Пошук різних ліворекурсивних виводів мінімальної довжини",
  232.                 " 11. Пошук праворекурсивних нетерміналів",
  233.                 " 12. Пошук різних праворекурсивних виводів мінімальної довжини",
  234.                 "*13. Побудувати множини FirstK(A), A-нетермінал",
  235.                 " 14. Вивести на термінал множини FirstK(A), A-нетермінал",
  236.                 "*15. Побудувати множини FollowK(A), A-нетермінал",
  237.                 " 16. Вивести на термінал множини FollowK(A), A-нетермінал",
  238.                 "*17. Побудувати множини FirstK(w) + FollowK(A) для правила А->w",
  239.                 " 18. Вивести на термінал FirstK(w) + FollowK(A) для всіх правил А->w",
  240.                 " 19. Вивести на термінал FirstK(w) + FollowK(A) для вибраних правил А->w",
  241.                 "*20. Перевірка сильної LL(1)-властивості",
  242.                 " 21. Побудова таблиці LL(1)-синтаксичного аналізатора",
  243.                 " 22. Синтаксичний аналізатор. Клас будує студент",
  244.                 "*23. Побудувати множини LocalK(A), A-нетермінал",
  245.                 " 24. Вивести на термінал множини LocalK(A), A-нетермінал",
  246.                 "*25. Перевірка LL(k)-властивості, k>1",
  247.                 " 26. Вихід з системи"
  248.         };
  249.         do  {
  250.             codeAction=0;
  251.             String upr;
  252.             for (String ss: menu) System.out.println(ss); // вивести меню
  253.             System.out.println("Введіть код дії або end:");
  254.             do {  // цикл перебору даних
  255.                 try {
  256.                     textLen=System.in.read(readline);
  257.                     upr = new String (readline,0,textLen, "ISO-8859-1");
  258.                     if (upr.trim().equals("end") ) return;
  259.                     codeAction=new Integer (upr.trim());
  260.                 }
  261.                 catch(Exception ee)
  262.                 { System.out.println ("Невірний код дії, повторіть: ");
  263.                     continue;
  264.                 }
  265.                 if (codeAction >=1  &&  codeAction<=menu.length ) {
  266.                     if (menu [codeAction-1].substring(0, 1).equals("+"))  {
  267.                         System.out.println("Елемент меню " +codeAction+" повторно виконати неможливо");
  268.                         continue ;
  269.                     }
  270.                     int itmp;
  271.                     for (itmp=0; itmp < codeAction-1; itmp++)
  272.                         if (menu[itmp].substring(0, 1).equals("*")) break;
  273.                     if (itmp !=codeAction-1) {
  274.                         System.out.println ("Виконайте попередні елементи меню, що позначені * : ");
  275.                         continue ;
  276.                     }
  277.                     if(codeAction == 2){
  278.                         for(itmp=0; itmp <= 7 ; ++itmp){
  279.                             if(menu[itmp].substring(0, 1).equals("*")) break;
  280.                         }
  281.                         if(itmp != 8){
  282.                             System.out.println ("Виконайте елементи меню до 8го, що позначені * : ");
  283.                             continue ;
  284.                         }
  285.                     }
  286.                     break;
  287.                 }
  288.                 else {
  289.                     System.out.println ("Невірний код дії, повторіть: ");
  290.                     continue ;
  291.                 }
  292.             }  while (true);
  293.             // перевірка на виконання усіх попередніх дій
  294.             result=false;
  295.             switch (codeAction) {
  296.                 case 1: //1. Прочитати граматику з файла",
  297.                     System.out.print ("Введіть ім'я файлу граматики:");
  298.                     try {
  299.                         textLen=System.in.read(readline);
  300.                         fileName = new String (readline,0,textLen, "ISO-8859-1");
  301.                         fileName = fileName.trim();
  302.                     }
  303.                     catch(Exception ee)
  304.                     { System.out.println ("Системна помилка: "+ee.toString());
  305.                         return;
  306.                     }
  307.                     System.out.print ("Введіть значення параметра k : ");
  308.                     try {
  309.                         textLen=System.in.read(readline);
  310.                         String llkText = new String (readline,0,textLen, "ISO-8859-1");
  311.                         llkText = llkText.trim();
  312.                         llk=Integer.parseInt(llkText);
  313.                     }
  314.                     catch(Exception ee)
  315.                     { System.out.println ("Системна помилка: "+ee.toString());
  316.                         return;
  317.                     }
  318.                     testLang = new MyLang (fileName,llk);
  319.                     if (!testLang.isCreate()) break;  //не створили об'єкт
  320.                     System.out.println ("Граматика прочитана успішно");
  321.                     result=true;
  322.                     for (int jj=0;  jj<menu.length; jj++) {
  323.                         if (menu [jj].substring(0, 1).equals(" ")) continue;
  324.                         menu [jj]=menu [jj].replace(menu [jj].charAt(0), '*');
  325.                     }
  326.                     break;
  327.                 case 2: //2. Лабораторна робота студента
  328.                     boolean ck = false;
  329.                     int[] term = testLang.getTerminals();
  330.                     int[] nonterm = testLang.getNonTerminals();
  331.  
  332.                     Map<Integer , Integer> notrm = new HashMap();
  333.                     Map<Integer , Integer> trm = new HashMap();
  334.  
  335.                     for(int i = 0 ; i < term.length ; ++i){
  336.                         trm.put(term[i] , i);
  337.                     }
  338.                     for(int i = 0 ; i < nonterm.length ; ++i){
  339.                         notrm.put(nonterm[i] , i);
  340.                     }
  341.  
  342.                     LlkContext[] llkTrmContext = testLang.getLlkTrmContext();
  343.                     LlkContext[] res_cur = new LlkContext[nonterm.length];
  344.  
  345.                     for (int i = 0; i < nonterm.length; ++i) {
  346.                         res_cur[i] = new LlkContext();
  347.                     }
  348.  
  349.                     for(Node node : testLang.getLanguarge()){
  350.                         int[] rool = node.getRoole();
  351.                         int left = notrm.get(rool[0]);
  352.                         if(rool.length == 1){
  353.                             res_cur[left].addWord(new int[0]);
  354.                         }
  355.                     }
  356.  
  357.                     ck = true;
  358.  
  359.                     while(ck){
  360.                         ck = false;
  361.  
  362.                         for(Node node : testLang.getLanguarge()) {
  363.                             int[] rool = node.getRoole();
  364.                             int left = notrm.get(rool[0]);
  365.                             int last = 1;
  366.                             if(rool.length == 1)continue;
  367.  
  368.                             Queue<ArrayList<Integer>> q = new LinkedList<>();
  369.  
  370.                             ArrayList<Integer> temp = new ArrayList<>();
  371.                             temp.add(-1);
  372.  
  373.                             q.add(temp);
  374.  
  375.                             ArrayList<ArrayList<Integer>> done = new ArrayList<>();
  376.  
  377.                             for(; last < rool.length ; ++last){
  378.                                 int cur = rool[last] > 0 ? trm.get(rool[last]) : notrm.get(rool[last]);
  379.                                 LlkContext tmp = rool[last] > 0 ? llkTrmContext[cur] : res_cur[cur];
  380.                                 if(rool[last] < 0 && res_cur[cur].calcWords() == 0)break;
  381.                                 boolean cont = false;
  382.                                 while(!q.isEmpty()){
  383.                                     ArrayList<Integer> word = (ArrayList<Integer>)q.peek().clone();
  384.                                     if(word.get(0) == last){
  385.                                         cont = true;
  386.                                         break;
  387.                                     }
  388.                                     q.poll();
  389.                                     for(int i = 0 ; i < tmp.calcWords() ; ++i){
  390.                                         ArrayList<Integer> word1 = (ArrayList<Integer>)word.clone();
  391.                                         word1.set(0 , last);
  392.                                         for(int j = 0 ; j < tmp.getWord(i).length ; ++j){
  393.                                             word1.add(tmp.getWord(i)[j]);
  394.                                         }
  395.                                         if(word1.size() - 1 >= testLang.getLlkConst()){
  396.                                             done.add(word1);
  397.                                         }else{
  398.                                             q.add(word1);
  399.                                         }
  400.                                     }
  401.                                 }
  402.                                 if(cont)continue;
  403.                                 break;
  404.                             }
  405.  
  406.                             while(last == rool.length && !q.isEmpty()){
  407.                                 ArrayList<Integer> word = (ArrayList<Integer>)q.peek().clone();
  408.                                 q.poll();
  409.                                 done.add(word);
  410.                             }
  411.  
  412.                             for(int i = 0 ; i < done.size() ; ++i){
  413.                                 int word[] = new int[Math.min(done.get(i).size() - 1 , testLang.getLlkConst())];
  414.                                 for(int j = 0 ; j < word.length ; ++j){
  415.                                     word[j] = done.get(i).get(j + 1);
  416.                                 }
  417.                                 ck |= (res_cur[left].addWord(word));
  418.                             }
  419.                         }
  420.                     }
  421.  
  422.                     testLang.setFirstK(res_cur);
  423.                     testLang.printFirstkContext();
  424.  
  425.                     break;
  426.                 case 3:  // Надрукувати граматику
  427.                     testLang.printGramma();
  428.                     break;
  429.                 case 4:  // надрукувати список терміналів та нетерміналів
  430.                     testLang.printTerminals();
  431.                     testLang.printNonterminals();
  432.                     result=true;
  433.                     break;
  434.                 case 5: // вивести непродуктивні правила
  435.                     result=testLang.createNonProdRools();
  436.                     break;
  437.                 case 6: // недосяжні нетермінали
  438.                     result=testLang.createNonDosNeterminals();
  439.                     break;
  440.                 case 7:  //Побудова списку епсілон-нетерміналів
  441.                     int [] epsilon=testLang.createEpsilonNonterminals ();
  442.                     testLang.setEpsilonNonterminals (epsilon);
  443.                     result=true;
  444.                     break;
  445.                 case 8: //Друк списку епсілон-нетерміналів
  446.                     testLang.printEpsilonNonterminals();
  447.                     break;
  448.                 case 9:    //Пошук ліворекурсивних нетерміналів"
  449.                     testLang.leftRecursNonnerminal();
  450.                     break;
  451.                 case 10:  //Пошук різних ліворекурсивних виводів мінімальної довжини"
  452.                     testLang.leftRecusionTrace();
  453.                     break;
  454.                 case 11:  //Пошук праворекурсивних нетерміналів"
  455.                     testLang.rightRecursNonnerminal();
  456.                     break;
  457.                 case 12:  //Пошук різних праворекурсивних виводів мінімальної довжини"
  458.                     testLang.rigthRecusionTrace();
  459.                     break;
  460.                 case 13:  //Побудувати множини FirstK
  461.                     LlkContext [] firstContext = testLang.firstK();
  462.                     testLang.setFirstK(firstContext);
  463.                     result=true;
  464.                     break;
  465.                 case 14:  //Друк множини FirstK
  466.                     testLang.printFirstkContext ( );
  467.                     break;
  468.                 case 15:  //Побудувати множини FollowK
  469.                     LlkContext [] followContext = testLang.followK();
  470.                     testLang.setFollowK(followContext);
  471.                     result=true;
  472.                     break;
  473.                 case 16:  //Друк множини FollowK
  474.                     testLang.printFollowkContext ( );
  475.                     break;
  476.                 case 17:  //Побудувати множини FirstK(w) + FollowK(A) для правила А->w
  477.                     testLang.firstFollowK ( );
  478.                     result=true;
  479.                     break;
  480.                 case 18:  //Друк множини FirstK(w) + FollowK(A) для правила А->w
  481.                     testLang.printFirstFollowK( );
  482.                     break;
  483.                 case 19:  //Друк множини FirstK(w) + FollowK(A) для вибраних правил А->w
  484.                     testLang.printFirstFollowForRoole();
  485.                     break;
  486.                 case 20:  //Перевірка сильної LL(k)-властивості",
  487.                     result=testLang. strongLlkCondition () ;
  488.                     break;
  489.                 case 21:  //Побудова таблиці LL(1)-синтаксичного аналізатора
  490.                     int [][] uprTable=testLang.createUprTable ();
  491.                     testLang.setUprTable(uprTable);
  492.                     break;
  493.                 case 22: // PASCAL
  494.                     String path;
  495.                     System.out.println("Введiть назву вхiдного файлу: ");
  496.                     try{
  497.                         textLen=System.in.read(readline);
  498.                         String codepath = new String (readline,0,textLen, "ISO-8859-1");
  499.                         LexPascal lex = new LexPascal("Example1.txt");
  500.                         ArrayList<Map<Tokens , String>> tokens = lex.Tokenize();
  501.                         for(Map<Tokens , String> mp : tokens){
  502.                             for(Tokens tok : mp.keySet()){
  503.                          //       System.out.println(mp.get(tok) + " " + tok.toString());
  504.                             }
  505.                         }
  506.  
  507.                         Stack<Integer> st = new Stack<>();
  508.                         st.push(testLang.getAxioma());
  509.  
  510.                         int[][] table = testLang.getUprTable();
  511.  
  512.                         //for(Map<Tokens , String> mp : tokens){
  513.                         for(int kk = 0 ; kk < tokens.size() ; ++kk , kk = Math.max(kk , 0)){
  514.                             //System.out.println(st);
  515.                             Map<Tokens , String> mp = tokens.get(kk);
  516.                             if(st.isEmpty()){
  517.                                 System.out.println("Error, stack is empty! ");
  518.                             }
  519.                             int top = st.peek();
  520.  
  521.                             if(top < 0){//top is non terminal
  522.                                 int cur = -1;
  523.                                 int nt[] = testLang.getNonTerminals();
  524.  
  525.                                 for(int i = 0 ; i < nt.length ; ++i){
  526.                                     if(top == nt[i]){
  527.                                         cur = i;
  528.                                         break;
  529.                                     }
  530.                                 }
  531.  
  532.                                 //check that cur != -1
  533.  
  534.                                 int el = -1;
  535.                                 int tr[] = testLang.getTerminals();
  536.  
  537.                                 for(int i = 0 ; i < tr.length ; ++i){
  538.                                     String terminal = testLang.getLexemaText(tr[i]);
  539.                                     for(Tokens tk : mp.keySet()){
  540.                                         if(terminal.equals(mp.get(tk)) || terminal.equals(tk.toString())){
  541.                                             el = i;
  542.                                             break;
  543.                                         }
  544.                                     }
  545.                                 }
  546.  
  547.                                 //check that el != -1
  548.  
  549.  
  550.                                 int next = table[cur][el];
  551.  
  552.                             //    System.out.println(table[cur][el] + " " + table[el][cur]);
  553.  
  554.                                 LinkedList<Node> lang = testLang.getLanguarge();
  555.                                 int rule[] = lang.get(Math.max(next - 1 , 0)).getRoole();
  556.  
  557.                              //   for(int r : rule){
  558.                              //       System.out.print(r + " ");
  559.                              //    }
  560.                              //   System.out.println();
  561.  
  562.                                 st.pop();
  563.  
  564.                                 for(int i = rule.length - 1; i >= 1 ; --i) {
  565.                                     st.push(rule[i]);
  566.                                 }
  567.  
  568.                                 --kk;
  569.                             }else{//top is terminal
  570.                                 String terminal = testLang.getLexemaText(top);
  571.  
  572.                                 boolean eq = false;
  573.  
  574.                                 for(Tokens tk : mp.keySet()){
  575.                                     if(terminal.equals(mp.get(tk)) || terminal.equals(tk.toString())){
  576.                                         eq = true;
  577.                                     }
  578.                                 }
  579.  
  580.                                 if(eq){
  581.                                     st.pop();
  582.                                     continue;
  583.                                 }else{
  584.                                     System.out.println("Error: " + mp);
  585.                                     break;
  586.                                 }
  587.  
  588.  
  589.                             }
  590.                         }
  591.  
  592.                         System.out.print("OK\n");
  593.                         System.out.println(st);
  594.  
  595.  
  596.                     }catch (java.io.IOException e ){}
  597.                     catch (java.lang.Exception e){e.printStackTrace();}
  598.  
  599.  
  600.  
  601.  
  602.                     break;
  603.  
  604.                 case 23: // 23. Побудувати множини LocalK(A), A-нетермінал
  605.                     LinkedList <LlkContext> [] Localk=testLang.createLocalK();
  606.                     testLang.setLocalkContext(Localk);
  607.                     result=true;
  608.                     break;
  609.                 case 24: // 24. Вивести на термінал множини LocalK(A), A-нетермінал
  610.                     testLang.printLocalk();
  611.                     break;
  612.                 case 25: // 25. Перевірка LL(k)-властивості, k>1
  613.                     result= testLang.llkCondition();
  614.                     break;
  615.                 case 26: // rtrtrtr
  616.                     return;
  617.                 case 27:
  618.                     break;
  619.             }  // кінець switch
  620.             // блокуємо елемент обробки
  621.             if (result) // функція виконана успішно
  622.                 if (menu [codeAction-1].substring(0, 1).equals("*"))
  623.                     menu [codeAction-1]=menu [codeAction-1].replace('*', '+') ;
  624.         } while (true);  //глобальний цикл  обробки
  625.  
  626.     }  // кінець main
  627.  
  628.     static void tesrReadWrite(String fname)
  629.     {  String readline;
  630.         BufferedReader s;
  631.         BufferedWriter bw;
  632.         try {
  633.             s = new BufferedReader(new FileReader(fname));
  634.             bw = new BufferedWriter (new FileWriter("c:\\rez.txt"));
  635.             // s=new FileInputStream (fname);
  636.             //s=new FileInputStream ("C:\\Eclipse\\C1.txt");
  637.             //s=new FileInputStream ("C:\\test1.txt");
  638.             while ( s.ready() ) {
  639.                 readline= s.readLine();
  640.                 System.out.println(readline);
  641.                 //System.out.println("Read Line");
  642.                 //bw.write(readline, 0,readline.length() );
  643.                 //bw.write((int)'\r'); bw.flush();
  644.                 //System.out.println("Print Line");
  645.             }
  646.  
  647.             //bw.close();
  648.         }
  649.         catch(Exception ee)
  650.         {
  651.             System.out.print("File: " +fname + "not found\n");
  652.             //return;
  653.         }
  654.     }
  655. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement