lib/openehr/parser/adl_grammar.tt in openehr-1.2.4 vs lib/openehr/parser/adl_grammar.tt in openehr-1.2.5

- old
+ new

@@ -258,11 +258,11 @@ rule c_complex_object head:c_complex_object_head SYM_MATCHES SYM_START_CBLOCK body:c_complex_object_body SYM_END_CBLOCK space { def value(node = ArchetypeNode.new) args = head.value args[:occurrences] ||= OpenEHR::AssumedLibraryTypes::Interval.new( - :lower => 1, :upper => 1) + :lower => 1, :upper => 1, :lower_included => true, :upper_included => true) node.id = args[:node_id] if node.root? or node.id.nil? args[:path] = node.path else args[:path] = node.path + '[' + node.id + ']' @@ -273,11 +273,11 @@ } / c_complex_object_head '' { def value(node = ArchetypeNode.new) args = c_complex_object_head.value args[:occurrences] ||= OpenEHR::AssumedLibraryTypes::Interval.new( - :lower => 1, :upper => 1) + :lower => 1, :upper => 1, :lower_included => true, :upper_included => true) node.id = args[:node_id] args[:path] = node.path OpenEHR::AM::Archetype::ConstraintModel::CComplexObject.new(args) end } @@ -335,18 +335,18 @@ def value(node) args = c_ordinal.value args[:path] = node.path args[:rm_type_name] = 'DV_ORDINAL' args[:occurrences] ||= OpenEHR::AssumedLibraryTypes::Interval.new( - :upper => 1, :lower => 1) + :upper => 1, :lower => 1, :lower_included => true, :upper_included => true) OpenEHR::AM::OpenEHRProfile::DataTypes::Quantity::CDvOrdinal.new( args) end } / c_primitive_object '' { def value(node) - c_primitive_object.value + c_primitive_object.value(node) end } / c_complex_object '' { def value(node) c_complex_object.value(node) @@ -393,11 +393,11 @@ / SYM_USE_NODE type_identifier object_path space { def value(node = nil) OpenEHR::AM::Archetype::ConstraintModel::ArchetypeInternalRef.new( :rm_type_name => type_identifier.value, :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new( - :lower => 1, :upper => 1), + :lower => 1, :upper => 1, :lower_included => true, :upper_included => true), :path => node.path, :target_path => object_path.value) end } end @@ -437,11 +437,11 @@ } / c_archetype_slot_id white_space { def value(node) args = c_archetype_slot_id.value(node) args[:occurrences] = OpenEHR::AssumedLibraryTypes::Interval.new( - :upper => 1, :lower => 1) + :upper => 1, :lower => 1, :lower_included => true, :upper_included => true) args end } end @@ -461,12 +461,20 @@ } end rule c_primitive_object c_primitive '' { - def value - c_primitive.value + def value(node) + OpenEHR::AM::Archetype::ConstraintModel::CPrimitiveObject.new( + {:item => c_primitive.value, + :rm_type_name => c_primitive.value.type, + :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new( + :upper => 1, + :lower => 1, + :lower_included => true, + :upper_included => true), + :path => node.path}) end } end rule c_primitive @@ -515,12 +523,12 @@ rule c_any '*' space { def value(node) OpenEHR::AM::Archetype::ConstraintModel::CAttribute.new( :path => node.path, :rm_attribute_name => 'ANY', - :exsitence => OpenEHR::AssumedLibraryTypes::Interval.new( - :lower => 1, :upper => 1)) + :existence => OpenEHR::AssumedLibraryTypes::Interval.new( + :lower => 1, :upper => 1, :lower_included => true, :upper_included => true)) end } end rule c_attributes @@ -659,16 +667,24 @@ end rule existence_spec lo:V_INTEGER SYM_ELLIPSIS up:V_INTEGER { def value - OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value, :upper => up.value) + OpenEHR::AssumedLibraryTypes::Interval.new( + :lower => lo.value, + :upper => up.value, + :lower_included => true, + :upper_included => true) end } / V_INTEGER '' { def value - OpenEHR::AssumedLibraryTypes::Interval.new(:lower => V_INTEGER.value, :upper => V_INTEGER.value) + OpenEHR::AssumedLibraryTypes::Interval.new( + :lower => V_INTEGER.value, + :upper => V_INTEGER.value, + :lower_included => true, + :upper_included => true) end } end rule c_cardinality @@ -752,23 +768,28 @@ rule occurrence_spec st:integer_value SYM_ELLIPSIS ed:cardinality_limit_value { def value if ed.value == '*' OpenEHR::AssumedLibraryTypes::Interval.new( - :lower => st.value) + :lower => st.value, + :lower_included => true) else OpenEHR::AssumedLibraryTypes::Interval.new( :lower => st.value, - :upper => ed.value) + :upper => ed.value, + :lower_included => true, + :upper_included => true) end end } / cardinality_limit_value '' { def value OpenEHR::AssumedLibraryTypes::Interval.new( :lower => cardinality_limit_value.value, - :upper => cardinality_limit_value.value) + :upper => cardinality_limit_value.value, + :lower_included => true, + :upper_included => true) end } end rule cardinality_limit_value @@ -1105,11 +1126,15 @@ vltcr:V_LOCAL_TERM_CODE_REF '' { def value(node) OpenEHR::AM::Archetype::ConstraintModel::ConstraintRef.new( :path => node.path, :rm_type_name => 'ConstraintRef', - :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(:upper => 1, :lower => 1), + :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new( + :upper => 1, + :lower => 1, + :lower_included => true, + :upper_included => true), :reference => vltcr.value) end } end @@ -1158,32 +1183,41 @@ ti:V_TERM_CODE code_string_spec ';' space code_string ']' space { def value(node) ::OpenEHR::AM::OpenEHRProfile::DataTypes::Text::CCodePhrase.new( :rm_type_name => 'CodePhrase', :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new( - :upper => 1, :lower => 1), + :upper => 1, + :lower => 1, + :lower_included => true, + :upper_included => true), :terminology_id => ti.value, :code_list => code_string_spec.value, :assumed_value => code_string.value, :path => node.path) end } / ti:V_TERM_CODE code_string_spec ']' space { def value(node) ::OpenEHR::AM::OpenEHRProfile::DataTypes::Text::CCodePhrase.new( :rm_type_name => 'CodePhrase', :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new( - :upper => 1, :lower => 1), + :upper => 1, + :lower => 1, + :lower_included => true, + :upper_included => true), :terminology_id => ti.value, :code_list => code_string_spec.value, :path => node.path) end } / ti:V_TERM_CODE ']' space { def value(node) ::OpenEHR::AM::OpenEHRProfile::DataTypes::Text::CCodePhrase.new( :rm_type_name => 'CodePhrase', :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new( - :upper => 1, :lower => 1), + :upper => 1, + :lower => 1, + :lower_included => true, + :upper_included => true), :terminology_id => ti.value, :code_list => [], :path => node.path) end } end @@ -1355,11 +1389,14 @@ magnitude = mag.int.value unless mag.empty? precision = prec.int.value unless prec.empty? OpenEHR::AM::OpenEHRProfile::DataTypes::Quantity::CQuantityItem.new( :path => node.path, :rm_type_name => 'DvQuantity', :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new( - :upper => 1, :lower => 1), + :upper => 1, + :lower => 1, + :lower_included => true, + :upper_included => true), :units => units.value, :magnitude => magnitude, :precision => precision) end } end @@ -2201,10 +2238,10 @@ rule integer_interval_value SYM_INTERVAL_DELIM SYM_GT lo:integer_value SYM_ELLIPSIS SYM_LT up:integer_value SYM_INTERVAL_DELIM { def value OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value, - :upper => up.value, + :upper => up.value, :lower_included => false, :upper_included => false) end } / SYM_INTERVAL_DELIM SYM_GT lo:integer_value SYM_ELLIPSIS up:integer_value SYM_INTERVAL_DELIM {