osipyonok

SP lab1 s2 short

Mar 8th, 2017
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.12 KB | None | 0 0
  1. int n = testLang.getNonTerminals().length;
  2. Set<Integer> eps = new HashSet(Arrays.asList(testLang.getEpsilonNonterminals()));
  3. Map<Integer , Integer> ntrm = new HashMap();
  4. for(int i = 0 ; i < n ; ++i){
  5.     ntrm.put(testLang.getNonTerminals()[i], i);
  6. }
  7.  
  8. int[][] w = new int [n][n];
  9.                    
  10. for(JavaTeacherLib.Node node : testLang.getLanguarge()){
  11.     int[] rule = node.getRoole();
  12.     int i = ntrm.get(rule[0]);
  13.     for(int j = rule.length - 1 ; j > 0 ; --j){
  14.         boolean is_eps = eps.contains(rule[j]);
  15.         if(ntrm.containsKey(rule[j])){
  16.             int cur = ntrm.get(rule[j]);
  17.             w[i][cur] = 1;
  18.             if(is_eps)continue;
  19.         }
  20.         break;
  21.     }
  22. }
  23.                    
  24. for(int k = 0 ; k < n ; ++k)
  25.     for(int i = 0 ; i < n ; ++i)
  26.         for(int j = 0 ; j < n ; ++j)
  27.             if(w[i][k] + w[k][j] == 2)w[i][j] = 1;
  28.  
  29. boolean ck = false;
  30. for(int i = 0 ; i < n ; ++i){
  31.     if(w[i][i] == 1){
  32.         System.out.println(testLang.getLexemaText(testLang.getNonTerminals()[i]) + " - праворекурсивний нетермiнал");
  33.         ck = true;
  34.     }
  35. }
  36. if(!ck)System.out.println("В граматицi вiдсутнi праворекурсивнi нетермiнали");
Advertisement
Add Comment
Please, Sign In to add comment