Changeset 19


Ignore:
Timestamp:
Apr 29, 2008, 3:04:36 AM (16 years ago)
Author:
Tatsukawa, Akimichi
Message:

successful parsing 25 archtypes

Location:
ruby/trunk/adl_parser
Files:
1 added
3 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • ruby/trunk/adl_parser/Rakefile

    r17 r19  
    1111
    1212RACC_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']
     14RACC_PARSER = FileList['lib/parser.rb']
    1415
    1516task :default => [:racc]
  • ruby/trunk/adl_parser/lib/parser.rb

    r18 r19  
    1313require 'lib/util.rb'
    1414require 'lib/scanner.rb'
     15require 'lib/model.rb'
    1516$DEBUG = true
    1617
     
    2425    class Parser < Racc::Parser
    2526
    26 module_eval <<'..end lib/parser.y modeval..idd4a3e5c962', 'lib/parser.y', 654
     27module_eval <<'..end lib/parser.y modeval..ide0b42f72dd', 'lib/parser.y', 720
    2728
    2829@@log = Logger.new('log/parser.log','daily')
    2930@@dadl_scanner = OpenEHR::ADL::Scanner::DADL::RootScanner.new
     31@@cadl_scanner = OpenEHR::ADL::Scanner::CADL::RootScanner.new
    3032
    3133###----------/* keywords */ ---------------------------------------------
     
    128130      when /\A--.*\n/ # single line comment
    129131        @lineno += 1
     132        @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: COMMENT = #{$&} at #{@filename}:#{@lineno}")
    130133        ;
    131134      when /\Adescription/   # description
     
    143146        word = $&
    144147        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}")
    146149          yield @@adl_reserved[word], @@adl_reserved[word]
    147150        elsif #/\A[A-Z][a-zA-Z0-9_]*/
     151          @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: V_ATTRIBUTE_IDENTIFIER = #{$&} at #{@filename}:#{@lineno}")
    148152          yield :V_ATTRIBUTE_IDENTIFIER, $&
    149153        end
     
    174178      when /\A\{/   # {
    175179        @adl_type.push(:cadl)
     180        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}")
    176181        yield :SYM_START_CBLOCK, :SYM_START_CBLOCK
    177182      when /\A\}/   # }
     
    179184#        puts "Escaping #{adl_type}"
    180185        assert_at(__FILE__,__LINE__){adl_type == :cadl}
     186        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}")
    181187        yield :SYM_END_CBLOCK, $&
    182188      when /\A\-/   # -
     
    296302    when :cadl
    297303#      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
    298316      case data
    299317      when /\A\n/ # carriage return
     
    304322      when /\A--.*\n/ # single line comment
    305323        @lineno += 1
     324        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: COMMENT = #{$&} at #{@filename}:#{@lineno}")
    306325        ;
    307326        ###----------/* symbols */ -------------------------------------------------
     
    312331      when /\A\<=/   # <=
    313332        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, $&
    321337      when /\A\</   # <
    322338        if @in_interval
     
    374390      when /\A\{/   # {
    375391        @adl_type.push(:cadl)
     392        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}")
    376393        yield :SYM_START_CBLOCK, :SYM_START_CBLOCK
    377394      when /\A\}/   # }
     
    379396#        puts "Escaping #{adl_type}"
    380397        assert_at(__FILE__,__LINE__){adl_type == :cadl}
     398        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}")
    381399        yield :SYM_END_CBLOCK, :SYM_END_CBLOCK
    382400      when /\A\$/   # $
     
    394412        end
    395413        yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM
     414
    396415      when /\A\[[a-zA-Z0-9._\-]+::[a-zA-Z0-9._\-]+\]/   #V_QUALIFIED_TERM_CODE_REF form [ICD10AM(1998)::F23]
    397416        yield :V_QUALIFIED_TERM_CODE_REF, $&
    398417      when /\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/   #ERR_V_QUALIFIED_TERM_CODE_REF
    399418        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_CONSTRAINT
     419      when /\A\[([a-zA-Z0-9()._\-]+::[a-zA-Z0-9._\_-]+)\]/
     420        yield :V_TERM_CODE_CONSTRAINT, :V_TERM_CODE_CONSTRAINT
    402421      when /\A\[[a-zA-Z0-9\(\)\._\-]+::[ \t\n]*/
    403422        @adl_type.push(:term_constraint)
     
    422441          yield @@cadl_reserved[word.downcase], @@cadl_reserved[word.downcase]
    423442        else
     443          @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}:#{@lineno}")
    424444          yield :V_ATTRIBUTE_IDENTIFIER, word #V_ATTRIBUTE_IDENTIFIER /\A[a-z][a-zA-Z0-9_]*/
    425445        end
     
    443463      when /\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+ /   #V_REAL
    444464        yield :V_REAL, $&
    445         #    when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING
     465           when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING
    446466      when /\A"([^"]*)"/m #V_STRING
    447467        yield :V_STRING, $1
    448468      when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI
    449469        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 PnYnMnWnDTnnHnnMnnS
    451         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, $&
    452472      when /\A\S/ #UTF8CHAR
    453473        yield :UTF8CHAR, $&
     
    491511        yield scanned.value
    492512        data = scanned.input
    493 ###       when Yaparc::Result::Fail
    494 ###         raise "Scan Failed: #{scanned}"
    495 ###       when Yaparc::Result::Error
    496 ###         raise "Scan Error: #{scanned}"
    497513      else
    498        
    499514      end
    500515
     
    507522      when /\A--.*\n/ # single line comment
    508523        @lineno += 1
     524        @@log.info("#{__FILE__}:#{__LINE__}: scan_dadl: COMMENT = #{$&} at #{@filename}:#{@lineno}")
    509525        ;
    510526        ###----------/* symbols */ -------------------------------------------------
     
    626642      when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI
    627643        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 PnYnMnWnDTnnHnnMnnS
    629         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, $&
    630646      when /\A\S/ #UTF8CHAR
    631647        yield :UTF8CHAR, $&
     
    724740      when /\A--.*$/ # single line comment
    725741        @lineno += 1
     742        @@log.info("#{__FILE__}:#{__LINE__}: scan_term_constraint: COMMENT = #{$&} at #{@filename}:#{@lineno}")
    726743        ;
    727744      when /\A[a-zA-Z0-9\._\-]+[ \t]*,/ # match any line, with ',' termination
     
    794811
    795812
    796 ..end lib/parser.y modeval..idd4a3e5c962
     813..end lib/parser.y modeval..ide0b42f72dd
    797814
    798815##### racc 1.4.5 generates ###
     
    800817racc_reduce_table = [
    801818 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,
    805832 2, 98, :_reduce_none,
    806833 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,
    815834 2, 99, :_reduce_none,
    816835 2, 99, :_reduce_none,
    817  2, 100, :_reduce_none,
     836 0, 100, :_reduce_none,
     837 2, 100, :_reduce_19,
    818838 2, 100, :_reduce_none,
    819839 0, 101, :_reduce_none,
    820  2, 101, :_reduce_19,
    821840 2, 101, :_reduce_none,
    822  0, 102, :_reduce_none,
     841 2, 101, :_reduce_none,
    823842 2, 102, :_reduce_none,
    824843 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,
    847864 4, 122, :_reduce_none,
    848865 3, 122, :_reduce_none,
    849866 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,
    850892 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,
    874893 0, 131, :_reduce_none,
    875894 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,
    878898 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,
    884903 2, 104, :_reduce_none,
    885904 2, 104, :_reduce_none,
    886  2, 105, :_reduce_none,
    887  2, 105, :_reduce_none,
    888  1, 110, :_reduce_none,
     905 1, 109, :_reduce_none,
     906 1, 151, :_reduce_none,
     907 1, 151, :_reduce_none,
    889908 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,
    891916 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,
    909918 1, 159, :_reduce_none,
    910919 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,
    914926 1, 158, :_reduce_none,
    915927 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,
    917949 1, 170, :_reduce_none,
    918950 1, 170, :_reduce_none,
     
    920952 1, 170, :_reduce_none,
    921953 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,
    932958 1, 171, :_reduce_none,
    933959 1, 171, :_reduce_none,
     
    936962 1, 171, :_reduce_none,
    937963 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,
    950973 3, 185, :_reduce_none,
    951974 3, 185, :_reduce_none,
    952975 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,
    953985 1, 176, :_reduce_none,
    954986 2, 176, :_reduce_none,
     
    967999 3, 194, :_reduce_none,
    9681000 1, 177, :_reduce_none,
    969  2, 177, :_reduce_none,
    970  2, 177, :_reduce_none,
     1001 1, 177, :_reduce_none,
    9711002 3, 187, :_reduce_none,
    9721003 3, 187, :_reduce_none,
    9731004 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,
    9741013 5, 195, :_reduce_none,
    9751014 6, 195, :_reduce_none,
     
    9811020 4, 195, :_reduce_none,
    9821021 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,
    9921022 1, 180, :_reduce_none,
    9931023 3, 190, :_reduce_none,
     
    10161046 4, 197, :_reduce_none,
    10171047 3, 197, :_reduce_none,
    1018  1, 182, :_reduce_none,
     1048 1, 182, :_reduce_230,
    10191049 3, 192, :_reduce_none,
    10201050 3, 192, :_reduce_none,
     
    10291059 4, 198, :_reduce_none,
    10301060 3, 198, :_reduce_none,
     1061 1, 172, :_reduce_none,
     1062 3, 173, :_reduce_none,
     1063 3, 173, :_reduce_none,
     1064 3, 173, :_reduce_none,
    10311065 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,
    10431068 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,
    10511088 3, 200, :_reduce_none,
    10521089 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,
    10741099 1, 204, :_reduce_none,
    10751100 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,
    10901110 1, 207, :_reduce_none,
    1091  0, 146, :_reduce_none,
     1111 3, 207, :_reduce_none,
    10921112 5, 146, :_reduce_none,
    10931113 1, 208, :_reduce_none,
    10941114 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,
    10961126 1, 209, :_reduce_none,
    10971127 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,
    11041128 1, 211, :_reduce_none,
    11051129 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,
    11111134 1, 212, :_reduce_none,
    11121135 1, 212, :_reduce_none,
     
    11341157 3, 138, :_reduce_none,
    11351158 1, 216, :_reduce_none,
     1159 3, 216, :_reduce_none,
    11361160 1, 216, :_reduce_none,
    11371161 1, 216, :_reduce_none,
     
    11391163 3, 139, :_reduce_none,
    11401164 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,
    11451168 1, 140, :_reduce_none,
    11461169 3, 140, :_reduce_none,
     
    11491172 1, 219, :_reduce_none,
    11501173 3, 219, :_reduce_none,
     1174 3, 219, :_reduce_none,
    11511175 1, 141, :_reduce_none,
    11521176 3, 141, :_reduce_none,
    11531177 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,
    11611178 1, 126, :_reduce_none,
    11621179 3, 126, :_reduce_none,
    11631180 3, 126, :_reduce_none,
    1164  1, 221, :_reduce_none,
     1181 1, 220, :_reduce_none,
     1182 3, 220, :_reduce_none,
    11651183 3, 221, :_reduce_none,
    1166  3, 222, :_reduce_none,
    11671184 1, 125, :_reduce_none,
    11681185 1, 125, :_reduce_none,
    1169  3, 223, :_reduce_none,
    1170  0, 224, :_reduce_none,
    1171  1, 224, :_reduce_none,
    1172  2, 224, :_reduce_none,
     1186 3, 222, :_reduce_none,
     1187 0, 223, :_reduce_none,
     1188 1, 223, :_reduce_none,
     1189 2, 223, :_reduce_none,
    11731190 1, 124, :_reduce_none,
    1174  1, 150, :_reduce_none,
    1175  1, 150, :_reduce_none,
    1176  1, 218, :_reduce_none ]
     1191 1, 149, :_reduce_none,
     1192 1, 149, :_reduce_374,
     1193 1, 217, :_reduce_none ]
    11771194
    11781195racc_reduce_n = 376
    11791196
    1180 racc_shift_n = 633
     1197racc_shift_n = 631
    11811198
    11821199racc_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,
    12601276   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 ]
    12741291
    12751292racc_action_check = [
    1276    528,   431,   406,    87,   278,   567,   404,   402,   403,    85,
    1277    162,    62,     4,   528,     0,   526,    42,   480,    52,   262,
    1278    480,   264,   579,   480,   480,   265,    21,   368,   528,   270,
    1279     14,   262,     4,     0,   429,   264,   528,   528,    52,   528,
    1280    528,   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    406,   459,   402,   404,   403,   526,   480,   224,   224,   459,
    1284    459,    87,   459,   459,   459,   226,   368,   528,   528,   528,
    1285    528,   567,   429,   528,   459,   459,   459,   165,   427,   459,
    1286    459,   459,   459,   360,   459,   459,   459,   352,   459,   459,
    1287    459,   459,   459,   224,   425,   621,   146,   165,   350,    59,
    1288    145,   263,   226,   226,   390,   400,   410,    59,   271,   259,
    1289    459,   459,   459,   459,   263,   621,   459,    69,   146,   165,
    1290    259,   243,   145,    54,   227,   227,   390,    59,   243,   243,
    1291    224,   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    158,   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    155,   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    166,   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    153,   152,   152,   152,   167,   305,   152,   340,   340,   340,
    1315    154,   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    616,   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    371,   372,   257,   573,   573,   573,   257,   257,   257,   257,
    1348    253,   253,   253,   373,   374,   253,   571,   571,   571,   253,
    1349    253,   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    239,    96,    96,    96,    96,   614,   614,   614,   614,   235,
    1353    235,   235,   235,   231,   231,   231,   231,   232,   232,   232,
    1354    232,   233,   233,   233,   233,   628,   628,   628,   628,   147,
    1355    138,   137,   114,   107,   405,    91,   407,   408,   196,    88,
    1356    412,   414,   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    492,    35,   494,   495,   496,   497,   498,   499,   500,   501,
    1360    503,   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    569,   570,   244,   572,   205,   242,   266,    13,   581,   582,
    1364    591,   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 ]
    13671384
    13681385racc_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,   813,   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    758,   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,
    13811398   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    351,   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,   774,   793,   806,   nil,   819,   nil,   nil,   nil,   nil,
    1390    nil,   420,   853,   866,   581,   nil,   nil,   524,   160,   nil,
    1391    182,   nil,   155,   nil,    71,   nil,    43,   138,   874,   nil,
    1392    nil,   698,   702,   706,   678,   694,   nil,   nil,   342,   701,
    1393    614,   690,   810,    85,   806,   172,   784,   142,   292,   306,
    1394    637,   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    768,   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    838,   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 ]
    14331450
    14341451racc_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    -18,  -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,  -281,  -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   -289,  -376,  -112,   -96,   -93,  -113,   -97,  -376,  -111,  -376,
    1446   -191,  -122,  -204,  -123,  -376,  -217,  -124,  -230,  -125,  -126,
    1447   -247,  -127,  -128,  -129,  -182,  -130,  -183,  -187,  -148,  -121,
    1448   -102,  -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,  -144,  -133,  -122,  -145,  -134,  -123,
    1453   -116,  -135,  -124,  -136,  -125,  -243,  -137,  -126,  -376,  -138,
    1454   -127,  -376,  -139,  -128,  -117,  -140,  -129,  -118,  -141,  -119,
    1455   -142,  -131,  -120,  -148,  -143,  -132,  -114,  -106,  -107,   -85,
    1456    -86,  -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,
    14571474  -264,  -275,  -265,  -276,  -260,  -277,  -261,  -262,  -376,  -307,
    14581475  -252,  -250,  -268,  -269,  -266,  -267,  -280,  -270,  -376,  -376,
     1476  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -115,  -376,
    14591477  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
    14601478  -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,
    14711487  -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,
    14751488  -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,
    14841492  -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 ]
    14991516
    15001517racc_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,
    15301546   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    15311547   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,   477,   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,
    15541570   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    15551571   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    15561572   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 ]
    15581575
    15591576racc_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,
    15891605   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    15901606   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,
    16051614   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,
    16131629   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    16141630   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    16151631   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 ]
    16171634
    16181635racc_goto_pointer = [
    1619    nil,    28,   133,   127,   120,   110,   102,    72,    64,    43,
    1620     25,    94,    88,    77,    15,   -18,    32,    25,    10,   nil,
    1621   -152,   nil,   -85,   -19,  -203,  -156,  -445,   nil,   nil,   nil,
    1622    nil,   nil,   nil,   nil,   -85,   nil,  -546,  -554,   nil,  -162,
    1623    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  -199,   nil,
    1624   -427,  -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   -328,   -60,   -27,   -57,   -18,    -4,   -21,   -40,   -54,   nil,
    1628     -2,    -1,     0,     1,     2,     3,     4,     5,     6,     7,
    1629     16,    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,  -435,   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 ]
    16321649
    16331650racc_goto_default = [
    16341651   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    1635    nil,   nil,   nil,   nil,   nil,   nil,   nil,   536,   nil,    84,
    1636    nil,    88,   nil,   142,   nil,   nil,   nil,   521,   522,   524,
    1637    525,   527,   531,   533,    93,   535,   nil,   nil,   512,   513,
    1638    289,   292,   295,   299,   303,   307,   312,   317,   nil,   270,
    1639    nil,   nil,   nil,   nil,   612,   613,   614,    50,    52,    36,
    1640     38,    41,   nil,   106,    43,    44,    45,    47,   nil,   nil,
    1641     60,   nil,    40,    42,   105,   nil,   nil,   nil,   nil,   nil,
    1642    129,    71,    72,   nil,   nil,   290,   293,   297,   300,   125,
    1643    311,   315,   281,   nil,   nil,   nil,   nil,   nil,   nil,   302,
    1644    306,   310,   314,   279,   283,   nil,    79,    82,    85,    86,
    1645     89,    94,    98,   nil,   nil,   nil,   413,   288,   291,   294,
    1646    298,   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 ]
    16471664
    16481665racc_token_table = {
     
    16701687 :Left_parenthesis_code => 21,
    16711688 :Right_parenthesis_code => 22,
    1672  ";" => 23,
     1689 :Semicolon_code => 23,
    16731690 :SYM_ADL_VERSION => 24,
    16741691 :V_VERSION_STRING => 25,
     
    17301747 :SYM_EXISTENCE => 81,
    17311748 :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 }
    17441760
    17451761racc_use_result_var = true
    17461762
    1747 racc_nt_base = 95
     1763racc_nt_base = 94
    17481764
    17491765Racc_arg = [
     
    17871803'Left_parenthesis_code',
    17881804'Right_parenthesis_code',
    1789 '";"',
     1805'Semicolon_code',
    17901806'SYM_ADL_VERSION',
    17911807'V_VERSION_STRING',
     
    18471863'SYM_EXISTENCE',
    18481864'SYM_CARDINALITY',
    1849 'Semicolon_code',
    18501865'SYM_ORDERED',
    18511866'SYM_UNORDERED',
     
    18861901'c_attributes',
    18871902'c_object',
     1903'v_c_domain_type',
    18881904'archetype_internal_ref',
    18891905'archetype_slot',
     
    18921908'c_ordinal',
    18931909'c_primitive_object',
    1894 'v_c_domain_type',
    18951910'absolute_path',
    18961911'c_archetype_slot_head',
     
    20322047 # reduce 18 omitted
    20332048
    2034 module_eval <<'.,.,', 'lib/parser.y', 73
     2049module_eval <<'.,.,', 'lib/parser.y', 74
    20352050  def _reduce_19( val, _values, result )
    20362051    result = {:language => val[1]}
     
    20612076 # reduce 30 omitted
    20622077
    2063 module_eval <<'.,.,', 'lib/parser.y', 110
     2078module_eval <<'.,.,', 'lib/parser.y', 111
    20642079  def _reduce_31( val, _values, result )
    20652080    result = {:c_complex_object_id => {:type_identifier => val[0]}}
     
    20682083.,.,
    20692084
    2070 module_eval <<'.,.,', 'lib/parser.y', 114
     2085module_eval <<'.,.,', 'lib/parser.y', 115
    20712086  def _reduce_32( val, _values, result )
    20722087    result = {:c_complex_object_id => {:type_identifier => val[0], :V_LOCAL_TERM_CODE_REF => val[1]}}
     
    21452160 # reduce 67 omitted
    21462161
    2147  # reduce 68 omitted
    2148 
    2149  # reduce 69 omitted
     2162module_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
     2169module_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.,.,
    21502175
    21512176 # reduce 70 omitted
     
    21952220 # reduce 92 omitted
    21962221
    2197  # reduce 93 omitted
    2198 
    2199 module_eval <<'.,.,', 'lib/parser.y', 233
     2222module_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
     2229module_eval <<'.,.,', 'lib/parser.y', 245
    22002230  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}")
    22022232   result
    22032233  end
     
    22282258 # reduce 106 omitted
    22292259
    2230  # reduce 107 omitted
     2260module_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.,.,
    22312266
    22322267 # reduce 108 omitted
     
    22562291 # reduce 120 omitted
    22572292
    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
     2293module_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
     2300module_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
     2307module_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
     2314module_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
     2321module_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
     2328module_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
     2335module_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
     2342module_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
     2349module_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
     2356module_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.,.,
    22772362
    22782363 # reduce 131 omitted
     
    23062391 # reduce 145 omitted
    23072392
    2308  # reduce 146 omitted
    2309 
    2310  # reduce 147 omitted
    2311 
    2312 module_eval <<'.,.,', 'lib/parser.y', 302
     2393module_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
     2400module_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
     2407module_eval <<'.,.,', 'lib/parser.y', 353
    23132408  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}")
    23152410   result
    23162411  end
     
    24792574 # reduce 229 omitted
    24802575
    2481  # reduce 230 omitted
     2576module_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.,.,
    24822582
    24832583 # reduce 231 omitted
     
    25952695 # reduce 287 omitted
    25962696
    2597  # reduce 288 omitted
    2598 
    2599  # reduce 289 omitted
     2697module_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
     2704module_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.,.,
    26002710
    26012711 # reduce 290 omitted
     
    27672877 # reduce 373 omitted
    27682878
    2769  # reduce 374 omitted
     2879module_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.,.,
    27702885
    27712886 # reduce 375 omitted
  • ruby/trunk/adl_parser/lib/parser.y

    r18 r19  
    4949
    5050arch_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
    5253
    5354arch_meta_data_item: SYM_ADL_VERSION SYM_EQ V_VERSION_STRING
     
    120121#------------------------- node types -----------------------
    121122
    122 c_object: c_complex_object
     123c_object: v_c_domain_type
     124  | c_complex_object
    123125  | archetype_internal_ref
    124126  | archetype_slot
     
    127129  | c_ordinal
    128130  | c_primitive_object
    129   | v_c_domain_type
     131#  | v_c_domain_type
    130132#  | V_C_DOMAIN_TYPE
    131133  #   this is an attempt to match a dADL section inside cADL. It will
     
    180182
    181183c_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  }
    182187  | 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  }
    183191
    184192c_attr_values: c_object
     
    224232attr_vals: attr_val
    225233  | attr_vals attr_val
    226   | attr_vals ';' attr_val
     234  | attr_vals Semicolon_code attr_val
     235#  | attr_vals ';' attr_val
    227236
    228237attr_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  }
    229241
    230242attr_id: V_ATTRIBUTE_IDENTIFIER
    231243  {
    232     @@log.info("dADL::V_ATTRIBUTE_IDENTIFIER: #{val[0]} at #{@filename}")
     244    @@log.info("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}:#{@lineno}")
    233245  }
    234246  | V_ATTRIBUTE_IDENTIFIER error
     
    253265
    254266object_key: Left_bracket_code simple_value Right_bracket_code
     267  {
     268    @@log.info("object_key: [#{val[1]}] at #{@filename}:#{@lineno}")
     269  }
    255270
    256271single_attr_object_block: untyped_single_attr_object_block
     
    268283  | term_code_list_value
    269284simple_value: string_value
     285  {
     286    @@log.info("string_value: #{val[0]} at #{@filename}:#{@lineno}")
     287  }
    270288  | integer_value
     289  {
     290    @@log.info("integer_value: #{val[0]} at #{@filename}:#{@lineno}")
     291  }
    271292  | real_value
     293  {
     294    @@log.info("real_value: #{val[0]} at #{@filename}:#{@lineno}")
     295  }
    272296  | boolean_value
     297  {
     298    @@log.info("boolean_value: #{val[0]} at #{@filename}:#{@lineno}")
     299  }
    273300  | character_value
     301  {
     302    @@log.info("character_value: #{val[0]} at #{@filename}:#{@lineno}")
     303  }
    274304  | date_value
     305  {
     306    @@log.info("date_value: #{val[0]} at #{@filename}:#{@lineno}")
     307  }
    275308  | time_value
     309  {
     310    @@log.info("time_value: #{val[0]} at #{@filename}:#{@lineno}")
     311  }
    276312  | date_time_value
     313  {
     314    @@log.info("date_time_value: #{val[0]} at #{@filename}:#{@lineno}")
     315  }
    277316  | duration_value
     317  {
     318    @@log.info("duration_value: #{val[0]} at #{@filename}:#{@lineno}")
     319  }
    278320  | uri_value
     321  {
     322    @@log.info("uri_value: #{val[0]} at #{@filename}:#{@lineno}")
     323  }
    279324simple_list_value: string_list_value
    280325  | integer_list_value
     
    295340
    296341type_identifier: V_TYPE_IDENTIFIER
     342  {
     343    @@log.info("V_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}")
     344  }
    297345  | V_GENERIC_TYPE_IDENTIFIER
     346  {
     347    @@log.info("V_GENERIC_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}")
     348  }
    298349
    299350string_value: V_STRING
    300351  {
    301     @@log.info("V_STRING: #{val[0]} at #{@filename}")
     352    @@log.info("V_STRING: #{val[0]} at #{@filename}:#{@lineno}")
    302353  }
    303354
     
    409460
    410461duration_value: V_ISO8601_DURATION
     462  {
     463    @@log.info("V_ISO8601_DURATION: #{val[0]} at #{@filename}:#{@lineno}")
     464  }
    411465
    412466duration_list_value: duration_value Comma_code duration_value
     
    497551
    498552path_segment: V_ATTRIBUTE_IDENTIFIER V_LOCAL_TERM_CODE_REF
     553  {
     554    @@log.info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}")
     555  }
    499556  | V_ATTRIBUTE_IDENTIFIER
     557  {
     558    @@log.info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}")
     559  }
    500560
    501561
     
    601661c_boolean: c_boolean_spec
    602662  | c_boolean_spec Semicolon_code boolean_value
    603   | c_boolean_spec ';' error
     663  | c_boolean_spec Semicolon_code error
     664#  | c_boolean_spec ';' error
    604665
    605666c_ordinal: c_ordinal_spec
    606667  | c_ordinal_spec Semicolon_code integer_value
    607   | c_ordinal_spec ';' error
     668  | c_ordinal_spec Semicolon_code error
     669#  | c_ordinal_spec ';' error
    608670
    609671c_ordinal_spec: ordinal
     
    631693any_identifier: type_identifier
    632694  | V_ATTRIBUTE_IDENTIFIER
     695  {
     696    @@log.info("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}")
     697  }
    633698
    634699
     
    647712require 'lib/util.rb'
    648713require 'lib/scanner.rb'
     714require 'lib/model.rb'
    649715$DEBUG = true
    650716
     
    655721@@log = Logger.new('log/parser.log','daily')
    656722@@dadl_scanner = OpenEHR::ADL::Scanner::DADL::RootScanner.new
     723@@cadl_scanner = OpenEHR::ADL::Scanner::CADL::RootScanner.new
    657724
    658725###----------/* keywords */ ---------------------------------------------
     
    755822      when /\A--.*\n/ # single line comment
    756823        @lineno += 1
     824        @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: COMMENT = #{$&} at #{@filename}:#{@lineno}")
    757825        ;
    758826      when /\Adescription/   # description
     
    770838        word = $&
    771839        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}")
    773841          yield @@adl_reserved[word], @@adl_reserved[word]
    774842        elsif #/\A[A-Z][a-zA-Z0-9_]*/
     843          @@log.info("#{__FILE__}:#{__LINE__}: scan_adl: V_ATTRIBUTE_IDENTIFIER = #{$&} at #{@filename}:#{@lineno}")
    775844          yield :V_ATTRIBUTE_IDENTIFIER, $&
    776845        end
     
    801870      when /\A\{/   # {
    802871        @adl_type.push(:cadl)
     872        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}")
    803873        yield :SYM_START_CBLOCK, :SYM_START_CBLOCK
    804874      when /\A\}/   # }
     
    806876#        puts "Escaping #{adl_type}"
    807877        assert_at(__FILE__,__LINE__){adl_type == :cadl}
     878        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}")
    808879        yield :SYM_END_CBLOCK, $&
    809880      when /\A\-/   # -
     
    923994    when :cadl
    924995#      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
    9251008      case data
    9261009      when /\A\n/ # carriage return
     
    9311014      when /\A--.*\n/ # single line comment
    9321015        @lineno += 1
     1016        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: COMMENT = #{$&} at #{@filename}:#{@lineno}")
    9331017        ;
    9341018        ###----------/* symbols */ -------------------------------------------------
     
    9391023      when /\A\<=/   # <=
    9401024        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, $&
    9481029      when /\A\</   # <
    9491030        if @in_interval
     
    10011082      when /\A\{/   # {
    10021083        @adl_type.push(:cadl)
     1084        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: entering cADL at #{@filename}:#{@lineno}")
    10031085        yield :SYM_START_CBLOCK, :SYM_START_CBLOCK
    10041086      when /\A\}/   # }
     
    10061088#        puts "Escaping #{adl_type}"
    10071089        assert_at(__FILE__,__LINE__){adl_type == :cadl}
     1090        @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: exiting cADL at #{@filename}:#{@lineno}")
    10081091        yield :SYM_END_CBLOCK, :SYM_END_CBLOCK
    10091092      when /\A\$/   # $
     
    10211104        end
    10221105        yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM
     1106
    10231107      when /\A\[[a-zA-Z0-9._\-]+::[a-zA-Z0-9._\-]+\]/   #V_QUALIFIED_TERM_CODE_REF form [ICD10AM(1998)::F23]
    10241108        yield :V_QUALIFIED_TERM_CODE_REF, $&
    10251109      when /\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/   #ERR_V_QUALIFIED_TERM_CODE_REF
    10261110        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_CONSTRAINT
     1111      when /\A\[([a-zA-Z0-9()._\-]+::[a-zA-Z0-9._\_-]+)\]/
     1112        yield :V_TERM_CODE_CONSTRAINT, :V_TERM_CODE_CONSTRAINT
    10291113      when /\A\[[a-zA-Z0-9\(\)\._\-]+::[ \t\n]*/
    10301114        @adl_type.push(:term_constraint)
     
    10491133          yield @@cadl_reserved[word.downcase], @@cadl_reserved[word.downcase]
    10501134        else
     1135          @@log.info("#{__FILE__}:#{__LINE__}: scan_cadl: V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}:#{@lineno}")
    10511136          yield :V_ATTRIBUTE_IDENTIFIER, word #V_ATTRIBUTE_IDENTIFIER /\A[a-z][a-zA-Z0-9_]*/
    10521137        end
     
    10701155      when /\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+ /   #V_REAL
    10711156        yield :V_REAL, $&
    1072         #    when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING
     1157           when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING
    10731158      when /\A"([^"]*)"/m #V_STRING
    10741159        yield :V_STRING, $1
    10751160      when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI
    10761161        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 PnYnMnWnDTnnHnnMnnS
    1078         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, $&
    10791164      when /\A\S/ #UTF8CHAR
    10801165        yield :UTF8CHAR, $&
     
    11181203        yield scanned.value
    11191204        data = scanned.input
    1120 ###       when Yaparc::Result::Fail
    1121 ###         raise "Scan Failed: #{scanned}"
    1122 ###       when Yaparc::Result::Error
    1123 ###         raise "Scan Error: #{scanned}"
    11241205      else
    1125        
    11261206      end
    11271207
     
    11341214      when /\A--.*\n/ # single line comment
    11351215        @lineno += 1
     1216        @@log.info("#{__FILE__}:#{__LINE__}: scan_dadl: COMMENT = #{$&} at #{@filename}:#{@lineno}")
    11361217        ;
    11371218        ###----------/* symbols */ -------------------------------------------------
     
    12531334      when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI
    12541335        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 PnYnMnWnDTnnHnnMnnS
    1256         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, $&
    12571338      when /\A\S/ #UTF8CHAR
    12581339        yield :UTF8CHAR, $&
     
    13511432      when /\A--.*$/ # single line comment
    13521433        @lineno += 1
     1434        @@log.info("#{__FILE__}:#{__LINE__}: scan_term_constraint: COMMENT = #{$&} at #{@filename}:#{@lineno}")
    13531435        ;
    13541436      when /\A[a-zA-Z0-9\._\-]+[ \t]*,/ # match any line, with ',' termination
  • ruby/trunk/adl_parser/lib/scanner.rb

    r18 r19  
    88  module ADL
    99    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
    10127      module DADL
    11128        # c.f. http://www.openehr.org/svn/ref_impl_eiffel/TRUNK/components/adl_parser/src/syntax/adl/parser/adl_scanner.l
     
    16133        }
    17134
    18         LOG = Logger.new('log/scanner.log','daily')
    19 
    20135        class RootScanner
    21136          include Yaparc::Parsable
     
    23138            @parser = lambda do |input|
    24139              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
    33149                              )
    34150            end
     
    42158            @parser = lambda do |input|
    43159              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))
    45161              end
    46162              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}")
    48164                                [OpenEHR::ADL::Scanner::DADL::RESERVED[match], OpenEHR::ADL::Scanner::DADL::RESERVED[match]]
    49165                              end,
    50166                              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}")
    52168                                [:V_ATTRIBUTE_IDENTIFIER, match]
    53169                              end)
     
    56172        end
    57173
    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
    154175
    155176      end # of DADL
     
    157178      module CADL
    158179        # 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
    159314      end
    160315    end
  • ruby/trunk/adl_parser/tests/parser_test.rb

    r18 r19  
    1414
    1515  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
    1620
    1721    exam_nervous_system = File.read('tests/openEHR-EHR-CLUSTER.exam-nervous_system.v1.adl')
     
    9296      @parser.parse(discharge, 'openEHR-EHR-COMPOSITION.discharge.v1draft.adl')
    9397    end
    94     imaging = File.read('tests/openEHR-EHR-ACTION.imaging.v1.adl')
    95     assert_nothing_raised do
    96       @parser.parse(imaging, 'openEHR-EHR-ACTION.imaging.v1.adl')
    97     end
    9898     laboratory_request = File.read('tests/openEHR-EHR-ITEM_TREE.Laboratory_request.v1.adl')
    9999     assert_nothing_raised do
     
    103103     assert_nothing_raised do
    104104       result = @parser.parse(apgar, 'openEHR-EHR-OBSERVATION.apgar.v1.adl')
    105        assert_equal "", result
     105#       assert_equal "", result
    106106     end
    107107#     evaluation = File.read('tests/openEHR-EHR-EVALUATION.adverse.v1.adl')
  • ruby/trunk/adl_parser/tests/scanner_test.rb

    r18 r19  
    1010
    1111  def test_V_LOCAL_TERM_CODE_REF
    12     parser = OpenEHR::ADL::Scanner::DADL::V_LOCAL_TERM_CODE_REF.new
    13     assert_instance_of OpenEHR::ADL::Scanner::DADL::V_LOCAL_TERM_CODE_REF,parser
     12    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
    1414    result = parser.parse('[en-us]')
    1515    assert_instance_of Yaparc::Result::OK, result
     
    1717
    1818  def test_V_QUALIFIED_TERM_CODE_REF
    19     parser = OpenEHR::ADL::Scanner::DADL::V_QUALIFIED_TERM_CODE_REF.new
    20     assert_instance_of OpenEHR::ADL::Scanner::DADL::V_QUALIFIED_TERM_CODE_REF,parser
     19    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
    2121    result = parser.parse('[ISO_639::en]')
    2222    assert_instance_of Yaparc::Result::OK, result
     
    2626
    2727  def test_V_STRING
    28     parser = OpenEHR::ADL::Scanner::DADL::V_STRING.new
    29     assert_instance_of OpenEHR::ADL::Scanner::DADL::V_STRING,parser
     28    parser = OpenEHR::ADL::Scanner::Common::V_STRING.new
     29    assert_instance_of OpenEHR::ADL::Scanner::Common::V_STRING,parser
    3030    result = parser.parse('"this is a string"')
    3131    assert_instance_of Yaparc::Result::OK, result
     
    3535
    3636  def test_V_REAL
    37     parser = OpenEHR::ADL::Scanner::DADL::V_REAL.new
    38     assert_instance_of OpenEHR::ADL::Scanner::DADL::V_REAL,parser
     37    parser = OpenEHR::ADL::Scanner::Common::V_REAL.new
     38    assert_instance_of OpenEHR::ADL::Scanner::Common::V_REAL,parser
    3939    result = parser.parse('0.1')
    4040    assert_instance_of Yaparc::Result::OK, result
     
    4343    assert_equal [:V_REAL, "0.0"], result.value
    4444    assert_equal "..20000.0", result.input
     45  end
    4546
     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
    4652  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 
    47106end
Note: See TracChangeset for help on using the changeset viewer.