From: Logan Capaldo Date: 2006-05-08T05:07:45+09:00 Subject: Re: [QUIZ] Bracket Packing (#78) Here's my solution, it's pretty bad as it doesn't fix anything, but I was looking for an excuse to play with racc and I just did it in the last 15-20mins or so: % cat brackets.y class BracketParser rule pack_string: packing curly: '{' pack_expr '}' square: '[' pack_expr ']' round: '(' pack_expr ')' packing: curly | square | round bs: 'B' | 'B' bs packing_list: packing | packing packing_list pack_expr: bs | packing_list brackets.tab.rb is pretty massive so I'm omitting it, anyone without racc who really wants to see it can email me off list % cat parse_brackets.rb require 'brackets.tab' class BracketParser def parse_str(str) list_of_tokens = str.split(//).map { |x| [x, x] } list_of_tokens << [false, false] yyparse(list_of_tokens, :each) end end parser = BracketParser.new ARGF.each do |line| line = line.chomp begin parser.parse_str(line) puts line rescue Racc::ParseError exit(1) end end