Guest User

Untitled

a guest
Jun 24th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.68 KB | None | 0 0
  1. module Rapidito
  2. class Tokenizer
  3.  
  4. def initialize( *delimiters )
  5. @regexp = Regexp.union( *delimiters + [/$/] )
  6. end
  7.  
  8. attr_accessor :source
  9.  
  10. def has_next?
  11. ! @source.empty?
  12. end
  13.  
  14. def next_token
  15. p = (@source =~ @regexp)
  16. if p == 0 #delimiter
  17. token = nil
  18. @source.sub!( @regexp ) { |match| token=match.to_sym; "" }
  19. token
  20. else #text
  21. token = @source[0,p]
  22. @source = @source[p,@source.length]
  23. token
  24. end
  25. end
  26.  
  27. def all_tokens
  28. tokens = []
  29. while has_next?
  30. tokens << next_token
  31. end
  32. tokens
  33. end
  34.  
  35. end
  36. end
Add Comment
Please, Sign In to add comment