Changeset 320 for ruby/trunk/lib/adl_parser/lib/adl_scanner.rb
- Timestamp:
- Oct 15, 2009, 7:28:12 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ruby/trunk/lib/adl_parser/lib/adl_scanner.rb
r318 r320 52 52 'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE 53 53 'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY 54 } 55 REGEX_PATTERN = { 56 :V_ISO8601_DURATION => /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?|\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS 54 57 } 55 58 … … 203 206 when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI 204 207 yield :V_URI, $& 205 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 208 when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS 209 yield :V_ISO8601_DURATION, $& 210 when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS 206 211 yield :V_ISO8601_DURATION, $& 207 212 when /\A\S/ #UTF8CHAR … … 364 369 @in_interval = false 365 370 else 366 # @in_interval = false367 371 @in_interval = true 368 372 end … … 517 521 when /\A\*/ # * 518 522 yield :Star_code, :Star_code 519 when /\A\// # /520 yield :Slash_code, :Slash_code521 523 when /\A\^/ # ^ 522 524 yield :Caret_code, :Caret_code … … 539 541 when /\A\)/ # ) 540 542 yield :Right_parenthesis_code, :Right_parenthesis_code 541 when /\A\{\// #V_REGEXP 542 if @adl_type.last != :regexp 543 @in_regexp = true 544 @adl_type.push(:regexp) 545 yield :START_REGEXP_BLOCK, :START_REGEXP_BLOCK 546 else 547 raise 548 end 543 when /\A\// # / 544 # yield :Slash_code, :Slash_code 545 # when /\A\// #V_REGEXP / 546 assert_at(__FILE__,__LINE__){@adl_type.last != :regexp} 547 #@in_regexp = true 548 @adl_type.push(:regexp) 549 # yield :START_REGEXP_BLOCK, :START_REGEXP_BLOCK 550 yield :Slash_code, :Slash_code 551 552 # when /\A\{\// #V_REGEXP {/ 553 # if @adl_type.last != :regexp 554 # @in_regexp = true 555 # @adl_type.push(:regexp) 556 # yield :START_REGEXP_BLOCK, :START_REGEXP_BLOCK 557 # else 558 # assert_at(__FILE__,__LINE__){false} 559 # end 549 560 when /\A\{/ # { 550 561 @adl_type.push(:cadl) … … 563 574 yield :Question_mark_code, :Question_mark_code 564 575 when /\A\|/ # | 565 @@logger.debug("CADLScanner#scan: @in_interval = #{@in_interval} at #{@filename}:#{@lineno}")566 576 if @in_interval 567 577 @in_interval = false 568 578 else 569 # @in_interval = false570 579 @in_interval = true 571 580 end 581 @@logger.debug("CADLScanner#scan: @in_interval = #{@in_interval} at #{@filename}:#{@lineno}") 572 582 @@logger.debug("CADLScanner#scan: SYM_INTERVAL_DELIM at #{@filename}:#{@lineno}") 573 583 yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM … … 588 598 when /\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/ #V_GENERIC_TYPE_IDENTIFIER 589 599 yield :V_GENERIC_TYPE_IDENTIFIER, $& 590 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]/600 when /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X][Tt][hH?X][hH?X]:[mM?X][mM?X]:[sS?X][sS?X]/ 591 601 yield :V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN, $& 592 602 when /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X]/ … … 594 604 when /\A[hH][hH]:[mM?X][mM?X]:[sS?X][sS?X]/ 595 605 yield :V_ISO8601_TIME_CONSTRAINT_PATTERN, $& 596 # 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 such as PnYnMnWnDTnnHnnMnnS 597 # yield :V_ISO8601_DURATION, $& 598 when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?/ #V_ISO8601_DURATION such as PnYnMnWnDTnnHnnMnnS 599 yield :V_ISO8601_DURATION, $& 600 when /\AP[yY]?[mM]?[wW]?[dD]?(T[hH]?[mM]?[sS]?)?/ #V_ISO8601_DURATION_CONSTRAINT_PATTERN 606 when /\AP[yY]?[mM]?[wW]?[dD]?T[hH]?[mM]?[sS]?/ #V_ISO8601_DURATION_CONSTRAINT_PATTERN 607 if $&.length == 2 608 case data 609 when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9.]+[sS])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS 610 yield :V_ISO8601_DURATION, $& 611 else 612 yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $& 613 end 614 else 615 yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $& 616 end 617 when /\AP[yY]?[mM]?[wW]?[dD]?/ #V_ISO8601_DURATION_CONSTRAINT_PATTERN 618 if $&.length == 1 619 case data 620 when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS 621 yield :V_ISO8601_DURATION, $& 622 else 623 yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $& 624 end 625 else 626 yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $& 627 end 628 when /\AP[yY]?[mM]?[wW]?[dD]?/ #V_ISO8601_DURATION_CONSTRAINT_PATTERN 601 629 yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $& 602 when /\A[a-z ][a-zA-Z0-9_]*/630 when /\A[a-zA-Z][a-zA-Z0-9_]*/ 603 631 word = $&.dup 604 632 if RESERVED[word.downcase] 633 @@logger.debug("CADLScanner#scan: RESERVED = #{word} at #{@filename}:#{@lineno}") 605 634 yield RESERVED[word.downcase], RESERVED[word.downcase] 606 635 else … … 621 650 when /\Aa[ct][0-9.]+/ #V_LOCAL_CODE 622 651 yield :V_LOCAL_CODE, $& 623 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-]- 652 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})?/ #V_ISO8601_EXTENDED_DATE_TIME YYYY-MM-DDThh:mm:ss[,sss][Z|+/- -n-n-n-n-]- 653 yield :V_ISO8601_EXTENDED_DATE_TIME, $& 654 when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})?/ 655 yield :V_ISO8601_EXTENDED_DATE_TIME, $& 656 when /\A[[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9](Z|[+-][0-9]{4})?/ 624 657 yield :V_ISO8601_EXTENDED_DATE_TIME, $& 625 658 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] 626 659 yield :V_ISO8601_EXTENDED_TIME, $& 627 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-DD 660 when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]/ #V_ISO8601_EXTENDED_DATE YYYY-MM-DD 661 yield :V_ISO8601_EXTENDED_DATE, $& 662 when /\A[0-9]{4}-[0-1][0-9]/ #V_ISO8601_EXTENDED_DATE YYYY-MM-DD 628 663 yield :V_ISO8601_EXTENDED_DATE, $& 629 664 when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING … … 686 721 687 722 def scan(data) 688 @@logger.debug("#{__FILE__}:#{__LINE__}: Entering scan_regexpat #{@filename}:#{@lineno}: data = #{data.inspect}")723 @@logger.debug("#{__FILE__}:#{__LINE__}: Entering RegexScanner::scan at #{@filename}:#{@lineno}: data = #{data.inspect}") 689 724 until data.nil? do 690 725 case @adl_type.last 691 726 when :regexp 692 727 case data 693 when /\A\/\}/ #V_REGEXP 694 if @adl_type.last == :regexp 695 @in_regexp = false 696 @adl_type.pop 697 yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK 698 else 699 raise 700 end 701 when /\A(.*)(\/\})/ #V_REGEXP 728 when /\A\// #V_REGEXP / 729 assert_at(__FILE__,__LINE__){@adl_type.last == :regexp} 730 #@in_regexp = false 731 @adl_type.pop 732 yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK 733 # when /\A\/\}/ #V_REGEXP / 734 # if @adl_type.last == :regexp 735 # @in_regexp = false 736 # @adl_type.pop 737 # yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK 738 # else 739 # raise 740 # end 741 # when /\A(.*)(\/\})/ #V_REGEXP /} 742 when /\A([^\/]+)/ #V_REGEXP 702 743 yield :REGEXP_BODY, $1 703 if @adl_type.last == :regexp 704 @in_regexp = false 705 @adl_type.pop 706 yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK 707 else 708 raise 709 end 710 else 711 raise data 744 # else 745 # raise "should not happen at #{data}" 712 746 end 713 747 data = $' # variable $' receives the string after the match … … 734 768 end 735 769 else 736 raise 770 raise 737 771 end 738 772 end
Note:
See TracChangeset
for help on using the changeset viewer.