home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ruby164.zip / rbemx164.zip / ruby / share / doc / racc-1.3.9 / sample / array.y next >
Text File  |  2001-04-07  |  973b  |  71 lines

  1. #
  2. # convert Array like string into (Ruby's) Array.
  3. #
  4.  
  5. class ArrayParser
  6.  
  7. rule
  8.  
  9. array   : '[' contents ']'
  10.             {
  11.               result = val[1]
  12.             }
  13.         | '[' ']'
  14.             {
  15.               result = []
  16.             }
  17.  
  18. contents: ITEM
  19.             {
  20.               result = val
  21.             }
  22.         | contents ',' ITEM
  23.             {
  24.               result.push val[2]
  25.             }
  26. end
  27.  
  28. ---- inner
  29.  
  30.   def parse( str )
  31.     str.strip!
  32.  
  33.     @q = []
  34.     until str.empty? do
  35.       case str
  36.       when /\A\s+/
  37.         str = $'
  38.       when /\A\w+/
  39.         @q.push [:ITEM, $&]
  40.         str = $'
  41.       else
  42.         c = str[0,1]
  43.         @q.push [c, c]
  44.         str = str[1..-1]
  45.       end
  46.     end
  47.     @q.push [false, '$']   # optional from 1.3.7
  48.  
  49.     do_parse
  50.   end
  51.  
  52.   def next_token
  53.     @q.shift
  54.   end
  55.  
  56. ---- footer
  57.  
  58. if $0 == __FILE__ then
  59.   src = <<EOS
  60. [
  61.   a, b, c,
  62.   d,
  63.   e ]
  64. EOS
  65.   puts 'parsing:'
  66.   print src
  67.   puts
  68.   puts 'result:'
  69.   p ArrayParser.new.parse( src )
  70. end
  71.