Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int n = testLang.getNonTerminals().length;
- Set<Integer> eps = new HashSet(Arrays.asList(testLang.getEpsilonNonterminals()));
- Map<Integer , Integer> ntrm = new HashMap();
- for(int i = 0 ; i < n ; ++i){
- ntrm.put(testLang.getNonTerminals()[i], i);
- }
- int[][] w = new int [n][n];
- for(JavaTeacherLib.Node node : testLang.getLanguarge()){
- int[] rule = node.getRoole();
- int i = ntrm.get(rule[0]);
- for(int j = rule.length - 1 ; j > 0 ; --j){
- boolean is_eps = eps.contains(rule[j]);
- if(ntrm.containsKey(rule[j])){
- int cur = ntrm.get(rule[j]);
- w[i][cur] = 1;
- if(is_eps)continue;
- }
- break;
- }
- }
- for(int k = 0 ; k < n ; ++k)
- for(int i = 0 ; i < n ; ++i)
- for(int j = 0 ; j < n ; ++j)
- if(w[i][k] + w[k][j] == 2)w[i][j] = 1;
- boolean ck = false;
- for(int i = 0 ; i < n ; ++i){
- if(w[i][i] == 1){
- System.out.println(testLang.getLexemaText(testLang.getNonTerminals()[i]) + " - праворекурсивний нетермiнал");
- ck = true;
- }
- }
- if(!ck)System.out.println("В граматицi вiдсутнi праворекурсивнi нетермiнали");
Advertisement
Add Comment
Please, Sign In to add comment