Ignore:
Timestamp:
Oct 31, 2009, 8:58:02 AM (15 years ago)
Author:
Tatsukawa, Akimichi
Message:

changed the parser around object_block

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ruby/trunk/lib/adl_parser/lib/parser.y

    r326 r328  
    127127    | SYM_LANGUAGE dadl_section
    128128  {
    129     if val[1][0][:attr_id] == "original_language"
    130       result = {:arch_language => val[1][0][:object_block][:untyped_primitive_object_block]}
     129    dadl_section = val[1]
     130    @@logger.debug("#{__FILE__}:#{__LINE__}: arch_language::dadl_section = \n#{dadl_section.to_yaml}")
     131    case dadl_section[:attr_id]
     132    when "translations"
     133      result = {:arch_language => dadl_section[:object_block][:untyped_primitive_object_block]}
     134    when "original_language"
     135      result = {:arch_language => dadl_section[:object_block][:untyped_primitive_object_block]}
     136###     if val[1][:attr_id] == "original_language"
     137###       result = {:arch_language => val[0][:object_block][:untyped_primitive_object_block]}
    131138    else
    132       raise OpenEhr::ADL::Exception::Parser::Error, "It should be 'original_language' at #{@filename}:#{@lineno} "
     139      raise OpenEhr::ADL::Exception::Parser::Error, "It should be 'original_language, but was #{dadl_section[:attr_id]}' at #{@filename}:#{@lineno} "
    133140    end
    134141  }
     
    144151    args = Hash.new
    145152    val[1].each do |item|
    146       @@logger.debug("#{__FILE__}:#{__LINE__}: arch_description: item[:object_block] = #{item[:object_block].to_yaml} at #{@filename}:#{@lineno}")
    147       case item[:attr_id]
     153      @@logger.debug("#{__FILE__}:#{__LINE__}: arch_description: item = #{item.to_yaml} at #{@filename}:#{@lineno}")
     154      case item
    148155      when "original_author"
    149156        unless item[:object_block][:type_identifier]
    150           args.merge!(Hash[:original_author => item[:object_block][:untyped_multiple_attr_object_block]])
     157          args.merge!(Hash[:original_author => item[:untyped_multiple_attr_object_block]])
    151158        else
    152159          raise OpenEhr::ADL::Exception::Parser::Error, "Needless type_identifier at #{@filename}:#{@lineno} "
    153160        end
    154161      when "details"
    155         unless item[:object_block][:type_identifier]
    156           args.merge!(Hash[:details => item[:object_block][:untyped_multiple_attr_object_block]])
     162        unless item[:type_identifier]
     163          args.merge!(Hash[:details => item[:untyped_multiple_attr_object_block]])
     164          #args.merge!(Hash[:details => item[:object_block]])
    157165        else
    158166          raise OpenEhr::ADL::Exception::Parser::Error, "Needless type_identifier at #{@filename}:#{@lineno} "
    159167        end
    160168      when "lifecycle_state"
    161         unless item[:object_block][:type_identifier]
    162           args.merge!(Hash[:lifecycle_state => item[:object_block][:untyped_primitive_object_block]])
     169        unless item[:type_identifier]
     170          args.merge!(Hash[:lifecycle_state => item[:untyped_primitive_object_block]])
    163171        else
    164172          raise OpenEhr::ADL::Exception::Parser::Error, "Needless type_identifier at #{@filename}:#{@lineno} "
    165173        end
    166174      when "other_contributors"
    167         unless item[:object_block][:type_identifier]
    168           args.merge!(Hash[:other_contributors => item[:object_block][:untyped_multiple_attr_object_block]])
     175        unless item[:type_identifier]
     176          args.merge!(Hash[:other_contributors => item[:untyped_multiple_attr_object_block]])
    169177        else
    170178          raise OpenEhr::ADL::Exception::Parser::Error, "Needless type_identifier at #{@filename}:#{@lineno} "
    171179        end
    172180      when "other_details"
    173         unless item[:object_block][:type_identifier]
    174           args.merge!(Hash[:other_contributors => item[:object_block][:untyped_multiple_attr_object_block]])
     181        unless item[:type_identifier]
     182          args.merge!(Hash[:other_contributors => item[:untyped_multiple_attr_object_block]])
    175183        else
    176184          raise OpenEhr::ADL::Exception::Parser::Error, "Needless type_identifier at #{@filename}:#{@lineno} "
    177185        end
    178186      else
    179         raise OpenEhr::ADL::Exception::Parser::Error, "Unknown case #{item[:attr_id]} at #{@filename}:#{@lineno} "
     187        raise OpenEhr::ADL::Exception::Parser::Error, "Unknown case #{item} at #{@filename}:#{@lineno} "
    180188      end
    181189    end
     
    534542  {
    535543    dadl_section = val[1]
    536     result = OpenEhr::AM::Archetype::Ontology::ARCHETYPE_ONTOLOGY.new
     544    @@logger.debug("#{__FILE__}:#{__LINE__}: arch_ontology: dadl_section = #{val[1].to_yaml}")
     545    args = Hash.new
     546    dadl_section.each do |item|
     547      @@logger.debug("#{__FILE__}:#{__LINE__}: arch_description: item[:object_block] = #{item[:object_block].to_yaml} at #{@filename}:#{@lineno}")
     548      case item[:attr_id]
     549      when "terminologies_available"
     550        unless item[:object_block][:type_identifier]
     551          args.merge!(Hash[:terminologies_available => item[:object_block][:untyped_primitive_object_block]])
     552          #args.merge!(Hash[:terminologies_available => item[:object_block]])
     553        else
     554          raise OpenEhr::ADL::Exception::Parser::Error, "Needless type_identifier at #{@filename}:#{@lineno} "
     555        end
     556      when "term_definitions"
     557        unless item[:object_block][:type_identifier]
     558          args.merge!(Hash[:term_definitions => item[:object_block][:untyped_multiple_attr_object_block]])
     559          #args.merge!(Hash[:term_definitions => item[:object_block]])
     560        else
     561          raise OpenEhr::ADL::Exception::Parser::Error, "Needless type_identifier at #{@filename}:#{@lineno} "
     562        end
     563      when "term_binding"
     564        unless item[:object_block][:type_identifier]
     565          args.merge!(Hash[:term_binding => item[:object_block][:untyped_multiple_attr_object_block]])
     566          #args.merge!(Hash[:term_binding => item[:object_block]])
     567        else
     568          raise OpenEhr::ADL::Exception::Parser::Error, "Needless type_identifier at #{@filename}:#{@lineno} "
     569        end
     570      else
     571        raise OpenEhr::ADL::Exception::Parser::Error, "Unknown case #{item[:attr_id]} at #{@filename}:#{@lineno} "
     572      end
     573    end
     574
     575    result = OpenEhr::AM::Archetype::Ontology::ARCHETYPE_ONTOLOGY.new(args)
    537576  }
    538577  | SYM_ONTOLOGY error
     
    543582    |  attr_vals
    544583  {
    545     #@@logger.debug("#{__FILE__}:#{__LINE__}:dadl_section attr_vals = \n#{val[0].to_yaml}")
     584    @@logger.debug("#{__FILE__}:#{__LINE__}:dadl_section::attr_vals = \n#{val[0].to_yaml}")
    546585    result = val[0]
    547586  }
    548587  | complex_object_block
    549588  {
    550     #@@logger.debug("#{__FILE__}:#{__LINE__}:dadl_section complex_object_block = \n#{val[0].to_yaml}")
     589    #@@logger.debug("#{__FILE__}:#{__LINE__}:dadl_section::complex_object_block = \n#{val[0].to_yaml}")
    551590    result = val[0]
    552591  }
     
    555594attr_vals: attr_val
    556595  {
    557     result = Array[val[0]]
     596    attr_val = val[0]
     597    result = Hash[attr_val[:attr_id] => attr_val[:object_block]]
    558598  }
    559599  | attr_vals attr_val
    560600  {
    561     result = (val[0] << val[1])
     601    result = val[0].merge!(val[1])
    562602  }
    563603  | attr_vals Semicolon_code attr_val
    564604  {
    565     result = (val[0] << val[2])
    566   }
     605    result = val[0].merge!(val[2])
     606  }
     607### attr_vals: attr_val
     608###   {
     609###     result = Array[val[0]]
     610###   }
     611###   | attr_vals attr_val
     612###   {
     613###     result = (val[0] << val[1])
     614###   }
     615###   | attr_vals Semicolon_code attr_val
     616###   {
     617###     result = (val[0] << val[2])
     618###   }
    567619
    568620attr_val: attr_id SYM_EQ object_block
    569621  {
    570     @@logger.debug("#{__FILE__}:#{__LINE__}:attr_val\n attr_id = #{val[0]}, object_block = #{val[1]}")
     622    @@logger.debug("#{__FILE__}:#{__LINE__}:attr_val\n attr_id = #{val[0].to_yaml},\n object_block = #{val[2].to_yaml}")
    571623    result = {:attr_id => val[0], :object_block => val[2]}
    572624  }
     
    599651multiple_attr_object_block: untyped_multiple_attr_object_block
    600652  {
     653    @@logger.debug("#{__FILE__}:#{__LINE__}:multiple_attr_object_block::attr_val\n untyped_multiple_attr_object_block = #{val[0].to_yaml}")
    601654    result = {:untyped_multiple_attr_object_block => val[0]}
    602655  }
     
    608661untyped_multiple_attr_object_block: multiple_attr_object_block_head keyed_objects SYM_END_DBLOCK
    609662  {
     663    @@logger.debug("#{__FILE__}:#{__LINE__}:untyped_multiple_attr_object_block::keyed_objects\n keyed_objects = #{val[1].to_yaml}")
    610664    result = val[1]
    611665  }
     
    629683    #@@logger.debug("#{__FILE__}:#{__LINE__}: keyed_object = #{val[0]} at #{@filename}:#{@lineno}")
    630684    #result = {:object_key => val[0], :object_block => val[2]}
    631     unless val[2][:type_identifier]
    632       result = Hash[val[0] => val[2][:untyped_primitive_object_block]]
     685    object_key,object_block = val[0],val[2]
     686    unless object_block[:type_identifier]
     687      result = Hash[val[0] => object_block[:untyped_primitive_object_block]]
    633688    else
    634689      raise OpenEhr::ADL::Exception::Parser::Error, "Missing type_identifier at #{@filename}:#{@lineno} "
     
    654709  {
    655710    @@logger.debug("#{__FILE__}:#{__LINE__}: single_attr_object_complex_head = #{val[0]} at #{@filename}:#{@lineno}")
    656     #result = {:single_attr_object_complex_head => val[0]}
    657711    result = []
    658712  }
    659713  | single_attr_object_complex_head attr_vals SYM_END_DBLOCK
    660714  {
    661     @@logger.debug("#{__FILE__}:#{__LINE__}: attr_vals = #{val[1]} at #{@filename}:#{@lineno}")
    662     #result = {:single_attr_object_complex_head => val[0], :attr_vals => val[1]}
     715    @@logger.debug("#{__FILE__}:#{__LINE__}: untyped_single_attr_object_block::attr_vals = \n#{val[1].to_yaml} at #{@filename}:#{@lineno}")
    663716    result = val[1]
    664717  }
    665718single_attr_object_complex_head: SYM_START_DBLOCK
     719
    666720primitive_object_block: untyped_primitive_object_block
    667721  {
     
    13561410require 'rubygems'
    13571411require 'open_ehr'
    1358 #require 'adl_parser.rb'
    1359 #require 'am.rb'
    1360 #require 'rm.rb'
    1361 #require 'rm/support/assumed_types.rb'
    1362 #require 'assumed_library_types.rb'
    13631412$DEBUG = true
    13641413
     
    14011450
    14021451
    1403 def parse(data, filename, lineno = 1, debug = false)
     1452def parse(data, filename = "", lineno = 1, debug = false)
    14041453  @yydebug = true
    14051454  @parsestring = data
Note: See TracChangeset for help on using the changeset viewer.