# begin: ragel =begin class << self attr_accessor :_bel_trans_keys private :_bel_trans_keys, :_bel_trans_keys= end self._bel_trans_keys = [ 0, 0, 9, 122, 9, 122, 34, 92, 10, 10, 92, 92, 10, 122, 10, 122, 48, 122, 10, 122, 34, 34, 34, 92, 10, 10, 92, 92, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_bel_key_spans private :_bel_key_spans, :_bel_key_spans= end self._bel_key_spans = [ 0, 114, 114, 59, 1, 1, 113, 113, 75, 113, 1, 59, 1, 1, 0, 0, 0 ] class << self attr_accessor :_bel_index_offsets private :_bel_index_offsets, :_bel_index_offsets= end self._bel_index_offsets = [ 0, 0, 115, 230, 290, 292, 294, 408, 522, 598, 712, 714, 774, 776, 778, 779, 780 ] class << self attr_accessor :_bel_indicies private :_bel_indicies, :_bel_indicies= end self._bel_indicies = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 10, 9, 8, 6, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 11, 13, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 14, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 17, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16, 16, 16, 16, 19, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16, 21, 20, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24, 22, 25, 20, 24, 22, 26, 26, 26, 0 ] class << self attr_accessor :_bel_trans_targs private :_bel_trans_targs, :_bel_trans_targs= end self._bel_trans_targs = [ 0, 2, 3, 7, 0, 6, 3, 4, 5, 0, 14, 0, 14, 6, 7, 2, 0, 9, 15, 9, 0, 11, 11, 12, 13, 16, 0 ] class << self attr_accessor :_bel_trans_actions private :_bel_trans_actions, :_bel_trans_actions= end self._bel_trans_actions = [ 1, 0, 2, 3, 4, 3, 6, 6, 6, 5, 7, 8, 9, 10, 10, 11, 12, 3, 13, 10, 14, 2, 6, 6, 6, 15, 0 ] class << self attr_accessor :_bel_eof_actions private :_bel_eof_actions, :_bel_eof_actions= end self._bel_eof_actions = [ 0, 1, 4, 5, 5, 5, 8, 8, 12, 12, 14, 14, 14, 14, 0, 0, 0 ] class << self attr_accessor :bel_start end self.bel_start = 1; class << self attr_accessor :bel_first_final end self.bel_first_final = 14; class << self attr_accessor :bel_error end self.bel_error = 0; class << self attr_accessor :bel_en_ident end self.bel_en_ident = 8; class << self attr_accessor :bel_en_string end self.bel_en_string = 10; class << self attr_accessor :bel_en_bel_parameter end self.bel_en_bel_parameter = 1; begin p ||= 0 pe ||= data.length cs = bel_start end begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _bel_index_offsets[cs] _slen = _bel_key_spans[cs] _wide = data[p].ord _trans = if ( _slen > 0 && _bel_trans_keys[_keys] <= _wide && _wide <= _bel_trans_keys[_keys + 1] ) then _bel_indicies[ _inds + _wide - _bel_trans_keys[_keys] ] else _bel_indicies[ _inds + _slen ] end cs = _bel_trans_targs[_trans] if _bel_trans_actions[_trans] != 0 case _bel_trans_actions[_trans] when 10 then begin (@buffers[:ident] ||= []) << data[p].ord end when 8 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 6 then begin (@buffers[:string] ||= []) << data[p].ord end when 5 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 3 then begin @buffers[:ident] = [] end begin (@buffers[:ident] ||= []) << data[p].ord end when 13 then begin @buffers[:ident] = identifier(utf8_string(@buffers[:ident])) end begin yield @buffers[:ident] end when 11 then begin @buffers[:ident] = identifier(utf8_string(@buffers[:ident])) end begin @buffers[:parameter] = parameter(prefix(@buffers[:ident])) end when 12 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:ident] ||= [] yield @buffers[:ident] end when 1 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 2 then begin @buffers[:string] = [] end begin (@buffers[:string] ||= []) << data[p].ord end when 15 then begin @buffers[:string] = string(utf8_string(@buffers[:string])) end begin yield @buffers[:string] end when 4 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 14 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin @buffers[:string] ||= [] yield @buffers[:string] end when 9 then begin @buffers[:ident] = identifier(utf8_string(@buffers[:ident])) end begin @buffers[:parameter] ||= parameter(prefix(nil)) @buffers[:parameter] = @buffers[:parameter] << value(@buffers[:ident]) end begin yield @buffers[:parameter] end when 7 then begin @buffers[:string] = string(utf8_string(@buffers[:string])) end begin @buffers[:parameter] ||= parameter(prefix(nil)) @buffers[:parameter] = @buffers[:parameter] << value(@buffers[:string]) end begin yield @buffers[:parameter] end end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _bel_eof_actions[cs] when 8 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 5 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 12 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:ident] ||= [] yield @buffers[:ident] end when 1 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 4 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 14 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin @buffers[:string] ||= [] yield @buffers[:string] end end end end if _goto_level <= _out break end end end class << self attr_accessor :_bel_trans_keys private :_bel_trans_keys, :_bel_trans_keys= end self._bel_trans_keys = [ 0, 0, 9, 122, 9, 122, 34, 92, 10, 10, 92, 92, 10, 122, 10, 122, 48, 122, 10, 122, 34, 34, 34, 92, 10, 10, 92, 92, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_bel_key_spans private :_bel_key_spans, :_bel_key_spans= end self._bel_key_spans = [ 0, 114, 114, 59, 1, 1, 113, 113, 75, 113, 1, 59, 1, 1, 0, 0, 0 ] class << self attr_accessor :_bel_index_offsets private :_bel_index_offsets, :_bel_index_offsets= end self._bel_index_offsets = [ 0, 0, 115, 230, 290, 292, 294, 408, 522, 598, 712, 714, 774, 776, 778, 779, 780 ] class << self attr_accessor :_bel_indicies private :_bel_indicies, :_bel_indicies= end self._bel_indicies = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 10, 9, 8, 6, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 11, 13, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 14, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 17, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16, 16, 16, 16, 19, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16, 21, 20, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24, 22, 25, 20, 24, 22, 26, 26, 26, 0 ] class << self attr_accessor :_bel_trans_targs private :_bel_trans_targs, :_bel_trans_targs= end self._bel_trans_targs = [ 0, 2, 3, 7, 0, 6, 3, 4, 5, 0, 14, 0, 14, 6, 7, 2, 0, 9, 15, 9, 0, 11, 11, 12, 13, 16, 0 ] class << self attr_accessor :_bel_trans_actions private :_bel_trans_actions, :_bel_trans_actions= end self._bel_trans_actions = [ 1, 0, 2, 3, 4, 3, 6, 6, 6, 5, 7, 8, 9, 10, 10, 11, 12, 3, 13, 10, 14, 2, 6, 6, 6, 15, 0 ] class << self attr_accessor :_bel_eof_actions private :_bel_eof_actions, :_bel_eof_actions= end self._bel_eof_actions = [ 0, 1, 4, 5, 5, 5, 8, 8, 12, 12, 14, 14, 14, 14, 0, 0, 0 ] class << self attr_accessor :bel_start end self.bel_start = 1; class << self attr_accessor :bel_first_final end self.bel_first_final = 14; class << self attr_accessor :bel_error end self.bel_error = 0; class << self attr_accessor :bel_en_ident end self.bel_en_ident = 8; class << self attr_accessor :bel_en_string end self.bel_en_string = 10; class << self attr_accessor :bel_en_bel_parameter end self.bel_en_bel_parameter = 1; begin p ||= 0 pe ||= data.length cs = bel_start end begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _bel_index_offsets[cs] _slen = _bel_key_spans[cs] _wide = data[p].ord _trans = if ( _slen > 0 && _bel_trans_keys[_keys] <= _wide && _wide <= _bel_trans_keys[_keys + 1] ) then _bel_indicies[ _inds + _wide - _bel_trans_keys[_keys] ] else _bel_indicies[ _inds + _slen ] end cs = _bel_trans_targs[_trans] if _bel_trans_actions[_trans] != 0 case _bel_trans_actions[_trans] when 10 then begin (@buffers[:ident] ||= []) << data[p].ord end when 8 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 6 then begin (@buffers[:string] ||= []) << data[p].ord end when 5 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 3 then begin @buffers[:ident] = [] end begin (@buffers[:ident] ||= []) << data[p].ord end when 13 then begin @buffers[:ident] = identifier(utf8_string(@buffers[:ident])) end begin yield @buffers[:ident] end when 11 then begin @buffers[:ident] = identifier(utf8_string(@buffers[:ident])) end begin @buffers[:parameter] = parameter(prefix(@buffers[:ident])) end when 12 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:ident] ||= [] yield @buffers[:ident] end when 1 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 2 then begin @buffers[:string] = [] end begin (@buffers[:string] ||= []) << data[p].ord end when 15 then begin @buffers[:string] = string(utf8_string(@buffers[:string])) end begin yield @buffers[:string] end when 4 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 14 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin @buffers[:string] ||= [] yield @buffers[:string] end when 9 then begin @buffers[:ident] = identifier(utf8_string(@buffers[:ident])) end begin @buffers[:parameter] ||= parameter(prefix(nil)) @buffers[:parameter] = @buffers[:parameter] << value(@buffers[:ident]) end begin yield @buffers[:parameter] end when 7 then begin @buffers[:string] = string(utf8_string(@buffers[:string])) end begin @buffers[:parameter] ||= parameter(prefix(nil)) @buffers[:parameter] = @buffers[:parameter] << value(@buffers[:string]) end begin yield @buffers[:parameter] end end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _bel_eof_actions[cs] when 8 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 5 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 12 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:ident] ||= [] yield @buffers[:ident] end when 1 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 4 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 14 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin @buffers[:string] ||= [] yield @buffers[:string] end end end end if _goto_level <= _out break end end end =end # end: ragel require_relative '../ast/node' require_relative '../mixin/buffer' require_relative '../nonblocking_io_wrapper' module BELParser module Parsers module Expression module Parameter class << self MAX_LENGTH = 1024 * 128 # 128K def parse(content) return nil unless content Parser.new(content).each do |obj| yield obj end end end private class Parser include Enumerable include BELParser::Parsers::Buffer include BELParser::Parsers::AST::Sexp def initialize(content) @content = content # begin: ragel class << self attr_accessor :_bel_trans_keys private :_bel_trans_keys, :_bel_trans_keys= end self._bel_trans_keys = [ 0, 0, 9, 122, 9, 122, 34, 92, 10, 10, 92, 92, 10, 122, 10, 122, 48, 122, 10, 122, 34, 34, 34, 92, 10, 10, 92, 92, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_bel_key_spans private :_bel_key_spans, :_bel_key_spans= end self._bel_key_spans = [ 0, 114, 114, 59, 1, 1, 113, 113, 75, 113, 1, 59, 1, 1, 0, 0, 0 ] class << self attr_accessor :_bel_index_offsets private :_bel_index_offsets, :_bel_index_offsets= end self._bel_index_offsets = [ 0, 0, 115, 230, 290, 292, 294, 408, 522, 598, 712, 714, 774, 776, 778, 779, 780 ] class << self attr_accessor :_bel_indicies private :_bel_indicies, :_bel_indicies= end self._bel_indicies = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 10, 9, 8, 6, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 11, 13, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 11, 11, 11, 11, 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 14, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 17, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16, 16, 16, 16, 19, 16, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 16, 21, 20, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24, 22, 25, 20, 24, 22, 26, 26, 26, 0 ] class << self attr_accessor :_bel_trans_targs private :_bel_trans_targs, :_bel_trans_targs= end self._bel_trans_targs = [ 0, 2, 3, 7, 0, 6, 3, 4, 5, 0, 14, 0, 14, 6, 7, 2, 0, 9, 15, 9, 0, 11, 11, 12, 13, 16, 0 ] class << self attr_accessor :_bel_trans_actions private :_bel_trans_actions, :_bel_trans_actions= end self._bel_trans_actions = [ 1, 0, 2, 3, 4, 3, 6, 6, 6, 5, 7, 8, 9, 10, 10, 11, 12, 3, 13, 10, 14, 2, 6, 6, 6, 15, 0 ] class << self attr_accessor :_bel_eof_actions private :_bel_eof_actions, :_bel_eof_actions= end self._bel_eof_actions = [ 0, 1, 4, 5, 5, 5, 8, 8, 12, 12, 14, 14, 14, 14, 0, 0, 0 ] class << self attr_accessor :bel_start end self.bel_start = 1; class << self attr_accessor :bel_first_final end self.bel_first_final = 14; class << self attr_accessor :bel_error end self.bel_error = 0; class << self attr_accessor :bel_en_ident end self.bel_en_ident = 8; class << self attr_accessor :bel_en_string end self.bel_en_string = 10; class << self attr_accessor :bel_en_bel_parameter end self.bel_en_bel_parameter = 1; # end: ragel end def each @buffers = {} data = @content.unpack('C*') p = 0 pe = data.length eof = data.length # begin: ragel begin p ||= 0 pe ||= data.length cs = bel_start end begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _bel_index_offsets[cs] _slen = _bel_key_spans[cs] _wide = data[p].ord _trans = if ( _slen > 0 && _bel_trans_keys[_keys] <= _wide && _wide <= _bel_trans_keys[_keys + 1] ) then _bel_indicies[ _inds + _wide - _bel_trans_keys[_keys] ] else _bel_indicies[ _inds + _slen ] end cs = _bel_trans_targs[_trans] if _bel_trans_actions[_trans] != 0 case _bel_trans_actions[_trans] when 10 then begin (@buffers[:ident] ||= []) << data[p].ord end when 8 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 6 then begin (@buffers[:string] ||= []) << data[p].ord end when 5 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 3 then begin @buffers[:ident] = [] end begin (@buffers[:ident] ||= []) << data[p].ord end when 13 then begin @buffers[:ident] = identifier(utf8_string(@buffers[:ident])) end begin yield @buffers[:ident] end when 11 then begin @buffers[:ident] = identifier(utf8_string(@buffers[:ident])) end begin @buffers[:parameter] = parameter(prefix(@buffers[:ident])) end when 12 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:ident] ||= [] yield @buffers[:ident] end when 1 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 2 then begin @buffers[:string] = [] end begin (@buffers[:string] ||= []) << data[p].ord end when 15 then begin @buffers[:string] = string(utf8_string(@buffers[:string])) end begin yield @buffers[:string] end when 4 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 14 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin @buffers[:string] ||= [] yield @buffers[:string] end when 9 then begin @buffers[:ident] = identifier(utf8_string(@buffers[:ident])) end begin @buffers[:parameter] ||= parameter(prefix(nil)) @buffers[:parameter] = @buffers[:parameter] << value(@buffers[:ident]) end begin yield @buffers[:parameter] end when 7 then begin @buffers[:string] = string(utf8_string(@buffers[:string])) end begin @buffers[:parameter] ||= parameter(prefix(nil)) @buffers[:parameter] = @buffers[:parameter] << value(@buffers[:string]) end begin yield @buffers[:parameter] end end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _bel_eof_actions[cs] when 8 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 5 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 12 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:ident] ||= [] yield @buffers[:ident] end when 1 then begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end when 4 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin unless @buffers[:ident].is_a?(::AST::Node) @buffers[:ident] ||= [] @buffers[:ident] = identifier(utf8_string(@buffers[:ident]).sub(/\n$/, '')) end end when 14 then begin @buffers[:string] ||= [] @buffers[:string] = string(utf8_string(@buffers[:string]).sub(/\n$/, '')) end begin @buffers[:string] ||= [] yield @buffers[:string] end end end end if _goto_level <= _out break end end end # end: ragel end end end end end end if __FILE__ == $0 $stdin.each_line do |line| BELParser::Parsers::Expression::Parameter.parse(line) { |obj| puts obj.inspect } end end # vim: ft=ruby ts=2 sw=2: # encoding: utf-8