# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' require 'strscan' module Mtree class Parser < Racc::Parser module_eval(<<'...end parser.y/module_eval...', 'parser.y', 33) attr_accessor :yydebug attr_accessor :defaults attr_reader :specifications def initialize super @defaults = {} @path_components = [] @specifications = nil end def parse(text) s = StringScanner.new(text) tokens = [] until s.eos? do case when s.scan(/#.*/); # Ignore comment when s.scan(/[[:blank:]]+/); # Ignore blanks when s.scan(/\n/); tokens << [:LINE_BREAK, s.matched] when s.scan(/\.\./); tokens << [:DOT_DOT, s.matched] when s.scan(/\/set\b/); tokens << [:SET, s.matched] when s.scan(/gid=([[:digit:]]+)/); tokens << [:GID, s[1]] when s.scan(/gname=([[:alnum:]]+)/); tokens << [:GNAME, s[1]] when s.scan(/mode=([[:digit:]]+)/); tokens << [:MODE, s[1]] when s.scan(/nochange\b/); tokens << [:NOCHANGE, s[1]] when s.scan(/tags=([[:print:]]+)\b/); tokens << [:TAGS, s[1]] when s.scan(/type=(dir|file)/); tokens << [:TYPE, s[1]] when s.scan(/uid=([[:digit:]]+)/); tokens << [:UID, s[1]] when s.scan(/uname=([[:alnum:]]+)/); tokens << [:UNAME, s[1]] when s.scan(/[^[:space:]]+/); tokens << [:IDENTIFIER, s.matched] else raise "No match: #{s.rest}" end end define_singleton_method(:next_token) { tokens.shift } tokens << [false, false] # tokens.each do |t| # puts t.inspect # end do_parse end def parse_file(filename) parse(File.read(filename)) end ...end parser.y/module_eval... ##### State transition tables begin ### racc_action_table = [ 14, 12, 8, 16, 17, 18, 19, 20, 21, 22, 23, 24, 13, nil, 16, 17, 18, 19, 20, 21, 22, 23, 4, 7, 5, 6, 4, 7, 5, 6 ] racc_action_check = [ 10, 6, 1, 10, 10, 10, 10, 10, 10, 10, 10, 11, 8, nil, 11, 11, 11, 11, 11, 11, 11, 11, 2, 2, 2, 2, 0, 0, 0, 0 ] racc_action_pointer = [ 24, 2, 20, nil, nil, nil, -2, nil, 12, nil, -3, 8, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil ] racc_action_default = [ -2, -19, -1, -4, -10, -10, -19, -8, -19, -3, -19, -19, -7, 25, -5, -9, -11, -12, -13, -14, -15, -16, -17, -18, -6 ] racc_goto_table = [ 3, 1, 9, 10, 11, 2 ] racc_goto_check = [ 3, 1, 3, 4, 4, 2 ] racc_goto_pointer = [ nil, 1, 5, 0, -1, nil ] racc_goto_default = [ nil, nil, nil, nil, nil, 15 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 15, :_reduce_1, 0, 15, :_reduce_none, 2, 16, :_reduce_none, 1, 16, :_reduce_none, 3, 17, :_reduce_5, 3, 17, :_reduce_6, 2, 17, :_reduce_7, 1, 17, :_reduce_none, 2, 18, :_reduce_9, 0, 18, :_reduce_10, 1, 19, :_reduce_11, 1, 19, :_reduce_12, 1, 19, :_reduce_13, 1, 19, :_reduce_14, 1, 19, :_reduce_15, 1, 19, :_reduce_16, 1, 19, :_reduce_17, 1, 19, :_reduce_18 ] racc_reduce_n = 19 racc_shift_n = 25 racc_token_table = { false => 0, :error => 1, :SET => 2, :LINE_BREAK => 3, :IDENTIFIER => 4, :DOT_DOT => 5, :GID => 6, :GNAME => 7, :MODE => 8, :NOCHANGE => 9, :TAGS => 10, :TYPE => 11, :UID => 12, :UNAME => 13 } racc_nt_base = 14 racc_use_result_var = true Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "SET", "LINE_BREAK", "IDENTIFIER", "DOT_DOT", "GID", "GNAME", "MODE", "NOCHANGE", "TAGS", "TYPE", "UID", "UNAME", "$start", "target", "expressions", "expression", "attributes", "attribute" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted module_eval(<<'.,.,', 'parser.y', 2) def _reduce_1(val, _values, result) if @path_components.any? then raise 'Malformed specifications' end result end .,., # reduce 2 omitted # reduce 3 omitted # reduce 4 omitted module_eval(<<'.,.,', 'parser.y', 8) def _reduce_5(val, _values, result) @defaults.merge!(val[1]) result end .,., module_eval(<<'.,.,', 'parser.y', 9) def _reduce_6(val, _values, result) spec = Mtree::FileSpecification.new(val[0], @defaults.merge(val[1])); if @specifications.nil? then @specifications = spec end; if @path_components.last then @path_components.last << spec end; @path_components.push(spec) result end .,., module_eval(<<'.,.,', 'parser.y', 10) def _reduce_7(val, _values, result) @path_components.pop result end .,., # reduce 8 omitted module_eval(<<'.,.,', 'parser.y', 13) def _reduce_9(val, _values, result) result = val[0].merge(val[1]) result end .,., module_eval(<<'.,.,', 'parser.y', 14) def _reduce_10(val, _values, result) result = {} result end .,., module_eval(<<'.,.,', 'parser.y', 16) def _reduce_11(val, _values, result) result = { gid: Integer(val[0]) } result end .,., module_eval(<<'.,.,', 'parser.y', 17) def _reduce_12(val, _values, result) result = { gname: val[0] } result end .,., module_eval(<<'.,.,', 'parser.y', 18) def _reduce_13(val, _values, result) result = { mode: Integer(val[0], 8) } result end .,., module_eval(<<'.,.,', 'parser.y', 19) def _reduce_14(val, _values, result) result = { nochange: true } result end .,., module_eval(<<'.,.,', 'parser.y', 20) def _reduce_15(val, _values, result) result = {} result end .,., module_eval(<<'.,.,', 'parser.y', 21) def _reduce_16(val, _values, result) result = { type: val[0] } result end .,., module_eval(<<'.,.,', 'parser.y', 22) def _reduce_17(val, _values, result) result = { uid: Integer(val[0]) } result end .,., module_eval(<<'.,.,', 'parser.y', 23) def _reduce_18(val, _values, result) result = { uname: val[0] } result end .,., def _reduce_none(val, _values, result) val[0] end end # class Parser end # module Mtree