Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. def createLR0DFA()
  2. l = Set.new()
  3. l.add(Compiler_LR::LR0Item.new("S'", [@startProd], 0))
  4. l = computeClosure(l)
  5. dfa = Compiler_DFA::DFA.new()
  6. dfa.addState(l)
  7. dfa.setStartState(l)
  8. to_do = [l]
  9. while not to_do.empty?()
  10. q = to_do.pop()
  11. a = {}
  12. q.each{|item|
  13. if item.dpos < item.rhs.length
  14. sym = item.rhs[item.dpos]
  15. if sym != "" #No lambda transitions here
  16. item2 = Compiler_LR::LR0Item.new(item.lhs, item.rhs, item.dpos + 1)
  17. if not a.has_key?(sym)
  18. a[sym] = Set.new()
  19. end #End if
  20. a[sym].add(item2)
  21. end #End if
  22. end #End if
  23. }
  24. a.each(){ |k,v|
  25. v = computeClosure(v)
  26. if not dfa.hasState(v)
  27. to_do.push(v)
  28. dfa.addState(v)
  29. end
  30. dfa.addTransition(q, k, v)
  31. }
  32. end #End while
  33. return dfa
  34. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement