Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fun getNext(production: Production): ArrayList<String>{
- val s = getS()
- val result = ArrayList<String>()
- if (production.NtId == s.NtId)
- result.add(EOF)
- val productions = getAllProductionsThatContains(production.NtId!!)
- for(pro in productions){
- for(rhs in pro.RhsList){
- if(rhs.ProdPartList == null)
- continue
- val betas = getBetas(rhs.ProdPartList!!, production.NtId!!)
- for(beta in betas){
- if(beta == EPSILON){
- if(pro.NtId != production.NtId){
- val nextA = getNext(pro)
- nextA.removeIf { it -> it == EPSILON }
- result.addAllNonExistentElements(nextA)
- }
- }else{
- if(isTerminalType(beta)){
- result.addNonExistentElement(beta)
- }else{
- val firsBeta = getFirst(getProductionStatement(beta))
- if(firsBeta.contains(EPSILON)){
- if (pro.NtId != production.NtId!!){
- val nextA = getNext(pro)
- firsBeta.addAllNonExistentElements(nextA)
- firsBeta.removeIf { it -> it == EPSILON }
- result.addAllNonExistentElements(firsBeta)
- }
- }else{
- result.addAllNonExistentElements(firsBeta)
- }
- }
- }
- }
- }
- }
- return result
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement