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 / array2.y < prev    next >
Text File  |  2001-04-07  |  1KB  |  80 lines

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