Changeset 290 for ruby/branches/0.5/lib/adl_parser/lib/parser.y
- Timestamp:
- Sep 24, 2009, 9:51:27 AM (15 years ago)
- Location:
- ruby/branches/0.5
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
ruby/branches/0.5
-
Property svn:mergeinfo
set to
/ruby/trunk merged eligible
-
Property svn:mergeinfo
set to
-
ruby/branches/0.5/lib/adl_parser/lib/parser.y
r116 r290 40 40 41 41 archetype_id = val[0][:archetype_id] 42 parent_archtype_id = val[1][:parent_archtype_id] if val[1] 42 43 adl_version = val[0][:arch_head][:arch_meta_data][:adl_version] 43 44 concept = val[2] … … 45 46 archetype = OpenEHR::AM::Archetype::ARCHETYPE.create( 46 47 :archetype_id => archetype_id, 48 :parent_archtype_id => parent_archtype_id, 47 49 :adl_version => adl_version, 48 50 :concept => concept, … … 53 55 archetype.original_language = language 54 56 end 55 @@log .info("#{__FILE__}:#{__LINE__}: archetype = #{archetype} at #{@filename}:#{@lineno}")57 @@logger.debug("#{__FILE__}:#{__LINE__}: archetype = #{archetype.to_yaml} at #{@filename}:#{@lineno}") 56 58 result = archetype 57 59 } … … 104 106 arch_specialisation: #-- empty is ok 105 107 | SYM_SPECIALIZE V_ARCHETYPE_ID 108 { 109 result = {:parent_archtype_id => val[1]} 110 } 106 111 | SYM_SPECIALIZE error 107 112 … … 150 155 { 151 156 assert_at(__FILE__,__LINE__){val[0].instance_of?(OpenEHR::AM::Archetype::Constraint_Model::C_COMPLEX_OBJECT)} 152 @@log .info("#{__FILE__}:#{__LINE__}: c_complex_object = #{val[0]} at #{@filename}:#{@lineno}")157 @@logger.debug("#{__FILE__}:#{__LINE__}: c_complex_object = #{val[0]} at #{@filename}:#{@lineno}") 153 158 result = val[0] 154 159 } … … 201 206 202 207 #------------------------- node types ----------------------- 203 204 c_object: v_c_domain_type 205 { 206 result = val[0] 207 } 208 | c_complex_object 209 { 210 @@log.info("#{__FILE__}:#{__LINE__}: c_complex_object = #{val[0].inspect} at #{@filename}:#{@lineno}") 208 ### http://www.openehr.org/svn/ref_impl_eiffel/TRUNK/components/adl_parser/src/syntax/cadl/parser/cadl_validator.html 209 ### c_object: c_complex_object 210 ### | archetype_internal_ref 211 ### | archetype_slot 212 ### | constraint_ref 213 ### | c_code_phrase 214 ### | c_ordinal 215 ### | c_primitive_object 216 ### | V_C_DOMAIN_TYPE 217 ### | ERR_C_DOMAIN_TYPE 218 ### | error 219 c_object: c_complex_object 220 { 221 @@logger.debug("#{__FILE__}:#{__LINE__}: c_complex_object = #{val[0].inspect} at #{@filename}:#{@lineno}") 211 222 result = val[0] 212 223 } … … 241 252 result = val[0] 242 253 } 254 | v_c_domain_type 255 { 256 result = val[0] 257 } 258 243 259 # | v_c_domain_type 244 260 # | V_C_DOMAIN_TYPE … … 297 313 c_primitive: c_integer 298 314 { 299 @@log .info("#{__FILE__}:#{__LINE__}: c_integer = #{val[0]} at #{@filename}:#{@lineno}")315 @@logger.debug("#{__FILE__}:#{__LINE__}: c_integer = #{val[0]} at #{@filename}:#{@lineno}") 300 316 result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_INTEGER.create do |c_integer| 301 317 c_integer.list … … 306 322 | c_real 307 323 { 308 @@log .info("#{__FILE__}:#{__LINE__}: c_real = #{val[0]} at #{@filename}:#{@lineno}")324 @@logger.debug("#{__FILE__}:#{__LINE__}: c_real = #{val[0]} at #{@filename}:#{@lineno}") 309 325 result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_REAL.new 310 326 } 311 327 | c_date 312 328 { 313 @@log .info("#{__FILE__}:#{__LINE__}: c_date = #{val[0]} at #{@filename}:#{@lineno}")329 @@logger.debug("#{__FILE__}:#{__LINE__}: c_date = #{val[0]} at #{@filename}:#{@lineno}") 314 330 result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_DATE.new 315 331 } 316 332 | c_time 317 333 { 318 @@log .info("#{__FILE__}:#{__LINE__}: c_time = #{val[0]} at #{@filename}:#{@lineno}")334 @@logger.debug("#{__FILE__}:#{__LINE__}: c_time = #{val[0]} at #{@filename}:#{@lineno}") 319 335 result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_TIME.new 320 336 } 321 337 | c_date_time 322 338 { 323 @@log .info("#{__FILE__}:#{__LINE__}: c_date_time = #{val[0]} at #{@filename}:#{@lineno}")339 @@logger.debug("#{__FILE__}:#{__LINE__}: c_date_time = #{val[0]} at #{@filename}:#{@lineno}") 324 340 result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_DATE_TIME.new 325 341 } 326 342 | c_duration 327 343 { 328 @@log .info("#{__FILE__}:#{__LINE__}: c_duration = #{val[0]} at #{@filename}:#{@lineno}")344 @@logger.debug("#{__FILE__}:#{__LINE__}: c_duration = #{val[0]} at #{@filename}:#{@lineno}") 329 345 result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_DURATION.new 330 346 } 331 347 | c_string 332 348 { 333 @@log .info("#{__FILE__}:#{__LINE__}: c_string = #{val[0]} at #{@filename}:#{@lineno}")349 @@logger.debug("#{__FILE__}:#{__LINE__}: c_string = #{val[0]} at #{@filename}:#{@lineno}") 334 350 result = OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_STRING.new 335 351 } … … 337 353 { 338 354 assert_at(__FILE__,__LINE__){val[0].instance_of?(OpenEHR::AM::Archetype::Constraint_Model::Primitive::C_BOOLEAN)} 339 @@log .info("#{__FILE__}:#{__LINE__}: c_boolean = #{val[0]} at #{@filename}:#{@lineno}")355 @@logger.debug("#{__FILE__}:#{__LINE__}: c_boolean = #{val[0]} at #{@filename}:#{@lineno}") 340 356 result = val[0] 341 357 } … … 377 393 c_attr_head: V_ATTRIBUTE_IDENTIFIER c_existence 378 394 { 379 @@log .info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]}, c_existence = #{val[1]} at #{@filename}")395 @@logger.debug("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]}, c_existence = #{val[1]} at #{@filename}") 380 396 result = OpenEHR::AM::Archetype::Constraint_Model::C_SINGLE_ATTRIBUTE.new( 381 397 :rm_attribute_name => val[0], … … 387 403 { 388 404 assert_at(__FILE__,__LINE__){ val[2].instance_of?(OpenEHR::AM::Archetype::Constraint_Model::CARDINALITY) } 389 @@log .info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER: #{val[0]}, c_existence = #{val[1]}, c_cardinality = #{val[2]} at #{@filename}")405 @@logger.debug("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER: #{val[0]}, c_existence = #{val[1]}, c_cardinality = #{val[2]} at #{@filename}") 390 406 result = OpenEHR::AM::Archetype::Constraint_Model::C_MULTIPLE_ATTRIBUTE.new( 391 407 :rm_attribute_name => val[0], … … 469 485 attr_val: attr_id SYM_EQ object_block 470 486 { 471 @@log .info("#{__FILE__}:#{__LINE__}: attr_id = #{val[0]}, object_block = #{val[2]} at #{@filename}:#{@lineno}")487 @@logger.debug("#{__FILE__}:#{__LINE__}: attr_id = #{val[0]} at #{@filename}:#{@lineno}") 472 488 result = {:attr_id => val[0], :object_block => val[2]} 473 489 } … … 475 491 attr_id: V_ATTRIBUTE_IDENTIFIER 476 492 { 477 @@log .info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}:#{@lineno}")493 @@logger.debug("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}:#{@lineno}") 478 494 result = val[0] 479 495 } … … 514 530 multiple_attr_object_block_head: SYM_START_DBLOCK 515 531 { 516 @@log.info("SYM_START_DBLOCK: #{val[0]} at #{@filename}:#{@lineno}")517 532 result = val[0] 518 533 } … … 529 544 keyed_object: object_key SYM_EQ object_block 530 545 { 531 @@log .info("#{__FILE__}:#{__LINE__}: keyed_object = #{val[0]}, object_block = #{val[2]} at #{@filename}:#{@lineno}")532 result = {:object_key => val[0], :object_block => val[ 1]}546 @@logger.debug("#{__FILE__}:#{__LINE__}: keyed_object = #{val[0]} at #{@filename}:#{@lineno}") 547 result = {:object_key => val[0], :object_block => val[2]} 533 548 } 534 549 535 550 object_key: Left_bracket_code simple_value Right_bracket_code 536 551 { 537 @@log .info("object_key: [#{val[1]}] at #{@filename}:#{@lineno}")552 @@logger.debug("object_key: [#{val[1]}] at #{@filename}:#{@lineno}") 538 553 result = val[1] 539 554 } … … 548 563 } 549 564 550 untyped_single_attr_object_block: single_attr_object_complex_head SYM_END_DBLOCK # <>551 { 552 @@log .info("#{__FILE__}:#{__LINE__}: single_attr_object_complex_head = #{val[0]} at #{@filename}:#{@lineno}")565 untyped_single_attr_object_block: single_attr_object_complex_head SYM_END_DBLOCK # > 566 { 567 @@logger.debug("#{__FILE__}:#{__LINE__}: single_attr_object_complex_head = #{val[0]} at #{@filename}:#{@lineno}") 553 568 result = {:single_attr_object_complex_head => val[0]} 554 569 } 555 570 | single_attr_object_complex_head attr_vals SYM_END_DBLOCK 556 571 { 557 @@log .info("#{__FILE__}:#{__LINE__}: single_attr_object_complex_head = #{val[0]},attr_vals = #{val[1]} at #{@filename}:#{@lineno}")572 @@logger.debug("#{__FILE__}:#{__LINE__}: attr_vals = #{val[1]} at #{@filename}:#{@lineno}") 558 573 result = {:single_attr_object_complex_head => val[0], :attr_vals => val[1]} 559 574 } … … 561 576 primitive_object_block: untyped_primitive_object_block 562 577 { 563 @@log .info("#{__FILE__}:#{__LINE__}: untyped_primitive_object_block = #{val[0]} at #{@filename}:#{@lineno}")578 @@logger.debug("#{__FILE__}:#{__LINE__}: untyped_primitive_object_block = #{val[0]} at #{@filename}:#{@lineno}") 564 579 result = {:untyped_primitive_object_block => val[0]} 565 580 } 566 581 | type_identifier untyped_primitive_object_block 567 582 { 568 @@log .info("#{__FILE__}:#{__LINE__}: type_identifier = #{val[0]}, untyped_primitive_object_block = #{val[1]} at #{@filename}:#{@lineno}")583 @@logger.debug("#{__FILE__}:#{__LINE__}: type_identifier = #{val[0]}, untyped_primitive_object_block = #{val[1]} at #{@filename}:#{@lineno}") 569 584 result = {:type_identifier => val[0], :untyped_primitive_object_block => val[1]} 570 585 } 571 586 untyped_primitive_object_block: SYM_START_DBLOCK primitive_object_value SYM_END_DBLOCK 572 587 { 573 @@log .info("#{__FILE__}:#{__LINE__}: primitive_object_block = <#{val[1]}> at #{@filename}:#{@lineno}")588 @@logger.debug("#{__FILE__}:#{__LINE__}: primitive_object_block = <#{val[1]}> at #{@filename}:#{@lineno}") 574 589 result = val[1] 575 590 } … … 596 611 simple_value: string_value 597 612 { 598 @@log .info("string_value: #{val[0]} at #{@filename}:#{@lineno}")613 @@logger.debug("string_value: #{val[0]} at #{@filename}:#{@lineno}") 599 614 result = val[0] 600 615 } 601 616 | integer_value 602 617 { 603 @@log .info("integer_value: #{val[0]} at #{@filename}:#{@lineno}")618 @@logger.debug("integer_value: #{val[0]} at #{@filename}:#{@lineno}") 604 619 result = val[0] 605 620 } 606 621 | real_value 607 622 { 608 @@log .info("real_value: #{val[0]} at #{@filename}:#{@lineno}")623 @@logger.debug("real_value: #{val[0]} at #{@filename}:#{@lineno}") 609 624 result = val[0] 610 625 } 611 626 | boolean_value 612 627 { 613 @@log .info("boolean_value: #{val[0]} at #{@filename}:#{@lineno}")628 @@logger.debug("boolean_value: #{val[0]} at #{@filename}:#{@lineno}") 614 629 result = val[0] 615 630 } 616 631 | character_value 617 632 { 618 @@log .info("character_value: #{val[0]} at #{@filename}:#{@lineno}")633 @@logger.debug("character_value: #{val[0]} at #{@filename}:#{@lineno}") 619 634 result = val[0] 620 635 } 621 636 | date_value 622 637 { 623 @@log .info("date_value: #{val[0]} at #{@filename}:#{@lineno}")638 @@logger.debug("date_value: #{val[0]} at #{@filename}:#{@lineno}") 624 639 result = val[0] 625 640 } 626 641 | time_value 627 642 { 628 @@log .info("time_value: #{val[0]} at #{@filename}:#{@lineno}")643 @@logger.debug("time_value: #{val[0]} at #{@filename}:#{@lineno}") 629 644 result = val[0] 630 645 } 631 646 | date_time_value 632 647 { 633 @@log .info("date_time_value: #{val[0]} at #{@filename}:#{@lineno}")648 @@logger.debug("date_time_value: #{val[0]} at #{@filename}:#{@lineno}") 634 649 result = val[0] 635 650 } 636 651 | duration_value 637 652 { 638 @@log .info("duration_value: #{val[0]} at #{@filename}:#{@lineno}")653 @@logger.debug("duration_value: #{val[0]} at #{@filename}:#{@lineno}") 639 654 result = val[0] 640 655 } 641 656 | uri_value 642 657 { 643 @@log .info("uri_value: #{val[0]} at #{@filename}:#{@lineno}")658 @@logger.debug("uri_value: #{val[0]} at #{@filename}:#{@lineno}") 644 659 result = val[0] 645 660 } … … 664 679 type_identifier: V_TYPE_IDENTIFIER 665 680 { 666 @@log .info("V_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}")681 @@logger.debug("V_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}") 667 682 result = val[0] 668 683 } 669 684 | V_GENERIC_TYPE_IDENTIFIER 670 685 { 671 @@log .info("V_GENERIC_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}")686 @@logger.debug("V_GENERIC_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}") 672 687 result = val[0] 673 688 } … … 675 690 string_value: V_STRING 676 691 { 677 @@log .info("V_STRING: #{val[0]} at #{@filename}:#{@lineno}")692 @@logger.debug("V_STRING: #{val[0]} at #{@filename}:#{@lineno}") 678 693 result = val[0] 679 694 } … … 790 805 791 806 date_value: V_ISO8601_EXTENDED_DATE 807 { 808 result = val[0] 809 } 792 810 793 811 date_list_value: date_value Comma_code date_value … … 839 857 duration_value: V_ISO8601_DURATION 840 858 { 841 @@log .info("V_ISO8601_DURATION: #{val[0]} at #{@filename}:#{@lineno}")859 @@logger.debug("V_ISO8601_DURATION: #{val[0]} at #{@filename}:#{@lineno}") 842 860 result = val[0] 843 861 } … … 859 877 term_code: V_QUALIFIED_TERM_CODE_REF 860 878 { 861 @@log .info("#{__FILE__}:#{__LINE__}: V_QUALIFIED_TERM_CODE_REF = #{val[0]} at #{@filename}:#{@lineno}")879 @@logger.debug("#{__FILE__}:#{__LINE__}: V_QUALIFIED_TERM_CODE_REF = #{val[0]} at #{@filename}:#{@lineno}") 862 880 result = val[0] 863 881 } … … 869 887 uri_value: V_URI 870 888 { 871 @@log .info("#{__FILE__}:#{__LINE__}: V_URI = #{val[0]} at #{@filename}:#{@lineno}")889 @@logger.debug("#{__FILE__}:#{__LINE__}: V_URI = #{val[0]} at #{@filename}:#{@lineno}") 872 890 result = val[0] 873 891 } … … 939 957 path_segment: V_ATTRIBUTE_IDENTIFIER V_LOCAL_TERM_CODE_REF 940 958 { 941 @@log .info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}")959 @@logger.debug("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}") 942 960 } 943 961 | V_ATTRIBUTE_IDENTIFIER 944 962 { 945 @@log .info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}")963 @@logger.debug("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}") 946 964 } 947 965 … … 1116 1134 { 1117 1135 @in_interval = false 1118 @@log .info("#{__FILE__}:#{__LINE__}, #{val[0]}|#{val[2]} at #{@filename}")1136 @@logger.debug("#{__FILE__}:#{__LINE__}, #{val[0]}|#{val[2]} at #{@filename}") 1119 1137 } 1120 1138 … … 1129 1147 } 1130 1148 1131 # term_code_constraint_section: START_TERM_CODE_CONSTRAINT term_code_body Right_bracket_code1149 # [[a-zA-Z0-9\(\)\._\-]+::[ \t\n]* [[a-zA-Z0-9\._\-]*[ \t]*] 1132 1150 term_code_constraint_section: START_TERM_CODE_CONSTRAINT term_code_body END_TERM_CODE_CONSTRAINT 1151 { 1152 @@logger.debug("#{__FILE__}:#{__LINE__}, START_TERM_CODE_CONSTRAINT = #{val[0]} at #{@filename}") 1153 @@logger.debug("#{__FILE__}:#{__LINE__}, term_code_body = #{val[1]}") 1154 @@logger.debug("#{__FILE__}:#{__LINE__}, END_TERM_CODE_CONSTRAINT = #{val[2]}") 1155 result = val[1] 1156 } 1157 1158 1133 1159 term_code_body: # empty 1134 1160 | TERM_CODE 1135 1161 | term_code_body TERM_CODE 1136 ### term_code_constraint_section: START_TERM_CODE_CONSTRAINT term_code_body END_TERM_CODE_CONSTRAINT1137 1162 ### term_code_body: TERM_CODE 1138 1163 ### | term_code_body TERM_CODE … … 1150 1175 | V_ATTRIBUTE_IDENTIFIER 1151 1176 { 1152 @@log .info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}")1177 @@logger.debug("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}") 1153 1178 result = val[0] 1154 1179 } … … 1171 1196 $:.unshift File.join(File.dirname(__FILE__)) 1172 1197 require 'logger' 1173 #require 'lib/util.rb' 1174 #require 'lib/scanner.rb' 1175 require 'lib/adl_parser.rb' 1198 require 'yaml' 1176 1199 require 'rubygems' 1200 require 'adl_parser.rb' 1177 1201 require 'am.rb' 1202 require 'rm.rb' 1178 1203 $DEBUG = false 1179 1204 … … 1189 1214 1190 1215 if $DEBUG 1191 @@log = Logger.new('log/parser.log','daily')1192 @@log .level = Logger::INFO1216 @@logger = Logger.new('log/parser.log','daily') 1217 @@logger.level = Logger::DEBUG 1193 1218 else 1194 @@log = Logger.new(STDOUT)1195 @@log .level = Logger::WARN1219 @@logger = Logger.new(STDOUT) 1220 @@logger.level = Logger::WARN 1196 1221 end 1197 1222 1198 @@dadl_scanner = OpenEHR::ADL::Scanner::DADL::RootScanner.new1199 @@cadl_scanner = OpenEHR::ADL::Scanner::CADL::RootScanner.new1200 1223 1201 1224 ###----------/* keywords */ --------------------------------------------- … … 1257 1280 ###----------/* Scanner */ ----------------------------------------------- 1258 1281 1282 1259 1283 def scan 1284 @@logger.debug("#{__FILE__}:#{__LINE__}: Entering scan at #{@filename}:#{@lineno}:") 1285 scanner = OpenEHR::ADL::Scanner::ADLScanner.new(@adl_type, @filename) 1286 1260 1287 until @data.nil? do 1261 case @adl_type.last 1262 when :adl 1263 @data = scan_adl(@data) do |sym, val| 1288 @data = scanner.scan(@data) do |sym, val| 1264 1289 yield sym, val 1265 end1266 when :dadl1267 @data = scan_dadl(@data) do |sym, val|1268 yield sym, val1269 end1270 when :cadl1271 @data = scan_cadl(@data) do |sym, val|1272 yield sym, val1273 end1274 when :regexp1275 @data = scan_regexp(@data) do |sym, val|1276 yield sym, val1277 end1278 else1279 raise1280 1290 end 1281 1291 @data = $' # variable $' receives the string after the match … … 1284 1294 yield false, '$' 1285 1295 end # of scan 1286 1287 def scan_adl(data)1288 until data.nil? do1289 case @adl_type.last1290 when :adl1291 # puts "Entering scan_adl"1292 case data1293 when /\A\n/ # carriage return1294 @lineno += 11295 ;1296 when /\A[ \t\r\f]+/ #just drop it1297 ;1298 when /\A--.*\n/ # single line comment1299 @lineno += 11300 @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: COMMENT = #{$&} at #{@filename}:#{@lineno}")1301 ;1302 when /\Adescription/ # description1303 yield :SYM_DESCRIPTION, :SYM_DESCRIPTION1304 when /\Adefinition/ # definition1305 yield :SYM_DEFINITION, :SYM_DEFINITION1306 # @adl_type.push(:cadl)1307 ###----------/* symbols */ -------------------------------------------------1308 when /\A[A-Z][a-zA-Z0-9_]*/1309 yield :V_TYPE_IDENTIFIER, $&1310 when /\A[a-zA-Z][a-zA-Z0-9_-]+\.[a-zA-Z][a-zA-Z0-9_-]+\.[a-zA-Z0-9]+/ #V_ARCHETYPE_ID1311 yield :V_ARCHETYPE_ID, $&1312 when /\A[a-z][a-zA-Z0-9_]*/1313 # word = $&.downcase1314 word = $&1315 if @@adl_reserved[word]1316 @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: @@adl_reserved = #{@@adl_reserved[word]} at #{@filename}:#{@lineno}")1317 yield @@adl_reserved[word], @@adl_reserved[word]1318 elsif #/\A[A-Z][a-zA-Z0-9_]*/1319 @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: V_ATTRIBUTE_IDENTIFIER = #{$&} at #{@filename}:#{@lineno}")1320 yield :V_ATTRIBUTE_IDENTIFIER, $&1321 end1322 when /\A\=/ # =1323 yield :SYM_EQ, :SYM_EQ1324 when /\A\>=/ # >=1325 yield :SYM_GE, :SYM_GE1326 when /\A\<=/ # <=1327 yield :SYM_LE, :SYM_LE1328 when /\A\</ # <1329 if @in_interval1330 # @start_block_received = false1331 yield :SYM_LT, :SYM_LT1332 else1333 # @start_block_received = true1334 @adl_type.push(:dadl)1335 yield :SYM_START_DBLOCK, $&1336 end1337 when /\A\>/ # >1338 if @in_interval1339 yield :SYM_GT, :SYM_GT1340 else1341 adl_type = @adl_type.pop1342 # puts "Escaping #{adl_type}"1343 assert_at(__FILE__,__LINE__){adl_type == :dadl}1344 yield :SYM_END_DBLOCK, :SYM_END_DBLOCK1345 end1346 when /\A\{/ # {1347 @adl_type.push(:cadl)1348 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}")1349 yield :SYM_START_CBLOCK, :SYM_START_CBLOCK1350 when /\A\}/ # }1351 adl_type = @adl_type.pop1352 # puts "Escaping #{adl_type}"1353 assert_at(__FILE__,__LINE__){adl_type == :cadl}1354 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}")1355 yield :SYM_END_CBLOCK, $&1356 when /\A\-/ # -1357 yield :Minus_code, :Minus_code1358 when /\A\+/ # +1359 yield :Plus_code, :Plus_code1360 when /\A\*/ # *1361 yield :Star_code, :Star_code1362 when /\A\// # /1363 yield :Slash_code, :Slash_code1364 when /\A\^/ # ^1365 yield :Caret_code, :Caret_code1366 when /\A\=/ # =1367 yield :Equal_code, :Equal_code1368 when /\A\.\.\./ # ...1369 yield :SYM_LIST_CONTINUE, :SYM_LIST_CONTINUE1370 when /\A\.\./ # ..1371 yield :SYM_ELLIPSIS, :SYM_ELLIPSIS1372 when /\A\./ # .1373 yield :Dot_code, :Dot_code1374 when /\A\;/ # ;1375 yield :Semicolon_code, :Semicolon_code1376 when /\A\,/ # ,1377 yield :Comma_code, :Comma_code1378 when /\A\:/ # :1379 yield :Colon_code, :Colon_code1380 when /\A\!/ # !1381 yield :Exclamation_code, :Exclamation_code1382 when /\A\(/ # (1383 yield :Left_parenthesis_code, :Left_parenthesis_code1384 when /\A\)/ # )1385 yield :Right_parenthesis_code, :Right_parenthesis_code1386 when /\A\$/ # $1387 yield :Dollar_code, :Dollar_code1388 when /\A\?\?/ # ??1389 yield :SYM_DT_UNKNOWN, :SYM_DT_UNKNOWN1390 when /\A\?/ # ?1391 yield :Question_mark_code, :Question_mark_code1392 when /\A[0-9]+\.[0-9]+(\.[0-9]+)*/ # ?1393 yield :V_VERSION_STRING, :V_VERSION_STRING1394 when /\A\|/ # |1395 if @in_interval1396 @in_interval = false1397 else1398 @in_interval = true1399 end1400 yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM1401 when /\A\[[a-zA-Z0-9()\._-]+::[a-zA-Z0-9\._-]+\]/1402 # when /\A\[[a-zA-Z0-9()\._-]+\:\:[a-zA-Z0-9\._-]+\]/ #V_QUALIFIED_TERM_CODE_REF form [ICD10AM(1998)::F23]1403 yield :V_QUALIFIED_TERM_CODE_REF, $&1404 when /\A\[[a-zA-Z0-9][a-zA-Z0-9._\-]*\]/ #V_LOCAL_TERM_CODE_REF1405 yield :V_LOCAL_TERM_CODE_REF, $&1406 when /\A\[/ # [1407 yield :Left_bracket_code, :Left_bracket_code1408 when /\A\]/ # ]1409 yield :Right_bracket_code, :Right_bracket_code1410 1411 when /\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/ #ERR_V_QUALIFIED_TERM_CODE_REF1412 yield :ERR_V_QUALIFIED_TERM_CODE_REF, $&1413 when /\Aa[ct][0-9.]+/ #V_LOCAL_CODE1414 yield :V_LOCAL_CODE, $&1415 when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9](Z|[+-][0-9]{4})?/ #V_ISO8601_EXTENDED_DATE_TIME YYYY-MM-DDThh:mm:ss[,sss][Z|+/- -n-n-n-n-]-1416 yield :V_ISO8601_EXTENDED_DATE_TIME, $&1417 when /\A[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?|[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})? / #V_ISO8601_EXTENDED_TIME hh:mm:ss[,sss][Z|+/-nnnn]1418 yield :V_ISO8601_EXTENDED_TIME, $&1419 when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]|[0-9]{4}-[0-1][0-9]/ #V_ISO8601_EXTENDED_DATE YYYY-MM-DD1420 yield :V_ISO8601_EXTENDED_DATE, $&1421 when /\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/ #V_GENERIC_TYPE_IDENTIFIER1422 yield :V_GENERIC_TYPE_IDENTIFIER, $&1423 when /\A[0-9]+|[0-9]+[eE][+-]?[0-9]+/ #V_INTEGER1424 yield :V_INTEGER, $&1425 when /\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+ / #V_REAL1426 yield :V_REAL, $&1427 # when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING1428 when /\A"([^"]*)"/m #V_STRING1429 yield :V_STRING, $11430 when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI1431 yield :V_URI, $&1432 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 PnYnMnWnDTnnHnnMnnS1433 yield :V_ISO8601_DURATION, $&1434 when /\A\S/ #UTF8CHAR1435 yield :UTF8CHAR, $&1436 end1437 data = $' # variable $' receives the string after the match1438 when :dadl1439 # puts "Entering scan_dadl"1440 data = scan_dadl(data) do |sym, val|1441 yield sym, val1442 end1443 when :cadl1444 # puts "Entering scan_cadl"1445 data = scan_cadl(data) do |sym, val|1446 yield sym, val1447 end1448 when :regexp1449 # puts "Entering scan_regexp"1450 data = scan_regexp(data) do |sym, val|1451 yield sym, val1452 end1453 when :term_constraint1454 # puts "Entering scan_term_constraint"1455 data = scan_term_constraint(data) do |sym, val|1456 yield sym, val1457 end1458 else1459 raise1460 end1461 end1462 end # scan_adl1463 1464 1465 def scan_cadl(data)1466 until data.nil? do1467 case @adl_type.last1468 when :cadl1469 # puts "Entering scan_cadl"1470 case scanned = @@cadl_scanner.parse(data)1471 when Yaparc::Result::OK1472 if scanned.value[0] == :START_V_C_DOMAIN_TYPE_BLOCK1473 @in_c_domain_type = true1474 @adl_type.push(:dadl)1475 yield scanned.value1476 else1477 yield scanned.value1478 end1479 data = scanned.input1480 end1481 1482 case data1483 when /\A\n/ # carriage return1484 @lineno += 11485 ;1486 when /\A[ \t\r\f]+/ #just drop it1487 ;1488 when /\A--.*\n/ # single line comment1489 @lineno += 11490 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: COMMENT = #{$&} at #{@filename}:#{@lineno}")1491 ;1492 ###----------/* symbols */ -------------------------------------------------1493 when /\A\=/ # =1494 yield :SYM_EQ, :SYM_EQ1495 when /\A\>=/ # >=1496 yield :SYM_GE, :SYM_GE1497 when /\A\<=/ # <=1498 yield :SYM_LE, :SYM_LE1499 ### when /\A[A-Z][a-zA-Z0-9_]*[ \n]*\</ # V_C_DOMAIN_TYPE1500 ### @in_c_domain_type = true1501 ### @adl_type.push(:dadl)1502 ### yield :START_V_C_DOMAIN_TYPE_BLOCK, $&1503 when /\A\</ # <1504 if @in_interval1505 yield :SYM_LT, :SYM_LT1506 else1507 @adl_type.push(:dadl)1508 yield :SYM_START_DBLOCK, $&1509 end1510 when /\A\>/ # >1511 if @in_interval1512 yield :SYM_GT, :SYM_GT1513 else1514 adl_type = @adl_type.pop1515 # puts "Escaping #{adl_type}"1516 assert_at(__FILE__,__LINE__){adl_type == :dadl}1517 yield :SYM_END_DBLOCK, :SYM_END_DBLOCK1518 end1519 when /\A\-/ # -1520 yield :Minus_code, :Minus_code1521 when /\A\+/ # +1522 yield :Plus_code, :Plus_code1523 when /\A\*/ # *1524 yield :Star_code, :Star_code1525 when /\A\// # /1526 yield :Slash_code, :Slash_code1527 when /\A\^/ # ^1528 yield :Caret_code, :Caret_code1529 when /\A\.\.\./ # ...1530 yield :SYM_LIST_CONTINUE, :SYM_LIST_CONTINUE1531 when /\A\.\./ # ..1532 yield :SYM_ELLIPSIS, :SYM_ELLIPSIS1533 when /\A\./ # .1534 yield :Dot_code, :Dot_code1535 when /\A\;/ # ;1536 yield :Semicolon_code, :Semicolon_code1537 when /\A\,/ # ,1538 yield :Comma_code, :Comma_code1539 when /\A\:/ # :1540 yield :Colon_code, :Colon_code1541 when /\A\!/ # !1542 yield :Exclamation_code, :Exclamation_code1543 when /\A\(/ # (1544 yield :Left_parenthesis_code, :Left_parenthesis_code1545 when /\A\)/ # )1546 yield :Right_parenthesis_code, :Right_parenthesis_code1547 when /\A\{\// #V_REGEXP1548 if @adl_type.last != :regexp1549 @in_regexp = true1550 @adl_type.push(:regexp)1551 yield :START_REGEXP_BLOCK, :START_REGEXP_BLOCK1552 else1553 raise1554 end1555 # yield :V_REGEXP, :V_REGEXP1556 when /\A\{/ # {1557 @adl_type.push(:cadl)1558 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}")1559 yield :SYM_START_CBLOCK, :SYM_START_CBLOCK1560 when /\A\}/ # }1561 adl_type = @adl_type.pop1562 # puts "Escaping #{adl_type}"1563 assert_at(__FILE__,__LINE__){adl_type == :cadl}1564 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}")1565 yield :SYM_END_CBLOCK, :SYM_END_CBLOCK1566 when /\A\$/ # $1567 yield :Dollar_code, :Dollar_code1568 when /\A\?\?/ # ??1569 yield :SYM_DT_UNKNOWN, :SYM_DT_UNKNOWN1570 when /\A\?/ # ?1571 yield :Question_mark_code, :Question_mark_code1572 when /\A\|/ # |1573 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: @in_interval = #{@in_interval} at #{@filename}:#{@lineno}")1574 if @in_interval1575 @in_interval = false1576 else1577 # @in_interval = false1578 @in_interval = true1579 end1580 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: SYM_INTERVAL_DELIM at #{@filename}:#{@lineno}")1581 yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM1582 1583 when /\A\[[a-zA-Z0-9._\-]+::[a-zA-Z0-9._\-]+\]/ #V_QUALIFIED_TERM_CODE_REF form [ICD10AM(1998)::F23]1584 yield :V_QUALIFIED_TERM_CODE_REF, $&1585 when /\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/ #ERR_V_QUALIFIED_TERM_CODE_REF1586 yield :ERR_V_QUALIFIED_TERM_CODE_REF, $&1587 when /\A\[([a-zA-Z0-9()._\-]+::[a-zA-Z0-9._\_-]+)\]/1588 yield :V_TERM_CODE_CONSTRAINT, :V_TERM_CODE_CONSTRAINT1589 when /\A\[[a-zA-Z0-9\(\)\._\-]+::[ \t\n]*/1590 @adl_type.push(:term_constraint)1591 yield :START_TERM_CODE_CONSTRAINT, $&1592 when /\A\[[a-zA-Z0-9][a-zA-Z0-9._\-]*\]/ #V_LOCAL_TERM_CODE_REF1593 yield :V_LOCAL_TERM_CODE_REF, $&1594 when /\A\[/ # [1595 yield :Left_bracket_code, :Left_bracket_code1596 when /\A\]/ # ]1597 yield :Right_bracket_code, :Right_bracket_code1598 when /\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/ #V_GENERIC_TYPE_IDENTIFIER1599 yield :V_GENERIC_TYPE_IDENTIFIER, $&1600 when /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X][T\t][hH?X][hH?X]:[mM?X][mM?X]:[sS?X][sS?X]/1601 yield :V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN, $&1602 when /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X]/1603 yield :V_ISO8601_DATE_CONSTRAINT_PATTERN, $&1604 when /\A[hH][hH]:[mM?X][mM?X]:[sS?X][sS?X]/1605 yield :V_ISO8601_TIME_CONSTRAINT_PATTERN, $&1606 when /\A[a-z][a-zA-Z0-9_]*/1607 word = $&.dup1608 if @@cadl_reserved[word.downcase]1609 yield @@cadl_reserved[word.downcase], @@cadl_reserved[word.downcase]1610 else1611 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}:#{@lineno}")1612 yield :V_ATTRIBUTE_IDENTIFIER, word #V_ATTRIBUTE_IDENTIFIER /\A[a-z][a-zA-Z0-9_]*/1613 end1614 when /\A[A-Z][a-zA-Z0-9_]*/1615 word = $&.dup1616 if @@cadl_reserved[word.downcase]1617 yield @@cadl_reserved[word.downcase], @@cadl_reserved[word.downcase]1618 else1619 yield :V_TYPE_IDENTIFIER, $&1620 end1621 when /\Aa[ct][0-9.]+/ #V_LOCAL_CODE1622 yield :V_LOCAL_CODE, $&1623 when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9](Z|[+-][0-9]{4})?/ #V_ISO8601_EXTENDED_DATE_TIME YYYY-MM-DDThh:mm:ss[,sss][Z|+/- -n-n-n-n-]-1624 yield :V_ISO8601_EXTENDED_DATE_TIME, $&1625 when /\A[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?|[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})? / #V_ISO8601_EXTENDED_TIME hh:mm:ss[,sss][Z|+/-nnnn]1626 yield :V_ISO8601_EXTENDED_TIME, $&1627 when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]|[0-9]{4}-[0-1][0-9]/ #V_ISO8601_EXTENDED_DATE YYYY-MM-DD1628 yield :V_ISO8601_EXTENDED_DATE, $&1629 when /\A[0-9]+|[0-9]+[eE][+-]?[0-9]+/ #V_INTEGER1630 yield :V_INTEGER, $&1631 when /\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+ / #V_REAL1632 yield :V_REAL, $&1633 when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING1634 when /\A"([^"]*)"/m #V_STRING1635 yield :V_STRING, $11636 when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI1637 yield :V_URI, $&1638 ### 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 PnYnMnWnDTnnHnnMnnS1639 ### yield :V_ISO8601_DURATION, $&1640 when /\A\S/ #UTF8CHAR1641 yield :UTF8CHAR, $&1642 else1643 raise1644 end1645 data = $' # variable $' receives the string after the match1646 when :adl1647 # puts "Entering scan_adl"1648 data = scan_adl(data) do |sym, val|1649 yield sym, val1650 end1651 when :dadl1652 # puts "Entering scan_dadl"1653 data = scan_dadl(data) do |sym, val|1654 yield sym, val1655 end1656 when :regexp1657 # puts "Entering scan_regexp"1658 data = scan_regexp(data) do |sym, val|1659 yield sym, val1660 end1661 when :term_constraint1662 # puts "Entering scan_term_constraint"1663 data = scan_term_constraint(data) do |sym, val|1664 yield sym, val1665 end1666 else1667 raise1668 end1669 end # of until1670 end # of scan_cadl1671 1672 def scan_dadl(data)1673 until data.nil? do1674 case @adl_type.last1675 when :dadl1676 # puts "Entering scan_dadl"1677 case scanned = @@dadl_scanner.parse(data)1678 when Yaparc::Result::OK1679 yield scanned.value1680 data = scanned.input1681 else1682 end1683 1684 case data1685 when /\A\n/ # carriage return1686 @lineno += 11687 ;1688 when /\A[ \t\r\f]+/ #just drop it1689 ;1690 when /\A--.*\n/ # single line comment1691 @lineno += 11692 @@log.info("#{__FILE__}:#{__LINE__}: scan_dadl: COMMENT = #{$&} at #{@filename}:#{@lineno}")1693 ;1694 ###----------/* symbols */ -------------------------------------------------1695 when /\A\=/ # =1696 yield :SYM_EQ, :SYM_EQ1697 when /\A\>\=/ # >=1698 yield :SYM_GE, :SYM_GE1699 when /\A\<\=/ # <=1700 yield :SYM_LE, :SYM_LE1701 when /\A\</ # <1702 if @in_interval1703 yield :SYM_LT, :SYM_LT1704 else1705 @adl_type.push(:dadl)1706 yield :SYM_START_DBLOCK, :SYM_START_DBLOCK1707 end1708 when /\A\>/ # >1709 if @in_interval1710 # @in_interval = false1711 yield :SYM_GT, :SYM_GT1712 elsif @in_c_domain_type == true1713 assert_at(__FILE__,__LINE__){@adl_type.last == :dadl}1714 adl_type = @adl_type.pop1715 if @adl_type.last == :cadl1716 @in_c_domain_type = false1717 yield :END_V_C_DOMAIN_TYPE_BLOCK, $&1718 else1719 yield :SYM_END_DBLOCK, $&1720 end1721 elsif @in_c_domain_type == false1722 adl_type = @adl_type.pop1723 # puts "Escaping #{adl_type}"1724 assert_at(__FILE__,__LINE__){adl_type == :dadl}1725 yield :SYM_END_DBLOCK, $&1726 else1727 raise1728 end1729 when /\A\-/ # -1730 yield :Minus_code, :Minus_code1731 when /\A\+/ # +1732 yield :Plus_code, :Plus_code1733 when /\A\*/ # *1734 yield :Star_code, :Star_code1735 when /\A\// # /1736 yield :Slash_code, :Slash_code1737 when /\A\^/ # ^1738 yield :Caret_code, :Caret_code1739 when /\A\.\.\./ # ...1740 yield :SYM_LIST_CONTINUE, :SYM_LIST_CONTINUE1741 when /\A\.\./ # ..1742 yield :SYM_ELLIPSIS, :SYM_ELLIPSIS1743 when /\A\./ # .1744 yield :Dot_code, :Dot_code1745 when /\A\;/ # ;1746 yield :Semicolon_code, :Semicolon_code1747 when /\A\,/ # ,1748 yield :Comma_code, :Comma_code1749 when /\A\:/ # :1750 yield :Colon_code, :Colon_code1751 when /\A\!/ # !1752 yield :Exclamation_code, :Exclamation_code1753 when /\A\(/ # (1754 yield :Left_parenthesis_code, :Left_parenthesis_code1755 when /\A\)/ # )1756 yield :Right_parenthesis_code, :Right_parenthesis_code1757 when /\A\$/ # $1758 yield :Dollar_code, :Dollar_code1759 when /\A\?\?/ # ??1760 yield :SYM_DT_UNKNOWN, :SYM_DT_UNKNOWN1761 when /\A\?/ # ?1762 yield :Question_mark_code, :Question_mark_code1763 when /\A\|/ # |1764 @@log.info("#{__FILE__}:#{__LINE__}: scan_dadl: @in_interval = #{@in_interval} at #{@filename}:#{@lineno}")1765 if @in_interval1766 @in_interval = false1767 else1768 # @in_interval = false1769 @in_interval = true1770 end1771 @@log.info("#{__FILE__}:#{__LINE__}: scan_dadl: SYM_INTERVAL_DELIM at #{@filename}:#{@lineno}")1772 yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM1773 ### when /\A\[[a-zA-Z0-9()\._-]+::[a-zA-Z0-9\._-]+\]/ #V_QUALIFIED_TERM_CODE_REF form [ICD10AM(1998)::F23]1774 ### yield :V_QUALIFIED_TERM_CODE_REF, $&1775 ### when /\A\[[a-zA-Z0-9][a-zA-Z0-9._\-]*\]/ #V_LOCAL_TERM_CODE_REF1776 ### yield :V_LOCAL_TERM_CODE_REF, $&1777 ### when /\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/ #ERR_V_QUALIFIED_TERM_CODE_REF1778 ### yield :ERR_V_QUALIFIED_TERM_CODE_REF, $&1779 when /\A\[/ # [1780 yield :Left_bracket_code, :Left_bracket_code1781 when /\A\]/ # ]1782 yield :Right_bracket_code, :Right_bracket_code1783 ### when /\A[A-Z][a-zA-Z0-9_-]*/1784 ### yield :V_TYPE_IDENTIFIER, $&1785 ### when /\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/ #V_GENERIC_TYPE_IDENTIFIER1786 ### yield :V_GENERIC_TYPE_IDENTIFIER, $&1787 ### when /\A[a-z][a-zA-Z0-9_]*/1788 ### word = $&.downcase1789 ### if @@dadl_reserved[word]1790 ### yield @@dadl_reserved[word], @@dadl_reserved[word]1791 ### else1792 ### yield :V_ATTRIBUTE_IDENTIFIER, $&1793 ### end1794 ### when /\Aa[ct][0-9.]+/ #V_LOCAL_CODE1795 ### yield :V_LOCAL_CODE, $&1796 when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9](Z|[+-][0-9]{4})?/ #V_ISO8601_EXTENDED_DATE_TIME YYYY-MM-DDThh:mm:ss[,sss][Z|+/- -n-n-n-n-]-1797 yield :V_ISO8601_EXTENDED_DATE_TIME, $&1798 when /\A[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?|[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})? / #V_ISO8601_EXTENDED_TIME hh:mm:ss[,sss][Z|+/-nnnn]1799 yield :V_ISO8601_EXTENDED_TIME, $&1800 when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]|[0-9]{4}-[0-1][0-9]/ #V_ISO8601_EXTENDED_DATE YYYY-MM-DD1801 yield :V_ISO8601_EXTENDED_DATE, $&1802 when /\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/ #V_GENERIC_TYPE_IDENTIFIER1803 yield :V_GENERIC_TYPE_IDENTIFIER, $&1804 when /\A[0-9]+|[0-9]+[eE][+-]?[0-9]+/ #V_INTEGER1805 yield :V_INTEGER, $&1806 ### when /\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+ / #V_REAL1807 ### yield :V_REAL, $&1808 # when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING1809 ### when /\A"([^"]*)"/m #V_STRING1810 ### yield :V_STRING, $11811 when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI1812 yield :V_URI, $&1813 ### 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 PnYnMnWnDTnnHnnMnnS1814 ### yield :V_ISO8601_DURATION, $&1815 when /\A\S/ #UTF8CHAR1816 yield :UTF8CHAR, $&1817 end1818 data = $' # variable $' receives the string after the match1819 when :adl1820 # puts "Entering scan_adl"1821 data = scan_adl(data) do |sym, val|1822 yield sym, val1823 end1824 when :cadl1825 # puts "Entering scan_cadl"1826 data = scan_cadl(data) do |sym, val|1827 yield sym, val1828 end1829 when :regexp1830 # puts "Entering scan_regexp"1831 data = scan_regexp(data) do |sym, val|1832 yield sym, val1833 end1834 when :term_constraint1835 # puts "Entering scan_term_constraint"1836 data = scan_term_constraint(data) do |sym, val|1837 yield sym, val1838 end1839 else1840 raise1841 end1842 end1843 end # of scan_dadl1844 1845 def scan_regexp(data)1846 until data.nil? do1847 case @adl_type.last1848 when :regexp1849 # puts "Entering scan_regexp"1850 case data1851 when /\A\/\}/ #V_REGEXP1852 if @adl_type.last == :regexp1853 @in_regexp = false1854 @adl_type.pop1855 yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK1856 else1857 raise1858 end1859 when /\A(.*)(\/\})/ #V_REGEXP1860 yield :REGEXP_BODY, $11861 if @adl_type.last == :regexp1862 @in_regexp = false1863 @adl_type.pop1864 yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK1865 else1866 raise1867 end1868 else1869 raise data1870 end1871 data = $' # variable $' receives the string after the match1872 when :adl1873 # puts "Entering scan_adl"1874 data = scan_adl(data) do |sym, val|1875 yield sym, val1876 end1877 when :dadl1878 # puts "Entering scan_dadl"1879 data = scan_dadl(data) do |sym, val|1880 yield sym, val1881 end1882 when :cadl1883 # puts "Entering scan_cadl"1884 data = scan_cadl(data) do |sym, val|1885 yield sym, val1886 end1887 when :term_constraint1888 # puts "Entering scan_term_constraint"1889 data = scan_term_constraint(data) do |sym, val|1890 yield sym, val1891 end1892 else1893 raise1894 end1895 end1896 end # of scan_regexp1897 1898 def scan_term_constraint(data)1899 until data.nil? do1900 case @adl_type.last1901 when :term_constraint1902 # puts "Entering scan_term_constraint"1903 case data1904 when /\A\n/ # carriage return1905 @lineno += 11906 ;1907 when /\A[ \t\r\f]+/ #just drop it1908 ;1909 when /\A--.*$/ # single line comment1910 @lineno += 11911 @@log.info("#{__FILE__}:#{__LINE__}: scan_term_constraint: COMMENT = #{$&} at #{@filename}:#{@lineno}")1912 ;1913 when /\A[a-zA-Z0-9\._\-]+[ \t]*,/ # match any line, with ',' termination1914 yield :TERM_CODE, $&1915 when /\A[a-zA-Z0-9\._\-]+[ \t]*;/ #match second last line with ';' termination (assumed value)1916 yield :TERM_CODE, $&1917 # when /\A[a-zA-Z0-9\._\-]+[ \t]*\]/ # match final line, terminating in ']'1918 when /\A[a-zA-Z0-9\._\-]*[ \t]*\]/ # match final line, terminating in ']'1919 adl_type = @adl_type.pop1920 assert_at(__FILE__,__LINE__){adl_type == :term_constraint}1921 yield :END_TERM_CODE_CONSTRAINT, $&1922 else1923 raise "data = #{data}"1924 end1925 data = $' # variable $' receives the string after the match1926 when :adl1927 # puts "Entering scan_adl"1928 data = scan_adl(data) do |sym, val|1929 yield sym, val1930 end1931 when :dadl1932 # puts "Entering scan_dadl"1933 data = scan_dadl(data) do |sym, val|1934 yield sym, val1935 end1936 when :cadl1937 # puts "Entering scan_cadl"1938 data = scan_cadl(data) do |sym, val|1939 yield sym, val1940 end1941 else1942 raise1943 end1944 end1945 end # of scan_term_constraint1946 1296 1947 1297 … … 1964 1314 1965 1315 1966 1316 __END__ 1967 1317 1968 1318
Note:
See TracChangeset
for help on using the changeset viewer.