Changeset 19
- Timestamp:
- Apr 29, 2008, 3:04:36 AM (16 years ago)
- Location:
- ruby/trunk/adl_parser
- Files:
-
- 1 added
- 3 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
ruby/trunk/adl_parser/Rakefile
r17 r19 11 11 12 12 RACC_SRC = FileList["lib/*.y"] 13 RACC_PARSER = FileList['lib/parser.rb', 'lib/adl_parser.rb', 'lib/cparser.rb', 'lib/dparser.rb'] 13 #RACC_PARSER = FileList['lib/parser.rb', 'lib/adl_parser.rb', 'lib/cparser.rb', 'lib/dparser.rb'] 14 RACC_PARSER = FileList['lib/parser.rb'] 14 15 15 16 task :default => [:racc] -
ruby/trunk/adl_parser/lib/parser.rb
r18 r19 13 13 require 'lib/util.rb' 14 14 require 'lib/scanner.rb' 15 require 'lib/model.rb' 15 16 $DEBUG = true 16 17 … … 24 25 class Parser < Racc::Parser 25 26 26 module_eval <<'..end lib/parser.y modeval..id d4a3e5c962', 'lib/parser.y', 65427 module_eval <<'..end lib/parser.y modeval..ide0b42f72dd', 'lib/parser.y', 720 27 28 28 29 @@log = Logger.new('log/parser.log','daily') 29 30 @@dadl_scanner = OpenEHR::ADL::Scanner::DADL::RootScanner.new 31 @@cadl_scanner = OpenEHR::ADL::Scanner::CADL::RootScanner.new 30 32 31 33 ###----------/* keywords */ --------------------------------------------- … … 128 130 when /\A--.*\n/ # single line comment 129 131 @lineno += 1 132 @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: COMMENT = #{$&} at #{@filename}:#{@lineno}") 130 133 ; 131 134 when /\Adescription/ # description … … 143 146 word = $& 144 147 if @@adl_reserved[word] 145 @@log.info(" @@adl_reserved: #{@@adl_reserved[word]} at #{@filename}")148 @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: @@adl_reserved = #{@@adl_reserved[word]} at #{@filename}:#{@lineno}") 146 149 yield @@adl_reserved[word], @@adl_reserved[word] 147 150 elsif #/\A[A-Z][a-zA-Z0-9_]*/ 151 @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: V_ATTRIBUTE_IDENTIFIER = #{$&} at #{@filename}:#{@lineno}") 148 152 yield :V_ATTRIBUTE_IDENTIFIER, $& 149 153 end … … 174 178 when /\A\{/ # { 175 179 @adl_type.push(:cadl) 180 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}") 176 181 yield :SYM_START_CBLOCK, :SYM_START_CBLOCK 177 182 when /\A\}/ # } … … 179 184 # puts "Escaping #{adl_type}" 180 185 assert_at(__FILE__,__LINE__){adl_type == :cadl} 186 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}") 181 187 yield :SYM_END_CBLOCK, $& 182 188 when /\A\-/ # - … … 296 302 when :cadl 297 303 # puts "Entering scan_cadl" 304 case scanned = @@cadl_scanner.parse(data) 305 when Yaparc::Result::OK 306 if scanned.value[0] == :START_V_C_DOMAIN_TYPE_BLOCK 307 @in_c_domain_type = true 308 @adl_type.push(:dadl) 309 yield scanned.value 310 else 311 yield scanned.value 312 end 313 data = scanned.input 314 end 315 298 316 case data 299 317 when /\A\n/ # carriage return … … 304 322 when /\A--.*\n/ # single line comment 305 323 @lineno += 1 324 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: COMMENT = #{$&} at #{@filename}:#{@lineno}") 306 325 ; 307 326 ###----------/* symbols */ ------------------------------------------------- … … 312 331 when /\A\<=/ # <= 313 332 yield :SYM_LE, :SYM_LE 314 when /\A[A-Z][a-zA-Z0-9_]*[ \n]*\</ # V_C_DOMAIN_TYPE 315 @in_c_domain_type = true 316 @adl_type.push(:dadl) 317 yield :START_V_C_DOMAIN_TYPE_BLOCK, $& 318 ### else 319 ### raise 320 ### end 333 ### when /\A[A-Z][a-zA-Z0-9_]*[ \n]*\</ # V_C_DOMAIN_TYPE 334 ### @in_c_domain_type = true 335 ### @adl_type.push(:dadl) 336 ### yield :START_V_C_DOMAIN_TYPE_BLOCK, $& 321 337 when /\A\</ # < 322 338 if @in_interval … … 374 390 when /\A\{/ # { 375 391 @adl_type.push(:cadl) 392 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}") 376 393 yield :SYM_START_CBLOCK, :SYM_START_CBLOCK 377 394 when /\A\}/ # } … … 379 396 # puts "Escaping #{adl_type}" 380 397 assert_at(__FILE__,__LINE__){adl_type == :cadl} 398 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}") 381 399 yield :SYM_END_CBLOCK, :SYM_END_CBLOCK 382 400 when /\A\$/ # $ … … 394 412 end 395 413 yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM 414 396 415 when /\A\[[a-zA-Z0-9._\-]+::[a-zA-Z0-9._\-]+\]/ #V_QUALIFIED_TERM_CODE_REF form [ICD10AM(1998)::F23] 397 416 yield :V_QUALIFIED_TERM_CODE_REF, $& 398 417 when /\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/ #ERR_V_QUALIFIED_TERM_CODE_REF 399 418 yield :ERR_V_QUALIFIED_TERM_CODE_REF, $& 400 #when /\A\[([a-zA-Z0-9()._\-]+::[a-zA-Z0-9._\_-]+)\]/401 #yield :V_TERM_CODE_CONSTRAINT, :V_TERM_CODE_CONSTRAINT419 when /\A\[([a-zA-Z0-9()._\-]+::[a-zA-Z0-9._\_-]+)\]/ 420 yield :V_TERM_CODE_CONSTRAINT, :V_TERM_CODE_CONSTRAINT 402 421 when /\A\[[a-zA-Z0-9\(\)\._\-]+::[ \t\n]*/ 403 422 @adl_type.push(:term_constraint) … … 422 441 yield @@cadl_reserved[word.downcase], @@cadl_reserved[word.downcase] 423 442 else 443 @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}:#{@lineno}") 424 444 yield :V_ATTRIBUTE_IDENTIFIER, word #V_ATTRIBUTE_IDENTIFIER /\A[a-z][a-zA-Z0-9_]*/ 425 445 end … … 443 463 when /\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+ / #V_REAL 444 464 yield :V_REAL, $& 445 #when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING465 when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING 446 466 when /\A"([^"]*)"/m #V_STRING 447 467 yield :V_STRING, $1 448 468 when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI 449 469 yield :V_URI, $& 450 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 PnYnMnWnDTnnHnnMnnS451 yield :V_ISO8601_DURATION, $&470 ### 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 471 ### yield :V_ISO8601_DURATION, $& 452 472 when /\A\S/ #UTF8CHAR 453 473 yield :UTF8CHAR, $& … … 491 511 yield scanned.value 492 512 data = scanned.input 493 ### when Yaparc::Result::Fail494 ### raise "Scan Failed: #{scanned}"495 ### when Yaparc::Result::Error496 ### raise "Scan Error: #{scanned}"497 513 else 498 499 514 end 500 515 … … 507 522 when /\A--.*\n/ # single line comment 508 523 @lineno += 1 524 @@log.info("#{__FILE__}:#{__LINE__}: scan_dadl: COMMENT = #{$&} at #{@filename}:#{@lineno}") 509 525 ; 510 526 ###----------/* symbols */ ------------------------------------------------- … … 626 642 when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI 627 643 yield :V_URI, $& 628 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 PnYnMnWnDTnnHnnMnnS629 yield :V_ISO8601_DURATION, $&644 ### 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 645 ### yield :V_ISO8601_DURATION, $& 630 646 when /\A\S/ #UTF8CHAR 631 647 yield :UTF8CHAR, $& … … 724 740 when /\A--.*$/ # single line comment 725 741 @lineno += 1 742 @@log.info("#{__FILE__}:#{__LINE__}: scan_term_constraint: COMMENT = #{$&} at #{@filename}:#{@lineno}") 726 743 ; 727 744 when /\A[a-zA-Z0-9\._\-]+[ \t]*,/ # match any line, with ',' termination … … 794 811 795 812 796 ..end lib/parser.y modeval..id d4a3e5c962813 ..end lib/parser.y modeval..ide0b42f72dd 797 814 798 815 ##### racc 1.4.5 generates ### … … 800 817 racc_reduce_table = [ 801 818 0, 0, :racc_error, 802 2, 96, :_reduce_none, 803 1, 96, :_reduce_none, 804 8, 97, :_reduce_none, 819 2, 95, :_reduce_none, 820 1, 95, :_reduce_none, 821 8, 96, :_reduce_none, 822 2, 97, :_reduce_none, 823 2, 97, :_reduce_none, 824 1, 105, :_reduce_none, 825 2, 105, :_reduce_none, 826 3, 106, :_reduce_none, 827 1, 107, :_reduce_none, 828 3, 107, :_reduce_none, 829 3, 108, :_reduce_none, 830 1, 108, :_reduce_none, 831 0, 98, :_reduce_none, 805 832 2, 98, :_reduce_none, 806 833 2, 98, :_reduce_none, 807 1, 106, :_reduce_none,808 2, 106, :_reduce_none,809 3, 107, :_reduce_none,810 1, 108, :_reduce_none,811 3, 108, :_reduce_none,812 3, 109, :_reduce_none,813 1, 109, :_reduce_none,814 0, 99, :_reduce_none,815 834 2, 99, :_reduce_none, 816 835 2, 99, :_reduce_none, 817 2, 100, :_reduce_none, 836 0, 100, :_reduce_none, 837 2, 100, :_reduce_19, 818 838 2, 100, :_reduce_none, 819 839 0, 101, :_reduce_none, 820 2, 101, :_reduce_19,821 840 2, 101, :_reduce_none, 822 0, 102, :_reduce_none,841 2, 101, :_reduce_none, 823 842 2, 102, :_reduce_none, 824 843 2, 102, :_reduce_none, 825 2, 103, :_reduce_none, 826 2, 103, :_reduce_none, 827 1, 111, :_reduce_none, 828 1, 111, :_reduce_none, 829 5, 112, :_reduce_none, 830 5, 112, :_reduce_none, 831 2, 114, :_reduce_none, 832 1, 116, :_reduce_31, 833 2, 116, :_reduce_32, 834 1, 115, :_reduce_none, 835 1, 115, :_reduce_none, 836 1, 121, :_reduce_none, 837 1, 121, :_reduce_none, 838 1, 121, :_reduce_none, 839 1, 121, :_reduce_none, 840 1, 121, :_reduce_none, 841 1, 121, :_reduce_none, 842 1, 121, :_reduce_none, 843 1, 121, :_reduce_none, 844 1, 121, :_reduce_none, 845 1, 121, :_reduce_none, 846 3, 128, :_reduce_none, 844 1, 110, :_reduce_none, 845 1, 110, :_reduce_none, 846 5, 111, :_reduce_none, 847 5, 111, :_reduce_none, 848 2, 113, :_reduce_none, 849 1, 115, :_reduce_31, 850 2, 115, :_reduce_32, 851 1, 114, :_reduce_none, 852 1, 114, :_reduce_none, 853 1, 120, :_reduce_none, 854 1, 120, :_reduce_none, 855 1, 120, :_reduce_none, 856 1, 120, :_reduce_none, 857 1, 120, :_reduce_none, 858 1, 120, :_reduce_none, 859 1, 120, :_reduce_none, 860 1, 120, :_reduce_none, 861 1, 120, :_reduce_none, 862 1, 120, :_reduce_none, 863 3, 121, :_reduce_none, 847 864 4, 122, :_reduce_none, 848 865 3, 122, :_reduce_none, 849 866 6, 123, :_reduce_none, 867 2, 129, :_reduce_none, 868 2, 132, :_reduce_none, 869 3, 132, :_reduce_none, 870 2, 132, :_reduce_none, 871 1, 127, :_reduce_none, 872 1, 133, :_reduce_none, 873 1, 133, :_reduce_none, 874 1, 133, :_reduce_none, 875 1, 133, :_reduce_none, 876 1, 133, :_reduce_none, 877 1, 133, :_reduce_none, 878 1, 133, :_reduce_none, 879 1, 133, :_reduce_none, 880 1, 118, :_reduce_none, 881 1, 119, :_reduce_none, 882 2, 119, :_reduce_none, 883 5, 142, :_reduce_none, 884 5, 142, :_reduce_none, 885 5, 142, :_reduce_none, 886 2, 143, :_reduce_68, 887 3, 143, :_reduce_69, 888 1, 144, :_reduce_none, 889 2, 144, :_reduce_none, 890 1, 144, :_reduce_none, 891 0, 130, :_reduce_none, 850 892 2, 130, :_reduce_none, 851 2, 133, :_reduce_none,852 3, 133, :_reduce_none,853 2, 133, :_reduce_none,854 1, 127, :_reduce_none,855 1, 134, :_reduce_none,856 1, 134, :_reduce_none,857 1, 134, :_reduce_none,858 1, 134, :_reduce_none,859 1, 134, :_reduce_none,860 1, 134, :_reduce_none,861 1, 134, :_reduce_none,862 1, 134, :_reduce_none,863 1, 119, :_reduce_none,864 1, 120, :_reduce_none,865 2, 120, :_reduce_none,866 5, 143, :_reduce_none,867 5, 143, :_reduce_none,868 5, 143, :_reduce_none,869 2, 144, :_reduce_none,870 3, 144, :_reduce_none,871 1, 145, :_reduce_none,872 2, 145, :_reduce_none,873 1, 145, :_reduce_none,874 893 0, 131, :_reduce_none, 875 894 2, 131, :_reduce_none, 876 0, 132, :_reduce_none, 877 2, 132, :_reduce_none, 895 1, 147, :_reduce_none, 896 2, 147, :_reduce_none, 897 3, 148, :_reduce_none, 878 898 1, 148, :_reduce_none, 879 2, 148, :_reduce_none, 880 3, 149, :_reduce_none, 881 1, 149, :_reduce_none, 882 3, 149, :_reduce_none, 883 0, 104, :_reduce_none, 899 3, 148, :_reduce_none, 900 0, 103, :_reduce_none, 901 2, 103, :_reduce_none, 902 2, 103, :_reduce_none, 884 903 2, 104, :_reduce_none, 885 904 2, 104, :_reduce_none, 886 2, 105, :_reduce_none,887 2, 105, :_reduce_none,888 1, 1 10, :_reduce_none,905 1, 109, :_reduce_none, 906 1, 151, :_reduce_none, 907 1, 151, :_reduce_none, 889 908 1, 152, :_reduce_none, 890 1, 152, :_reduce_none, 909 2, 152, :_reduce_none, 910 3, 152, :_reduce_none, 911 3, 154, :_reduce_93, 912 1, 155, :_reduce_94, 913 2, 155, :_reduce_none, 914 1, 156, :_reduce_none, 915 1, 156, :_reduce_none, 891 916 1, 153, :_reduce_none, 892 2, 153, :_reduce_none, 893 3, 153, :_reduce_none, 894 3, 155, :_reduce_none, 895 1, 156, :_reduce_94, 896 2, 156, :_reduce_none, 897 1, 157, :_reduce_none, 898 1, 157, :_reduce_none, 899 1, 154, :_reduce_none, 900 1, 154, :_reduce_none, 901 1, 160, :_reduce_none, 902 2, 160, :_reduce_none, 903 3, 161, :_reduce_none, 904 1, 162, :_reduce_none, 905 1, 163, :_reduce_none, 906 2, 163, :_reduce_none, 907 3, 164, :_reduce_none, 908 3, 165, :_reduce_none, 917 1, 153, :_reduce_none, 909 918 1, 159, :_reduce_none, 910 919 2, 159, :_reduce_none, 911 2, 167, :_reduce_none, 912 3, 167, :_reduce_none, 913 1, 168, :_reduce_none, 920 3, 160, :_reduce_none, 921 1, 161, :_reduce_none, 922 1, 162, :_reduce_none, 923 2, 162, :_reduce_none, 924 3, 163, :_reduce_none, 925 3, 164, :_reduce_107, 914 926 1, 158, :_reduce_none, 915 927 2, 158, :_reduce_none, 916 3, 169, :_reduce_none, 928 2, 166, :_reduce_none, 929 3, 166, :_reduce_none, 930 1, 167, :_reduce_none, 931 1, 157, :_reduce_none, 932 2, 157, :_reduce_none, 933 3, 168, :_reduce_none, 934 1, 169, :_reduce_none, 935 1, 169, :_reduce_none, 936 1, 169, :_reduce_none, 937 1, 169, :_reduce_none, 938 1, 169, :_reduce_none, 939 1, 165, :_reduce_121, 940 1, 165, :_reduce_122, 941 1, 165, :_reduce_123, 942 1, 165, :_reduce_124, 943 1, 165, :_reduce_125, 944 1, 165, :_reduce_126, 945 1, 165, :_reduce_127, 946 1, 165, :_reduce_128, 947 1, 165, :_reduce_129, 948 1, 165, :_reduce_130, 917 949 1, 170, :_reduce_none, 918 950 1, 170, :_reduce_none, … … 920 952 1, 170, :_reduce_none, 921 953 1, 170, :_reduce_none, 922 1, 166, :_reduce_none, 923 1, 166, :_reduce_none, 924 1, 166, :_reduce_none, 925 1, 166, :_reduce_none, 926 1, 166, :_reduce_none, 927 1, 166, :_reduce_none, 928 1, 166, :_reduce_none, 929 1, 166, :_reduce_none, 930 1, 166, :_reduce_none, 931 1, 166, :_reduce_none, 954 1, 170, :_reduce_none, 955 1, 170, :_reduce_none, 956 1, 170, :_reduce_none, 957 1, 170, :_reduce_none, 932 958 1, 171, :_reduce_none, 933 959 1, 171, :_reduce_none, … … 936 962 1, 171, :_reduce_none, 937 963 1, 171, :_reduce_none, 938 1, 171, :_reduce_none, 939 1, 171, :_reduce_none, 940 1, 171, :_reduce_none, 941 1, 172, :_reduce_none, 942 1, 172, :_reduce_none, 943 1, 172, :_reduce_none, 944 1, 172, :_reduce_none, 945 1, 172, :_reduce_none, 946 1, 172, :_reduce_none, 947 1, 118, :_reduce_none, 948 1, 118, :_reduce_none, 949 1, 175, :_reduce_148, 964 1, 117, :_reduce_146, 965 1, 117, :_reduce_147, 966 1, 174, :_reduce_148, 967 3, 184, :_reduce_none, 968 3, 184, :_reduce_none, 969 3, 184, :_reduce_none, 970 1, 175, :_reduce_none, 971 2, 175, :_reduce_none, 972 2, 175, :_reduce_none, 950 973 3, 185, :_reduce_none, 951 974 3, 185, :_reduce_none, 952 975 3, 185, :_reduce_none, 976 5, 193, :_reduce_none, 977 6, 193, :_reduce_none, 978 6, 193, :_reduce_none, 979 7, 193, :_reduce_none, 980 4, 193, :_reduce_none, 981 4, 193, :_reduce_none, 982 4, 193, :_reduce_none, 983 4, 193, :_reduce_none, 984 3, 193, :_reduce_none, 953 985 1, 176, :_reduce_none, 954 986 2, 176, :_reduce_none, … … 967 999 3, 194, :_reduce_none, 968 1000 1, 177, :_reduce_none, 969 2, 177, :_reduce_none, 970 2, 177, :_reduce_none, 1001 1, 177, :_reduce_none, 971 1002 3, 187, :_reduce_none, 972 1003 3, 187, :_reduce_none, 973 1004 3, 187, :_reduce_none, 1005 1, 178, :_reduce_none, 1006 3, 188, :_reduce_none, 1007 3, 188, :_reduce_none, 1008 3, 188, :_reduce_none, 1009 1, 179, :_reduce_none, 1010 3, 189, :_reduce_none, 1011 3, 189, :_reduce_none, 1012 3, 189, :_reduce_none, 974 1013 5, 195, :_reduce_none, 975 1014 6, 195, :_reduce_none, … … 981 1020 4, 195, :_reduce_none, 982 1021 3, 195, :_reduce_none, 983 1, 178, :_reduce_none,984 1, 178, :_reduce_none,985 3, 188, :_reduce_none,986 3, 188, :_reduce_none,987 3, 188, :_reduce_none,988 1, 179, :_reduce_none,989 3, 189, :_reduce_none,990 3, 189, :_reduce_none,991 3, 189, :_reduce_none,992 1022 1, 180, :_reduce_none, 993 1023 3, 190, :_reduce_none, … … 1016 1046 4, 197, :_reduce_none, 1017 1047 3, 197, :_reduce_none, 1018 1, 182, :_reduce_ none,1048 1, 182, :_reduce_230, 1019 1049 3, 192, :_reduce_none, 1020 1050 3, 192, :_reduce_none, … … 1029 1059 4, 198, :_reduce_none, 1030 1060 3, 198, :_reduce_none, 1061 1, 172, :_reduce_none, 1062 3, 173, :_reduce_none, 1063 3, 173, :_reduce_none, 1064 3, 173, :_reduce_none, 1031 1065 1, 183, :_reduce_none, 1032 3, 193, :_reduce_none, 1033 3, 193, :_reduce_none, 1034 3, 193, :_reduce_none, 1035 5, 199, :_reduce_none, 1036 6, 199, :_reduce_none, 1037 6, 199, :_reduce_none, 1038 7, 199, :_reduce_none, 1039 4, 199, :_reduce_none, 1040 4, 199, :_reduce_none, 1041 4, 199, :_reduce_none, 1042 4, 199, :_reduce_none, 1066 1, 112, :_reduce_none, 1067 2, 112, :_reduce_none, 1043 1068 3, 199, :_reduce_none, 1044 1, 173, :_reduce_none, 1045 3, 174, :_reduce_none, 1046 3, 174, :_reduce_none, 1047 3, 174, :_reduce_none, 1048 1, 184, :_reduce_none, 1049 1, 113, :_reduce_none, 1050 2, 113, :_reduce_none, 1069 1, 199, :_reduce_none, 1070 3, 199, :_reduce_none, 1071 1, 150, :_reduce_none, 1072 1, 150, :_reduce_none, 1073 2, 201, :_reduce_none, 1074 2, 201, :_reduce_none, 1075 5, 201, :_reduce_none, 1076 5, 201, :_reduce_none, 1077 2, 201, :_reduce_none, 1078 3, 201, :_reduce_none, 1079 3, 201, :_reduce_none, 1080 3, 201, :_reduce_none, 1081 3, 201, :_reduce_none, 1082 3, 201, :_reduce_none, 1083 3, 201, :_reduce_none, 1084 3, 201, :_reduce_none, 1085 3, 201, :_reduce_none, 1086 3, 201, :_reduce_none, 1087 3, 201, :_reduce_none, 1051 1088 3, 200, :_reduce_none, 1052 1089 1, 200, :_reduce_none, 1053 3, 200, :_reduce_none, 1054 1, 151, :_reduce_none, 1055 1, 151, :_reduce_none, 1056 2, 202, :_reduce_none, 1057 2, 202, :_reduce_none, 1058 5, 202, :_reduce_none, 1059 5, 202, :_reduce_none, 1060 2, 202, :_reduce_none, 1061 3, 202, :_reduce_none, 1062 3, 202, :_reduce_none, 1063 3, 202, :_reduce_none, 1064 3, 202, :_reduce_none, 1065 3, 202, :_reduce_none, 1066 3, 202, :_reduce_none, 1067 3, 202, :_reduce_none, 1068 3, 202, :_reduce_none, 1069 3, 202, :_reduce_none, 1070 3, 202, :_reduce_none, 1071 3, 201, :_reduce_none, 1072 1, 201, :_reduce_none, 1073 1, 201, :_reduce_none, 1090 1, 200, :_reduce_none, 1091 1, 203, :_reduce_none, 1092 1, 203, :_reduce_none, 1093 3, 205, :_reduce_none, 1094 3, 205, :_reduce_none, 1095 3, 205, :_reduce_none, 1096 3, 205, :_reduce_none, 1097 3, 205, :_reduce_none, 1098 3, 204, :_reduce_none, 1074 1099 1, 204, :_reduce_none, 1075 1100 1, 204, :_reduce_none, 1076 3, 206, :_reduce_none, 1077 3, 206, :_reduce_none, 1078 3, 206, :_reduce_none, 1079 3, 206, :_reduce_none, 1080 3, 206, :_reduce_none, 1081 3, 205, :_reduce_none, 1082 1, 205, :_reduce_none, 1083 1, 205, :_reduce_none, 1084 1, 205, :_reduce_none, 1085 1, 129, :_reduce_none, 1086 2, 129, :_reduce_none, 1087 1, 203, :_reduce_none, 1088 3, 203, :_reduce_none, 1089 2, 207, :_reduce_none, 1101 1, 204, :_reduce_none, 1102 1, 128, :_reduce_none, 1103 2, 128, :_reduce_none, 1104 1, 202, :_reduce_none, 1105 3, 202, :_reduce_none, 1106 2, 206, :_reduce_288, 1107 1, 206, :_reduce_289, 1108 0, 145, :_reduce_none, 1109 5, 145, :_reduce_none, 1090 1110 1, 207, :_reduce_none, 1091 0, 146, :_reduce_none,1111 3, 207, :_reduce_none, 1092 1112 5, 146, :_reduce_none, 1093 1113 1, 208, :_reduce_none, 1094 1114 3, 208, :_reduce_none, 1095 5, 147, :_reduce_none, 1115 3, 208, :_reduce_none, 1116 3, 208, :_reduce_none, 1117 5, 208, :_reduce_none, 1118 5, 208, :_reduce_none, 1119 5, 208, :_reduce_none, 1120 5, 208, :_reduce_none, 1121 1, 210, :_reduce_none, 1122 1, 210, :_reduce_none, 1123 0, 116, :_reduce_none, 1124 5, 116, :_reduce_none, 1125 2, 116, :_reduce_none, 1096 1126 1, 209, :_reduce_none, 1097 1127 3, 209, :_reduce_none, 1098 3, 209, :_reduce_none,1099 3, 209, :_reduce_none,1100 5, 209, :_reduce_none,1101 5, 209, :_reduce_none,1102 5, 209, :_reduce_none,1103 5, 209, :_reduce_none,1104 1128 1, 211, :_reduce_none, 1105 1129 1, 211, :_reduce_none, 1106 0, 117, :_reduce_none, 1107 5, 117, :_reduce_none, 1108 2, 117, :_reduce_none, 1109 1, 210, :_reduce_none, 1110 3, 210, :_reduce_none, 1130 1, 211, :_reduce_none, 1131 1, 134, :_reduce_none, 1132 3, 134, :_reduce_none, 1133 3, 134, :_reduce_none, 1111 1134 1, 212, :_reduce_none, 1112 1135 1, 212, :_reduce_none, … … 1134 1157 3, 138, :_reduce_none, 1135 1158 1, 216, :_reduce_none, 1159 3, 216, :_reduce_none, 1136 1160 1, 216, :_reduce_none, 1137 1161 1, 216, :_reduce_none, … … 1139 1163 3, 139, :_reduce_none, 1140 1164 3, 139, :_reduce_none, 1141 1, 217, :_reduce_none, 1142 3, 217, :_reduce_none, 1143 1, 217, :_reduce_none, 1144 1, 217, :_reduce_none, 1165 1, 218, :_reduce_none, 1166 1, 218, :_reduce_none, 1167 3, 218, :_reduce_none, 1145 1168 1, 140, :_reduce_none, 1146 1169 3, 140, :_reduce_none, … … 1149 1172 1, 219, :_reduce_none, 1150 1173 3, 219, :_reduce_none, 1174 3, 219, :_reduce_none, 1151 1175 1, 141, :_reduce_none, 1152 1176 3, 141, :_reduce_none, 1153 1177 3, 141, :_reduce_none, 1154 1, 220, :_reduce_none,1155 1, 220, :_reduce_none,1156 3, 220, :_reduce_none,1157 3, 220, :_reduce_none,1158 1, 142, :_reduce_none,1159 3, 142, :_reduce_none,1160 3, 142, :_reduce_none,1161 1178 1, 126, :_reduce_none, 1162 1179 3, 126, :_reduce_none, 1163 1180 3, 126, :_reduce_none, 1164 1, 221, :_reduce_none, 1181 1, 220, :_reduce_none, 1182 3, 220, :_reduce_none, 1165 1183 3, 221, :_reduce_none, 1166 3, 222, :_reduce_none,1167 1184 1, 125, :_reduce_none, 1168 1185 1, 125, :_reduce_none, 1169 3, 22 3, :_reduce_none,1170 0, 22 4, :_reduce_none,1171 1, 22 4, :_reduce_none,1172 2, 22 4, :_reduce_none,1186 3, 222, :_reduce_none, 1187 0, 223, :_reduce_none, 1188 1, 223, :_reduce_none, 1189 2, 223, :_reduce_none, 1173 1190 1, 124, :_reduce_none, 1174 1, 1 50, :_reduce_none,1175 1, 1 50, :_reduce_none,1176 1, 21 8, :_reduce_none ]1191 1, 149, :_reduce_none, 1192 1, 149, :_reduce_374, 1193 1, 217, :_reduce_none ] 1177 1194 1178 1195 racc_reduce_n = 376 1179 1196 1180 racc_shift_n = 63 31197 racc_shift_n = 631 1181 1198 1182 1199 racc_action_table = [ 1183 574, 501, 476, 159, 397, 590, 473, 469, 471, 146, 1184 229, 130, 9, 576, 1, 572, 58, 543, 67, 379, 1185 540, 383, 600, 541, 542, 385, 29, 451, 523, 390, 1186 22, 115, 11, 4, 499, 185, 537, 511, 51, 515, 1187 516, 497, 228, 514, 51, 443, 61, 571, 23, 152, 1188 154, 46, 49, 316, 30, 147, 77, 80, 83, 188, 1189 117, 92, 304, 308, 398, 110, 112, 115, 117, 529, 1190 117, 523, 110, 115, 112, 573, 117, 152, 154, 537, 1191 511, 75, 515, 516, 272, 156, 117, 280, 284, 286, 1192 534, 162, 115, 296, 46, 49, 316, 230, 112, 77, 1193 80, 83, 188, 115, 92, 304, 308, 435, 110, 112, 1194 115, 117, 529, 156, 495, 627, 214, 101, 433, 108, 1195 211, 381, 148, 150, 459, 466, 482, 67, 391, 376, 1196 280, 284, 286, 534, 117, 101, 296, 133, 213, 138, 1197 112, 331, 212, 73, 152, 154, 458, 51, 124, 126, 1198 148, 150, 393, 77, 80, 83, 274, 138, 92, 95, 1199 99, 152, 154, 101, 112, 467, 152, 154, 87, 90, 1200 110, 77, 80, 83, 110, 75, 92, 95, 99, 128, 1201 156, 77, 325, 326, 134, 100, 87, 90, 152, 154, 1202 568, 152, 154, 75, 46, 49, 395, 156, 337, 77, 1203 80, 83, 156, 396, 92, 95, 99, 236, 110, 152, 1204 154, 419, 157, 158, 87, 90, 149, 148, 150, 151, 1205 153, 75, 321, 322, 156, 236, 92, 156, 334, 247, 1206 388, 170, 387, 217, 148, 150, 238, 127, 164, 148, 1207 150, 46, 49, 152, 154, 156, 157, 158, -373, 257, 1208 149, 101, 250, 151, 153, 253, 255, 239, 171, 321, 1209 322, 148, 150, 92, 148, 150, 493, 139, 241, 77, 1210 80, 83, 140, 138, 92, -374, 16, 155, 17, 156, 1211 95, 99, 148, 150, 217, 349, 350, 77, 80, 83, 1212 217, 75, 92, 95, 99, 399, 77, 80, 83, 239, 1213 217, 92, 87, 90, 570, 110, 112, 115, 117, 75, 1214 400, 155, 491, 101, 321, 322, 148, 150, 92, 143, 1215 77, 80, 83, 401, 144, 92, 77, 80, 83, 321, 1216 322, 92, 217, 92, 402, 138, 77, 80, 83, 217, 1217 417, 92, 75, 321, 322, 217, 403, 92, 75, 77, 1218 80, 83, 339, 340, 92, 95, 99, 217, 75, 77, 1219 325, 326, 404, 237, 87, 90, 341, 342, 77, 80, 1220 83, 75, 217, 92, 405, 77, 80, 83, 25, 26, 1221 92, 77, 80, 83, 101, 406, 92, 77, 325, 326, 1222 75, 46, 49, 77, 80, 83, 407, 75, 92, 408, 1223 321, 322, 101, 75, 92, 385, 138, 481, 77, 80, 1224 83, 351, 352, 92, 102, 75, 168, 169, 166, 167, 1225 77, 80, 83, 409, 100, 92, 95, 99, 101, 16, 1226 75, 17, 410, 46, 49, 87, 90, 217, 77, 80, 1227 83, 268, 75, 92, 95, 99, 101, 598, 599, 210, 1228 138, 39, 267, 87, 90, 46, 49, 359, 360, 35, 1229 75, 35, 272, 274, 77, 80, 83, 246, 138, 92, 1230 95, 99, 245, 77, 80, 83, 140, 101, 92, 87, 1231 90, 144, 77, 80, 83, 217, 75, 92, 95, 99, 1232 139, 51, 143, 51, 244, 75, 102, 87, 90, 100, 1233 46, 49, 46, 49, 75, 367, 368, 56, 46, 49, 1234 101, 124, 126, 77, 80, 83, 243, 35, 92, 95, 1235 99, 77, 80, 83, 258, 35, 92, 259, 87, 90, 1236 430, 431, 100, 101, 260, 75, 117, 46, 49, 428, 1237 429, 46, 49, 75, 261, 217, 77, 80, 83, 51, 1238 115, 92, 95, 99, 242, 100, 101, 51, 46, 49, 1239 241, 87, 90, 436, 46, 49, 46, 49, 75, 77, 1240 80, 83, 426, 427, 92, 95, 99, 437, 100, 101, 1241 438, 77, 80, 83, 87, 90, 92, 46, 49, 415, 1242 439, 75, 77, 80, 83, 415, 440, 92, 95, 99, 1243 441, 138, 240, 75, 414, 325, 326, 87, 90, 415, 1244 414, 325, 326, 444, 75, 77, 80, 83, 424, 425, 1245 92, 95, 99, 445, 77, 325, 326, 77, 325, 326, 1246 87, 90, 617, 618, 619, 316, 446, 75, 77, 80, 1247 83, 188, 447, 92, 304, 308, 448, 110, 112, 115, 1248 117, 128, 422, 423, 77, 80, 83, 420, 421, 92, 1249 124, 126, 127, 110, 112, 115, 117, 449, 120, 280, 1250 284, 286, -103, 631, 632, 296, 203, 124, 126, 77, 1251 80, 83, 188, 239, 92, 124, 126, 127, 110, 112, 1252 115, 117, 185, 120, 77, 80, 83, 452, 453, 92, 1253 77, 325, 326, 110, 112, 115, 117, 77, 80, 83, 1254 454, 455, 92, 77, 325, 326, 110, 112, 115, 117, 1255 77, 80, 83, 456, 457, 92, 77, 325, 326, 110, 1256 112, 115, 117, 77, 80, 83, 238, 461, 92, 77, 1257 325, 326, 110, 112, 115, 117, 328, 462, 321, 322, 1258 463, 262, 92, 168, 169, 166, 167, 324, 77, 325, 1259 326, 168, 169, 166, 167, 168, 169, 166, 167, 168, 1200 571, 442, 161, 472, 144, 588, 470, 466, 468, 129, 1201 214, 570, 165, 573, 229, 10, 542, 170, 376, 539, 1202 29, 58, 540, 541, 171, 458, 496, 386, 522, 385, 1203 24, 116, 213, 494, -373, 12, 535, 510, 434, 513, 1204 514, -374, 512, 569, 60, 492, 228, 457, 30, 50, 1205 145, 46, 48, 317, 97, 98, 78, 81, 84, 188, 1206 116, 94, 302, 307, 75, 109, 112, 114, 116, 529, 1207 522, 116, 109, 114, 112, 116, 152, 154, 535, 510, 1208 76, 513, 514, 272, 101, 116, 314, 279, 281, 532, 1209 160, 114, 291, 46, 48, 317, 114, 625, 78, 81, 1210 84, 188, 112, 94, 302, 307, 99, 109, 112, 114, 1211 116, 529, 156, 432, 1, 46, 48, 101, 347, 348, 1212 78, 81, 84, 230, 479, 94, 97, 98, 314, 279, 1213 281, 532, 490, 5, 291, 88, 92, 152, 154, 138, 1214 152, 154, 76, 101, 260, 374, 152, 154, 430, 148, 1215 150, 133, 259, 78, 81, 84, 236, 114, 94, 97, 1216 98, 152, 154, 67, 481, 138, 152, 154, 88, 92, 1217 112, 152, 154, 156, 462, 76, 156, 127, 329, 78, 1218 81, 84, 156, 50, 94, 97, 98, 126, 109, 152, 1219 154, 465, 157, 158, 88, 92, 149, 156, 134, 151, 1220 153, 76, 156, 594, 109, 152, 154, 156, 157, 158, 1221 148, 150, 149, 148, 150, 151, 153, 566, 332, 148, 1222 150, 236, 337, 338, 378, 156, 123, 124, 109, 101, 1223 78, 382, 383, 55, 148, 150, 211, 20, 184, 148, 1224 150, 156, 497, 35, 148, 150, 209, 257, 323, 324, 1225 250, 138, 94, 254, 256, 21, 35, 155, 212, 78, 1226 382, 383, 148, 150, 390, 78, 81, 84, 46, 48, 1227 94, 97, 98, 155, 217, 50, 391, 455, 148, 150, 1228 88, 92, 217, 274, 46, 48, 394, 76, 50, 78, 1229 382, 383, 101, 237, 78, 81, 84, 46, 48, 94, 1230 102, 395, 335, 109, 112, 114, 116, 272, 274, 108, 1231 78, 81, 84, 112, 138, 94, 101, 67, 78, 81, 1232 84, 396, 141, 94, 78, 382, 383, 142, 78, 81, 1233 84, 268, 76, 94, 97, 98, 568, 50, 138, 101, 1234 76, 46, 48, 88, 92, 239, 168, 169, 166, 167, 1235 76, 101, 78, 81, 84, 146, 397, 94, 97, 98, 1236 147, 138, 398, 217, 326, 345, 346, 88, 92, 217, 1237 102, 123, 124, 138, 76, 78, 81, 84, 217, 399, 1238 94, 97, 98, 168, 169, 166, 167, 78, 81, 84, 1239 88, 92, 94, 97, 98, 400, 217, 76, 401, 78, 1240 81, 84, 88, 92, 94, 78, 81, 84, 101, 76, 1241 94, 46, 48, 402, 78, 81, 84, 403, 16, 94, 1242 17, 76, 322, 404, 323, 324, 101, 76, 94, 405, 1243 99, 488, 78, 81, 84, 217, 76, 94, 406, 46, 1244 48, 78, 382, 383, 78, 81, 84, 407, 99, 94, 1245 97, 98, 416, 217, 76, 46, 48, 46, 48, 88, 1246 92, 217, 78, 81, 84, 408, 76, 94, 97, 98, 1247 265, 78, 81, 84, 349, 350, 94, 88, 92, 323, 1248 324, 25, 26, 94, 76, 101, 357, 358, 35, 78, 1249 81, 84, 409, 76, 94, 596, 597, 78, 81, 84, 1250 323, 324, 94, 217, 94, 267, 380, 99, 477, 217, 1251 268, 76, 615, 616, 617, 217, 46, 48, 266, 76, 1252 50, 78, 81, 84, 427, 428, 94, 97, 98, 46, 1253 48, 323, 324, 101, 248, 94, 88, 92, 247, 78, 1254 81, 84, 142, 76, 94, 78, 81, 84, 371, 372, 1255 94, 78, 81, 84, 147, 99, 94, 101, 246, 323, 1256 324, 76, 39, 94, 46, 48, 413, 76, 380, 78, 1257 81, 84, 35, 76, 94, 97, 98, 425, 426, 99, 1258 101, 78, 382, 383, 88, 92, 423, 424, 46, 48, 1259 413, 76, 261, 78, 81, 84, 421, 422, 94, 97, 1260 98, 16, 138, 17, 50, 412, 382, 383, 88, 92, 1261 413, 419, 420, 46, 48, 76, 78, 81, 84, 417, 1262 418, 94, 97, 98, 262, 412, 382, 383, 263, 323, 1263 324, 88, 92, 94, 629, 630, 317, 116, 76, 78, 1264 81, 84, 188, 264, 94, 302, 307, 245, 109, 112, 1265 114, 116, 78, 81, 84, 123, 124, 94, 78, 382, 1266 383, 109, 112, 114, 116, 168, 169, 166, 167, 314, 1267 279, 281, -103, 244, 243, 291, 202, 435, 436, 78, 1268 81, 84, 188, 437, 94, 123, 124, 126, 109, 112, 1269 114, 116, 184, 119, 127, 438, 439, 78, 81, 84, 1270 440, 242, 94, 123, 124, 126, 109, 112, 114, 116, 1271 443, 119, 78, 81, 84, 444, 445, 94, 78, 382, 1272 383, 109, 112, 114, 116, 78, 81, 84, 446, 447, 1273 94, 78, 382, 383, 109, 112, 114, 116, 78, 81, 1274 84, 448, 449, 94, 450, 451, 452, 109, 112, 114, 1275 116, 168, 169, 166, 167, 388, 78, 382, 383, 168, 1260 1276 169, 166, 167, 168, 169, 166, 167, 168, 169, 166, 1261 167, 168, 169, 166, 167, 168, 169, 166, 167, 138, 1262 171, 147, 208, 102, 475, 165, 478, 480, 263, 162, 1263 484, 485, 486, 264, 488, 145, 138, 135, 51, 109, 1264 69, 66, 502, 110, 504, 112, 506, 115, 508, 117, 1265 510, 35, 538, 539, 61, 57, 545, 546, 547, 265, 1266 549, -103, 551, 110, 553, 112, 555, 115, 557, 117, 1267 559, 560, 561, 562, 563, 54, 162, 566, 266, 34, 1268 170, 112, 31, 28, 578, 579, 580, 581, 117, 117, 1269 117, 267, 583, 584, 585, 586, 587, 588, 589, 24, 1270 592, 593, 110, 596, 268, 127, 185, 21, 603, 604, 1271 75, 570, 606, 608, 609, 610, 319, 616, 276, 15, 1272 621, 14, 622, 12, 624, 625, 626, 8, 7, 629, 1273 630, 277, 117 ] 1277 167, 168, 169, 166, 167, 168, 169, 166, 167, 453, 1278 454, 241, 141, 146, 240, 460, 461, 239, 238, 138, 1279 171, 145, 207, 474, 476, 265, 478, 102, 163, 483, 1280 484, 485, 160, 143, 138, 135, 50, 131, 69, 499, 1281 109, 501, 112, 503, 114, 505, 116, 266, 508, 509, 1282 68, 537, 538, 35, 60, 544, 545, 57, 547, 109, 1283 549, 112, 551, 114, 553, 116, 267, 556, 557, 558, 1284 559, 560, 561, 562, -103, 564, 268, 54, 170, 34, 1285 114, 31, 575, 576, 160, 578, 579, 116, 116, 116, 1286 28, 581, 582, 583, 584, 585, 586, 587, 112, 590, 1287 591, 276, 184, 109, 598, 23, 601, 602, 76, 568, 1288 604, 606, 607, 608, 277, 613, 126, 15, 619, 13, 1289 9, 621, 622, 623, 624, 8, 7, 627, 628, 319, 1290 116 ] 1274 1291 1275 1292 racc_action_check = [ 1276 52 8, 431, 406, 87, 278, 567, 404, 402, 403, 85,1277 1 62, 62, 4, 528, 0, 526, 42, 480, 52, 262,1278 480, 264, 579, 480, 480, 265, 21, 368, 528, 270,1279 1 4, 262, 4, 0, 429, 264, 528, 528, 52, 528,1280 52 8, 427, 162, 459, 42, 360, 62, 526, 14, 226,1281 226, 528, 528, 528, 21, 85, 528, 528, 528, 528,1282 431, 528, 528, 528, 278, 528, 528, 528, 528, 528,1283 4 06, 459, 402, 404, 403, 526, 480, 224, 224, 459,1284 459, 87, 459, 459, 459, 226, 368, 528, 528, 528,1285 5 28, 567, 429, 528, 459, 459, 459, 165, 427, 459,1286 45 9, 459, 459, 360, 459, 459, 459, 352, 459, 459,1287 45 9, 459, 459, 224, 425, 621, 146, 165, 350, 59,1288 145, 263, 226, 226, 390, 400, 410, 59, 271, 259,1289 45 9, 459, 459, 459, 263, 621, 459, 69, 146, 165,1290 259, 243, 145, 54, 227, 227, 390, 59, 243, 243,1291 22 4, 224, 274, 165, 165, 165, 275, 621, 165, 165,1292 165, 222, 222, 54, 352, 401, 218, 218, 165, 165,1293 425, 621, 621, 621, 350, 165, 621, 621, 621, 410,1294 227, 400, 400, 400, 69, 54, 621, 621, 220, 220,1295 516, 318, 318, 621, 54, 54, 276, 222, 247, 54,1296 54, 54, 218, 277, 54, 54, 54, 318, 247, 172,1297 172, 342, 172, 172, 54, 54, 172, 227, 227, 172,1298 172, 54, 401, 401, 220, 172, 401, 318, 245, 187,1299 267, 97, 267, 158, 222, 222, 281, 245, 90, 218,1300 218, 516, 516, 86, 86, 172, 86, 86, 97, 188,1301 86, 164, 188, 86, 86, 188, 188, 282, 100, 342,1302 342, 220, 220, 342, 318, 318, 423, 80, 285, 158,1303 1 58, 158, 80, 164, 158, 100, 11, 172, 11, 86,1304 90, 90, 172, 172, 157, 251, 251, 164, 164, 164,1305 156, 158, 164, 164, 164, 287, 188, 188, 188, 519,1306 1 55, 188, 164, 164, 519, 188, 188, 188, 188, 164,1307 288, 86, 421, 166, 423, 423, 86, 86, 423, 83,1308 157, 157, 157, 291, 83, 157, 156, 156, 156, 419,1309 419, 156, 154, 419, 294, 166, 155, 155, 155, 153,1310 340, 155, 157, 493, 493, 152, 298, 493, 156, 166,1311 16 6, 166, 248, 248, 166, 166, 166, 151, 155, 421,1312 421, 421, 301, 173, 166, 166, 249, 249, 154, 154,1313 154, 166, 150, 154, 304, 153, 153, 153, 18, 18,1314 1 53, 152, 152, 152, 167, 305, 152, 340, 340, 340,1315 1 54, 515, 515, 151, 151, 151, 308, 153, 151, 309,1316 238, 238, 81, 152, 238, 409, 167, 409, 150, 150,1317 150, 252, 252, 150, 57, 151, 173, 173, 173, 173,1318 167, 167, 167, 311, 81, 167, 167, 167, 168, 26,1319 150, 26, 313, 81, 81, 167, 167, 149, 81, 81,1320 81, 315, 167, 81, 81, 81, 169, 577, 577, 135,1321 168, 28, 316, 81, 81, 57, 57, 254, 254, 135,1322 81, 28, 211, 211, 168, 168, 168, 186, 169, 168,1323 168, 168, 184, 149, 149, 149, 321, 606, 149, 168,1324 168, 322, 169, 169, 169, 148, 168, 169, 169, 169,1325 325, 135, 326, 28, 183, 149, 109, 169, 169, 606,1326 135, 135, 28, 28, 169, 256, 256, 34, 606, 606,1327 611, 398, 398, 606, 606, 606, 182, 34, 606, 606,1328 606, 148, 148, 148, 189, 511, 148, 190, 606, 606,1329 348, 348, 611, 616, 191, 606, 261, 109, 109, 347,1330 347, 611, 611, 148, 192, 217, 611, 611, 611, 34,1331 258, 611, 611, 611, 181, 616, 623, 511, 34, 34,1332 179, 611, 611, 353, 616, 616, 511, 511, 611, 616,1333 6 16, 616, 346, 346, 616, 616, 616, 354, 623, 101,1334 355, 217, 217, 217, 616, 616, 217, 623, 623, 319,1335 356, 616, 623, 623, 623, 580, 357, 623, 623, 623,1336 358, 101, 178, 217, 319, 319, 319, 623, 623, 485,1337 580, 580, 580, 361, 623, 101, 101, 101, 345, 345,1338 101, 101, 101, 362, 485, 485, 485, 268, 268, 268,1339 101, 101, 609, 609, 609, 214, 363, 101, 214, 214,1340 214, 214, 364, 214, 214, 214, 365, 214, 214, 214,1341 214, 61, 344, 344, 61, 61, 61, 343, 343, 61,1342 61, 61, 61, 61, 61, 61, 61, 366, 61, 214,1343 214, 214, 102, 626, 626, 214, 102, 240, 240, 102,1344 102, 102, 102, 176, 102, 102, 102, 102, 102, 102,1345 102, 102, 102, 102, 250, 250, 250, 369, 370, 250,1346 417, 417, 417, 250, 250, 250, 250, 257, 257, 257,1347 3 71, 372, 257, 573, 573, 573, 257, 257, 257, 257,1348 253, 253, 253, 373, 374, 253, 571, 571, 571, 253,1349 25 3, 253, 253, 255, 255, 255, 175, 392, 255, 491,1350 491, 491, 255, 255, 255, 255, 241, 393, 241, 241,1351 397, 193, 241, 234, 234, 234, 234, 239, 239, 239,1352 23 9, 96, 96, 96, 96, 614, 614, 614, 614, 235,1353 23 5, 235, 235, 231, 231, 231, 231, 232, 232, 232,1354 232, 233, 233, 233, 233, 628, 628, 628, 628, 147,1355 138, 137, 11 4, 107, 405, 91, 407, 408, 196, 88,1356 412, 41 4, 416, 199, 418, 84, 75, 70, 67, 60,1357 53, 51, 432, 433, 434, 435, 442, 443, 450, 451,1358 458, 48, 461, 462, 47, 41, 487, 489, 490, 201,1359 49 2, 35, 494, 495, 496, 497, 498, 499, 500, 501,1360 50 3, 505, 507, 509, 510, 33, 512, 514, 202, 27,1361 517, 246, 24, 20, 534, 535, 538, 539, 540, 541,1362 542, 203, 548, 550, 552, 554, 556, 558, 564, 16,1363 56 9, 570, 244, 572, 205, 242, 266, 13, 581, 582,1364 59 1, 594, 600, 601, 602, 603, 228, 607, 212, 8,1365 613, 6, 615, 5, 617, 618, 619, 3, 2, 624,1366 625, 213, 543]1293 526, 358, 88, 403, 83, 565, 402, 400, 401, 61, 1294 144, 524, 92, 526, 160, 5, 476, 95, 261, 476, 1295 23, 40, 476, 476, 99, 390, 426, 266, 526, 266, 1296 16, 261, 144, 424, 95, 5, 526, 526, 350, 526, 1297 526, 99, 458, 524, 61, 422, 160, 390, 23, 40, 1298 83, 526, 526, 526, 92, 92, 526, 526, 526, 526, 1299 358, 526, 526, 526, 54, 526, 526, 526, 526, 526, 1300 458, 403, 400, 402, 401, 476, 226, 226, 458, 458, 1301 88, 458, 458, 458, 54, 426, 526, 526, 526, 526, 1302 565, 424, 526, 458, 458, 458, 350, 619, 458, 458, 1303 458, 458, 422, 458, 458, 458, 54, 458, 458, 458, 1304 458, 458, 226, 348, 0, 54, 54, 619, 252, 252, 1305 54, 54, 54, 163, 408, 54, 54, 54, 458, 458, 1306 458, 458, 420, 0, 458, 54, 54, 224, 224, 619, 1307 318, 318, 54, 163, 190, 260, 227, 227, 346, 226, 1308 226, 69, 189, 619, 619, 619, 318, 260, 619, 619, 1309 619, 220, 220, 49, 409, 163, 218, 218, 619, 619, 1310 348, 222, 222, 224, 398, 619, 318, 408, 243, 163, 1311 163, 163, 227, 49, 163, 163, 163, 243, 420, 85, 1312 85, 399, 85, 85, 163, 163, 85, 220, 69, 85, 1313 85, 163, 218, 570, 346, 172, 172, 222, 172, 172, 1314 224, 224, 172, 318, 318, 172, 172, 514, 245, 227, 1315 227, 172, 249, 249, 262, 85, 409, 409, 245, 168, 1316 398, 398, 398, 34, 220, 220, 143, 13, 262, 218, 1317 218, 172, 428, 34, 222, 222, 135, 188, 399, 399, 1318 188, 168, 399, 188, 188, 13, 135, 85, 143, 570, 1319 570, 570, 85, 85, 269, 168, 168, 168, 514, 514, 1320 168, 168, 168, 172, 151, 34, 270, 372, 172, 172, 1321 168, 168, 217, 273, 34, 34, 274, 168, 135, 428, 1322 428, 428, 167, 173, 188, 188, 188, 135, 135, 188, 1323 131, 276, 247, 188, 188, 188, 188, 211, 211, 59, 1324 151, 151, 151, 247, 167, 151, 166, 59, 217, 217, 1325 217, 277, 81, 217, 372, 372, 372, 81, 167, 167, 1326 167, 516, 151, 167, 167, 167, 516, 59, 166, 169, 1327 217, 131, 131, 167, 167, 280, 173, 173, 173, 173, 1328 167, 165, 166, 166, 166, 84, 282, 166, 166, 166, 1329 84, 169, 283, 152, 241, 251, 251, 166, 166, 150, 1330 57, 241, 241, 165, 166, 169, 169, 169, 149, 286, 1331 169, 169, 169, 235, 235, 235, 235, 165, 165, 165, 1332 169, 169, 165, 165, 165, 289, 148, 169, 293, 152, 1333 152, 152, 165, 165, 152, 150, 150, 150, 79, 165, 1334 150, 57, 57, 296, 149, 149, 149, 299, 12, 149, 1335 12, 152, 239, 302, 239, 239, 620, 150, 239, 303, 1336 79, 418, 148, 148, 148, 153, 149, 148, 305, 79, 1337 79, 265, 265, 265, 79, 79, 79, 307, 620, 79, 1338 79, 79, 338, 158, 148, 513, 513, 620, 620, 79, 1339 79, 154, 620, 620, 620, 308, 79, 620, 620, 620, 1340 310, 153, 153, 153, 253, 253, 153, 620, 620, 418, 1341 418, 18, 18, 418, 620, 613, 255, 255, 510, 158, 1342 158, 158, 312, 153, 158, 574, 574, 154, 154, 154, 1343 338, 338, 154, 155, 338, 315, 406, 613, 406, 156, 1344 316, 158, 606, 606, 606, 157, 613, 613, 317, 154, 1345 510, 613, 613, 613, 344, 344, 613, 613, 613, 510, 1346 510, 267, 267, 609, 187, 267, 613, 613, 186, 155, 1347 155, 155, 323, 613, 155, 156, 156, 156, 258, 258, 1348 156, 157, 157, 157, 324, 609, 157, 604, 185, 488, 1349 488, 155, 28, 488, 609, 609, 484, 156, 263, 609, 1350 609, 609, 28, 157, 609, 609, 609, 343, 343, 604, 1351 101, 484, 484, 484, 609, 609, 342, 342, 604, 604, 1352 578, 609, 193, 604, 604, 604, 341, 341, 604, 604, 1353 604, 26, 101, 26, 28, 578, 578, 578, 604, 604, 1354 319, 340, 340, 28, 28, 604, 101, 101, 101, 339, 1355 339, 101, 101, 101, 196, 319, 319, 319, 198, 416, 1356 416, 101, 101, 416, 624, 624, 214, 259, 101, 214, 1357 214, 214, 214, 199, 214, 214, 214, 183, 214, 214, 1358 214, 214, 254, 254, 254, 238, 238, 254, 569, 569, 1359 569, 254, 254, 254, 254, 93, 93, 93, 93, 214, 1360 214, 214, 102, 182, 181, 214, 102, 351, 352, 102, 1361 102, 102, 102, 353, 102, 102, 102, 102, 102, 102, 1362 102, 102, 102, 102, 60, 354, 355, 60, 60, 60, 1363 356, 180, 60, 60, 60, 60, 60, 60, 60, 60, 1364 359, 60, 250, 250, 250, 360, 361, 250, 455, 455, 1365 455, 250, 250, 250, 250, 257, 257, 257, 362, 363, 1366 257, 497, 497, 497, 257, 257, 257, 257, 256, 256, 1367 256, 364, 365, 256, 366, 367, 368, 256, 256, 256, 1368 256, 612, 612, 612, 612, 268, 268, 268, 268, 231, 1369 231, 231, 231, 232, 232, 232, 232, 233, 233, 233, 1370 233, 234, 234, 234, 234, 626, 626, 626, 626, 369, 1371 370, 179, 382, 383, 178, 393, 394, 176, 175, 145, 1372 138, 137, 111, 404, 405, 201, 407, 106, 89, 410, 1373 412, 415, 86, 82, 76, 70, 67, 63, 53, 429, 1374 430, 431, 432, 433, 434, 441, 442, 202, 456, 457, 1375 50, 460, 461, 45, 44, 486, 487, 38, 489, 490, 1376 491, 492, 493, 494, 495, 496, 204, 498, 500, 502, 1377 504, 506, 507, 509, 35, 512, 205, 33, 515, 27, 1378 246, 24, 532, 533, 536, 537, 538, 539, 540, 541, 1379 22, 546, 548, 550, 552, 554, 555, 563, 244, 567, 1380 568, 212, 264, 242, 576, 14, 579, 580, 589, 593, 1381 598, 599, 600, 601, 213, 605, 240, 8, 611, 6, 1382 4, 614, 615, 616, 617, 3, 2, 622, 623, 228, 1383 542 ] 1367 1384 1368 1385 racc_action_pointer = [ 1369 13, nil, 879, 897, 11, 875, 864, nil, 889, nil,1370 nil, 252, nil, 849, 29, nil, 861, nil, 356, nil,1371 823, 25, nil, nil, 827, nil, 405, 818, 450, nil,1372 nil, nil, nil, 81 3, 506, 781, nil, nil, nil, nil,1373 nil, 817, 1, nil, nil, nil, nil, 774, 810, nil,1374 nil, 810, -5, 763, 142, nil, nil, 403, nil, 104,1375 801, 597, -4, nil, nil, nil, nil, 765, nil, 136,1376 75 8, nil, nil, nil, nil, 763, nil, nil, nil, nil,1377 210, 381, nil, 262, 772, -24, 237, 2, 712, nil,1378 217, 749, nil, nil, nil, nil, 686, 202, nil, nil,1379 229, 558, 622, nil, nil, nil, nil, 782, nil, 485,1380 nil, nil, nil, nil, 741, nil, nil, nil, nil, nil,1386 113, nil, 877, 895, 872, 14, 862, nil, 887, nil, 1387 nil, nil, 394, 236, 847, nil, 22, nil, 459, nil, 1388 nil, nil, 830, 19, 826, nil, 577, 818, 561, nil, 1389 nil, nil, nil, 815, 232, 794, nil, nil, 819, nil, 1390 6, nil, nil, nil, 774, 812, nil, nil, nil, 140, 1391 819, nil, nil, 761, 63, nil, nil, 359, nil, 294, 1392 640, -6, nil, 799, nil, nil, nil, 763, nil, 150, 1393 756, nil, nil, nil, nil, nil, 761, nil, nil, 387, 1394 nil, 265, 770, -29, 298, 183, 716, nil, 1, 752, 1395 nil, nil, -9, 590, nil, -12, nil, nil, nil, -5, 1396 nil, 559, 622, nil, nil, nil, 786, nil, nil, nil, 1397 nil, 741, nil, nil, nil, nil, nil, nil, nil, nil, 1381 1398 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1382 nil, nil, nil, nil, nil, 448, nil, 712, 761, nil,1383 nil, nil, nil, nil, nil, 108, 104, 746, 464, 416,1384 3 51, 336, 324, 318, 311, 279, 269, 263, 212, nil,1385 nil, nil, 9, nil, 230, 96, 292, 363, 407, 425,1386 nil, nil, 203, 341, nil, 681, 628, nil, 547, 505,1387 nil, 499, 461, 439, 417, nil, 412, 174, 239, 469,1388 472, 519, 489, 696, nil, nil, 743, nil, nil, 748,1389 nil, 7 74, 793, 806, nil, 819, nil, nil, nil, nil,1390 nil, 420, 853, 866, 581, nil, nil, 524, 160, nil,1391 1 82, nil, 155, nil, 71, nil, 43, 138, 874, nil,1392 nil, 6 98, 702, 706, 678, 694, nil, nil, 342, 701,1393 614, 690, 810, 85, 806, 172, 784, 142, 292, 306,1394 6 37, 225, 351, 663, 397, 676, 445, 650, 482, 73,1395 nil, 467, -37, 65, -35, -29, 806, 176, 570, nil,1396 -4, 114, nil, nil, 71, 113, 160, 167, -19, nil,1397 nil, 181, 202, nil, nil, 213, nil, 281, 227, nil,1398 nil, 240, nil, nil, 251, nil, nil, nil, 263, nil,1399 nil, 279, nil, nil, 319, 302, nil, nil, 341, 320,1400 nil, 368, nil, 349, nil, 386, 397, nil, 185, 547,1401 nil, 414, 419, nil, nil, 433, 435, nil, nil, nil,1402 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,1403 330, nil, 201, 597, 592, 558, 512, 479, 470, nil,1404 108, nil, 97, 503, 517, 520, 530, 536, 540, nil,1405 35, 553, 563, 576, 582, 586, 607, nil, 17, 637,1406 638, 650, 651, 663, 664, nil, nil, nil, nil, nil,1407 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,1408 112, nil, 655, 714, nil, nil, nil, 749, 448, nil,1409 124, 164, 6, 7, 5, 730, 1, 733, 737, 351,1410 125, nil, 786, nil, 740, nil, 742, 643, 744, 271,1411 nil, 302, nil, 256, nil, 104, nil, 31, nil, 24,1412 nil, -9, 752, 747, 754, 748, nil, nil, nil, nil,1413 nil, nil, 756, 749, nil, nil, nil, nil, nil, nil,1414 758, 750, nil, nil, nil, nil, nil, nil, 785, 42,1415 nil, 789, 811, nil, nil, nil, nil, nil, nil, nil,1416 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,1417 7, nil, nil, nil, nil, 567, nil, 766, nil, 767,1418 76 8, 682, 770, 285, 772, 767, 774, 768, 776, 769,1419 778, 770, nil, 780, nil, 781, nil, 782, nil, 783,1420 808, 514, 759, nil, 833, 339, 189, 821, nil, 244,1421 nil, nil, nil, nil, nil, nil, -8, nil, -1, nil,1422 nil, nil, nil, nil, 761, 822, nil, nil, 844, 800,1423 789, 790, 791, 833, nil, nil, nil, nil, 802, nil,1424 803, nil, 804, nil, 805, nil, 806, nil, 807, nil,1425 nil, nil, nil, nil, 829, nil, nil, 4, nil, 841,1426 801, 669, 872, 656, nil, nil, nil, 355, nil, 10,1427 553, 817, 865, nil, nil, nil, nil, nil, nil, nil,1428 nil, 801, nil, nil, 821, nil, nil, nil, nil, nil,1429 8 38, 869, 801, 828, nil, nil, 456, 842, nil, 548,1430 nil, 489, nil, 844, 690, 878, 512, 811, 812, 813,1431 nil, 114, nil, 535, 813, 814, 589, nil, 710, nil,1432 nil , nil, nil]1399 nil, 289, nil, nil, nil, 245, nil, 712, 761, nil, 1400 nil, nil, nil, 224, -2, 746, nil, nil, 375, 357, 1401 348, 253, 342, 414, 440, 482, 488, 494, 432, nil, 1402 13, nil, nil, 122, nil, 330, 295, 271, 208, 318, 1403 nil, nil, 199, 271, nil, 733, 732, nil, 729, 726, 1404 646, 619, 618, 592, nil, 503, 483, 519, 237, 97, 1405 89, nil, nil, 537, nil, nil, 569, nil, 573, 588, 1406 nil, 740, 762, nil, 781, 791, nil, nil, nil, nil, 1407 nil, 265, 836, 849, 582, nil, nil, 261, 160, nil, 1408 155, nil, 165, nil, 131, nil, 70, 140, 887, nil, 1409 nil, 684, 688, 692, 696, 308, nil, nil, 592, 366, 1410 821, 308, 807, 122, 801, 162, 782, 246, nil, 162, 1411 655, 305, 58, 414, 595, 426, 681, 668, 488, 568, 1412 89, -38, 168, 514, 802, 384, -27, 473, 699, 231, 1413 262, nil, nil, 240, 205, nil, 265, 285, nil, nil, 1414 290, nil, 342, 339, nil, nil, 356, nil, nil, 372, 1415 nil, nil, nil, 375, nil, nil, 390, nil, nil, 394, 1416 nil, nil, 368, 350, nil, 383, nil, 392, 442, nil, 1417 415, nil, 469, nil, nil, 450, 455, 463, 134, 568, 1418 nil, nil, nil, 480, 492, nil, nil, nil, nil, nil, 1419 nil, nil, nil, nil, nil, nil, nil, nil, 442, 559, 1420 551, 536, 526, 517, 464, nil, 138, nil, 103, nil, 1421 28, 617, 618, 623, 635, 636, 640, nil, -9, 650, 1422 655, 656, 668, 669, 681, 682, 684, 685, 686, 719, 1423 720, nil, 267, nil, nil, nil, nil, nil, nil, nil, 1424 nil, nil, 725, 726, nil, nil, nil, nil, nil, nil, 1425 13, nil, nil, 703, 753, nil, nil, nil, 173, 190, 1426 6, 7, 5, 2, 729, 734, 452, 733, 123, 163, 1427 785, nil, 739, nil, nil, 741, 571, nil, 421, nil, 1428 122, nil, 35, nil, 23, nil, 16, nil, 232, 749, 1429 744, 751, 745, 753, 746, nil, nil, nil, nil, nil, 1430 nil, 755, 747, nil, nil, nil, nil, nil, nil, nil, 1431 nil, nil, nil, nil, nil, 661, 758, 784, 41, nil, 1432 788, 810, nil, nil, nil, nil, nil, nil, nil, nil, 1433 nil, nil, nil, nil, nil, nil, 6, nil, nil, nil, 1434 nil, nil, nil, nil, 524, nil, 765, 766, 501, 768, 1435 763, 770, 764, 772, 765, 774, 766, 674, 777, nil, 1436 778, nil, 779, nil, 780, nil, 781, 782, nil, 807, 1437 477, nil, 831, 403, 216, 819, 276, nil, nil, nil, 1438 nil, nil, nil, nil, -12, nil, -1, nil, nil, nil, 1439 nil, nil, 760, 820, nil, nil, 768, 843, 799, 788, 1440 789, 790, 831, nil, nil, nil, 801, nil, 802, nil, 1441 803, nil, 804, nil, 805, 806, nil, nil, nil, nil, 1442 nil, nil, nil, 828, nil, 4, nil, 840, 800, 601, 1443 202, nil, nil, nil, 404, nil, 862, nil, 548, 815, 1444 863, nil, nil, nil, nil, nil, nil, nil, nil, 799, 1445 nil, nil, nil, 819, nil, nil, nil, nil, 836, 858, 1446 868, 826, nil, nil, 536, 840, 429, nil, nil, 512, 1447 nil, 842, 676, 464, 877, 869, 870, 871, nil, 96, 1448 405, nil, 812, 813, 551, nil, 700, nil, nil, nil, 1449 nil ] 1433 1450 1434 1451 racc_action_default = [ 1435 -376, -2, -376, -376, -6, -376, -13, -4, -376, -5,1436 - 7, -376, -1, -376, -376, 633, -376, -12, -376, -9,1437 -1 8, -376, -15, -14, -376, -8, -376, -21, -376, -17,1438 -16, -11, -10, -376, -376, -112, - 89, -19, -90, -20,1439 - 108, -376, -376, -98, -99, -100, -146, -376, -376, -147,1440 - 87, -94, -88, -82, -376, -22, -23, -376, -110, -376,1441 -376, -376, - 376, -104, -109, -101, -95, -376, -91, -376,1442 -376, -28 1, -282, -25, -24, -284, -248, -152, -26, -253,1443 - 376, -27, -254, -376, -376, -376, -376, -376, -305, -273,1444 - 376, -376, -167, -283, -274, -271, -251, -31, -286, -272,1445 -28 9, -376, -112, -96, -93, -113, -97, -376, -111, -376,1446 -1 91, -122, -204, -123, -376, -217, -124, -230, -125, -126,1447 - 247, -127, -128, -129, -182, -130, -183, -187, -148, -121,1448 -10 2, -105, -92, -84, -83, -376, -3, -285, -289, -153,1449 - 168, -249, -373, -154, -169, -376, -376, -376, -376, -376,1450 -376, -376, -376, -376, -376, -376, -376, -376, -376, -256,1451 - 255, -30, -376, -259, -376, -376, -376, -376, -376, -376,1452 -32, -288, -376, -376, -14 4, -133, -122, -145, -134, -123,1453 -1 16, -135, -124, -136, -125, -243, -137, -126, -376, -138,1454 -12 7, -376, -139, -128, -117, -140, -129, -118, -141, -119,1455 -14 2, -131, -120, -148, -143, -132, -114, -106, -107, -85,1456 -8 6, -376, -376, -376, -376, -287, -278, -376, -263, -279,1452 -376, -2, -376, -376, -376, -6, -13, -4, -376, -1, 1453 -5, -7, -376, -376, -376, 631, -376, -12, -376, -9, 1454 -15, -14, -18, -376, -376, -8, -376, -21, -376, -17, 1455 -16, -11, -10, -376, -376, -112, -90, -108, -376, -20, 1456 -376, -98, -99, -100, -376, -376, -146, -87, -147, -88, 1457 -94, -89, -19, -82, -376, -23, -22, -376, -110, -376, 1458 -376, -376, -104, -376, -109, -101, -91, -376, -95, -376, 1459 -376, -282, -24, -248, -26, -25, -284, -253, -152, -27, 1460 -254, -376, -376, -376, -376, -376, -305, -273, -376, -376, 1461 -283, -274, -376, -251, -167, -31, -286, -271, -272, -289, 1462 -281, -376, -112, -93, -113, -97, -376, -96, -111, -191, 1463 -123, -376, -204, -124, -217, -125, -230, -126, -127, -247, 1464 -128, -129, -130, -182, -183, -121, -187, -148, -122, -102, 1465 -105, -376, -92, -84, -83, -376, -3, -285, -289, -249, 1466 -373, -153, -168, -376, -376, -376, -154, -169, -376, -376, 1467 -376, -376, -376, -376, -376, -376, -376, -376, -376, -30, 1468 -376, -256, -255, -376, -259, -376, -376, -376, -376, -376, 1469 -32, -288, -376, -376, -145, -134, -123, -116, -135, -124, 1470 -136, -125, -137, -126, -243, -138, -127, -376, -376, -139, 1471 -128, -117, -140, -129, -118, -141, -119, -142, -131, -120, 1472 -143, -132, -148, -144, -133, -122, -114, -107, -106, -86, 1473 -85, -376, -376, -376, -376, -287, -278, -376, -263, -279, 1457 1474 -264, -275, -265, -276, -260, -277, -261, -262, -376, -307, 1458 1475 -252, -250, -268, -269, -266, -267, -280, -270, -376, -376, 1476 -376, -376, -376, -376, -376, -376, -376, -376, -115, -376, 1459 1477 -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 1460 1478 -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 1461 -115, -376, -376, -376, -376, -376, -376, -376, -376, -63, 1462 -376, -376, -62, -33, -290, -34, -376, -376, -357, -336, 1463 -322, -317, -310, -343, -328, -316, -334, -376, -313, -54, 1464 -323, -319, -55, -329, -325, -56, -375, -335, -331, -57, 1465 -342, -337, -312, -58, -353, -344, -318, -59, -354, -340, 1466 -324, -348, -60, -350, -330, -311, -347, -61, -376, -376, 1467 -171, -376, -376, -155, -157, -376, -376, -185, -172, -170, 1468 -189, -186, -184, -193, -190, -188, -206, -194, -192, -166, 1469 -376, -181, -376, -376, -376, -376, -376, -376, -376, -203, 1470 -376, -216, -376, -376, -376, -376, -376, -376, -376, -229, 1479 -376, -33, -62, -34, -290, -63, -376, -376, -343, -328, 1480 -316, -334, -376, -313, -54, -323, -319, -55, -329, -325, 1481 -56, -375, -335, -331, -57, -342, -337, -312, -58, -344, 1482 -318, -59, -353, -340, -324, -348, -60, -354, -350, -330, 1483 -311, -61, -357, -336, -322, -317, -310, -347, -376, -376, 1484 -185, -170, -172, -376, -376, -189, -186, -184, -193, -190, 1485 -188, -206, -194, -192, -219, -207, -205, -181, -376, -376, 1486 -376, -376, -376, -376, -376, -203, -376, -216, -376, -229, 1471 1487 -376, -376, -376, -376, -376, -376, -376, -242, -376, -376, 1472 -376, -376, -376, -376, -376, -219, -207, -205, -232, -220,1473 -218, -233, -231, -246, -244, -150, -245, -151, -149, -156,1474 -376, -29, -68, -376, -64, -28, -258, -376, -376, -257,1475 1488 -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 1476 -376, -303, -376, -308, -152, -304, -376, -376, -376, -376, 1477 -164, -376, -179, -376, -201, -376, -214, -376, -227, -376, 1478 -240, -376, -376, -376, -376, -376, -163, -178, -200, -213, 1479 -226, -239, -376, -376, -165, -180, -202, -215, -228, -241, 1480 -376, -376, -162, -177, -199, -212, -225, -238, -376, -376, 1481 -69, -376, -376, -359, -358, -314, -315, -321, -320, -327, 1482 -326, -333, -332, -339, -338, -355, -346, -345, -356, -341, 1483 -376, -349, -352, -351, -306, -376, -158, -376, -173, -376, 1489 -376, -166, -376, -232, -220, -218, -233, -231, -246, -244, 1490 -150, -245, -376, -376, -156, -151, -149, -171, -157, -155, 1491 -376, -29, -64, -68, -376, -28, -258, -257, -376, -376, 1484 1492 -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 1485 -376, -376, -195, -376, -208, -376, -221, -376, -234, -376, 1486 -376, -376, -305, -53, -44, -376, -376, -31, -72, -310, 1487 -70, -36, -37, -372, -38, -39, -360, -40, -376, -367, 1488 -363, -41, -366, -42, -369, -376, -35, -43, -376, -376, 1489 -376, -376, -376, -376, -309, -160, -175, -159, -376, -174, 1490 -376, -196, -376, -209, -376, -222, -376, -235, -376, -197, 1491 -210, -223, -236, -66, -376, -49, -67, -305, -52, -50, 1492 -376, -376, -376, -376, -44, -71, -65, -376, -370, -376, 1493 -376, -292, -376, -161, -176, -198, -211, -224, -237, -45, 1494 -47, -376, -51, -365, -376, -364, -362, -361, -368, -371, 1495 -73, -376, -295, -376, -291, -46, -376, -75, -294, -376, 1496 -293, -74, -77, -376, -80, -376, -376, -296, -297, -298, 1497 -78, -376, -48, -76, -376, -376, -376, -81, -79, -299, 1498 -300, -301, -302 ] 1493 -376, -308, -152, -304, -303, -376, -376, -179, -376, -201, 1494 -376, -214, -376, -227, -376, -240, -376, -164, -376, -376, 1495 -376, -376, -376, -376, -376, -178, -200, -213, -226, -239, 1496 -163, -376, -376, -180, -202, -215, -228, -241, -165, -177, 1497 -199, -212, -225, -238, -162, -376, -376, -376, -376, -69, 1498 -376, -376, -315, -314, -320, -321, -327, -326, -333, -332, 1499 -339, -338, -346, -345, -355, -341, -376, -349, -356, -352, 1500 -351, -359, -358, -306, -376, -173, -376, -376, -376, -376, 1501 -376, -376, -376, -376, -376, -376, -376, -376, -376, -195, 1502 -376, -208, -376, -221, -376, -234, -376, -376, -158, -376, 1503 -376, -53, -44, -376, -376, -31, -310, -72, -70, -35, 1504 -37, -38, -372, -39, -360, -40, -376, -363, -41, -367, 1505 -366, -42, -369, -376, -36, -43, -305, -376, -376, -376, 1506 -376, -376, -376, -309, -175, -174, -376, -196, -376, -209, 1507 -376, -222, -376, -235, -376, -376, -159, -197, -210, -223, 1508 -236, -160, -66, -376, -67, -305, -52, -50, -376, -376, 1509 -376, -44, -71, -65, -376, -370, -376, -49, -376, -292, 1510 -376, -176, -198, -211, -224, -237, -161, -45, -47, -376, 1511 -51, -365, -364, -376, -362, -361, -368, -371, -73, -295, 1512 -376, -376, -291, -46, -376, -75, -376, -294, -293, -74, 1513 -77, -376, -80, -376, -376, -296, -297, -298, -78, -376, 1514 -76, -48, -376, -376, -376, -81, -79, -299, -300, -301, 1515 -302 ] 1499 1516 1500 1517 racc_goto_table = [ 1501 96, 111, 160, 161, 116, 177, 412, 123, 273, 48, 1502 37, 199, 269, 172, 520, 48, 55, 114, 64, 65, 1503 103, 122, 104, 91, 76, 620, 19, 96, 3, 68, 1504 392, 63, 528, 59, 113, 97, 68, 620, 107, 611, 1505 121, 32, 176, 118, 132, 182, 131, 173, 196, 623, 1506 91, 141, 287, 615, 607, 275, 62, 119, 180, 271, 1507 460, 218, 193, 220, 81, 222, 206, 224, 191, 226, 1508 227, 194, 103, 197, 207, 179, 394, 64, 65, 78, 1509 202, 190, 483, 575, 184, 216, 74, 219, 18, 221, 1510 107, 223, 10, 225, 2, 136, 70, 53, 187, 33, 1511 201, 205, 175, 178, 181, 183, 186, 189, 192, 195, 1512 173, 231, 232, 233, 234, 235, 48, 209, 198, 200, 1513 204, 174, 27, 20, 163, 137, 13, 6, 248, 318, 1514 215, 582, 601, 5, 256, 544, 595, 577, nil, nil, 1515 nil, nil, nil, nil, nil, nil, nil, nil, 254, nil, 1516 nil, nil, nil, nil, 282, nil, nil, nil, nil, nil, 1517 nil, 249, nil, nil, nil, nil, nil, 252, nil, nil, 1518 nil, nil, nil, 384, nil, 386, nil, nil, nil, 323, 1519 nil, nil, nil, 327, 251, nil, 332, 285, nil, nil, 1520 343, nil, nil, 353, nil, 361, 348, 369, nil, 358, 1521 nil, 366, nil, 374, nil, nil, nil, 378, 389, 382, 1522 347, 320, nil, 357, 329, 365, nil, 373, 375, nil, 1523 nil, nil, 380, 344, 330, 336, 354, 335, 362, 346, 1524 370, nil, 356, nil, 364, nil, 372, nil, 377, nil, 1525 333, nil, nil, 338, nil, nil, 345, nil, nil, 355, 1526 nil, 363, nil, 371, nil, nil, 518, nil, nil, 411, 1527 nil, nil, nil, nil, nil, nil, nil, 602, nil, nil, 1528 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1529 416, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1518 93, 128, 162, 45, 174, 159, 113, 410, 271, 45, 1519 52, 196, 107, 115, 172, 103, 56, 518, 121, 275, 1520 89, 65, 64, 111, 73, 93, 66, 19, 618, 95, 1521 3, 609, 106, 62, 393, 526, 66, 120, 59, 618, 1522 620, 32, 282, 205, 132, 89, 110, 173, 179, 139, 1523 130, 614, 605, 273, 118, 181, 61, 270, 459, 79, 1524 193, 206, 218, 187, 220, 177, 222, 191, 224, 194, 1525 226, 227, 216, 74, 219, 199, 221, 117, 223, 190, 1526 225, 392, 65, 64, 480, 572, 107, 72, 176, 208, 1527 18, 11, 2, 136, 70, 53, 186, 33, 198, 201, 1528 204, 175, 178, 180, 182, 185, 106, 189, 192, 231, 1529 45, 173, 232, 233, 234, 235, 195, 210, 197, 183, 1530 200, 203, 27, 22, 164, 137, 14, 6, 215, 258, 1531 318, 580, 600, 4, 543, 592, 574, nil, nil, nil, 1532 nil, nil, nil, nil, nil, nil, 255, nil, nil, nil, 1533 nil, nil, nil, nil, nil, 316, nil, nil, nil, nil, 1534 nil, nil, nil, nil, nil, 253, nil, nil, nil, nil, 1535 nil, 379, nil, 381, 249, nil, nil, nil, nil, nil, 1536 nil, nil, 252, nil, 320, nil, nil, 327, nil, nil, 1537 nil, 344, nil, 325, nil, 356, 330, 364, 370, nil, 1538 280, nil, nil, nil, nil, 251, 384, nil, 343, 389, 1539 nil, nil, 355, nil, 363, 369, nil, 373, nil, 377, 1540 nil, nil, nil, 334, nil, 321, nil, 342, nil, nil, 1541 nil, 354, nil, 362, 368, nil, 339, 375, 331, nil, 1542 351, 336, 359, 365, 341, nil, nil, nil, 353, nil, 1543 361, 367, nil, 387, nil, 517, nil, nil, nil, 328, 1544 414, nil, 333, nil, nil, nil, 599, 340, nil, nil, 1545 nil, 352, nil, 360, 366, nil, nil, nil, nil, nil, 1530 1546 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1531 1547 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1532 nil, 479, nil, nil, 450, 418, nil, nil, nil, nil,1533 442, nil, nil, nil, nil, nil, nil, nil, nil, nil,1534 nil, 434, nil, nil, nil, nil, nil, nil, nil, nil,1535 465, 464, nil, nil, nil, nil, 432, nil, nil, nil,1536 nil, nil, 4 77, nil, nil, nil, nil, 487, nil, nil,1537 nil, 490, nil, nil, 474, nil, nil, nil, nil, nil,1538 nil, nil, nil, nil, 468, nil, nil, 500, nil, nil,1539 nil, nil, 472, nil, nil, nil, nil, nil, nil, 498,1540 nil, nil, 489, nil, nil, nil, 492, 509, 470, 519,1541 nil, nil, nil, 507, nil, nil, 496, nil, nil, nil,1542 nil, nil, nil, nil, 505, nil, nil, nil, nil, nil,1543 nil, 494, nil, nil, nil, 411, 256, 565, nil, 503,1544 nil, 548, 285, nil, nil, nil, nil, nil, nil, nil,1545 517, nil, nil, nil, nil, nil, nil, 558, nil, nil,1546 nil, nil, nil, nil, nil, nil, nil, nil, nil, 556,1547 nil, nil, nil, nil, nil, nil, 550, nil, 519, nil,1548 nil, nil, nil, nil, nil, nil, 554, nil, nil, nil,1549 nil, nil, 591, nil, nil, nil, 348, 358, 366, 374,1550 nil, 552, 48, 564, nil, nil, 567, 569, nil, nil,1551 nil, 285, nil, nil, nil, nil, 605, nil, nil, 517,1552 nil, 594, nil, 597, nil, nil, nil, nil, nil, nil,1553 411, nil, nil, nil, nil, nil, nil, nil, nil, nil,1548 nil, nil, nil, nil, nil, nil, nil, 475, nil, nil, 1549 nil, nil, nil, 456, nil, nil, 441, nil, nil, nil, 1550 nil, nil, nil, nil, 415, nil, nil, 433, nil, nil, 1551 nil, nil, nil, nil, nil, nil, nil, nil, nil, 463, 1552 nil, nil, 431, nil, nil, nil, nil, nil, nil, nil, 1553 nil, nil, nil, nil, nil, 482, nil, nil, nil, nil, 1554 nil, 473, nil, 429, nil, nil, nil, nil, nil, 498, 1555 nil, nil, nil, nil, nil, nil, nil, nil, nil, 471, 1556 nil, nil, nil, nil, 495, 464, nil, nil, nil, nil, 1557 nil, nil, nil, nil, nil, 469, 507, nil, nil, 516, 1558 506, 493, 486, nil, 487, nil, nil, nil, nil, nil, 1559 nil, 504, nil, nil, nil, nil, 491, 467, nil, nil, 1560 nil, nil, nil, nil, nil, 414, 502, nil, nil, nil, 1561 nil, nil, nil, 515, 255, nil, nil, 489, 555, nil, 1562 nil, nil, nil, nil, 280, nil, nil, 500, nil, nil, 1563 nil, nil, nil, nil, 554, 577, nil, nil, nil, nil, 1564 nil, nil, nil, nil, nil, nil, nil, 516, nil, nil, 1565 nil, 552, nil, nil, 546, nil, nil, nil, nil, nil, 1566 nil, nil, nil, nil, 589, 45, 550, nil, 565, 567, 1567 nil, nil, 563, nil, nil, nil, nil, 343, 355, 363, 1568 369, 515, nil, 603, nil, nil, nil, 548, nil, nil, 1569 593, 595, 280, nil, nil, nil, nil, nil, nil, 414, 1554 1570 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1555 1571 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1556 1572 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1557 nil, nil, nil, nil, nil, nil, nil, 628 ] 1573 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1574 nil, nil, nil, nil, nil, 626 ] 1558 1575 1559 1576 racc_goto_check = [ 1560 56, 81, 34, 22, 83, 104, 115, 88, 24, 23, 1561 15, 78, 48, 109, 26, 23, 15, 71, 72, 66, 1562 59, 87, 62, 55, 105, 54, 14, 56, 1, 60, 1563 51, 69, 50, 58, 82, 23, 60, 54, 23, 53, 1564 86, 14, 81, 84, 60, 83, 69, 56, 88, 53, 1565 55, 105, 39, 37, 36, 25, 68, 85, 71, 20, 1566 52, 109, 87, 109, 18, 109, 74, 109, 75, 109, 1567 109, 76, 59, 77, 62, 82, 48, 72, 66, 17, 1568 79, 86, 80, 26, 84, 110, 16, 110, 13, 110, 1569 23, 110, 12, 110, 11, 10, 9, 8, 85, 7, 1570 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 1571 56, 56, 56, 56, 56, 56, 23, 15, 100, 101, 1572 102, 103, 6, 5, 106, 108, 4, 3, 81, 109, 1573 112, 113, 114, 2, 88, 116, 127, 129, nil, nil, 1574 nil, nil, nil, nil, nil, nil, nil, nil, 87, nil, 1575 nil, nil, nil, nil, 81, nil, nil, nil, nil, nil, 1576 nil, 82, nil, nil, nil, nil, nil, 86, nil, nil, 1577 nil, nil, nil, 78, nil, 78, nil, nil, nil, 81, 1578 nil, nil, nil, 83, 85, nil, 83, 82, nil, nil, 1579 81, nil, nil, 81, nil, 81, 88, 81, nil, 88, 1580 nil, 88, nil, 88, nil, nil, nil, 88, 81, 88, 1581 87, 82, nil, 87, 82, 87, nil, 87, 87, nil, 1582 nil, nil, 87, 82, 84, 86, 82, 84, 82, 86, 1583 82, nil, 86, nil, 86, nil, 86, nil, 86, nil, 1584 85, nil, nil, 85, nil, nil, 85, nil, nil, 85, 1585 nil, 85, nil, 85, nil, nil, 24, nil, nil, 81, 1586 nil, nil, nil, nil, nil, nil, nil, 115, nil, nil, 1587 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1588 81, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1577 56, 81, 34, 23, 104, 22, 83, 115, 24, 23, 1578 15, 78, 59, 84, 109, 62, 15, 26, 88, 48, 1579 55, 66, 72, 71, 105, 56, 60, 14, 54, 23, 1580 1, 53, 23, 69, 51, 50, 60, 87, 58, 54, 1581 53, 14, 39, 81, 60, 55, 82, 56, 83, 105, 1582 69, 37, 36, 25, 86, 84, 68, 20, 52, 18, 1583 88, 74, 109, 75, 109, 71, 109, 76, 109, 77, 1584 109, 109, 110, 17, 110, 79, 110, 85, 110, 87, 1585 110, 48, 66, 72, 80, 26, 59, 16, 82, 62, 1586 13, 12, 11, 10, 9, 8, 86, 7, 90, 91, 1587 92, 93, 94, 95, 96, 97, 23, 98, 99, 56, 1588 23, 56, 56, 56, 56, 56, 100, 15, 101, 85, 1589 102, 103, 6, 5, 106, 108, 4, 3, 112, 81, 1590 109, 113, 114, 2, 116, 127, 129, nil, nil, nil, 1591 nil, nil, nil, nil, nil, nil, 88, nil, nil, nil, 1592 nil, nil, nil, nil, nil, 81, nil, nil, nil, nil, 1593 nil, nil, nil, nil, nil, 87, nil, nil, nil, nil, 1594 nil, 78, nil, 78, 82, nil, nil, nil, nil, nil, 1595 nil, nil, 86, nil, 83, nil, nil, 83, nil, nil, 1596 nil, 81, nil, 84, nil, 81, 84, 81, 81, nil, 1597 82, nil, nil, nil, nil, 85, 81, nil, 88, 81, 1598 nil, nil, 88, nil, 88, 88, nil, 88, nil, 88, 1599 nil, nil, nil, 87, nil, 82, nil, 87, nil, nil, 1600 nil, 87, nil, 87, 87, nil, 82, 87, 86, nil, 1601 82, 86, 82, 82, 86, nil, nil, nil, 86, nil, 1602 86, 86, nil, 82, nil, 24, nil, nil, nil, 85, 1603 81, nil, 85, nil, nil, nil, 115, 85, nil, nil, 1604 nil, 85, nil, 85, 85, nil, nil, nil, nil, nil, 1589 1605 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1590 1606 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1591 nil, 104, nil, nil, 88, 82, nil, nil, nil, nil, 1592 87, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1593 nil, 86, nil, nil, nil, nil, nil, nil, nil, nil, 1594 81, 83, nil, nil, nil, nil, 85, nil, nil, nil, 1595 nil, nil, 88, nil, nil, nil, nil, 81, nil, nil, 1596 nil, 81, nil, nil, 87, nil, nil, nil, nil, nil, 1597 nil, nil, nil, nil, 82, nil, nil, 88, nil, nil, 1598 nil, nil, 86, nil, nil, nil, nil, nil, nil, 87, 1599 nil, nil, 82, nil, nil, nil, 82, 88, 85, 81, 1600 nil, nil, nil, 87, nil, nil, 86, nil, nil, nil, 1601 nil, nil, nil, nil, 86, nil, nil, nil, nil, nil, 1602 nil, 85, nil, nil, nil, 81, 88, 22, nil, 85, 1603 nil, 81, 82, nil, nil, nil, nil, nil, nil, nil, 1604 23, nil, nil, nil, nil, nil, nil, 88, nil, nil, 1607 nil, nil, nil, nil, nil, nil, nil, 104, nil, nil, 1608 nil, nil, nil, 81, nil, nil, 88, nil, nil, nil, 1609 nil, nil, nil, nil, 82, nil, nil, 87, nil, nil, 1610 nil, nil, nil, nil, nil, nil, nil, nil, nil, 81, 1611 nil, nil, 86, nil, nil, nil, nil, nil, nil, nil, 1612 nil, nil, nil, nil, nil, 83, nil, nil, nil, nil, 1613 nil, 88, nil, 85, nil, nil, nil, nil, nil, 81, 1605 1614 nil, nil, nil, nil, nil, nil, nil, nil, nil, 87, 1606 nil, nil, nil, nil, nil, nil, 82, nil, 81, nil, 1607 nil, nil, nil, nil, nil, nil, 86, nil, nil, nil, 1608 nil, nil, 22, nil, nil, nil, 88, 88, 88, 88, 1609 nil, 85, 23, 15, nil, nil, 23, 23, nil, nil, 1610 nil, 82, nil, nil, nil, nil, 34, nil, nil, 23, 1611 nil, 81, nil, 81, nil, nil, nil, nil, nil, nil, 1612 81, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1615 nil, nil, nil, nil, 88, 82, nil, nil, nil, nil, 1616 nil, nil, nil, nil, nil, 86, 81, nil, nil, 81, 1617 88, 87, 82, nil, 82, nil, nil, nil, nil, nil, 1618 nil, 87, nil, nil, nil, nil, 86, 85, nil, nil, 1619 nil, nil, nil, nil, nil, 81, 86, nil, nil, nil, 1620 nil, nil, nil, 23, 88, nil, nil, 85, 81, nil, 1621 nil, nil, nil, nil, 82, nil, nil, 85, nil, nil, 1622 nil, nil, nil, nil, 88, 22, nil, nil, nil, nil, 1623 nil, nil, nil, nil, nil, nil, nil, 81, nil, nil, 1624 nil, 87, nil, nil, 82, nil, nil, nil, nil, nil, 1625 nil, nil, nil, nil, 22, 23, 86, nil, 23, 23, 1626 nil, nil, 15, nil, nil, nil, nil, 88, 88, 88, 1627 88, 23, nil, 34, nil, nil, nil, 85, nil, nil, 1628 81, 81, 82, nil, nil, nil, nil, nil, nil, 81, 1613 1629 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1614 1630 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1615 1631 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1616 nil, nil, nil, nil, nil, nil, nil, 56 ] 1632 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1633 nil, nil, nil, nil, nil, 56 ] 1617 1634 1618 1635 racc_goto_pointer = [ 1619 nil, 28, 133, 127, 120, 110, 102, 72, 64, 43,1620 2 5, 94, 88, 77, 15, -18, 32, 25, 10, nil,1621 -15 2, nil, -85, -19, -203, -156, -445, nil, nil, nil,1622 nil, nil, nil, nil, -8 5, nil, -546, -554, nil, -162,1623 nil, nil, nil, nil, nil, nil, nil, nil, -19 9, nil,1624 -42 7, -244, -332, -567, -586, -31, -54, nil, -9, -37,1625 -23, nil, - 35, nil, nil, nil, -29, nil, 9, -16,1626 nil, - 44, -30, nil, -41, -34, -31, -29, -91, -22,1627 -32 8, -60, -27, -57, -18, -4, -21, -40, -54, nil,1628 - 2, -1, 0, 1, 2, 3, 4, 5, 6, 7,1629 1 6, 17, 18, 19, -97, -30, 34, nil, 50, -88,1630 - 63, nil, -17, -408, -448, -313, -350, nil, nil, nil,1631 nil, nil, nil, nil, nil, nil, nil, -43 5, nil, -397]1636 nil, 30, 133, 127, 120, 109, 100, 70, 62, 41, 1637 23, 92, 86, 78, 15, -18, 33, 19, 5, nil, 1638 -154, nil, -81, -25, -203, -158, -441, nil, nil, nil, 1639 nil, nil, nil, nil, -86, nil, -546, -554, nil, -172, 1640 nil, nil, nil, nil, nil, nil, nil, nil, -192, nil, 1641 -423, -240, -335, -573, -581, -34, -54, nil, -2, -45, 1642 -23, nil, -42, nil, nil, nil, -24, nil, 12, -11, 1643 nil, -37, -23, nil, -45, -39, -35, -33, -91, -27, 1644 -324, -59, -14, -54, -47, 17, -6, -23, -42, nil, 1645 -4, -3, -2, -1, 0, 1, 2, 3, 5, 6, 1646 14, 16, 18, 19, -98, -30, 32, nil, 49, -87, 1647 -76, nil, -17, -407, -446, -312, -350, nil, nil, nil, 1648 nil, nil, nil, nil, nil, nil, nil, -434, nil, -396 ] 1632 1649 1633 1650 racc_goto_default = [ 1634 1651 nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1635 nil, nil, nil, nil, nil, nil, nil, 53 6, nil, 84,1636 nil, 8 8, nil, 142, nil, nil, nil, 521, 522, 524,1637 52 5, 527, 531, 533, 93, 535, nil, nil, 512, 513,1638 28 9, 292, 295, 299, 303, 307, 312, 317, nil, 270,1639 nil, nil, nil, nil, 61 2, 613, 614, 50, 52, 36,1640 3 8, 41, nil, 106, 43, 44, 45, 47, nil, nil,1641 6 0, nil, 40, 42, 105, nil, nil, nil, nil, nil,1642 12 9, 71, 72, nil, nil, 290, 293, 297, 300, 125,1643 3 11, 315, 281, nil, nil, nil, nil, nil, nil, 302,1644 30 6, 310, 314, 279, 283, nil, 79, 82, 85, 86,1645 8 9, 94, 98, nil, nil, nil, 413, 288, 291, 294,1646 29 8, 301, 305, 309, 313, 278, 526, 530, 532, nil ]1652 nil, nil, nil, nil, nil, nil, nil, 534, nil, 82, 1653 nil, 86, nil, 140, nil, nil, nil, 519, 520, 521, 1654 523, 525, 528, 531, 90, 533, nil, nil, 536, 511, 1655 284, 287, 290, 294, 298, 301, 306, 311, nil, 269, 1656 nil, nil, nil, nil, 610, 611, 612, 47, 49, 51, 1657 36, 38, nil, 105, 41, 42, 43, 44, nil, nil, 1658 63, nil, 37, 40, 104, nil, nil, nil, nil, nil, 1659 125, 100, 71, nil, nil, 285, 288, 292, 295, 122, 1660 305, 310, 315, nil, nil, nil, nil, nil, nil, 297, 1661 300, 304, 309, 313, 278, nil, 77, 80, 83, 85, 1662 87, 91, 96, nil, nil, nil, 411, 283, 286, 289, 1663 293, 296, 299, 303, 308, 312, 524, 527, 530, nil ] 1647 1664 1648 1665 racc_token_table = { … … 1670 1687 :Left_parenthesis_code => 21, 1671 1688 :Right_parenthesis_code => 22, 1672 ";"=> 23,1689 :Semicolon_code => 23, 1673 1690 :SYM_ADL_VERSION => 24, 1674 1691 :V_VERSION_STRING => 25, … … 1730 1747 :SYM_EXISTENCE => 81, 1731 1748 :SYM_CARDINALITY => 82, 1732 :Semicolon_code => 83, 1733 :SYM_ORDERED => 84, 1734 :SYM_UNORDERED => 85, 1735 :SYM_UNIQUE => 86, 1736 :SYM_OCCURRENCES => 87, 1737 :V_ISO8601_DATE_CONSTRAINT_PATTERN => 88, 1738 :V_ISO8601_TIME_CONSTRAINT_PATTERN => 89, 1739 :V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN => 90, 1740 :START_TERM_CODE_CONSTRAINT => 91, 1741 :END_TERM_CODE_CONSTRAINT => 92, 1742 :TERM_CODE => 93, 1743 :V_ISO8601_DURATION_CONSTRAINT_PATTERN => 94 } 1749 :SYM_ORDERED => 83, 1750 :SYM_UNORDERED => 84, 1751 :SYM_UNIQUE => 85, 1752 :SYM_OCCURRENCES => 86, 1753 :V_ISO8601_DATE_CONSTRAINT_PATTERN => 87, 1754 :V_ISO8601_TIME_CONSTRAINT_PATTERN => 88, 1755 :V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN => 89, 1756 :START_TERM_CODE_CONSTRAINT => 90, 1757 :END_TERM_CODE_CONSTRAINT => 91, 1758 :TERM_CODE => 92, 1759 :V_ISO8601_DURATION_CONSTRAINT_PATTERN => 93 } 1744 1760 1745 1761 racc_use_result_var = true 1746 1762 1747 racc_nt_base = 9 51763 racc_nt_base = 94 1748 1764 1749 1765 Racc_arg = [ … … 1787 1803 'Left_parenthesis_code', 1788 1804 'Right_parenthesis_code', 1789 ' ";"',1805 'Semicolon_code', 1790 1806 'SYM_ADL_VERSION', 1791 1807 'V_VERSION_STRING', … … 1847 1863 'SYM_EXISTENCE', 1848 1864 'SYM_CARDINALITY', 1849 'Semicolon_code',1850 1865 'SYM_ORDERED', 1851 1866 'SYM_UNORDERED', … … 1886 1901 'c_attributes', 1887 1902 'c_object', 1903 'v_c_domain_type', 1888 1904 'archetype_internal_ref', 1889 1905 'archetype_slot', … … 1892 1908 'c_ordinal', 1893 1909 'c_primitive_object', 1894 'v_c_domain_type',1895 1910 'absolute_path', 1896 1911 'c_archetype_slot_head', … … 2032 2047 # reduce 18 omitted 2033 2048 2034 module_eval <<'.,.,', 'lib/parser.y', 7 32049 module_eval <<'.,.,', 'lib/parser.y', 74 2035 2050 def _reduce_19( val, _values, result ) 2036 2051 result = {:language => val[1]} … … 2061 2076 # reduce 30 omitted 2062 2077 2063 module_eval <<'.,.,', 'lib/parser.y', 11 02078 module_eval <<'.,.,', 'lib/parser.y', 111 2064 2079 def _reduce_31( val, _values, result ) 2065 2080 result = {:c_complex_object_id => {:type_identifier => val[0]}} … … 2068 2083 .,., 2069 2084 2070 module_eval <<'.,.,', 'lib/parser.y', 11 42085 module_eval <<'.,.,', 'lib/parser.y', 115 2071 2086 def _reduce_32( val, _values, result ) 2072 2087 result = {:c_complex_object_id => {:type_identifier => val[0], :V_LOCAL_TERM_CODE_REF => val[1]}} … … 2145 2160 # reduce 67 omitted 2146 2161 2147 # reduce 68 omitted 2148 2149 # reduce 69 omitted 2162 module_eval <<'.,.,', 'lib/parser.y', 186 2163 def _reduce_68( val, _values, result ) 2164 @@log.info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]}, c_existence = #{val[1]} at #{@filename}") 2165 result 2166 end 2167 .,., 2168 2169 module_eval <<'.,.,', 'lib/parser.y', 190 2170 def _reduce_69( val, _values, result ) 2171 @@log.info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER: #{val[0]}, c_existence = #{val[1]}, c_cardinality = #{val[2]} at #{@filename}") 2172 result 2173 end 2174 .,., 2150 2175 2151 2176 # reduce 70 omitted … … 2195 2220 # reduce 92 omitted 2196 2221 2197 # reduce 93 omitted 2198 2199 module_eval <<'.,.,', 'lib/parser.y', 233 2222 module_eval <<'.,.,', 'lib/parser.y', 240 2223 def _reduce_93( val, _values, result ) 2224 @@log.info("#{__FILE__}:#{__LINE__}: attr_id = #{val[0]}, object_block = #{val[1]} at #{@filename}:#{@lineno}") 2225 result 2226 end 2227 .,., 2228 2229 module_eval <<'.,.,', 'lib/parser.y', 245 2200 2230 def _reduce_94( val, _values, result ) 2201 @@log.info(" dADL::V_ATTRIBUTE_IDENTIFIER: #{val[0]} at #{@filename}")2231 @@log.info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}:#{@lineno}") 2202 2232 result 2203 2233 end … … 2228 2258 # reduce 106 omitted 2229 2259 2230 # reduce 107 omitted 2260 module_eval <<'.,.,', 'lib/parser.y', 269 2261 def _reduce_107( val, _values, result ) 2262 @@log.info("object_key: [#{val[1]}] at #{@filename}:#{@lineno}") 2263 result 2264 end 2265 .,., 2231 2266 2232 2267 # reduce 108 omitted … … 2256 2291 # reduce 120 omitted 2257 2292 2258 # reduce 121 omitted 2259 2260 # reduce 122 omitted 2261 2262 # reduce 123 omitted 2263 2264 # reduce 124 omitted 2265 2266 # reduce 125 omitted 2267 2268 # reduce 126 omitted 2269 2270 # reduce 127 omitted 2271 2272 # reduce 128 omitted 2273 2274 # reduce 129 omitted 2275 2276 # reduce 130 omitted 2293 module_eval <<'.,.,', 'lib/parser.y', 287 2294 def _reduce_121( val, _values, result ) 2295 @@log.info("string_value: #{val[0]} at #{@filename}:#{@lineno}") 2296 result 2297 end 2298 .,., 2299 2300 module_eval <<'.,.,', 'lib/parser.y', 291 2301 def _reduce_122( val, _values, result ) 2302 @@log.info("integer_value: #{val[0]} at #{@filename}:#{@lineno}") 2303 result 2304 end 2305 .,., 2306 2307 module_eval <<'.,.,', 'lib/parser.y', 295 2308 def _reduce_123( val, _values, result ) 2309 @@log.info("real_value: #{val[0]} at #{@filename}:#{@lineno}") 2310 result 2311 end 2312 .,., 2313 2314 module_eval <<'.,.,', 'lib/parser.y', 299 2315 def _reduce_124( val, _values, result ) 2316 @@log.info("boolean_value: #{val[0]} at #{@filename}:#{@lineno}") 2317 result 2318 end 2319 .,., 2320 2321 module_eval <<'.,.,', 'lib/parser.y', 303 2322 def _reduce_125( val, _values, result ) 2323 @@log.info("character_value: #{val[0]} at #{@filename}:#{@lineno}") 2324 result 2325 end 2326 .,., 2327 2328 module_eval <<'.,.,', 'lib/parser.y', 307 2329 def _reduce_126( val, _values, result ) 2330 @@log.info("date_value: #{val[0]} at #{@filename}:#{@lineno}") 2331 result 2332 end 2333 .,., 2334 2335 module_eval <<'.,.,', 'lib/parser.y', 311 2336 def _reduce_127( val, _values, result ) 2337 @@log.info("time_value: #{val[0]} at #{@filename}:#{@lineno}") 2338 result 2339 end 2340 .,., 2341 2342 module_eval <<'.,.,', 'lib/parser.y', 315 2343 def _reduce_128( val, _values, result ) 2344 @@log.info("date_time_value: #{val[0]} at #{@filename}:#{@lineno}") 2345 result 2346 end 2347 .,., 2348 2349 module_eval <<'.,.,', 'lib/parser.y', 319 2350 def _reduce_129( val, _values, result ) 2351 @@log.info("duration_value: #{val[0]} at #{@filename}:#{@lineno}") 2352 result 2353 end 2354 .,., 2355 2356 module_eval <<'.,.,', 'lib/parser.y', 323 2357 def _reduce_130( val, _values, result ) 2358 @@log.info("uri_value: #{val[0]} at #{@filename}:#{@lineno}") 2359 result 2360 end 2361 .,., 2277 2362 2278 2363 # reduce 131 omitted … … 2306 2391 # reduce 145 omitted 2307 2392 2308 # reduce 146 omitted 2309 2310 # reduce 147 omitted 2311 2312 module_eval <<'.,.,', 'lib/parser.y', 302 2393 module_eval <<'.,.,', 'lib/parser.y', 344 2394 def _reduce_146( val, _values, result ) 2395 @@log.info("V_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}") 2396 result 2397 end 2398 .,., 2399 2400 module_eval <<'.,.,', 'lib/parser.y', 348 2401 def _reduce_147( val, _values, result ) 2402 @@log.info("V_GENERIC_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}") 2403 result 2404 end 2405 .,., 2406 2407 module_eval <<'.,.,', 'lib/parser.y', 353 2313 2408 def _reduce_148( val, _values, result ) 2314 @@log.info("V_STRING: #{val[0]} at #{@filename} ")2409 @@log.info("V_STRING: #{val[0]} at #{@filename}:#{@lineno}") 2315 2410 result 2316 2411 end … … 2479 2574 # reduce 229 omitted 2480 2575 2481 # reduce 230 omitted 2576 module_eval <<'.,.,', 'lib/parser.y', 464 2577 def _reduce_230( val, _values, result ) 2578 @@log.info("V_ISO8601_DURATION: #{val[0]} at #{@filename}:#{@lineno}") 2579 result 2580 end 2581 .,., 2482 2582 2483 2583 # reduce 231 omitted … … 2595 2695 # reduce 287 omitted 2596 2696 2597 # reduce 288 omitted 2598 2599 # reduce 289 omitted 2697 module_eval <<'.,.,', 'lib/parser.y', 555 2698 def _reduce_288( val, _values, result ) 2699 @@log.info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}") 2700 result 2701 end 2702 .,., 2703 2704 module_eval <<'.,.,', 'lib/parser.y', 559 2705 def _reduce_289( val, _values, result ) 2706 @@log.info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}") 2707 result 2708 end 2709 .,., 2600 2710 2601 2711 # reduce 290 omitted … … 2767 2877 # reduce 373 omitted 2768 2878 2769 # reduce 374 omitted 2879 module_eval <<'.,.,', 'lib/parser.y', 697 2880 def _reduce_374( val, _values, result ) 2881 @@log.info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}") 2882 result 2883 end 2884 .,., 2770 2885 2771 2886 # reduce 375 omitted -
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 -
ruby/trunk/adl_parser/lib/scanner.rb
r18 r19 8 8 module ADL 9 9 module Scanner 10 module Common 11 LOG = Logger.new('log/scanner.log','daily') 12 13 class V_QUALIFIED_TERM_CODE_REF 14 include Yaparc::Parsable 15 def initialize 16 @parser = lambda do |input| 17 Yaparc::Apply.new(Yaparc::Regex.new(/\A\[[a-zA-Z0-9()\._-]+::[a-zA-Z0-9\._-]+\]/)) do |match| 18 LOG.info("V_QUALIFIED_TERM_CODE_REF: #{match}") 19 [:V_QUALIFIED_TERM_CODE_REF, match] 20 end 21 end 22 end 23 end 24 25 class V_LOCAL_TERM_CODE_REF 26 include Yaparc::Parsable 27 def initialize 28 @parser = lambda do |input| 29 Yaparc::Apply.new(Yaparc::Regex.new(/\A\[[a-zA-Z0-9][a-zA-Z0-9._\-]*\]/)) do |match| 30 LOG.info("V_TERM_CODE_REF: #{match}") 31 [:V_LOCAL_TERM_CODE_REF, match] 32 end 33 end 34 end 35 end 36 37 class ERR_V_QUALIFIED_TERM_CODE_REF 38 include Yaparc::Parsable 39 def initialize 40 @parser = lambda do |input| 41 Yaparc::Apply.new(Yaparc::Regex.new(/\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/)) do |match| 42 LOG.info("ERR_V_QUALIFIED_TERM_CODE_REF: #{match}") 43 [:ERR_V_QUALIFIED_TERM_CODE_REF, match] 44 end 45 end 46 end 47 end 48 49 class V_TYPE_IDENTIFIER 50 include Yaparc::Parsable 51 def initialize 52 @parser = lambda do |input| 53 Yaparc::Apply.new(Yaparc::Regex.new(/\A[A-Z][a-zA-Z0-9_]*/)) do |match| 54 LOG.info("V_TYPE_IDENTIFIER: #{match}") 55 [:V_TYPE_IDENTIFIER, match] 56 end 57 end 58 end 59 end 60 61 class V_GENERIC_TYPE_IDENTIFIER 62 include Yaparc::Parsable 63 def initialize 64 @parser = lambda do |input| 65 Yaparc::Apply.new(Yaparc::Regex.new(/\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/)) do |match| 66 LOG.info("V_GENERIC_TYPE_IDENTIFIER: #{match}") 67 [:V_GENERIC_TYPE_IDENTIFIER, match] 68 end 69 end 70 end 71 end 72 73 74 class V_LOCAL_CODE 75 include Yaparc::Parsable 76 def initialize 77 @parser = lambda do |input| 78 Yaparc::Apply.new(Yaparc::Regex.new(/\Aa[ct][0-9.]+/)) do |match| 79 LOG.info("V_LOCAL_CODE: #{match}") 80 [:V_LOCAL_CODE, match] 81 end 82 end 83 end 84 end 85 86 class V_STRING 87 include Yaparc::Parsable 88 def initialize 89 @parser = lambda do |input| 90 Yaparc::Apply.new(Yaparc::Regex.new(/\A"([^"]*)"/m)) do |match| 91 LOG.info("V_STRING: #{match}") 92 [:V_STRING, match] 93 end 94 end 95 end 96 end 97 98 class V_REAL 99 include Yaparc::Parsable 100 def initialize 101 @parser = lambda do |input| 102 Yaparc::Apply.new(Yaparc::Regex.new(/\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+/)) do |match| 103 LOG.info("V_REAL: #{match}") 104 [:V_REAL, match] 105 end 106 end 107 end 108 end 109 110 #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS 111 class V_ISO8601_DURATION 112 include Yaparc::Parsable 113 def initialize 114 @parser = lambda do |input| 115 Yaparc::Apply.new( 116 Yaparc::Alt.new(Yaparc::Regex.new(/\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?/), 117 Yaparc::Regex.new(/AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/))) do |match| 118 LOG.info("V_ISO8601_DURATION: #{match}") 119 [:V_ISO8601_DURATION, match] 120 end 121 end 122 end 123 end 124 125 end # of Common 126 10 127 module DADL 11 128 # c.f. http://www.openehr.org/svn/ref_impl_eiffel/TRUNK/components/adl_parser/src/syntax/adl/parser/adl_scanner.l … … 16 133 } 17 134 18 LOG = Logger.new('log/scanner.log','daily')19 20 135 class RootScanner 21 136 include Yaparc::Parsable … … 23 138 @parser = lambda do |input| 24 139 Yaparc::Alt.new(Reserved.new, 25 V_QUALIFIED_TERM_CODE_REF.new, 26 V_LOCAL_TERM_CODE_REF.new, 27 ERR_V_QUALIFIED_TERM_CODE_REF.new, 28 V_TYPE_IDENTIFIER.new, 29 V_GENERIC_TYPE_IDENTIFIER.new, 30 V_STRING.new, 31 V_LOCAL_CODE.new, 32 V_REAL.new 140 OpenEHR::ADL::Scanner::Common::V_QUALIFIED_TERM_CODE_REF.new, 141 OpenEHR::ADL::Scanner::Common::V_LOCAL_TERM_CODE_REF.new, 142 OpenEHR::ADL::Scanner::Common::ERR_V_QUALIFIED_TERM_CODE_REF.new, 143 OpenEHR::ADL::Scanner::Common::V_TYPE_IDENTIFIER.new, 144 OpenEHR::ADL::Scanner::Common::V_GENERIC_TYPE_IDENTIFIER.new, 145 OpenEHR::ADL::Scanner::Common::V_STRING.new, 146 OpenEHR::ADL::Scanner::Common::V_LOCAL_CODE.new, 147 OpenEHR::ADL::Scanner::Common::V_REAL.new, 148 OpenEHR::ADL::Scanner::Common::V_ISO8601_DURATION.new 33 149 ) 34 150 end … … 42 158 @parser = lambda do |input| 43 159 reserved_parsers = OpenEHR::ADL::Scanner::DADL::RESERVED.map do |keyword| 44 Yaparc::Tokenize.new(Yaparc::Literal.new(keyword ))160 Yaparc::Tokenize.new(Yaparc::Literal.new(keyword[0], false)) 45 161 end 46 162 Yaparc::Alt.new(Yaparc::Apply.new(Yaparc::Alt.new(*reserved_parsers)) do |match| 47 LOG.info("Reserved: #{match}")163 OpenEHR::ADL::Scanner::Common::LOG.info("Reserved: #{match}") 48 164 [OpenEHR::ADL::Scanner::DADL::RESERVED[match], OpenEHR::ADL::Scanner::DADL::RESERVED[match]] 49 165 end, 50 166 Yaparc::Apply.new(Yaparc::Regex.new(/\A[a-z][a-zA-Z0-9_]*/)) do |match| 51 LOG.info("V_ATTRIBUTE_IDENTIFIER: #{match}")167 OpenEHR::ADL::Scanner::Common::LOG.info("V_ATTRIBUTE_IDENTIFIER: #{match}") 52 168 [:V_ATTRIBUTE_IDENTIFIER, match] 53 169 end) … … 56 172 end 57 173 58 class V_QUALIFIED_TERM_CODE_REF 59 include Yaparc::Parsable 60 def initialize 61 @parser = lambda do |input| 62 Yaparc::Apply.new(Yaparc::Regex.new(/\A\[[a-zA-Z0-9()\._-]+::[a-zA-Z0-9\._-]+\]/)) do |match| 63 LOG.info("V_QUALIFIED_TERM_CODE_REF: #{match}") 64 [:V_QUALIFIED_TERM_CODE_REF, match] 65 end 66 end 67 end 68 end 69 70 class V_LOCAL_TERM_CODE_REF 71 include Yaparc::Parsable 72 def initialize 73 @parser = lambda do |input| 74 Yaparc::Apply.new(Yaparc::Regex.new(/\A\[[a-zA-Z0-9][a-zA-Z0-9._\-]*\]/)) do |match| 75 LOG.info("V_TERM_CODE_REF: #{match}") 76 [:V_LOCAL_TERM_CODE_REF, match] 77 end 78 end 79 end 80 end 81 82 class ERR_V_QUALIFIED_TERM_CODE_REF 83 include Yaparc::Parsable 84 def initialize 85 @parser = lambda do |input| 86 Yaparc::Apply.new(Yaparc::Regex.new(/\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/)) do |match| 87 LOG.info("ERR_V_QUALIFIED_TERM_CODE_REF: #{match}") 88 [:ERR_V_QUALIFIED_TERM_CODE_REF, match] 89 end 90 end 91 end 92 end 93 94 class V_TYPE_IDENTIFIER 95 include Yaparc::Parsable 96 def initialize 97 @parser = lambda do |input| 98 Yaparc::Apply.new(Yaparc::Regex.new(/\A[A-Z][a-zA-Z0-9_]*/)) do |match| 99 LOG.info("V_TYPE_IDENTIFIER: #{match}") 100 [:V_TYPE_IDENTIFIER, match] 101 end 102 end 103 end 104 end 105 106 class V_GENERIC_TYPE_IDENTIFIER 107 include Yaparc::Parsable 108 def initialize 109 @parser = lambda do |input| 110 Yaparc::Apply.new(Yaparc::Regex.new(/\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/)) do |match| 111 LOG.info("V_GENERIC_TYPE_IDENTIFIER: #{match}") 112 [:V_GENERIC_TYPE_IDENTIFIER, match] 113 end 114 end 115 end 116 end 117 118 119 class V_LOCAL_CODE 120 include Yaparc::Parsable 121 def initialize 122 @parser = lambda do |input| 123 Yaparc::Apply.new(Yaparc::Regex.new(/\Aa[ct][0-9.]+/)) do |match| 124 LOG.info("V_LOCAL_CODE: #{match}") 125 [:V_LOCAL_CODE, match] 126 end 127 end 128 end 129 end 130 131 class V_STRING 132 include Yaparc::Parsable 133 def initialize 134 @parser = lambda do |input| 135 Yaparc::Apply.new(Yaparc::Regex.new(/\A"([^"]*)"/m)) do |match| 136 LOG.info("V_STRING: #{match}") 137 [:V_STRING, match] 138 end 139 end 140 end 141 end 142 143 class V_REAL 144 include Yaparc::Parsable 145 def initialize 146 @parser = lambda do |input| 147 Yaparc::Apply.new(Yaparc::Regex.new(/\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+/)) do |match| 148 LOG.info("V_REAL: #{match}") 149 [:V_REAL, match] 150 end 151 end 152 end 153 end 174 154 175 155 176 end # of DADL … … 157 178 module CADL 158 179 # c.f. http://www.openehr.org/svn/ref_impl_eiffel/TRUNK/components/adl_parser/src/syntax/cadl/parser/cadl_scanner.l 180 RESERVED = { 181 'ordered' => :SYM_ORDERED, # [Oo][Rr][Dd][Ee][Rr][Ee][Dd] 182 'unordered' => :SYM_UNORDERED, # [Uu][Nn][Oo][Rr][Dd][Ee][Rr][Ee][Dd] 183 'then' => :SYM_THEN, # [Tt][Hh][Ee][Nn] 184 'else' => :SYM_ELSE, # [Ee][Ll][Ss][Ee] 185 'and' => :SYM_AND, # [Aa][Nn][Dd] 186 'or' => :SYM_OR, # [Oo][Rr] 187 'xor' => :SYM_XOR, # [Xx][Oo][Rr] 188 'not' => :SYM_NOT, # [Nn][Oo][Tt] 189 'implies' => :SYM_IMPLIES, # [Ii][Mm][Pp][Ll][Ii][Ee][Ss] 190 'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE 191 'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE 192 'forall' => :SYM_FORALL, # [Ff][Oo][Rr][_][Aa][Ll][Ll] 193 'exists' => :SYM_EXISTS, # [Ee][Xx][Ii][Ss][Tt][Ss] 194 'existence' => :SYM_EXISTENCE, # [Ee][Xx][Iu][Ss][Tt][Ee][Nn][Cc][Ee] 195 'occurrences' => :SYM_OCCURRENCES, # [Oo][Cc][Cc][Uu][Rr][Rr][Ee][Nn][Cc][Ee][Ss] 196 'cardinality' => :SYM_CARDINALITY, # [Cc][Aa][Rr][Dd][Ii][Nn][Aa][Ll][Ii][Tt][Yy] 197 'unique' => :SYM_UNIQUE, # [Uu][Nn][Ii][Qq][Uu][Ee] 198 'matches' => :SYM_MATCHES, # [Mm][Aa][Tt][Cc][Hh][Ee][Ss] 199 'is_in' => :SYM_MATCHES, # [Ii][Ss][_][Ii][Nn] 200 'invariant' => :SYM_INVARIANT, # [Ii][Nn][Vv][Aa][Rr][Ii][Aa][Nn][Tt] 201 'infinity' => :SYM_INFINITY, # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY 202 'use_node' => :SYM_USE_NODE, # [Uu][Ss][Ee][_][Nn][Oo][Dd][Ee] 203 'use_archetype' => :SYM_ALLOW_ARCHETYPE, # [Uu][Ss][Ee][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee] 204 'allow_archetype' => :SYM_ALLOW_ARCHETYPE, # [Aa][Ll][Ll][Oo][Ww][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee] 205 'include' => :SYM_INCLUDE, # [Ii][Nn][Cc][Ll][Uu][Dd][Ee] 206 'exclude' => :SYM_EXCLUDE # [Ee][Xx][Cc][Ll][Uu][Dd][Ee] 207 } 208 209 #V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN, /\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]/ 210 class V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN 211 include Yaparc::Parsable 212 def initialize 213 @parser = lambda do |input| 214 Yaparc::Apply.new(Yaparc::Regex.new(/\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]/)) do |match| 215 OpenEHR::ADL::Scanner::Common::LOG.info("V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN: #{match}") 216 [:V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN, match] 217 end 218 end 219 end 220 end 221 222 #V_ISO8601_DATE_CONSTRAINT_PATTERN /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X]/ 223 class V_ISO8601_DATE_CONSTRAINT_PATTERN 224 include Yaparc::Parsable 225 def initialize 226 @parser = lambda do |input| 227 Yaparc::Apply.new(Yaparc::Regex.new(/\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X]/)) do |match| 228 OpenEHR::ADL::Scanner::Common::LOG.info("V_ISO8601_DATE_CONSTRAINT_PATTERN: #{match}") 229 [:V_ISO8601_DATE_CONSTRAINT_PATTERN, match] 230 end 231 end 232 end 233 end 234 235 #V_ISO8601_TIME_CONSTRAINT_PATTERN /\A[hH][hH]:[mM?X][mM?X]:[sS?X][sS?X]/ 236 class V_ISO8601_TIME_CONSTRAINT_PATTERN 237 include Yaparc::Parsable 238 def initialize 239 @parser = lambda do |input| 240 Yaparc::Apply.new(Yaparc::Regex.new(/\A[hH][hH]:[mM?X][mM?X]:[sS?X][sS?X]/)) do |match| 241 OpenEHR::ADL::Scanner::Common::LOG.info("V_ISO8601_TIME_CONSTRAINT_PATTERN: #{match}") 242 [:V_ISO8601_TIME_CONSTRAINT_PATTERN, match] 243 end 244 end 245 end 246 end 247 248 #V_C_DOMAIN_TYPE /\A[A-Z][a-zA-Z0-9_]*[ \n]*\</ 249 class V_C_DOMAIN_TYPE 250 include Yaparc::Parsable 251 def initialize 252 @parser = lambda do |input| 253 Yaparc::Apply.new(Yaparc::Regex.new(/\A[A-Z][a-zA-Z0-9_]*[ \n]*\</)) do |match| 254 OpenEHR::ADL::Scanner::Common::LOG.info("V_C_DOMAIN_TYPE: #{match}") 255 [:START_V_C_DOMAIN_TYPE_BLOCK, match] 256 end 257 # parser = Yaparc::Regex.new(/\A[A-Z][a-zA-Z0-9_]*[ \n]*\</) 258 # case result = parser.parse(input) 259 # when Yaparc::Result::OK 260 # OpenEHR::ADL::Scanner::Common::LOG.info("V_C_DOMAIN_TYPE: #{result.value}") 261 # Yaparc::Result::Fail.new 262 # else 263 # Yaparc::Result::Fail.new 264 # end 265 end 266 end 267 end 268 269 class RootScanner 270 include Yaparc::Parsable 271 def initialize 272 @parser = lambda do |input| 273 Yaparc::Alt.new(V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN.new, 274 V_ISO8601_DATE_CONSTRAINT_PATTERN.new, 275 V_ISO8601_TIME_CONSTRAINT_PATTERN.new, 276 OpenEHR::ADL::Scanner::Common::V_ISO8601_DURATION.new, 277 V_C_DOMAIN_TYPE.new, 278 Reserved.new, 279 OpenEHR::ADL::Scanner::Common::V_QUALIFIED_TERM_CODE_REF.new, 280 OpenEHR::ADL::Scanner::Common::V_LOCAL_TERM_CODE_REF.new, 281 OpenEHR::ADL::Scanner::Common::ERR_V_QUALIFIED_TERM_CODE_REF.new, 282 OpenEHR::ADL::Scanner::Common::V_TYPE_IDENTIFIER.new, 283 OpenEHR::ADL::Scanner::Common::V_GENERIC_TYPE_IDENTIFIER.new, 284 OpenEHR::ADL::Scanner::Common::V_STRING.new, 285 OpenEHR::ADL::Scanner::Common::V_LOCAL_CODE.new, 286 OpenEHR::ADL::Scanner::Common::V_REAL.new, 287 OpenEHR::ADL::Scanner::Common::V_ISO8601_DURATION.new 288 ) 289 end 290 end 291 end 292 293 class Reserved 294 include Yaparc::Parsable 295 296 def initialize 297 @parser = lambda do |input| 298 orderd_reserved = RESERVED.keys.sort{|x,y| y.length <=> x.length } 299 reserved_parsers = orderd_reserved.map do |keyword| 300 Yaparc::Literal.new(keyword, false) 301 end 302 Yaparc::Alt.new(Yaparc::Apply.new(Yaparc::Alt.new(*reserved_parsers)) do |match| 303 OpenEHR::ADL::Scanner::Common::LOG.info("Reserved: #{match}") 304 [OpenEHR::ADL::Scanner::CADL::RESERVED[match], OpenEHR::ADL::Scanner::CADL::RESERVED[match]] 305 end, 306 Yaparc::Apply.new(Yaparc::Regex.new(/\A[a-z][a-zA-Z0-9_]*/)) do |match| 307 OpenEHR::ADL::Scanner::Common::LOG.info("V_ATTRIBUTE_IDENTIFIER: #{match}") 308 [:V_ATTRIBUTE_IDENTIFIER, match] 309 end) 310 end 311 end 312 end 313 159 314 end 160 315 end -
ruby/trunk/adl_parser/tests/parser_test.rb
r18 r19 14 14 15 15 def test_parse 16 imaging = File.read('tests/openEHR-EHR-ACTION.imaging.v1.adl') 17 assert_nothing_raised do 18 @parser.parse(imaging, 'openEHR-EHR-ACTION.imaging.v1.adl') 19 end 16 20 17 21 exam_nervous_system = File.read('tests/openEHR-EHR-CLUSTER.exam-nervous_system.v1.adl') … … 92 96 @parser.parse(discharge, 'openEHR-EHR-COMPOSITION.discharge.v1draft.adl') 93 97 end 94 imaging = File.read('tests/openEHR-EHR-ACTION.imaging.v1.adl')95 assert_nothing_raised do96 @parser.parse(imaging, 'openEHR-EHR-ACTION.imaging.v1.adl')97 end98 98 laboratory_request = File.read('tests/openEHR-EHR-ITEM_TREE.Laboratory_request.v1.adl') 99 99 assert_nothing_raised do … … 103 103 assert_nothing_raised do 104 104 result = @parser.parse(apgar, 'openEHR-EHR-OBSERVATION.apgar.v1.adl') 105 assert_equal "", result105 # assert_equal "", result 106 106 end 107 107 # evaluation = File.read('tests/openEHR-EHR-EVALUATION.adverse.v1.adl') -
ruby/trunk/adl_parser/tests/scanner_test.rb
r18 r19 10 10 11 11 def test_V_LOCAL_TERM_CODE_REF 12 parser = OpenEHR::ADL::Scanner:: DADL::V_LOCAL_TERM_CODE_REF.new13 assert_instance_of OpenEHR::ADL::Scanner:: DADL::V_LOCAL_TERM_CODE_REF,parser12 parser = OpenEHR::ADL::Scanner::Common::V_LOCAL_TERM_CODE_REF.new 13 assert_instance_of OpenEHR::ADL::Scanner::Common::V_LOCAL_TERM_CODE_REF,parser 14 14 result = parser.parse('[en-us]') 15 15 assert_instance_of Yaparc::Result::OK, result … … 17 17 18 18 def test_V_QUALIFIED_TERM_CODE_REF 19 parser = OpenEHR::ADL::Scanner:: DADL::V_QUALIFIED_TERM_CODE_REF.new20 assert_instance_of OpenEHR::ADL::Scanner:: DADL::V_QUALIFIED_TERM_CODE_REF,parser19 parser = OpenEHR::ADL::Scanner::Common::V_QUALIFIED_TERM_CODE_REF.new 20 assert_instance_of OpenEHR::ADL::Scanner::Common::V_QUALIFIED_TERM_CODE_REF,parser 21 21 result = parser.parse('[ISO_639::en]') 22 22 assert_instance_of Yaparc::Result::OK, result … … 26 26 27 27 def test_V_STRING 28 parser = OpenEHR::ADL::Scanner:: DADL::V_STRING.new29 assert_instance_of OpenEHR::ADL::Scanner:: DADL::V_STRING,parser28 parser = OpenEHR::ADL::Scanner::Common::V_STRING.new 29 assert_instance_of OpenEHR::ADL::Scanner::Common::V_STRING,parser 30 30 result = parser.parse('"this is a string"') 31 31 assert_instance_of Yaparc::Result::OK, result … … 35 35 36 36 def test_V_REAL 37 parser = OpenEHR::ADL::Scanner:: DADL::V_REAL.new38 assert_instance_of OpenEHR::ADL::Scanner:: DADL::V_REAL,parser37 parser = OpenEHR::ADL::Scanner::Common::V_REAL.new 38 assert_instance_of OpenEHR::ADL::Scanner::Common::V_REAL,parser 39 39 result = parser.parse('0.1') 40 40 assert_instance_of Yaparc::Result::OK, result … … 43 43 assert_equal [:V_REAL, "0.0"], result.value 44 44 assert_equal "..20000.0", result.input 45 end 45 46 47 def test_V_ISO8601_DURATION 48 parser = OpenEHR::ADL::Scanner::Common::V_ISO8601_DURATION.new 49 assert_instance_of OpenEHR::ADL::Scanner::Common::V_ISO8601_DURATION,parser 50 result = parser.parse('PT1M') 51 assert_instance_of Yaparc::Result::OK, result 46 52 end 53 54 def test_V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN 55 parser = OpenEHR::ADL::Scanner::CADL::V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN.new 56 assert_instance_of OpenEHR::ADL::Scanner::CADL::V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN,parser 57 result = parser.parse('yyyy-??-??T??:??:??') 58 assert_instance_of Yaparc::Result::OK, result 59 end 60 61 def test_V_ISO8601_DATE_CONSTRAINT_PATTERN 62 parser = OpenEHR::ADL::Scanner::CADL::V_ISO8601_DATE_CONSTRAINT_PATTERN.new 63 assert_instance_of OpenEHR::ADL::Scanner::CADL::V_ISO8601_DATE_CONSTRAINT_PATTERN,parser 64 result = parser.parse('yyyy-mm-XX-dd') 65 assert_instance_of Yaparc::Result::OK, result 66 end 67 68 def test_V_ISO8601_TIME_CONSTRAINT_PATTERN 69 parser = OpenEHR::ADL::Scanner::CADL::V_ISO8601_TIME_CONSTRAINT_PATTERN.new 70 assert_instance_of OpenEHR::ADL::Scanner::CADL::V_ISO8601_TIME_CONSTRAINT_PATTERN,parser 71 result = parser.parse('hh:mm:ss:??') 72 assert_instance_of Yaparc::Result::OK, result 73 end 74 75 def test_dadl_reserved 76 parser = OpenEHR::ADL::Scanner::DADL::RootScanner.new 77 result = parser.parse('then') 78 assert_instance_of Yaparc::Result::OK, result 79 result = parser.parse('infinity') 80 assert_instance_of Yaparc::Result::OK, result 81 assert_equal [:SYM_INFINITY, :SYM_INFINITY], result.value 82 end 83 84 def test_cadl 85 parser = OpenEHR::ADL::Scanner::CADL::RootScanner.new 86 assert_instance_of OpenEHR::ADL::Scanner::CADL::RootScanner,parser 87 result = parser.parse('PT1M') 88 assert_instance_of Yaparc::Result::OK, result 89 assert_equal [:V_ISO8601_DURATION, "PT1M"], result.value 90 end 91 92 def test_cadl_reserved 93 parser = OpenEHR::ADL::Scanner::CADL::RootScanner.new 94 result = parser.parse('then') 95 assert_instance_of Yaparc::Result::OK, result 96 result = parser.parse('cardinality') 97 assert_instance_of Yaparc::Result::OK, result 98 assert_equal [:SYM_CARDINALITY, :SYM_CARDINALITY], result.value 99 result = parser.parse('ordered') 100 assert_instance_of Yaparc::Result::OK, result 101 assert_equal "", result.input 102 assert_equal [:SYM_ORDERED, :SYM_ORDERED], result.value 103 end 104 105 47 106 end
Note:
See TracChangeset
for help on using the changeset viewer.