Ignore:
Timestamp:
Sep 27, 2009, 9:24:19 PM (15 years ago)
Author:
Tatsukawa, Akimichi
Message:

ADL parser is roughly coupled with open_ehr model classes

File:
1 edited

Legend:

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

    r283 r307  
    11
    2 class OpenEHR::ADL::Parser
     2class OpenEhr::ADL::Parser
    33
    44#options omit_action_call
     
    3636  {
    3737    assert_at(__FILE__,__LINE__) do
    38       val[4].instance_of?(OpenEHR::AM::Archetype::Archetype_Description::ARCHETYPE_DESCRIPTION) and val[5].instance_of?(OpenEHR::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT) and val[7].instance_of?(OpenEHR::AM::Archetype::Ontology::ARCHETYPE_ONTOLOGY)
     38      val[4].instance_of?(OpenEhr::AM::Archetype::Archetype_Description::ARCHETYPE_DESCRIPTION) and val[5].instance_of?(OpenEhr::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT) and val[7].instance_of?(OpenEhr::AM::Archetype::Ontology::ARCHETYPE_ONTOLOGY)
    3939    end
    4040   
     
    4242    parent_archtype_id = val[1][:parent_archtype_id] if val[1]
    4343    adl_version = val[0][:arch_head][:arch_meta_data][:adl_version]
    44     concept = val[2]
     44    concept = val[2][:arch_concept]
    4545    language = val[3][:arch_language]
    46     archetype = OpenEHR::AM::Archetype::ARCHETYPE.create(
     46    archetype = OpenEhr::AM::Archetype::ARCHETYPE.create(
    4747                                                         :archetype_id => archetype_id,
    4848                                                         :parent_archtype_id => parent_archtype_id,
     
    138138    | SYM_DESCRIPTION dadl_section
    139139  {
    140     result = OpenEHR::AM::Archetype::Archetype_Description::ARCHETYPE_DESCRIPTION.new(:details => val[1])
     140    result = OpenEhr::AM::Archetype::Archetype_Description::ARCHETYPE_DESCRIPTION.new(:details => val[1])
    141141  }
    142142  | SYM_DESCRIPTION error
     
    154154cadl_section: c_complex_object
    155155  {
    156     assert_at(__FILE__,__LINE__){val[0].instance_of?(OpenEHR::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT)}
     156    assert_at(__FILE__,__LINE__){val[0].instance_of?(OpenEhr::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT)}
    157157    @@logger.debug("#{__FILE__}:#{__LINE__}: c_complex_object = #{val[0]} at #{@filename}:#{@lineno}")
    158158    result = val[0]
     
    167167c_complex_object: c_complx_object_head SYM_MATCHES START_REGEXP_BLOCK REGEXP_BODY END_REGEXP_BLOCK # added by akimichi
    168168  {
    169     result = OpenEHR::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT.create(:attributes => val[3]) do |c_complex_object|
     169    result = OpenEhr::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT.create(:attributes => val[3]) do |c_complex_object|
    170170      c_complex_object.node_id = val[0][:c_complex_object_id][:local_term_code_ref]
    171171      c_complex_object.rm_type_name = val[0][:c_complex_object_id][:type_identifier]
     
    175175    | c_complex_object_head SYM_MATCHES SYM_START_CBLOCK c_complex_object_body SYM_END_CBLOCK
    176176  {
    177     result = OpenEHR::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT.create(:attributes => val[3]) do |c_complex_object|
     177    result = OpenEhr::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT.create(:attributes => val[3]) do |c_complex_object|
    178178      c_complex_object.node_id = val[0][:c_complex_object_id][:local_term_code_ref]
    179179      c_complex_object.rm_type_name = val[0][:c_complex_object_id][:type_identifier]
     
    201201  | c_attributes
    202202  {
    203     result = OpenEHR::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT.new(:attributes => val[0])
     203    result = OpenEhr::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT.new(:attributes => val[0])
    204204  }
    205205
     
    224224  | archetype_internal_ref
    225225  {
    226     result = OpenEHR::AM::Archetype::Constraint_Model::ARCHETYPE_INTERNAL_REF.create do |archetype_internal_ref|
     226    result = OpenEhr::AM::Archetype::Constraint_Model::ARCHETYPE_INTERNAL_REF.create do |archetype_internal_ref|
    227227      archetype_internal_ref.target_path = val[0][:absolute_path]
    228228      archetype_internal_ref.rm_type_name = val[0][:type_identifier]
     
    236236  | constraint_ref
    237237  {
    238     result = OpenEHR::AM::Archetype::Constraint_Model::CONSTRAINT_REF.create do |constraint_ref|
     238    result = OpenEhr::AM::Archetype::Constraint_Model::CONSTRAINT_REF.create do |constraint_ref|
    239239      constraint_ref.reference = val[0]
    240240    end
     
    256256    result = val[0]
    257257  }
    258 
    259258#  | v_c_domain_type
    260259#  | V_C_DOMAIN_TYPE
     
    265264  #   the buffer from the current point on and be able to fast-forward the
    266265  #   cursor to the last character matched by the dADL scanner
     266### ----------/* V_C_DOMAIN_TYPE - sections of dADL syntax */ -------------------------------------------------     ----------/* V_C_DOMAIN_TYPE - sections of dADL syntax */ -------------------------------------------------
     267   
     268   
     269### [A-Z][a-zA-Z0-9_]*[ \n]*< { -- match a pattern like 'Type_Identifier whitespace <'  [A-Z][a-zA-Z0-9_]*[ \n]*< { -- match a pattern like 'Type_Identifier whitespace <'
     270###                 set_start_condition (IN_C_DOMAIN_TYPE)                  set_start_condition (IN_C_DOMAIN_TYPE)
     271###             }               }
     272   
     273### <IN_C_DOMAIN_TYPE>[^}>]*>[ \n]*[^>}A-Z] { -- match up to next > not followed by a '}' or '>'    <IN_C_DOMAIN_TYPE>[^}>]*>[ \n]*[^>}A-Z] { -- match up to next > not followed by a '}' or '>'
     274###                  in_buffer.append_string (text)                      in_buffer.append_string (text)
     275###              }               }
     276   
     277### <IN_C_DOMAIN_TYPE>[^}>]*>+[ \n]*[}A-Z] { -- final section - '...> whitespace } or beginning of a type identifier'   <IN_C_DOMAIN_TYPE>[^}>]*>+[ \n]*[}A-Z] { -- final section - '...> whitespace } or beginning of a type identifier'
     278
     279### <IN_C_DOMAIN_TYPE>[^}>]*[ \n]*} { -- match up to next '}' not preceded by a '>'     <IN_C_DOMAIN_TYPE>[^}>]*[ \n]*} { -- match up to next '}' not preceded by a '>'
     280###                  in_buffer.append_string (text)                      in_buffer.append_string (text)
     281###               }                   }
     282   
     283
    267284  | ERR_C_DOMAIN_TYPE
    268285  | error
     
    283300archetype_slot: c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes c_excludes SYM_END_CBLOCK
    284301  {
    285     result = OpenEHR::AM::Archetype::Constraint_Model::ARCHETYPE_SLOT.create do |archetype_slot|
     302    result = OpenEhr::AM::Archetype::Constraint_Model::ARCHETYPE_SLOT.create do |archetype_slot|
    286303      archetype_slot.includes = val[3]
    287304      archetype_slot.excludes = val[4]
     
    305322c_primitive_object: c_primitive
    306323  {
    307     assert_at(__FILE__,__LINE__){val[0].kind_of?(OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_PRIMITIVE)}
    308     result = OpenEHR::AM::Archetype::Constraint_Model::C_PRIMITIVE_OBJECT.create do |c_primitive_object|
     324    assert_at(__FILE__,__LINE__){val[0].kind_of?(OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_PRIMITIVE)}
     325    result = OpenEhr::AM::Archetype::Constraint_Model::C_PRIMITIVE_OBJECT.create do |c_primitive_object|
    309326      c_primitive_object.item = val[0]
    310327    end
     
    314331  {
    315332    @@logger.debug("#{__FILE__}:#{__LINE__}: c_integer = #{val[0]} at #{@filename}:#{@lineno}")
    316     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_INTEGER.create do |c_integer|
     333    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_INTEGER.create do |c_integer|
    317334      c_integer.list
    318335      c_integer.range
     
    323340  {
    324341    @@logger.debug("#{__FILE__}:#{__LINE__}: c_real = #{val[0]} at #{@filename}:#{@lineno}")
    325     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_REAL.new
     342    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_REAL.new
    326343  }
    327344  | c_date
    328345  {
    329346    @@logger.debug("#{__FILE__}:#{__LINE__}: c_date = #{val[0]} at #{@filename}:#{@lineno}")
    330     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_DATE.new
     347    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_DATE.new
    331348  }
    332349  | c_time
    333350  {
    334351    @@logger.debug("#{__FILE__}:#{__LINE__}: c_time = #{val[0]} at #{@filename}:#{@lineno}")
    335     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_TIME.new
     352    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_TIME.new
    336353  }
    337354  | c_date_time
    338355  {
    339356    @@logger.debug("#{__FILE__}:#{__LINE__}: c_date_time = #{val[0]} at #{@filename}:#{@lineno}")
    340     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_DATE_TIME.new
     357    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_DATE_TIME.new
    341358  }
    342359  | c_duration
    343360  {
    344361    @@logger.debug("#{__FILE__}:#{__LINE__}: c_duration = #{val[0]} at #{@filename}:#{@lineno}")
    345     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_DURATION.new
     362    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_DURATION.new
    346363  }
    347364  | c_string
    348365  {
    349366    @@logger.debug("#{__FILE__}:#{__LINE__}: c_string = #{val[0]} at #{@filename}:#{@lineno}")
    350     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_STRING.new
     367    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_STRING.new
    351368  }
    352369  | c_boolean
    353370  {
    354     assert_at(__FILE__,__LINE__){val[0].instance_of?(OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN)}
     371    assert_at(__FILE__,__LINE__){val[0].instance_of?(OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN)}
    355372    @@logger.debug("#{__FILE__}:#{__LINE__}: c_boolean = #{val[0]} at #{@filename}:#{@lineno}")
    356373    result = val[0]
     
    374391c_attribute: c_attr_head SYM_MATCHES SYM_START_CBLOCK c_attr_values SYM_END_CBLOCK
    375392  {
    376     assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEHR::AM::Archetype::Constraint_Model::C_ATTRIBUTE)}
     393    assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEhr::AM::Archetype::Constraint_Model::C_ATTRIBUTE)}
    377394    c_attribute = val[0]
    378395    c_attribute.children = val[3]
     
    381398  | c_attr_head SYM_MATCHES START_REGEXP_BLOCK REGEXP_BODY END_REGEXP_BLOCK # added by akimichi
    382399  {
    383     assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEHR::AM::Archetype::Constraint_Model::C_ATTRIBUTE)}
     400    assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEhr::AM::Archetype::Constraint_Model::C_ATTRIBUTE)}
    384401    result = val[0]
    385402  }
    386403  | c_attr_head SYM_MATCHES SYM_START_CBLOCK error SYM_END_CBLOCK
    387404  {
    388     assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEHR::AM::Archetype::Constraint_Model::C_ATTRIBUTE)}
     405    assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEhr::AM::Archetype::Constraint_Model::C_ATTRIBUTE)}
    389406    result = val[0]
    390407  }
     
    394411  {
    395412    @@logger.debug("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]}, c_existence = #{val[1]} at #{@filename}")
    396     result = OpenEHR::AM::Archetype::Constraint_Model::C_SINGLE_ATTRIBUTE.new(
     413    result = OpenEhr::AM::Archetype::Constraint_Model::C_SINGLE_ATTRIBUTE.new(
    397414                                                                              :rm_attribute_name => val[0],
    398415                                                                              :existence => val[1]
     
    402419  | V_ATTRIBUTE_IDENTIFIER c_existence c_cardinality
    403420  {
    404     assert_at(__FILE__,__LINE__){ val[2].instance_of?(OpenEHR::AM::Archetype::Constraint_Model::CARDINALITY) }
     421    assert_at(__FILE__,__LINE__){ val[2].instance_of?(OpenEhr::AM::Archetype::Constraint_Model::CARDINALITY) }
    405422    @@logger.debug("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER: #{val[0]}, c_existence = #{val[1]}, c_cardinality = #{val[2]} at #{@filename}")
    406     result = OpenEHR::AM::Archetype::Constraint_Model::C_MULTIPLE_ATTRIBUTE.new(
     423    result = OpenEhr::AM::Archetype::Constraint_Model::C_MULTIPLE_ATTRIBUTE.new(
    407424                                                                                :rm_attribute_name => val[0],
    408425                                                                                :existence => val[1],
     
    458475  {
    459476    dadl_section = val[1]
    460     result = OpenEHR::AM::Archetype::Ontology::ARCHETYPE_ONTOLOGY.new
     477    result = OpenEhr::AM::Archetype::Ontology::ARCHETYPE_ONTOLOGY.new
    461478  }
    462479  | SYM_ONTOLOGY error
     
    464481
    465482### dADL section
    466 dadl_section: dadl_input
    467 
    468 dadl_input: attr_vals
     483dadl_section: attr_vals
     484  {
     485    @@logger.debug("#{__FILE__}:#{__LINE__}:dadl_section attr_vals = \n#{val[0].to_yaml}")
     486    result = val[0]
     487  }
    469488  | complex_object_block
     489  {
     490    @@logger.debug("#{__FILE__}:#{__LINE__}:dadl_section complex_object_block = \n#{val[0].to_yaml}")
     491    result = val[0]
     492  }
    470493#  | error
    471494
     
    485508attr_val: attr_id SYM_EQ object_block
    486509  {
    487     @@logger.debug("#{__FILE__}:#{__LINE__}: attr_id = #{val[0]} at #{@filename}:#{@lineno}")
     510    @@logger.debug("#{__FILE__}:#{__LINE__}:attr_val\n attr_id = #{val[0]}, object_block = #{val[1]}")
    488511    result = {:attr_id => val[0], :object_block => val[2]}
    489512  }
     
    491514attr_id: V_ATTRIBUTE_IDENTIFIER
    492515  {
    493     @@logger.debug("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}:#{@lineno}")
     516    @@logger.debug("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]}")
    494517    result = val[0]
    495518  }
     
    10011024c_cardinality: SYM_CARDINALITY SYM_MATCHES SYM_START_CBLOCK cardinality_spec SYM_END_CBLOCK
    10021025  {
    1003     result = OpenEHR::AM::Archetype::Constraint_Model::CARDINALITY.new
     1026    result = OpenEhr::AM::Archetype::Constraint_Model::CARDINALITY.new
    10041027  }
    10051028
     
    10261049  | SYM_OCCURRENCES SYM_MATCHES SYM_START_CBLOCK occurrence_spec SYM_END_CBLOCK
    10271050  {
    1028     result = val[3]
     1051    case val[3]
     1052    when OpenEhr::RM::Support::AssumedTypes::Interval
     1053      result = val[3]
     1054    else
     1055      result = val[3]
     1056    end
    10291057  }
    10301058  | SYM_OCCURRENCES error
    10311059
    10321060occurrence_spec: cardinality_limit_value #-- single integer or '*'
     1061  {
     1062    result = val[0]
     1063  }
    10331064  | V_INTEGER SYM_ELLIPSIS cardinality_limit_value
     1065  {
     1066    result = OpenEhr::RM::Support::AssumedTypes::Interval.new(val[0], val[2])
     1067  }
    10341068
    10351069#---------------------- leaf constraint types -----------------------
     
    10961130c_boolean_spec: SYM_TRUE
    10971131  {
    1098     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN.new(:true_valid => true)
     1132    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN.new(:true_valid => true)
    10991133  }
    11001134  | SYM_FALSE
    11011135  {
    1102     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN.new(:true_valid => false)
     1136    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN.new(:true_valid => false)
    11031137  }
    11041138  | SYM_TRUE Comma_code SYM_FALSE
    11051139  {
    1106     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN.new(:true_valid => true,:false_valid => false)
     1140    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN.new(:true_valid => true,:false_valid => false)
    11071141  }
    11081142  | SYM_FALSE Comma_code SYM_TRUE
    11091143  {
    1110     result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN.new(:true_valid => false,:false_valid => true)
     1144    result = OpenEhr::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN.new(:true_valid => false,:false_valid => true)
    11111145  }
    11121146
     
    11981232require 'yaml'
    11991233require 'rubygems'
    1200 require 'adl_parser.rb'
    1201 require 'am.rb'
    1202 require 'rm.rb'
    1203 $DEBUG = false
     1234require 'open_ehr'
     1235#require 'adl_parser.rb'
     1236#require 'am.rb'
     1237#require 'rm.rb'
     1238#require 'rm/support/assumed_types.rb'
     1239#require 'assumed_library_types.rb'
     1240$DEBUG = true
    12041241
    12051242
     
    12831320def scan
    12841321  @@logger.debug("#{__FILE__}:#{__LINE__}: Entering scan at #{@filename}:#{@lineno}:")
    1285   scanner = OpenEHR::ADL::Scanner::ADLScanner.new(@adl_type, @filename)
     1322  scanner = OpenEhr::ADL::Scanner::ADLScanner.new(@adl_type, @filename)
    12861323
    12871324  until @data.nil?  do
Note: See TracChangeset for help on using the changeset viewer.