Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.79 KB | None | 0 0
  1. fun getNext(production: Production): ArrayList<String>{
  2.         val s = getS()
  3.         val result = ArrayList<String>()
  4.         if (production.NtId == s.NtId)
  5.             result.add(EOF)
  6.         val productions = getAllProductionsThatContains(production.NtId!!)
  7.         for(pro in productions){
  8.             for(rhs in pro.RhsList){
  9.                 if(rhs.ProdPartList == null)
  10.                     continue
  11.                 val betas = getBetas(rhs.ProdPartList!!, production.NtId!!)
  12.                 for(beta in betas){
  13.                     if(beta == EPSILON){
  14.                         if(pro.NtId != production.NtId){
  15.                             val nextA = getNext(pro)
  16.                             nextA.removeIf { it -> it == EPSILON }
  17.                             result.addAllNonExistentElements(nextA)
  18.                         }
  19.                     }else{
  20.                         if(isTerminalType(beta)){
  21.                             result.addNonExistentElement(beta)
  22.                         }else{
  23.                             val firsBeta = getFirst(getProductionStatement(beta))
  24.                             if(firsBeta.contains(EPSILON)){
  25.                                 if (pro.NtId != production.NtId!!){
  26.                                     val nextA = getNext(pro)
  27.                                     firsBeta.addAllNonExistentElements(nextA)
  28.                                     firsBeta.removeIf { it -> it == EPSILON }
  29.                                     result.addAllNonExistentElements(firsBeta)
  30.                                 }
  31.                             }else{
  32.                                 result.addAllNonExistentElements(firsBeta)
  33.                             }
  34.                         }
  35.                     }
  36.                 }
  37.             }
  38.         }
  39.         return result
  40.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement