Changeset 19 for ruby/trunk/adl_parser/lib/parser.y
- Timestamp:
- Apr 29, 2008, 3:04:36 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ruby/trunk/adl_parser/lib/parser.y
r18 r19 49 49 50 50 arch_meta_data_items: arch_meta_data_item 51 | arch_meta_data_items ';' arch_meta_data_item 51 | arch_meta_data_items Semicolon_code arch_meta_data_item 52 # | arch_meta_data_items ';' arch_meta_data_item 52 53 53 54 arch_meta_data_item: SYM_ADL_VERSION SYM_EQ V_VERSION_STRING … … 120 121 #------------------------- node types ----------------------- 121 122 122 c_object: c_complex_object 123 c_object: v_c_domain_type 124 | c_complex_object 123 125 | archetype_internal_ref 124 126 | archetype_slot … … 127 129 | c_ordinal 128 130 | c_primitive_object 129 | v_c_domain_type131 # | v_c_domain_type 130 132 # | V_C_DOMAIN_TYPE 131 133 # this is an attempt to match a dADL section inside cADL. It will … … 180 182 181 183 c_attr_head: V_ATTRIBUTE_IDENTIFIER c_existence 184 { 185 @@log.info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]}, c_existence = #{val[1]} at #{@filename}") 186 } 182 187 | V_ATTRIBUTE_IDENTIFIER c_existence c_cardinality 188 { 189 @@log.info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER: #{val[0]}, c_existence = #{val[1]}, c_cardinality = #{val[2]} at #{@filename}") 190 } 183 191 184 192 c_attr_values: c_object … … 224 232 attr_vals: attr_val 225 233 | attr_vals attr_val 226 | attr_vals ';' attr_val 234 | attr_vals Semicolon_code attr_val 235 # | attr_vals ';' attr_val 227 236 228 237 attr_val: attr_id SYM_EQ object_block 238 { 239 @@log.info("#{__FILE__}:#{__LINE__}: attr_id = #{val[0]}, object_block = #{val[1]} at #{@filename}:#{@lineno}") 240 } 229 241 230 242 attr_id: V_ATTRIBUTE_IDENTIFIER 231 243 { 232 @@log.info(" dADL::V_ATTRIBUTE_IDENTIFIER: #{val[0]} at #{@filename}")244 @@log.info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}:#{@lineno}") 233 245 } 234 246 | V_ATTRIBUTE_IDENTIFIER error … … 253 265 254 266 object_key: Left_bracket_code simple_value Right_bracket_code 267 { 268 @@log.info("object_key: [#{val[1]}] at #{@filename}:#{@lineno}") 269 } 255 270 256 271 single_attr_object_block: untyped_single_attr_object_block … … 268 283 | term_code_list_value 269 284 simple_value: string_value 285 { 286 @@log.info("string_value: #{val[0]} at #{@filename}:#{@lineno}") 287 } 270 288 | integer_value 289 { 290 @@log.info("integer_value: #{val[0]} at #{@filename}:#{@lineno}") 291 } 271 292 | real_value 293 { 294 @@log.info("real_value: #{val[0]} at #{@filename}:#{@lineno}") 295 } 272 296 | boolean_value 297 { 298 @@log.info("boolean_value: #{val[0]} at #{@filename}:#{@lineno}") 299 } 273 300 | character_value 301 { 302 @@log.info("character_value: #{val[0]} at #{@filename}:#{@lineno}") 303 } 274 304 | date_value 305 { 306 @@log.info("date_value: #{val[0]} at #{@filename}:#{@lineno}") 307 } 275 308 | time_value 309 { 310 @@log.info("time_value: #{val[0]} at #{@filename}:#{@lineno}") 311 } 276 312 | date_time_value 313 { 314 @@log.info("date_time_value: #{val[0]} at #{@filename}:#{@lineno}") 315 } 277 316 | duration_value 317 { 318 @@log.info("duration_value: #{val[0]} at #{@filename}:#{@lineno}") 319 } 278 320 | uri_value 321 { 322 @@log.info("uri_value: #{val[0]} at #{@filename}:#{@lineno}") 323 } 279 324 simple_list_value: string_list_value 280 325 | integer_list_value … … 295 340 296 341 type_identifier: V_TYPE_IDENTIFIER 342 { 343 @@log.info("V_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}") 344 } 297 345 | V_GENERIC_TYPE_IDENTIFIER 346 { 347 @@log.info("V_GENERIC_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}") 348 } 298 349 299 350 string_value: V_STRING 300 351 { 301 @@log.info("V_STRING: #{val[0]} at #{@filename} ")352 @@log.info("V_STRING: #{val[0]} at #{@filename}:#{@lineno}") 302 353 } 303 354 … … 409 460 410 461 duration_value: V_ISO8601_DURATION 462 { 463 @@log.info("V_ISO8601_DURATION: #{val[0]} at #{@filename}:#{@lineno}") 464 } 411 465 412 466 duration_list_value: duration_value Comma_code duration_value … … 497 551 498 552 path_segment: V_ATTRIBUTE_IDENTIFIER V_LOCAL_TERM_CODE_REF 553 { 554 @@log.info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}") 555 } 499 556 | V_ATTRIBUTE_IDENTIFIER 557 { 558 @@log.info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}") 559 } 500 560 501 561 … … 601 661 c_boolean: c_boolean_spec 602 662 | c_boolean_spec Semicolon_code boolean_value 603 | c_boolean_spec ';' error 663 | c_boolean_spec Semicolon_code error 664 # | c_boolean_spec ';' error 604 665 605 666 c_ordinal: c_ordinal_spec 606 667 | c_ordinal_spec Semicolon_code integer_value 607 | c_ordinal_spec ';' error 668 | c_ordinal_spec Semicolon_code error 669 # | c_ordinal_spec ';' error 608 670 609 671 c_ordinal_spec: ordinal … … 631 693 any_identifier: type_identifier 632 694 | V_ATTRIBUTE_IDENTIFIER 695 { 696 @@log.info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}") 697 } 633 698 634 699 … … 647 712 require 'lib/util.rb' 648 713 require 'lib/scanner.rb' 714 require 'lib/model.rb' 649 715 $DEBUG = true 650 716 … … 655 721 @@log = Logger.new('log/parser.log','daily') 656 722 @@dadl_scanner = OpenEHR::ADL::Scanner::DADL::RootScanner.new 723 @@cadl_scanner = OpenEHR::ADL::Scanner::CADL::RootScanner.new 657 724 658 725 ###----------/* keywords */ --------------------------------------------- … … 755 822 when /\A--.*\n/ # single line comment 756 823 @lineno += 1 824 @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: COMMENT = #{$&} at #{@filename}:#{@lineno}") 757 825 ; 758 826 when /\Adescription/ # description … … 770 838 word = $& 771 839 if @@adl_reserved[word] 772 @@log.info(" @@adl_reserved: #{@@adl_reserved[word]} at #{@filename}")840 @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: @@adl_reserved = #{@@adl_reserved[word]} at #{@filename}:#{@lineno}") 773 841 yield @@adl_reserved[word], @@adl_reserved[word] 774 842 elsif #/\A[A-Z][a-zA-Z0-9_]*/ 843 @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: V_ATTRIBUTE_IDENTIFIER = #{$&} at #{@filename}:#{@lineno}") 775 844 yield :V_ATTRIBUTE_IDENTIFIER, $& 776 845 end … … 801 870 when /\A\{/ # { 802 871 @adl_type.push(:cadl) 872 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}") 803 873 yield :SYM_START_CBLOCK, :SYM_START_CBLOCK 804 874 when /\A\}/ # } … … 806 876 # puts "Escaping #{adl_type}" 807 877 assert_at(__FILE__,__LINE__){adl_type == :cadl} 878 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}") 808 879 yield :SYM_END_CBLOCK, $& 809 880 when /\A\-/ # - … … 923 994 when :cadl 924 995 # puts "Entering scan_cadl" 996 case scanned = @@cadl_scanner.parse(data) 997 when Yaparc::Result::OK 998 if scanned.value[0] == :START_V_C_DOMAIN_TYPE_BLOCK 999 @in_c_domain_type = true 1000 @adl_type.push(:dadl) 1001 yield scanned.value 1002 else 1003 yield scanned.value 1004 end 1005 data = scanned.input 1006 end 1007 925 1008 case data 926 1009 when /\A\n/ # carriage return … … 931 1014 when /\A--.*\n/ # single line comment 932 1015 @lineno += 1 1016 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: COMMENT = #{$&} at #{@filename}:#{@lineno}") 933 1017 ; 934 1018 ###----------/* symbols */ ------------------------------------------------- … … 939 1023 when /\A\<=/ # <= 940 1024 yield :SYM_LE, :SYM_LE 941 when /\A[A-Z][a-zA-Z0-9_]*[ \n]*\</ # V_C_DOMAIN_TYPE 942 @in_c_domain_type = true 943 @adl_type.push(:dadl) 944 yield :START_V_C_DOMAIN_TYPE_BLOCK, $& 945 ### else 946 ### raise 947 ### end 1025 ### when /\A[A-Z][a-zA-Z0-9_]*[ \n]*\</ # V_C_DOMAIN_TYPE 1026 ### @in_c_domain_type = true 1027 ### @adl_type.push(:dadl) 1028 ### yield :START_V_C_DOMAIN_TYPE_BLOCK, $& 948 1029 when /\A\</ # < 949 1030 if @in_interval … … 1001 1082 when /\A\{/ # { 1002 1083 @adl_type.push(:cadl) 1084 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}") 1003 1085 yield :SYM_START_CBLOCK, :SYM_START_CBLOCK 1004 1086 when /\A\}/ # } … … 1006 1088 # puts "Escaping #{adl_type}" 1007 1089 assert_at(__FILE__,__LINE__){adl_type == :cadl} 1090 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}") 1008 1091 yield :SYM_END_CBLOCK, :SYM_END_CBLOCK 1009 1092 when /\A\$/ # $ … … 1021 1104 end 1022 1105 yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM 1106 1023 1107 when /\A\[[a-zA-Z0-9._\-]+::[a-zA-Z0-9._\-]+\]/ #V_QUALIFIED_TERM_CODE_REF form [ICD10AM(1998)::F23] 1024 1108 yield :V_QUALIFIED_TERM_CODE_REF, $& 1025 1109 when /\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/ #ERR_V_QUALIFIED_TERM_CODE_REF 1026 1110 yield :ERR_V_QUALIFIED_TERM_CODE_REF, $& 1027 #when /\A\[([a-zA-Z0-9()._\-]+::[a-zA-Z0-9._\_-]+)\]/1028 #yield :V_TERM_CODE_CONSTRAINT, :V_TERM_CODE_CONSTRAINT1111 when /\A\[([a-zA-Z0-9()._\-]+::[a-zA-Z0-9._\_-]+)\]/ 1112 yield :V_TERM_CODE_CONSTRAINT, :V_TERM_CODE_CONSTRAINT 1029 1113 when /\A\[[a-zA-Z0-9\(\)\._\-]+::[ \t\n]*/ 1030 1114 @adl_type.push(:term_constraint) … … 1049 1133 yield @@cadl_reserved[word.downcase], @@cadl_reserved[word.downcase] 1050 1134 else 1135 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}:#{@lineno}") 1051 1136 yield :V_ATTRIBUTE_IDENTIFIER, word #V_ATTRIBUTE_IDENTIFIER /\A[a-z][a-zA-Z0-9_]*/ 1052 1137 end … … 1070 1155 when /\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+ / #V_REAL 1071 1156 yield :V_REAL, $& 1072 #when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING1157 when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING 1073 1158 when /\A"([^"]*)"/m #V_STRING 1074 1159 yield :V_STRING, $1 1075 1160 when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI 1076 1161 yield :V_URI, $& 1077 when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?|P([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS1078 yield :V_ISO8601_DURATION, $&1162 ### when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?|P([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS 1163 ### yield :V_ISO8601_DURATION, $& 1079 1164 when /\A\S/ #UTF8CHAR 1080 1165 yield :UTF8CHAR, $& … … 1118 1203 yield scanned.value 1119 1204 data = scanned.input 1120 ### when Yaparc::Result::Fail1121 ### raise "Scan Failed: #{scanned}"1122 ### when Yaparc::Result::Error1123 ### raise "Scan Error: #{scanned}"1124 1205 else 1125 1126 1206 end 1127 1207 … … 1134 1214 when /\A--.*\n/ # single line comment 1135 1215 @lineno += 1 1216 @@log.info("#{__FILE__}:#{__LINE__}: scan_dadl: COMMENT = #{$&} at #{@filename}:#{@lineno}") 1136 1217 ; 1137 1218 ###----------/* symbols */ ------------------------------------------------- … … 1253 1334 when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI 1254 1335 yield :V_URI, $& 1255 when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?|P([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS1256 yield :V_ISO8601_DURATION, $&1336 ### when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?|P([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS 1337 ### yield :V_ISO8601_DURATION, $& 1257 1338 when /\A\S/ #UTF8CHAR 1258 1339 yield :UTF8CHAR, $& … … 1351 1432 when /\A--.*$/ # single line comment 1352 1433 @lineno += 1 1434 @@log.info("#{__FILE__}:#{__LINE__}: scan_term_constraint: COMMENT = #{$&} at #{@filename}:#{@lineno}") 1353 1435 ; 1354 1436 when /\A[a-zA-Z0-9\._\-]+[ \t]*,/ # match any line, with ',' termination
Note:
See TracChangeset
for help on using the changeset viewer.