Changeset 320 for ruby


Ignore:
Timestamp:
Oct 15, 2009, 7:28:12 AM (15 years ago)
Author:
Tatsukawa, Akimichi
Message:

refactoring scanner for regex

Location:
ruby
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • ruby/branches/TRY-open_ehr_gem/lib/am/archetype/constraint_model/primitive.rb

    r318 r320  
    4646              @false_valid = args[:false_valid] ? args[:false_valid] : false
    4747              @assumed_value = args[:assumed_value] ? args[:assumed_value] : false
    48               binary_consistency(@true_valid, @false_valid)
     48              #binary_consistency(@true_valid, @false_valid)
    4949            end
    5050
  • ruby/trunk/lib/adl_parser/lib/adl_scanner.rb

    r318 r320  
    5252          'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
    5353          'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
     54        }
     55        REGEX_PATTERN = {
     56          :V_ISO8601_DURATION => /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?|\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/   #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS
    5457        }
    5558
     
    203206              when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI
    204207                yield :V_URI, $&
    205               when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?|P([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/   #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS
     208              when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?/   #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS
     209                yield :V_ISO8601_DURATION, $&
     210              when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/   #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS
    206211                yield :V_ISO8601_DURATION, $&
    207212              when /\A\S/ #UTF8CHAR
     
    364369                  @in_interval = false
    365370                else
    366                   #          @in_interval = false
    367371                  @in_interval = true
    368372                end
     
    517521              when /\A\*/   # *
    518522                yield :Star_code, :Star_code
    519               when /\A\//   # /
    520                 yield :Slash_code, :Slash_code
    521523              when /\A\^/   # ^
    522524                yield :Caret_code, :Caret_code
     
    539541              when /\A\)/   # )
    540542                yield :Right_parenthesis_code, :Right_parenthesis_code
    541               when /\A\{\// #V_REGEXP
    542                 if @adl_type.last != :regexp
    543                   @in_regexp = true
    544                   @adl_type.push(:regexp)
    545                   yield :START_REGEXP_BLOCK, :START_REGEXP_BLOCK
    546                 else
    547                   raise
    548                 end
     543              when /\A\//   # /
     544#                yield :Slash_code, :Slash_code
     545#              when /\A\// #V_REGEXP /
     546                assert_at(__FILE__,__LINE__){@adl_type.last != :regexp}
     547                #@in_regexp = true
     548                @adl_type.push(:regexp)
     549#                yield :START_REGEXP_BLOCK, :START_REGEXP_BLOCK
     550                yield :Slash_code, :Slash_code
     551
     552#               when /\A\{\// #V_REGEXP {/
     553#                 if @adl_type.last != :regexp
     554#                   @in_regexp = true
     555#                   @adl_type.push(:regexp)
     556#                   yield :START_REGEXP_BLOCK, :START_REGEXP_BLOCK
     557#                 else
     558#                   assert_at(__FILE__,__LINE__){false}
     559#                 end
    549560              when /\A\{/   # {
    550561                @adl_type.push(:cadl)
     
    563574                yield :Question_mark_code, :Question_mark_code
    564575              when /\A\|/   # |
    565                 @@logger.debug("CADLScanner#scan: @in_interval = #{@in_interval} at #{@filename}:#{@lineno}")
    566576                if @in_interval
    567577                  @in_interval = false
    568578                else
    569                   #          @in_interval = false
    570579                  @in_interval = true
    571580                end
     581                @@logger.debug("CADLScanner#scan: @in_interval = #{@in_interval} at #{@filename}:#{@lineno}")
    572582                @@logger.debug("CADLScanner#scan: SYM_INTERVAL_DELIM at #{@filename}:#{@lineno}")
    573583                yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM
     
    588598              when /\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/   #V_GENERIC_TYPE_IDENTIFIER
    589599                yield :V_GENERIC_TYPE_IDENTIFIER, $&
    590               when /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X][T\t][hH?X][hH?X]:[mM?X][mM?X]:[sS?X][sS?X]/
     600              when /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X][Tt][hH?X][hH?X]:[mM?X][mM?X]:[sS?X][sS?X]/
    591601                yield :V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN, $&
    592602              when /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X]/
     
    594604              when /\A[hH][hH]:[mM?X][mM?X]:[sS?X][sS?X]/
    595605                yield :V_ISO8601_TIME_CONSTRAINT_PATTERN, $&
    596 #              when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?|P([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/   #V_ISO8601_DURATION such as PnYnMnWnDTnnHnnMnnS
    597 #                yield :V_ISO8601_DURATION, $&
    598               when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?/   #V_ISO8601_DURATION such as PnYnMnWnDTnnHnnMnnS
    599                 yield :V_ISO8601_DURATION, $&
    600               when /\AP[yY]?[mM]?[wW]?[dD]?(T[hH]?[mM]?[sS]?)?/   #V_ISO8601_DURATION_CONSTRAINT_PATTERN
     606              when /\AP[yY]?[mM]?[wW]?[dD]?T[hH]?[mM]?[sS]?/   #V_ISO8601_DURATION_CONSTRAINT_PATTERN
     607                if $&.length == 2
     608                  case data
     609                  when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9.]+[sS])?/   #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS
     610                    yield :V_ISO8601_DURATION, $&
     611                  else
     612                    yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $&
     613                  end
     614                else
     615                  yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $&
     616                end
     617              when /\AP[yY]?[mM]?[wW]?[dD]?/   #V_ISO8601_DURATION_CONSTRAINT_PATTERN
     618                if $&.length == 1
     619                  case data
     620                  when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/   #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS
     621                    yield :V_ISO8601_DURATION, $&
     622                  else
     623                    yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $&
     624                  end
     625                else
     626                  yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $&
     627                end
     628              when /\AP[yY]?[mM]?[wW]?[dD]?/   #V_ISO8601_DURATION_CONSTRAINT_PATTERN
    601629                yield :V_ISO8601_DURATION_CONSTRAINT_PATTERN, $&
    602               when /\A[a-z][a-zA-Z0-9_]*/
     630              when /\A[a-zA-Z][a-zA-Z0-9_]*/
    603631                word = $&.dup
    604632                if RESERVED[word.downcase]
     633                  @@logger.debug("CADLScanner#scan: RESERVED = #{word} at #{@filename}:#{@lineno}")
    605634                  yield RESERVED[word.downcase], RESERVED[word.downcase]
    606635                else
     
    621650              when /\Aa[ct][0-9.]+/   #V_LOCAL_CODE
    622651                yield :V_LOCAL_CODE, $&
    623               when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9](Z|[+-][0-9]{4})?/   #V_ISO8601_EXTENDED_DATE_TIME YYYY-MM-DDThh:mm:ss[,sss][Z|+/- -n-n-n-n-]-
     652              when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?/    #V_ISO8601_EXTENDED_DATE_TIME YYYY-MM-DDThh:mm:ss[,sss][Z|+/- -n-n-n-n-]-
     653                yield :V_ISO8601_EXTENDED_DATE_TIME, $&
     654              when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})?/
     655                yield :V_ISO8601_EXTENDED_DATE_TIME, $&
     656              when /\A[[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9](Z|[+-][0-9]{4})?/
    624657                yield :V_ISO8601_EXTENDED_DATE_TIME, $&
    625658              when /\A[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?|[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})? /   #V_ISO8601_EXTENDED_TIME hh:mm:ss[,sss][Z|+/-nnnn]
    626659                yield :V_ISO8601_EXTENDED_TIME, $&
    627               when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]|[0-9]{4}-[0-1][0-9]/   #V_ISO8601_EXTENDED_DATE YYYY-MM-DD
     660              when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]/   #V_ISO8601_EXTENDED_DATE YYYY-MM-DD
     661                yield :V_ISO8601_EXTENDED_DATE, $&
     662              when /\A[0-9]{4}-[0-1][0-9]/   #V_ISO8601_EXTENDED_DATE YYYY-MM-DD
    628663                yield :V_ISO8601_EXTENDED_DATE, $&
    629664              when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING
     
    686721
    687722        def scan(data)
    688           @@logger.debug("#{__FILE__}:#{__LINE__}: Entering scan_regexp at #{@filename}:#{@lineno}: data = #{data.inspect}")
     723          @@logger.debug("#{__FILE__}:#{__LINE__}: Entering RegexScanner::scan at #{@filename}:#{@lineno}: data = #{data.inspect}")
    689724          until data.nil?  do
    690725            case @adl_type.last
    691726            when :regexp
    692727              case data
    693               when /\A\/\}/ #V_REGEXP
    694                 if @adl_type.last == :regexp
    695                   @in_regexp = false
    696                   @adl_type.pop
    697                   yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK
    698                 else
    699                   raise
    700                 end
    701               when /\A(.*)(\/\})/ #V_REGEXP
     728              when /\A\// #V_REGEXP /
     729                assert_at(__FILE__,__LINE__){@adl_type.last == :regexp}
     730                #@in_regexp = false
     731                @adl_type.pop
     732                yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK
     733#               when /\A\/\}/ #V_REGEXP /
     734#                 if @adl_type.last == :regexp
     735#                   @in_regexp = false
     736#                   @adl_type.pop
     737#                   yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK
     738#                 else
     739#                   raise
     740#                 end
     741#              when /\A(.*)(\/\})/ #V_REGEXP /}
     742              when /\A([^\/]+)/ #V_REGEXP
    702743                yield :REGEXP_BODY, $1
    703                 if @adl_type.last == :regexp
    704                   @in_regexp = false
    705                   @adl_type.pop
    706                   yield :END_REGEXP_BLOCK, :END_REGEXP_BLOCK
    707                 else
    708                   raise
    709                 end
    710               else
    711                 raise data
     744#              else
     745#                raise "should not happen at #{data}"
    712746              end
    713747              data = $' # variable $' receives the string after the match
     
    734768              end
    735769            else
    736               raise
     770              raise 
    737771            end
    738772          end
  • ruby/trunk/lib/adl_parser/lib/parser.rb

    r318 r320  
    2727    class Parser < Racc::Parser
    2828
    29 module_eval(<<'...end parser.y/module_eval...', 'parser.y', 1283)
     29module_eval(<<'...end parser.y/module_eval...', 'parser.y', 1290)
    3030
    3131def assert_at(file,line, message = "")
     
    4545
    4646###----------/* keywords */ ---------------------------------------------
    47 @@adl_reserved = {
    48     'archetype' => :SYM_ARCHETYPE,
    49     'adl_version' => :SYM_ADL_VERSION,
    50     'controlled' => :SYM_IS_CONTROLLED,
    51     'specialize' => :SYM_SPECIALIZE,
    52     'concept' => :SYM_CONCEPT,
    53     'language' => :SYM_LANGUAGE,
    54     'description' => :SYM_DESCRIPTION,
    55     'definition' => :SYM_DEFINITION,
    56     'invariant' => :SYM_INVARIANT,
    57     'ontology' => :SYM_ONTOLOGY,
    58     'matches' => :SYM_MATCHES,
    59     'is_in' => :SYM_MATCHES,
    60     'occurrences' => :SYM_OCCURRENCES,
    61     'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
    62     'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
    63     'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
    64 }
    65 
    66 @@dadl_reserved = {
    67   'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
    68   'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
    69   'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
    70 }
    71 
    72 @@cadl_reserved = {
    73   'then' => :SYM_THEN, # [Tt][Hh][Ee][Nn]
    74   'else' => :SYM_ELSE, # [Ee][Ll][Ss][Ee]
    75   'and' => :SYM_AND, # [Aa][Nn][Dd]
    76   'or' => :SYM_OR, # [Oo][Rr]
    77   'xor' => :SYM_XOR, # [Xx][Oo][Rr]
    78   'not' => :SYM_NOT, # [Nn][Oo][Tt]
    79   'implies' => :SYM_IMPLIES, # [Ii][Mm][Pp][Ll][Ii][Ee][Ss]
    80   'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
    81   'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
    82   'forall' => :SYM_FORALL, # [Ff][Oo][Rr][_][Aa][Ll][Ll]
    83   'exists' => :SYM_EXISTS, # [Ee][Xx][Ii][Ss][Tt][Ss]
    84   'existence' => :SYM_EXISTENCE, # [Ee][Xx][Iu][Ss][Tt][Ee][Nn][Cc][Ee]
    85   'occurrences' => :SYM_OCCURRENCES, # [Oo][Cc][Cc][Uu][Rr][Rr][Ee][Nn][Cc][Ee][Ss]
    86   'cardinality' => :SYM_CARDINALITY, # [Cc][Aa][Rr][Dd][Ii][Nn][Aa][Ll][Ii][Tt][Yy]
    87   'ordered' => :SYM_ORDERED, # [Oo][Rr][Dd][Ee][Rr][Ee][Dd]
    88   'unordered' => :SYM_UNORDERED, # [Uu][Nn][Oo][Rr][Dd][Ee][Rr][Ee][Dd]
    89   'unique' => :SYM_UNIQUE, # [Uu][Nn][Ii][Qq][Uu][Ee]
    90   'matches' => :SYM_MATCHES, # [Mm][Aa][Tt][Cc][Hh][Ee][Ss]
    91   'is_in' => :SYM_MATCHES, # [Ii][Ss][_][Ii][Nn]
    92   'invariant' => :SYM_INVARIANT, # [Ii][Nn][Vv][Aa][Rr][Ii][Aa][Nn][Tt]
    93   'infinity' => :SYM_INFINITY, # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
    94   'use_node' => :SYM_USE_NODE, # [Uu][Ss][Ee][_][Nn][Oo][Dd][Ee]
    95   'use_archetype' => :SYM_ALLOW_ARCHETYPE, # [Uu][Ss][Ee][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee]
    96   'allow_archetype' => :SYM_ALLOW_ARCHETYPE, # [Aa][Ll][Ll][Oo][Ww][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee]
    97   'include' => :SYM_INCLUDE, # [Ii][Nn][Cc][Ll][Uu][Dd][Ee]
    98   'exclude' => :SYM_EXCLUDE # [Ee][Xx][Cc][Ll][Uu][Dd][Ee]
    99 }
     47### @@adl_reserved = {
     48###     'archetype' => :SYM_ARCHETYPE,
     49###     'adl_version' => :SYM_ADL_VERSION,
     50###     'controlled' => :SYM_IS_CONTROLLED,
     51###     'specialize' => :SYM_SPECIALIZE,
     52###     'concept' => :SYM_CONCEPT,
     53###     'language' => :SYM_LANGUAGE,
     54###     'description' => :SYM_DESCRIPTION,
     55###     'definition' => :SYM_DEFINITION,
     56###     'invariant' => :SYM_INVARIANT,
     57###     'ontology' => :SYM_ONTOLOGY,
     58###     'matches' => :SYM_MATCHES,
     59###     'is_in' => :SYM_MATCHES,
     60###     'occurrences' => :SYM_OCCURRENCES,
     61###     'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
     62###     'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
     63###     'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
     64### }
     65
     66### @@dadl_reserved = {
     67###   'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
     68###   'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
     69###   'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
     70### }
     71
     72### @@cadl_reserved = {
     73###   'then' => :SYM_THEN, # [Tt][Hh][Ee][Nn]
     74###   'else' => :SYM_ELSE, # [Ee][Ll][Ss][Ee]
     75###   'and' => :SYM_AND, # [Aa][Nn][Dd]
     76###   'or' => :SYM_OR, # [Oo][Rr]
     77###   'xor' => :SYM_XOR, # [Xx][Oo][Rr]
     78###   'not' => :SYM_NOT, # [Nn][Oo][Tt]
     79###   'implies' => :SYM_IMPLIES, # [Ii][Mm][Pp][Ll][Ii][Ee][Ss]
     80###   'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
     81###   'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
     82###   'forall' => :SYM_FORALL, # [Ff][Oo][Rr][_][Aa][Ll][Ll]
     83###   'exists' => :SYM_EXISTS, # [Ee][Xx][Ii][Ss][Tt][Ss]
     84###   'existence' => :SYM_EXISTENCE, # [Ee][Xx][Iu][Ss][Tt][Ee][Nn][Cc][Ee]
     85###   'occurrences' => :SYM_OCCURRENCES, # [Oo][Cc][Cc][Uu][Rr][Rr][Ee][Nn][Cc][Ee][Ss]
     86###   'cardinality' => :SYM_CARDINALITY, # [Cc][Aa][Rr][Dd][Ii][Nn][Aa][Ll][Ii][Tt][Yy]
     87###   'ordered' => :SYM_ORDERED, # [Oo][Rr][Dd][Ee][Rr][Ee][Dd]
     88###   'unordered' => :SYM_UNORDERED, # [Uu][Nn][Oo][Rr][Dd][Ee][Rr][Ee][Dd]
     89###   'unique' => :SYM_UNIQUE, # [Uu][Nn][Ii][Qq][Uu][Ee]
     90###   'matches' => :SYM_MATCHES, # [Mm][Aa][Tt][Cc][Hh][Ee][Ss]
     91###   'is_in' => :SYM_MATCHES, # [Ii][Ss][_][Ii][Nn]
     92###   'invariant' => :SYM_INVARIANT, # [Ii][Nn][Vv][Aa][Rr][Ii][Aa][Nn][Tt]
     93###   'infinity' => :SYM_INFINITY, # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
     94###   'use_node' => :SYM_USE_NODE, # [Uu][Ss][Ee][_][Nn][Oo][Dd][Ee]
     95###   'use_archetype' => :SYM_ALLOW_ARCHETYPE, # [Uu][Ss][Ee][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee]
     96###   'allow_archetype' => :SYM_ALLOW_ARCHETYPE, # [Aa][Ll][Ll][Oo][Ww][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee]
     97###   'include' => :SYM_INCLUDE, # [Ii][Nn][Cc][Ll][Uu][Dd][Ee]
     98###   'exclude' => :SYM_EXCLUDE # [Ee][Xx][Cc][Ll][Uu][Dd][Ee]
     99### }
    100100
    101101
     
    152152
    153153racc_action_table = [
    154    575,   474,   143,   163,   468,   593,   466,   433,    29,   464,
    155    129,   462,   497,   577,   229,   476,    58,   137,    67,   213,
    156    381,   335,   330,   564,   152,   154,    25,    26,   529,   125,
    157    127,   113,    72,   495,   189,  -374,    30,   516,   518,    36,
    158    521,   523,   214,   520,   443,    36,    60,   230,   144,   152,
    159    154,   431,    48,    50,   274,   110,   435,    80,    83,    86,
    160    193,   157,    96,   300,   306,   115,   113,   115,   117,   119,
    161    538,   529,   119,   119,   117,    72,   115,   113,   125,   127,
    162    516,   518,    78,   521,   523,   317,   157,   272,   275,   276,
    163    540,   162,   117,   288,   630,    48,    50,   274,   149,   150,
    164     80,    83,    86,   193,   119,    96,   300,   306,   113,   113,
    165    115,   117,   119,   538,   101,   117,   571,    35,   231,   513,
    166    167,   574,   510,   149,   150,   511,   512,   491,   152,   154,
    167    272,   275,   276,   540,   461,     9,   288,   139,   101,   332,
    168    493,   133,    74,   326,   327,    48,    50,    96,   109,   482,
    169     36,    80,    83,    86,   573,    11,    96,    98,   100,    48,
    170     50,   139,   101,    98,   100,   157,    90,    94,    48,    50,
    171    152,   154,   483,    78,    72,    80,    83,    86,   458,   119,
    172     96,    98,   100,   599,   113,    70,   383,   152,   154,   134,
    173     90,    94,   326,   327,    48,    50,    96,    78,   115,    80,
    174     83,    86,   149,   150,    96,    98,   100,   157,   189,   152,
    175    154,   250,   155,   158,    90,    94,   148,   601,   602,   151,
    176    153,    78,   152,   154,   157,   155,   158,   152,   154,   148,
    177    152,   154,   151,   153,   218,    80,   385,   386,   237,   456,
    178     80,   385,   386,   237,   149,   150,   157,     1,   341,   248,
    179    261,   172,    22,   254,   338,   379,   258,   260,   145,   157,
    180    117,   149,   150,   146,   157,   115,     4,   157,   119,  -373,
    181     23,    80,    83,    86,   218,   247,    96,   269,   156,   391,
    182    218,   238,   570,   149,   150,   159,   218,    80,   385,   386,
    183    160,   156,   218,    78,   417,   241,   149,   150,    80,    83,
    184     86,   149,   150,    96,   149,   150,   102,   113,   115,   117,
    185    119,    80,    83,    86,   239,   218,    96,    80,    83,    86,
    186    392,   218,    96,    80,    83,    86,   393,   218,    96,    80,
    187     83,    86,   394,    78,    96,   171,   168,   169,   170,    78,
    188    218,   102,   395,   326,   327,    78,   396,    96,    48,    50,
    189    101,    78,    80,    83,    86,   125,   127,    96,    80,    83,
    190     86,   397,   108,    96,    80,    83,    86,   398,   218,    96,
    191     67,   628,   629,   139,    78,   218,   498,    80,    83,    86,
    192     78,   399,    96,    48,    50,   400,    78,    80,    83,    86,
    193    401,    36,    96,    98,   100,   489,   326,   327,   101,    78,
    194     96,   402,    90,    94,   267,    80,    83,    86,   403,    78,
    195     96,   404,    80,    83,    86,   268,   101,    96,    16,    41,
    196     17,    70,   428,   429,    80,   385,   386,    78,   269,    35,
    197     48,    50,   426,   427,    78,    80,    83,    86,   405,   139,
    198     96,    98,   100,   101,   326,   327,   407,    16,    96,    17,
    199     90,    94,   408,    80,    83,    86,   409,    78,    96,    98,
    200    100,   101,    36,   321,   211,   322,   139,   312,    90,    94,
    201    246,    48,    50,   245,    35,    78,   414,    80,   385,   386,
    202     80,    83,    86,   146,   139,    96,    98,   100,   101,   343,
    203    344,   413,   385,   386,   160,    90,    94,   244,    80,    83,
    204     86,   251,    78,    96,    98,   100,   101,    36,   383,    55,
    205    472,   139,   252,    90,    94,   263,    48,    50,   264,    35,
    206     78,   171,   168,   169,   170,    80,    83,    86,   265,    70,
    207     96,    98,   100,   101,   171,   168,   169,   170,    48,    50,
    208     90,    94,   119,    80,    83,    86,   243,    78,    96,    98,
    209    100,   101,    36,   326,   327,   242,   139,    96,    90,    94,
    210    241,    48,    50,   424,   425,    78,   171,   168,   169,   170,
    211     80,    83,    86,   436,    70,    96,    98,   100,   437,   101,
    212     80,   385,   386,    48,    50,    90,    94,   438,    80,    83,
    213     86,   414,    78,    96,    98,   100,   439,   101,   414,   610,
    214    611,   612,    70,    90,    94,   218,   413,   385,   386,   440,
    215     78,    48,    50,    80,   385,   386,    80,    83,    86,   441,
    216     70,    96,    98,   100,   171,   168,   169,   170,   240,    48,
    217     50,    90,    94,   444,    80,    83,    86,   445,    78,    96,
    218     98,   100,    80,    83,    86,   351,   352,    96,   446,    90,
    219     94,   447,   325,   448,   326,   327,    78,   274,    96,   449,
    220     80,    83,    86,   193,    78,    96,   300,   306,   450,   113,
    221    115,   117,   119,    80,    83,    86,   353,   354,    96,    80,
    222    385,   386,   113,   115,   117,   119,   389,    80,   385,   386,
    223    272,   275,   276,  -103,   355,   356,   288,   175,   422,   423,
    224     80,    83,    86,   193,   451,    96,   125,   127,   109,   113,
    225    115,   117,   119,   189,   122,   110,   363,   364,    80,    83,
    226     86,   420,   421,    96,   125,   127,   109,   113,   115,   117,
    227    119,   452,   122,    80,    83,    86,   418,   419,    96,    80,
    228    385,   386,   113,   115,   117,   119,    80,    83,    86,   377,
    229    378,    96,   317,   312,   453,   113,   115,   117,   119,    80,
    230     83,    86,   454,   455,    96,   239,   145,   159,   113,   115,
    231    117,   119,   171,   168,   169,   170,   171,   168,   169,   170,
    232    171,   168,   169,   170,   171,   168,   169,   170,   216,   139,
    233    144,   137,   212,   208,   471,   266,   473,   102,   165,   478,
    234    480,   481,   162,   484,   485,   486,   147,   139,   138,   135,
    235     36,   131,    68,   500,   113,   502,   115,   504,   117,   506,
    236    119,   117,   509,    35,   514,   515,    60,   543,    57,   545,
    237    546,    56,   548,   113,   550,   115,   552,   117,   554,   119,
    238    267,   557,   558,   559,   560,   561,   562,   119,   119,   119,
    239    119,   563,   249,   162,  -103,   568,   115,    53,    34,   172,
    240    268,    31,   579,    28,   581,   582,   583,   584,   585,   586,
    241    587,   113,   590,   591,   592,    24,   595,   596,   269,    21,
    242    109,   603,   604,   605,   606,    78,   570,   608,   270,   311,
    243    618,   619,   620,   621,    15,   623,    14,   624,    12,   626,
    244    627,   320,     8,     7,   580 ]
     154   574,   473,   149,   151,   468,   594,   462,   163,     1,   466,
     155    64,   464,   213,   576,    12,   371,   325,   158,   264,   149,
     156   151,   596,   159,   568,   259,   497,   103,     6,   529,   187,
     157    48,   146,    71,   493,    14,   214,   541,   516,   153,   519,
     158   521,    76,   517,   513,   149,   151,   510,   435,   146,   511,
     159   512,    42,    44,   310,   121,   153,    78,    81,    83,   191,
     160   237,    93,   300,   305,   599,   103,   105,   107,   109,   537,
     161   529,   103,   109,   146,    71,   145,   107,   105,   541,   516,
     162   153,   519,   521,   316,   109,   307,   309,   271,   536,   161,
     163   105,   283,   145,    42,    44,   310,   149,   151,    78,    81,
     164    83,   191,   109,    93,   300,   305,   109,   103,   105,   107,
     165   109,   537,   149,   151,   149,   151,   475,   145,   149,   151,
     166    78,   375,   376,   570,   451,   146,   458,   307,   309,   271,
     167   536,   433,   153,   283,   491,   149,   151,   495,   154,   155,
     168   460,   146,   147,   146,   417,   148,   150,   146,   153,   419,
     169   153,   237,   149,   151,   153,   154,   155,   333,   133,   147,
     170    75,   156,   148,   150,   146,   387,   157,   386,   247,   145,
     171   109,   153,   378,   379,    42,    44,    93,   573,   115,   117,
     172    99,   146,    78,   375,   376,   145,   210,   145,   153,   107,
     173   103,   145,    71,   630,    76,   107,    34,   378,   379,   449,
     174   103,    93,    98,   152,   238,   134,   105,   229,   145,   572,
     175   231,    42,    44,    99,   499,    16,    78,    81,    83,   187,
     176   152,    93,    95,    97,   172,   145,   501,    76,    48,   120,
     177    99,    89,    92,    17,   246,   141,   258,    42,    44,   251,
     178   230,  -374,   254,   255,    76,   123,    78,   375,   376,    78,
     179    81,    83,   141,   169,    93,    95,    97,   167,   168,   165,
     180   166,    78,   375,   376,    89,    92,    78,    81,    83,    35,
     181  -373,    93,    95,    97,   378,   379,    99,    24,    93,    34,
     182    58,    89,    92,    78,    81,    83,   482,   171,    93,   328,
     183    76,   331,   103,   105,   107,   109,    56,   323,    98,   391,
     184   105,    99,   392,   107,    34,    25,   120,    42,    44,   483,
     185   393,    48,    78,    81,    83,    76,   127,    93,    95,    97,
     186    42,    44,   394,    98,    48,   395,    99,    89,    92,    95,
     187    97,   396,    42,    44,   337,   338,    48,    78,    81,    83,
     188    76,   127,    93,    95,    97,    42,    44,   102,   141,    29,
     189    30,    99,    89,    92,   373,    64,   472,    42,    44,   610,
     190   611,   612,    78,    81,    83,    76,   397,    93,    95,    97,
     191   218,   398,   389,   141,   399,    48,    99,    89,    92,   115,
     192   117,   400,    42,    44,    76,   142,   143,    78,    81,    83,
     193    76,   401,    93,    95,    97,   218,   378,   379,   141,   262,
     194    93,    99,    89,    92,   601,   602,    78,    81,    83,    76,
     195   402,    93,    78,    81,    83,    76,   403,    93,    95,    97,
     196   218,   378,   379,   141,   263,    93,    99,    89,    92,   264,
     197   414,    78,    81,    83,    76,   404,    93,    78,    81,    83,
     198    76,   266,    93,    95,    97,   411,   375,   376,   141,   335,
     199   336,    99,    89,    92,   267,   414,    78,    81,    83,    42,
     200    44,    93,    78,    81,    83,    76,   405,    93,    95,    97,
     201    78,   375,   376,    98,    54,   406,    99,    89,    92,    20,
     202   414,    21,    42,    44,    34,   430,   431,    78,    81,    83,
     203    76,   317,    93,    95,    97,   411,   375,   376,   141,   345,
     204   346,    99,    89,    92,   384,   409,   378,   379,   410,    20,
     205    93,    21,    78,    81,    83,    76,    48,    93,    95,    97,
     206   245,   218,   244,    98,   243,    42,    44,    89,    92,    78,
     207   375,   376,    42,    44,    99,    76,   242,    78,    81,    83,
     208   347,   348,    93,    95,    97,   373,   218,   260,    76,    78,
     209   375,   376,    89,    92,   218,   261,    98,    78,    81,    83,
     210    76,   262,    93,   263,   218,    42,    44,   264,    76,   241,
     211    78,    81,    83,   240,   218,    93,    95,    97,    76,   436,
     212   218,   437,    78,    81,    83,    89,    92,    93,    76,   218,
     213    78,    81,    83,   438,    76,    93,    78,   375,   376,   218,
     214    78,    81,    83,    76,   439,    93,   218,    78,   375,   376,
     215    78,    81,    83,    76,   440,    93,    78,    81,    83,   441,
     216    76,    93,   428,   429,   442,    78,    81,    83,   378,   379,
     217    93,   443,    93,   426,   427,    78,    81,    83,   361,   362,
     218    93,   444,    78,    81,    83,   310,   445,    93,    78,    81,
     219    83,   191,   446,    93,   300,   305,   447,   103,   105,   107,
     220   109,    78,    81,    83,   363,   364,    93,   424,   425,   239,
     221   103,   105,   107,   109,   422,   423,   216,   307,   309,   271,
     222  -103,   420,   421,   283,   206,   316,   317,    78,    81,    83,
     223   191,   452,    93,   115,   117,   120,   103,   105,   107,   109,
     224   187,   112,   121,   628,   629,    78,    81,    83,   115,   117,
     225    93,   115,   117,   120,   103,   105,   107,   109,   453,   112,
     226    78,    81,    83,   454,   455,    93,   456,   457,   156,   103,
     227   105,   107,   109,    78,    81,    83,   158,   157,    93,   159,
     228   141,   172,   103,   105,   107,   109,    78,    81,    83,   143,
     229   212,    93,   127,   175,   470,   103,   105,   107,   109,   167,
     230   168,   165,   166,   167,   168,   165,   166,   167,   168,   165,
     231   166,   167,   168,   165,   166,   381,    78,   375,   376,   167,
     232   168,   165,   166,   167,   168,   165,   166,   167,   168,   165,
     233   166,   167,   168,   165,   166,   265,   162,   161,   477,   478,
     234   480,   481,   144,   484,   485,   486,   103,   488,   105,   266,
     235   141,   137,   136,    48,   125,   502,   107,   504,   109,   506,
     236   109,   508,    68,    67,   514,   515,    66,   543,    34,   545,
     237   546,   547,   103,   549,   105,   551,   107,   553,   109,   555,
     238   267,   557,    58,   559,   560,   561,   562,   109,   109,   109,
     239   109,   563,   564,  -103,   567,    53,   107,   169,   268,    50,
     240    32,   578,   579,   105,   581,   582,   583,   584,   585,   586,
     241   587,    28,   590,   591,   592,   593,    27,   248,   269,   103,
     242   270,   603,   604,   605,   606,    76,   568,   608,   311,    18,
     243   617,   619,   620,   621,    15,   623,    10,     9,   625,   626,
     244   627,   320,     8,     7,   161 ]
    245245
    246246racc_action_check = [
    247    535,   402,    82,    90,   398,   569,   397,   354,    21,   396,
    248     61,   395,   427,   535,   162,   403,    42,    70,    49,   143,
    249    264,   247,   243,   515,   217,   217,    18,    18,   535,   243,
    250    243,   247,   535,   425,   264,    70,    21,   535,   535,    49,
    251    535,   535,   143,   482,   364,    42,    61,   162,    82,   228,
    252    228,   352,   535,   535,   535,   402,   356,   535,   535,   535,
    253    535,   217,   535,   535,   535,   354,   535,   535,   535,   535,
    254    535,   482,   427,   398,   397,   482,   396,   395,   403,   403,
    255    482,   482,    90,   482,   482,   482,   228,   535,   535,   535,
    256    535,   569,   425,   535,   623,   482,   482,   482,   217,   217,
    257    482,   482,   482,   482,   364,   482,   482,   482,   352,   482,
    258    482,   482,   482,   482,   623,   356,   523,   518,   165,   471,
    259     94,   531,   471,   228,   228,   471,   471,   421,   225,   225,
    260    482,   482,   482,   482,   394,     4,   482,   623,   165,   245,
    261    423,    68,    53,   417,   417,   521,   521,   417,   245,   408,
    262    518,   623,   623,   623,   531,     4,   623,   623,   623,   518,
    263    518,   165,    53,    94,    94,   225,   623,   623,   523,   523,
    264    223,   223,   408,   623,    53,   165,   165,   165,   392,   471,
    265    165,   165,   165,   574,   421,    53,   265,   221,   221,    68,
    266    165,   165,   394,   394,    53,    53,   394,   165,   423,    53,
    267     53,    53,   225,   225,    53,    53,    53,   223,   266,    85,
    268     85,   188,    85,    85,    53,    53,    85,   578,   578,    85,
    269     85,    53,   173,   173,   221,   173,   173,   319,   319,   173,
    270    226,   226,   173,   173,   156,   392,   392,   392,   173,   378,
    271    574,   574,   574,   319,   223,   223,    85,     0,   252,   186,
    272    193,    97,    14,   193,   249,   263,   193,   193,    83,   173,
    273    252,   221,   221,    83,   319,   249,     0,   226,   263,    97,
    274     14,   156,   156,   156,   157,   185,   156,   522,    85,   270,
    275    158,   174,   522,    85,    85,    86,   155,   378,   378,   378,
    276     86,   173,   154,   156,   344,   273,   173,   173,   193,   193,
    277    193,   319,   319,   193,   226,   226,    57,   193,   193,   193,
    278    193,   157,   157,   157,   274,   153,   157,   158,   158,   158,
    279    277,   152,   158,   155,   155,   155,   278,   218,   155,   154,
    280    154,   154,   280,   157,   154,   174,   174,   174,   174,   158,
    281    151,   131,   283,   344,   344,   155,   286,   344,    57,    57,
    282    167,   154,   153,   153,   153,   240,   240,   153,   152,   152,
    283    152,   290,    59,   152,   218,   218,   218,   293,   150,   218,
    284     59,   621,   621,   167,   153,   149,   429,   151,   151,   151,
    285    152,   296,   151,   131,   131,   298,   218,   167,   167,   167,
    286    300,    59,   167,   167,   167,   419,   489,   489,    81,   151,
    287    489,   301,   167,   167,   303,   150,   150,   150,   305,   167,
    288    150,   306,   149,   149,   149,   308,   101,   149,    26,    28,
    289     26,    81,   350,   350,   429,   429,   429,   150,   309,    28,
    290     81,    81,   349,   349,   149,    81,    81,    81,   311,   101,
    291     81,    81,    81,   168,   419,   419,   312,    11,   419,    11,
    292     81,    81,   314,   101,   101,   101,   315,    81,   101,   101,
    293    101,   169,    28,   239,   135,   239,   168,   318,   101,   101,
    294    184,    28,    28,   183,   135,   101,   320,   267,   267,   267,
    295    168,   168,   168,   326,   169,   168,   168,   168,   170,   253,
    296    253,   320,   320,   320,   327,   168,   168,   182,   169,   169,
    297    169,   190,   168,   169,   169,   169,   625,   135,   400,    34,
    298    400,   170,   191,   169,   169,   195,   135,   135,   198,    34,
    299    169,    95,    95,    95,    95,   170,   170,   170,   200,   625,
    300    170,   170,   170,   171,   236,   236,   236,   236,   625,   625,
    301    170,   170,   251,   625,   625,   625,   181,   170,   625,   625,
    302    625,   608,    34,   268,   268,   180,   171,   268,   625,   625,
    303    178,    34,    34,   348,   348,   625,   233,   233,   233,   233,
    304    171,   171,   171,   357,   608,   171,   171,   171,   358,   613,
    305    456,   456,   456,   608,   608,   171,   171,   359,   608,   608,
    306    608,   563,   171,   608,   608,   608,   360,   618,   485,   604,
    307    604,   604,   613,   608,   608,   148,   563,   563,   563,   361,
    308    608,   613,   613,   485,   485,   485,   613,   613,   613,   362,
    309    618,   613,   613,   613,   235,   235,   235,   235,   177,   618,
    310    618,   613,   613,   365,   618,   618,   618,   366,   613,   618,
    311    618,   618,   148,   148,   148,   255,   255,   148,   367,   618,
    312    618,   368,   241,   369,   241,   241,   618,   213,   241,   370,
    313    213,   213,   213,   213,   148,   213,   213,   213,   371,   213,
    314    213,   213,   213,   261,   261,   261,   256,   256,   261,   498,
    315    498,   498,   261,   261,   261,   261,   269,   269,   269,   269,
    316    213,   213,   213,   102,   257,   257,   213,   102,   347,   347,
    317    102,   102,   102,   102,   372,   102,   102,   102,   102,   102,
    318    102,   102,   102,   102,   102,    60,   259,   259,    60,    60,
    319     60,   346,   346,    60,    60,    60,    60,    60,    60,    60,
    320     60,   373,    60,   254,   254,   254,   345,   345,   254,   573,
    321    573,   573,   254,   254,   254,   254,   260,   260,   260,   262,
    322    262,   260,   216,   216,   374,   260,   260,   260,   260,   258,
    323    258,   258,   375,   376,   258,   175,   385,   386,   258,   258,
    324    258,   258,   616,   616,   616,   616,   234,   234,   234,   234,
    325    232,   232,   232,   232,   631,   631,   631,   631,   147,   144,
    326    140,   139,   138,   112,   399,   201,   401,   106,    91,   404,
    327    406,   407,    88,   411,   413,   416,    84,    78,    72,    69,
    328     67,    63,    52,   430,   431,   432,   433,   434,   435,   442,
    329    443,   248,   457,    47,   480,   481,    46,   483,    40,   487,
    330    488,    36,   490,   491,   492,   493,   494,   495,   496,   497,
    331    203,   499,   501,   503,   505,   507,   508,   510,   511,   512,
    332    513,   514,   187,   517,    35,   520,   246,    33,    27,   524,
    333    205,    24,   540,    20,   543,   547,   549,   551,   553,   555,
    334    556,   244,   564,   565,   567,    16,   570,   572,   206,    13,
    335    242,   580,   588,   589,   590,   594,   598,   603,   212,   214,
    336    609,   610,   611,   612,     8,   615,     6,   617,     5,   619,
    337    620,   230,     3,     2,   541 ]
     247   532,   401,   220,   220,   398,   569,   395,    89,     0,   397,
     248    41,   396,   142,   532,     6,   259,   242,    83,   518,   228,
     249   228,   571,    83,   518,   193,   427,   242,     0,   532,   259,
     250    41,   220,   532,   423,     6,   142,   532,   532,   220,   532,
     251   532,    89,   482,   470,   319,   319,   470,   348,   228,   470,
     252   470,   532,   532,   532,   401,   228,   532,   532,   532,   532,
     253   319,   532,   532,   532,   573,   532,   532,   532,   532,   532,
     254   482,   395,   398,   319,   482,   220,   397,   396,   482,   482,
     255   319,   482,   482,   482,   427,   532,   532,   532,   532,   569,
     256   423,   532,   228,   482,   482,   482,   221,   221,   482,   482,
     257   482,   482,   470,   482,   482,   482,   348,   482,   482,   482,
     258   482,   482,   227,   227,   223,   223,   402,   319,   225,   225,
     259   573,   573,   573,   521,   364,   221,   392,   482,   482,   482,
     260   482,   346,   221,   482,   421,   173,   173,   425,   173,   173,
     261   394,   227,   173,   223,   336,   173,   173,   225,   227,   338,
     262   223,   173,    80,    80,   225,    80,    80,   248,    68,    80,
     263    53,    81,    80,    80,   173,   267,    81,   267,   185,   221,
     264   248,   173,   364,   364,   521,   521,   364,   527,   402,   402,
     265    53,    80,   392,   392,   392,   227,   136,   223,    80,   346,
     266   421,   225,    53,   623,    53,   425,   136,   394,   394,   362,
     267   336,   394,    53,   173,   174,    68,   338,   161,   173,   527,
     268   162,    53,    53,   623,   429,    10,    53,    53,    53,   261,
     269    80,    53,    53,    53,    98,    80,   431,   623,   136,   268,
     270   162,    53,    53,    10,   184,   623,   191,   136,   136,   191,
     271   161,    98,   191,   191,   162,    59,   362,   362,   362,   623,
     272   623,   623,   162,    91,   623,   623,   623,   174,   174,   174,
     273   174,   429,   429,   429,   623,   623,   162,   162,   162,    27,
     274    91,   162,   162,   162,   431,   431,    74,    18,   431,    27,
     275    59,   162,   162,   191,   191,   191,   410,    92,   191,   244,
     276    74,   247,   191,   191,   191,   191,    33,   240,    74,   270,
     277   244,   624,   272,   247,   516,    18,   240,    74,    74,   410,
     278   273,    27,    74,    74,    74,   624,   125,    74,    74,    74,
     279    27,    27,   275,   624,    33,   278,   171,    74,    74,    92,
     280    92,   281,   624,   624,   250,   250,   516,   624,   624,   624,
     281   171,    67,   624,   624,   624,   516,   516,    57,   171,    22,
     282    22,   168,   624,   624,   400,    57,   400,   125,   125,   605,
     283   605,   605,   171,   171,   171,   168,   285,   171,   171,   171,
     284   152,   288,   269,   168,   291,    57,   167,   171,   171,   269,
     285   269,   293,    67,    67,   152,    77,    77,   168,   168,   168,
     286   167,   295,   168,   168,   168,   155,   451,   451,   167,   297,
     287   451,   166,   168,   168,   577,   577,   152,   152,   152,   155,
     288   299,   152,   167,   167,   167,   166,   300,   167,   167,   167,
     289   154,   501,   501,   166,   302,   501,   165,   167,   167,   303,
     290   563,   155,   155,   155,   154,   305,   155,   166,   166,   166,
     291   165,   308,   166,   166,   166,   563,   563,   563,   165,   249,
     292   249,   608,   166,   166,   310,   484,   154,   154,   154,   519,
     293   519,   154,   165,   165,   165,   608,   311,   165,   165,   165,
     294   484,   484,   484,   608,    32,   312,    99,   165,   165,    14,
     295   320,    14,   608,   608,    32,   344,   344,   608,   608,   608,
     296    99,   314,   608,   608,   608,   320,   320,   320,    99,   252,
     297   252,   613,   608,   608,   266,   317,   266,   266,   318,    30,
     298   266,    30,    99,    99,    99,   613,    32,    99,    99,    99,
     299   183,   218,   182,   613,   181,    32,    32,    99,    99,   262,
     300   262,   262,   613,   613,   617,   218,   180,   613,   613,   613,
     301   253,   253,   613,   613,   613,   260,   153,   195,   617,   572,
     302   572,   572,   613,   613,   145,   196,   617,   218,   218,   218,
     303   153,   198,   218,   200,   146,   617,   617,   201,   145,   179,
     304   617,   617,   617,   178,   147,   617,   617,   617,   146,   349,
     305   151,   350,   153,   153,   153,   617,   617,   153,   147,   149,
     306   145,   145,   145,   351,   151,   145,   449,   449,   449,   150,
     307   146,   146,   146,   149,   352,   146,   148,   499,   499,   499,
     308   147,   147,   147,   150,   353,   147,   151,   151,   151,   354,
     309   148,   151,   343,   343,   355,   149,   149,   149,   263,   263,
     310   149,   356,   263,   342,   342,   150,   150,   150,   256,   256,
     311   150,   357,   148,   148,   148,   213,   358,   148,   213,   213,
     312   213,   213,   359,   213,   213,   213,   360,   213,   213,   213,
     313   213,   255,   255,   255,   257,   257,   255,   341,   341,   177,
     314   255,   255,   255,   255,   340,   340,   144,   213,   213,   213,
     315   127,   339,   339,   213,   127,   216,   216,   127,   127,   127,
     316   127,   365,   127,   127,   127,   127,   127,   127,   127,   127,
     317   127,   127,    58,   621,   621,    58,    58,    58,   265,   265,
     318    58,    58,    58,    58,    58,    58,    58,    58,   366,    58,
     319   254,   254,   254,   367,   368,   254,   369,   370,   375,   254,
     320   254,   254,   254,   258,   258,   258,   376,   378,   258,   379,
     321   143,   141,   258,   258,   258,   258,   251,   251,   251,   140,
     322   137,   251,   131,   119,   399,   251,   251,   251,   251,   236,
     323   236,   236,   236,   235,   235,   235,   235,   234,   234,   234,
     324   234,   232,   232,   232,   232,   264,   264,   264,   264,    90,
     325    90,    90,    90,   616,   616,   616,   616,   233,   233,   233,
     326   233,   631,   631,   631,   631,   203,    86,    84,   403,   404,
     327   408,   409,    79,   411,   413,   416,   417,   418,   419,   204,
     328    76,    71,    69,    64,    61,   432,   433,   434,   435,   448,
     329   246,   450,    52,    49,   480,   481,    48,   483,    40,   487,
     330   489,   490,   491,   492,   493,   494,   495,   496,   497,   498,
     331   206,   500,    39,   503,   505,   507,   509,   510,   511,   512,
     332   513,   514,   515,    34,   517,    31,   243,   520,   207,    28,
     333    26,   536,   538,   241,   543,   548,   550,   552,   554,   556,
     334   558,    20,   564,   565,   566,   568,    19,   189,   208,   239,
     335   212,   579,   588,   589,   590,   595,   597,   603,   214,    11,
     336   609,   610,   611,   612,     8,   615,     5,     4,   618,   619,
     337   620,   230,     3,     2,   540 ]
    338338
    339339racc_action_pointer = [
    340    246,   nil,   884,   902,   134,   880,   869,   nil,   894,   nil,
    341    nil,   423,   nil,   851,   251,   nil,   867,   nil,     4,   nil,
    342    833,     7,   nil,   nil,   836,   nil,   394,   827,   418,   nil,
    343    nil,   nil,   nil,   825,   508,   803,   830,   nil,   nil,   nil,
    344    820,   nil,     1,   nil,   nil,   nil,   775,   812,   nil,    -5,
    345    nil,   nil,   764,   141,   nil,   nil,   nil,   295,   nil,   347,
    346    660,    -5,   nil,   803,   nil,   nil,   nil,   766,   140,   759,
    347    -12,   nil,   774,   nil,   nil,   nil,   nil,   nil,   763,   nil,
    348    nil,   377,   -32,   200,   772,   203,   227,   nil,   715,   nil,
    349      2,   751,   nil,   nil,    99,   445,   nil,   222,   nil,   nil,
    350    nil,   395,   642,   nil,   nil,   nil,   786,   nil,   nil,   nil,
    351    nil,   nil,   741,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     340     7,   nil,   884,   902,   879,   869,    13,   nil,   894,   nil,
     341   214,   861,   nil,   nil,   455,   nil,   nil,   nil,   276,   846,
     342   863,   nil,   327,   nil,   nil,   nil,   829,   268,   834,   nil,
     343   485,   823,   473,   281,   803,   nil,   nil,   nil,   nil,   792,
     344   817,   -13,   nil,   nil,   nil,   nil,   nil,   nil,   825,   815,
     345   nil,   nil,   775,   159,   nil,   nil,   nil,   332,   648,   230,
     346   nil,   806,   nil,   nil,   770,   nil,   nil,   330,   157,   763,
     347   nil,   777,   nil,   nil,   255,   nil,   767,   351,   nil,   768,
     348   146,   104,   nil,   -40,   712,   nil,   750,   nil,   nil,     6,
     349   704,   224,   266,   nil,   nil,   nil,   nil,   nil,   195,   455,
    352350   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    353    nil,   330,   nil,   nil,   nil,   463,   nil,   nil,   757,   762,
    354    710,   nil,   nil,     7,   745,   nil,   nil,   776,   584,   354,
    355    347,   319,   300,   294,   271,   265,   213,   253,   259,   nil,
    356    nil,   nil,    13,   nil,   nil,   117,   nil,   329,   422,   440,
    357    467,   512,   nil,   216,   259,   709,   nil,   572,   504,   nil,
    358    499,   490,   441,   417,   414,   219,   193,   796,   196,   nil,
    359    445,   456,   nil,   240,   nil,   459,   nil,   nil,   462,   nil,
    360    472,   739,   nil,   784,   nil,   804,   822,   nil,   nil,   nil,
    361    nil,   nil,   852,   602,   853,   nil,   709,    18,   306,   nil,
    362    nil,   181,   nil,   164,   nil,   122,   224,   nil,    43,   nil,
    363    889,   nil,   704,   490,   700,   548,   458,   nil,   nil,   408,
    364    291,   595,   814,   -35,   804,    82,   788,   -36,   752,   197,
    365    nil,   472,   191,   428,   675,   584,   615,   633,   701,   655,
    366    688,   615,   688,   198,   -37,   131,   137,   419,   494,   629,
    367    242,   nil,   nil,   239,   258,   nil,   nil,   297,   312,   nil,
    368    309,   nil,   nil,   319,   nil,   nil,   323,   nil,   nil,   nil,
    369    338,   nil,   nil,   344,   nil,   nil,   301,   nil,   329,   nil,
    370    334,   378,   nil,   348,   nil,   385,   355,   nil,   359,   372,
    371    nil,   401,   364,   nil,   418,   442,   nil,   nil,   423,   221,
    372    433,   nil,   nil,   nil,   nil,   nil,   420,   431,   nil,   nil,
     351   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   702,
     352   nil,   nil,   nil,   nil,   nil,   305,   nil,   630,   nil,   nil,
     353   nil,   741,   nil,   nil,   nil,   nil,   185,   715,   nil,   nil,
     354   714,   712,     0,   697,   664,   533,   543,   553,   585,   568,
     355   578,   559,   349,   525,   399,   374,   nil,   nil,   nil,   nil,
     356   nil,   206,   209,   nil,   nil,   405,   380,   355,   330,   nil,
     357   nil,   305,   nil,   129,   182,   nil,   nil,   614,   518,   514,
     358   481,   469,   467,   505,   179,   113,   nil,   nil,   nil,   822,
     359   nil,   226,   nil,   -31,   nil,   492,   500,   nil,   506,   nil,
     360   508,   512,   nil,   740,   754,   nil,   785,   803,   823,   nil,
     361   nil,   nil,   844,   591,   852,   nil,   643,   nil,   500,   nil,
     362    -4,    90,   nil,   108,   nil,   112,   nil,   106,    13,   nil,
     363   889,   nil,   696,   712,   692,   688,   684,   nil,   nil,   813,
     364   241,   796,   -40,   788,   233,   nil,   751,   235,   101,   389,
     365   274,   689,   439,   480,   663,   604,   578,   604,   676,   -41,
     366   491,   149,   472,   570,   719,   645,   448,   111,   164,   316,
     367   264,   nil,   279,   296,   nil,   299,   nil,   nil,   302,   nil,
     368   nil,   308,   nil,   nil,   nil,   343,   nil,   nil,   348,   nil,
     369   nil,   339,   nil,   326,   nil,   368,   nil,   344,   nil,   387,
     370   361,   nil,   369,   374,   nil,   380,   nil,   nil,   386,   nil,
     371   399,   431,   461,   nil,   448,   nil,   nil,   425,   474,    38,
     372   438,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     373   nil,   nil,   nil,   nil,   nil,   nil,   134,   nil,   139,   621,
     374   614,   607,   573,   562,   425,   nil,   121,   nil,    37,   519,
     375   521,   533,   544,   554,   559,   564,   571,   581,   586,   592,
     376   596,   nil,   189,   nil,   114,   631,   658,   663,   664,   666,
     377   667,   nil,   nil,   nil,   nil,   671,   679,   nil,   675,   677,
    373378   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    374    nil,   nil,   nil,   nil,   284,   675,   660,   637,   502,   371,
    375    361,   nil,    41,   nil,    -3,   nil,    46,   512,   517,   526,
    376    535,   548,   558,   nil,    34,   572,   576,   587,   590,   592,
    377    598,   607,   643,   670,   693,   701,   702,   nil,   229,   nil,
    378    nil,   nil,   nil,   nil,   nil,   708,   709,   nil,   nil,   nil,
    379    nil,   nil,   177,   nil,   133,    10,     8,     5,     3,   733,
    380    453,   731,     0,    14,   735,   nil,   717,   767,   137,   nil,
    381    nil,   789,   nil,   742,   nil,   nil,   744,    84,   nil,   385,
    382    nil,   117,   nil,   130,   nil,    23,   nil,     2,   nil,   366,
    383    752,   747,   754,   748,   756,   749,   nil,   nil,   nil,   nil,
    384    nil,   nil,   758,   750,   nil,   nil,   nil,   nil,   nil,   nil,
    385    nil,   nil,   nil,   nil,   nil,   nil,   522,   761,   nil,   nil,
     379   nil,   nil,   125,   nil,   139,     5,    10,     8,     3,   694,
     380   300,     0,   115,   734,   736,   nil,   nil,   nil,   719,   767,
     381   274,   742,   nil,   790,   nil,   nil,   745,   740,   747,   741,
     382   nil,   124,   nil,    23,   nil,   127,   nil,    15,   nil,   204,
     383   nil,   216,   755,   748,   757,   749,   nil,   nil,   nil,   nil,
     384   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   759,   539,
     385   761,   338,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    386386   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    387    nil,   109,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    388    790,   813,    42,   791,   nil,   555,   nil,   768,   769,   337,
    389    771,   766,   773,   767,   775,   768,   777,   769,   621,   780,
    390    nil,   781,   nil,   782,   nil,   783,   nil,   784,   785,   nil,
    391    777,   778,   779,   780,   839,   -35,   nil,   766,   106,   nil,
    392    841,    92,   221,   115,   830,   nil,   nil,   nil,   nil,   nil,
    393    nil,    98,   nil,   nil,   nil,    -1,   nil,   nil,   nil,   nil,
    394    769,   870,   nil,   827,   nil,   nil,   nil,   804,   nil,   805,
    395    nil,   806,   nil,   807,   nil,   808,   809,   nil,   nil,   nil,
    396    nil,   nil,   nil,   548,   810,   859,   nil,   834,   nil,     4,
    397    805,   nil,   848,   681,   182,   nil,   nil,   nil,   125,   nil,
    398    869,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   859,   869,
    399    826,   nil,   nil,   nil,   805,   nil,   nil,   nil,   825,   nil,
    400    nil,   nil,   nil,   842,   515,   nil,   nil,   nil,   530,   844,
    401    868,   869,   870,   558,   nil,   848,   696,   883,   576,   813,
    402    814,   287,   nil,    93,   nil,   485,   nil,   nil,   nil,   nil,
    403    nil,   708 ]
     387    33,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     388   790,   813,    41,   791,   413,   nil,   nil,   769,   nil,   770,
     389   771,   766,   773,   767,   775,   768,   777,   769,   779,   550,
     390   781,   363,   nil,   783,   nil,   784,   nil,   785,   nil,   786,
     391   778,   779,   780,   781,   839,   795,   293,   840,   -37,   407,
     392   828,   122,   nil,   nil,   nil,   nil,   nil,   154,   nil,   nil,
     393   nil,   nil,    -1,   nil,   nil,   nil,   770,   nil,   828,   nil,
     394   819,   nil,   nil,   829,   nil,   nil,   nil,   nil,   805,   nil,
     395   806,   nil,   807,   nil,   808,   nil,   809,   nil,   810,   nil,
     396   nil,   nil,   nil,   388,   811,   859,   835,   nil,   805,     4,
     397   nil,    -8,   492,    63,   nil,   nil,   nil,   314,   nil,   869,
     398   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   868,   860,
     399   827,   nil,   nil,   nil,   nil,   850,   nil,   826,   nil,   nil,
     400   nil,   nil,   nil,   843,   nil,   277,   nil,   nil,   430,   845,
     401   868,   869,   870,   480,   nil,   849,   708,   513,   884,   815,
     402   816,   621,   nil,   192,   280,   nil,   nil,   nil,   nil,   nil,
     403   nil,   716 ]
    404404
    405405racc_action_default = [
    406   -376,    -2,  -376,  -376,    -6,  -376,   -13,    -4,  -376,    -5,
    407     -7,  -376,    -1,  -376,  -376,   632,  -376,   -12,  -376,    -9,
    408    -18,  -376,   -15,   -14,  -376,    -8,  -376,   -21,   -87,   -17,
    409    -16,   -11,   -10,  -376,   -87,  -112,   -94,   -90,   -19,  -108,
    410   -376,   -20,  -376,   -98,   -99,  -100,  -376,  -376,  -146,   -88,
    411   -147,   -89,   -82,  -376,   -22,   -23,   -95,  -376,  -110,  -376,
    412   -376,  -376,  -104,  -376,  -109,  -101,   -91,  -376,  -376,  -376,
    413   -289,  -282,  -376,  -248,   -25,   -24,  -253,   -26,  -284,  -254,
    414   -152,   -27,  -376,  -376,  -376,  -376,  -376,  -273,  -305,  -274,
    415   -376,  -376,  -286,  -283,  -376,  -251,  -167,   -31,  -271,  -281,
    416   -272,  -376,  -112,   -93,  -113,   -97,  -376,   -96,  -111,  -187,
    417   -148,  -123,  -376,  -191,  -124,  -204,  -125,  -217,  -126,  -230,
    418   -127,  -128,  -247,  -129,  -130,  -182,  -121,  -183,  -122,  -102,
    419   -105,  -376,   -92,   -84,   -83,   -87,    -3,  -288,  -376,  -289,
    420   -285,  -249,  -373,  -376,  -376,  -153,  -168,  -376,  -376,  -376,
    421   -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -154,
    422   -169,   -30,  -376,  -256,  -255,  -376,  -259,  -376,  -376,  -376,
    423   -376,  -376,   -32,  -376,  -376,  -148,  -145,  -134,  -123,  -116,
    424   -135,  -124,  -136,  -125,  -137,  -126,  -138,  -127,  -376,  -243,
    425   -139,  -128,  -117,  -376,  -140,  -129,  -118,  -141,  -119,  -142,
    426   -131,  -120,  -143,  -132,  -144,  -133,  -122,  -114,  -107,  -106,
    427    -85,   -86,  -376,  -376,  -376,  -287,  -376,  -263,  -376,  -278,
    428   -279,  -264,  -275,  -265,  -276,  -261,  -260,  -277,  -262,  -307,
    429   -376,  -252,  -250,  -267,  -268,  -269,  -266,  -280,  -270,  -376,
     406  -376,    -2,  -376,  -376,  -376,   -13,    -6,    -4,  -376,    -1,
     407  -376,  -376,    -5,    -7,  -376,   632,   -15,   -14,  -376,   -18,
     408  -376,   -12,  -376,    -9,   -17,   -16,   -21,   -87,  -376,    -8,
     409  -376,  -376,   -87,  -376,  -112,   -20,   -98,   -99,  -100,  -376,
     410  -376,   -88,  -146,   -89,  -147,   -90,   -19,  -108,   -94,  -376,
     411   -11,   -10,   -82,  -376,   -23,   -22,  -110,  -376,  -376,  -376,
     412  -104,  -376,  -101,  -109,  -376,   -91,   -95,  -376,  -376,  -376,
     413  -253,  -376,   -26,  -254,   -27,   -25,  -284,  -376,  -152,  -376,
     414  -376,  -376,  -273,  -376,  -305,  -274,  -376,  -286,  -283,  -376,
     415  -251,   -31,  -376,  -167,  -281,  -271,  -282,  -272,  -289,  -376,
     416  -248,   -24,  -111,  -191,  -125,  -204,  -126,  -217,  -127,  -230,
     417  -128,  -129,  -247,  -130,  -121,  -182,  -122,  -183,  -123,  -376,
     418  -187,  -148,  -124,  -102,  -105,  -376,   -92,  -112,   -93,  -113,
     419   -97,  -376,   -96,   -84,   -83,    -3,   -87,  -376,  -373,  -249,
     420  -285,  -289,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
     421  -376,  -376,  -376,  -376,  -376,  -376,  -153,  -168,  -154,  -169,
     422   -30,  -376,  -376,  -256,  -255,  -376,  -376,  -376,  -376,   -32,
     423  -259,  -376,  -288,  -376,  -376,  -107,  -106,  -136,  -125,  -137,
     424  -126,  -138,  -127,  -376,  -139,  -128,  -117,  -243,  -140,  -129,
     425  -118,  -376,  -141,  -119,  -142,  -131,  -120,  -143,  -132,  -144,
     426  -133,  -122,  -145,  -134,  -123,  -116,  -148,  -135,  -124,  -114,
     427   -86,   -85,  -376,  -376,  -376,  -287,  -376,  -279,  -376,  -278,
     428  -263,  -264,  -275,  -265,  -276,  -260,  -277,  -261,  -262,  -307,
     429  -376,  -252,  -250,  -268,  -269,  -266,  -267,  -280,  -270,  -376,
     430  -376,  -376,  -376,  -376,  -376,  -115,  -376,  -376,  -376,  -376,
    430431  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
    431   -115,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
    432432  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
    433   -376,  -343,  -322,  -316,  -347,  -328,  -334,  -313,  -376,  -323,
    434   -319,   -54,  -329,  -325,   -55,  -335,  -331,   -56,  -375,  -342,
    435   -337,  -312,   -57,  -344,  -318,   -58,  -340,  -324,  -348,   -59,
    436   -353,  -350,  -330,  -311,   -60,  -357,  -354,  -336,  -317,  -310,
    437    -61,  -376,  -290,   -63,  -376,  -376,   -33,   -62,   -34,  -376,
    438   -376,  -149,  -151,  -185,  -170,  -172,  -376,  -376,  -189,  -184,
    439   -186,  -193,  -190,  -188,  -206,  -194,  -192,  -219,  -207,  -205,
    440   -232,  -220,  -218,  -181,  -376,  -376,  -376,  -376,  -376,  -376,
    441   -376,  -203,  -376,  -216,  -376,  -229,  -376,  -376,  -376,  -376,
    442   -376,  -376,  -376,  -242,  -376,  -376,  -376,  -376,  -376,  -376,
    443   -376,  -376,  -376,  -376,  -376,  -376,  -376,  -166,  -376,  -233,
    444   -231,  -246,  -244,  -150,  -245,  -376,  -376,  -156,  -171,  -157,
    445   -155,   -28,  -376,  -257,  -376,  -376,  -376,  -376,  -376,  -376,
    446   -376,  -376,  -376,  -376,  -376,  -258,   -68,  -376,  -376,   -29,
    447    -64,  -376,  -308,  -152,  -304,  -303,  -376,  -376,  -179,  -376,
     433  -376,  -334,  -313,  -376,  -323,  -319,   -54,  -329,  -325,   -55,
     434  -335,  -331,   -56,  -375,  -342,  -337,  -312,   -57,  -344,  -318,
     435   -58,  -340,  -324,  -348,   -59,  -350,  -330,  -311,   -60,  -357,
     436  -353,  -336,  -317,  -310,   -61,  -354,  -343,  -322,  -316,  -328,
     437  -347,  -376,  -376,   -33,   -34,   -63,   -62,  -290,  -376,  -376,
     438  -376,  -193,  -188,  -190,  -206,  -194,  -192,  -219,  -207,  -205,
     439  -232,  -220,  -218,  -233,  -231,  -203,  -376,  -216,  -376,  -376,
     440  -376,  -376,  -376,  -376,  -376,  -229,  -376,  -242,  -376,  -376,
     441  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
     442  -376,  -166,  -376,  -181,  -376,  -376,  -376,  -376,  -376,  -376,
     443  -376,  -246,  -244,  -150,  -245,  -376,  -376,  -156,  -376,  -376,
     444  -171,  -157,  -155,  -185,  -172,  -170,  -151,  -149,  -189,  -186,
     445  -184,   -28,  -376,  -257,  -376,  -376,  -376,  -376,  -376,  -376,
     446  -376,  -376,  -376,  -376,  -376,  -258,   -29,   -64,   -68,  -376,
     447  -376,  -152,  -303,  -376,  -304,  -308,  -376,  -376,  -376,  -376,
    448448  -201,  -376,  -214,  -376,  -227,  -376,  -240,  -376,  -164,  -376,
    449   -376,  -376,  -376,  -376,  -376,  -376,  -178,  -200,  -213,  -226,
    450   -239,  -163,  -376,  -376,  -180,  -202,  -215,  -228,  -241,  -165,
    451   -177,  -199,  -212,  -225,  -238,  -162,  -376,  -376,  -315,  -314,
    452   -320,  -321,  -327,  -326,  -333,  -332,  -339,  -338,  -346,  -345,
    453   -341,  -376,  -349,  -355,  -352,  -351,  -359,  -358,  -356,   -69,
    454   -376,  -376,  -376,  -376,  -306,  -376,  -173,  -376,  -376,  -376,
     449  -179,  -376,  -376,  -376,  -376,  -376,  -200,  -213,  -226,  -239,
     450  -163,  -178,  -202,  -215,  -228,  -241,  -165,  -180,  -376,  -376,
     451  -376,  -376,  -199,  -212,  -225,  -238,  -162,  -177,  -315,  -314,
     452  -321,  -320,  -327,  -326,  -333,  -332,  -339,  -338,  -346,  -345,
     453  -376,  -341,  -349,  -352,  -351,  -359,  -358,  -355,  -356,   -69,
     454  -376,  -376,  -376,  -376,  -376,  -306,  -195,  -376,  -208,  -376,
    455455  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
    456   -195,  -376,  -208,  -376,  -221,  -376,  -234,  -376,  -376,  -158,
    457   -376,  -376,  -376,  -376,  -376,  -376,   -43,  -305,   -87,   -53,
    458    -44,  -376,  -310,  -376,   -31,   -72,   -70,   -36,   -37,  -372,
    459    -38,  -360,   -39,  -363,   -40,  -376,  -366,   -41,  -367,   -42,
    460   -369,  -376,   -35,  -376,  -309,  -175,  -174,  -376,  -196,  -376,
    461   -209,  -376,  -222,  -376,  -235,  -376,  -376,  -159,  -197,  -210,
    462   -223,  -236,  -160,  -376,  -292,  -376,   -49,  -376,   -67,  -305,
    463   -376,   -52,   -50,  -376,  -376,   -44,   -71,   -65,  -376,  -370,
    464   -376,   -66,  -176,  -198,  -211,  -224,  -237,  -161,  -295,  -376,
    465   -376,  -291,   -45,   -47,  -376,  -365,   -51,  -364,  -376,  -362,
    466   -361,  -368,  -371,   -73,  -376,  -294,  -293,   -46,  -376,   -75,
     456  -376,  -376,  -221,  -376,  -234,  -376,  -158,  -376,  -173,  -376,
     457  -376,  -376,  -376,  -376,  -376,  -376,   -87,   -44,  -310,  -376,
     458   -31,  -376,   -72,   -70,   -36,   -37,   -38,  -360,   -39,  -372,
     459  -363,   -40,  -376,  -366,   -41,   -42,  -369,  -367,  -376,   -35,
     460  -305,   -43,   -53,  -376,  -309,  -197,  -210,  -196,  -376,  -209,
     461  -376,  -222,  -376,  -235,  -376,  -159,  -376,  -174,  -376,  -223,
     462  -236,  -160,  -175,  -376,  -292,  -376,  -376,   -67,  -376,  -305,
     463   -52,   -50,  -376,  -376,   -44,   -71,   -65,  -376,  -370,  -376,
     464   -49,   -66,  -198,  -211,  -224,  -237,  -161,  -176,  -376,  -295,
     465  -376,  -291,   -45,  -365,   -47,  -376,   -51,  -376,  -364,  -362,
     466  -361,  -368,  -371,   -73,  -294,  -376,  -293,   -46,  -376,   -75,
    467467  -296,  -297,  -298,   -74,   -77,  -376,   -80,  -376,  -376,  -376,
    468   -376,  -376,   -78,  -376,   -48,   -76,  -299,  -300,  -301,  -302,
     468  -376,  -376,   -78,  -376,   -76,   -48,  -299,  -300,  -301,  -302,
    469469   -81,   -79 ]
    470470
    471471racc_goto_table = [
    472     95,   128,    47,   164,    38,   161,   176,   114,    47,   316,
    473     54,   411,   116,   173,   198,   111,   107,   313,    64,   103,
    474    526,    65,   112,    91,    73,    19,    66,    97,    95,   622,
    475    121,   106,    62,     3,   406,   613,    66,   535,    59,   278,
    476     32,   622,   118,   206,   132,   625,   617,   130,   174,   181,
    477    123,    91,   141,   609,   183,   318,    61,   178,   315,   479,
    478    217,    81,   207,   221,   179,   223,   188,   225,   226,   192,
    479    228,   196,   191,   576,    77,   201,   475,    64,    75,   120,
    480     65,    18,    10,     2,   185,   136,   219,   220,    69,   222,
    481    107,   224,   195,   209,   227,    52,    33,   200,   203,   205,
    482    177,   180,   182,   184,   186,   106,   190,   194,   197,    47,
    483    199,   210,   232,   202,   174,   233,   234,   235,   236,   410,
    484    204,   187,    27,    20,   166,   140,    13,     6,   215,   565,
    485    319,   589,     5,   544,   262,   597,   578,   nil,   nil,   nil,
    486    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   253,   nil,
    487    nil,   nil,   nil,   nil,   309,   nil,   nil,   nil,   nil,   nil,
    488    nil,   nil,   nil,   257,   nil,   nil,   nil,   nil,   273,   nil,
    489    nil,   nil,   nil,   nil,   nil,   255,   382,   nil,   384,   nil,
    490    nil,   nil,   nil,   259,   nil,   nil,   nil,   323,   nil,   nil,
    491    329,   nil,   nil,   nil,   328,   350,   324,   333,   nil,   362,
    492    nil,   370,   376,   nil,   nil,   nil,   nil,   nil,   387,   345,
    493    390,   nil,   256,   357,   nil,   365,   371,   nil,   337,   nil,
    494    nil,   nil,   342,   388,   348,   nil,   331,   nil,   360,   336,
    495    368,   374,   nil,   nil,   nil,   nil,   346,   nil,   nil,   nil,
    496    358,   340,   366,   372,   349,   nil,   nil,   nil,   361,   nil,
    497    369,   375,   nil,   380,   588,   nil,   nil,   nil,   nil,   nil,
    498    nil,   415,   nil,   nil,   nil,   334,   nil,   nil,   339,   nil,
    499    nil,   nil,   nil,   347,   nil,   525,   nil,   359,   nil,   367,
    500    373,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    501    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   416,
    502    nil,   nil,   nil,   470,   nil,   nil,   nil,   nil,   nil,   nil,
    503    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   457,
    504    nil,   nil,   nil,   nil,   nil,   nil,   434,   nil,   nil,   nil,
    505    nil,   nil,   nil,   459,   430,   nil,   nil,   nil,   nil,   nil,
    506    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   460,
    507    477,   nil,   nil,   nil,   442,   nil,   nil,   nil,   nil,   nil,
    508    nil,   nil,   nil,   nil,   nil,   nil,   nil,   467,   nil,   nil,
    509    499,   nil,   487,   432,   488,   nil,   nil,   463,   nil,   nil,
    510    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   469,   nil,
    511    nil,   nil,   nil,   nil,   nil,   494,   nil,   508,   nil,   nil,
    512    nil,   nil,   nil,   490,   nil,   505,   nil,   nil,   nil,   nil,
    513    nil,   nil,   nil,   501,   nil,   465,   nil,   496,   nil,   nil,
    514    nil,   nil,   nil,   522,   nil,   nil,   415,   nil,   nil,   nil,
    515    nil,   nil,   nil,   507,   566,   nil,   nil,   273,   nil,   556,
    516    nil,   nil,   492,   nil,   547,   nil,   nil,   nil,   nil,   nil,
    517    nil,   nil,   503,   nil,   nil,   nil,   524,   nil,   nil,   nil,
    518    nil,   259,   nil,   nil,   nil,   553,   nil,   nil,   nil,   nil,
    519    nil,   nil,   nil,   549,   nil,   nil,   522,   nil,   nil,   nil,
    520    nil,   nil,   nil,   nil,   nil,   nil,   594,   555,   nil,   nil,
    521    273,   nil,    47,   nil,   567,   569,   nil,   572,   nil,   nil,
    522    349,   361,   369,   375,   415,   nil,   nil,   607,   nil,   524,
    523    nil,   nil,   551,   nil,   598,   600,   nil,   nil,   nil,   nil,
     472    90,   116,   164,   160,   202,   313,   118,    40,    46,   413,
     473   193,   104,    40,    55,   119,    63,   173,    62,   132,   128,
     474    65,    90,   315,   122,   523,    60,    23,   110,    86,   111,
     475   100,   613,     3,    91,   408,   532,    65,   622,    57,   273,
     476   624,   618,    51,   126,   609,   124,   174,   131,   622,    86,
     477   108,   139,   314,   217,   219,    59,   312,   222,   106,   224,
     478   479,   226,    74,   209,   220,   221,   183,   223,   186,   225,
     479   201,   227,   228,   190,   575,   204,   132,   176,    72,   196,
     480   178,   474,   101,   205,    22,    13,     2,   135,    69,    52,
     481    31,   195,   208,   198,   200,   203,   185,   207,   189,   177,
     482   179,   181,   184,   188,   192,   131,    63,   194,    62,   232,
     483   197,   199,   233,   234,   235,   236,    40,   211,   174,   182,
     484   407,    26,    19,   170,   140,    11,     5,   180,   215,   565,
     485   588,     4,   544,   598,   256,   319,   577,   nil,   nil,   257,
     486   nil,   nil,   372,   nil,   374,   nil,   nil,   nil,   nil,   nil,
     487   nil,   nil,   nil,   nil,   nil,   nil,   303,   nil,   nil,   nil,
     488   252,   308,   253,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     489   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     490   nil,   nil,   nil,   250,   nil,   nil,   nil,   nil,   nil,   nil,
     491   nil,   249,   nil,   322,   343,   nil,   nil,   353,   359,   344,
     492   nil,   369,   354,   360,   nil,   377,   370,   382,   nil,   nil,
     493   nil,   380,   327,   nil,   385,   nil,   332,   330,   nil,   334,
     494   341,   388,   342,   351,   357,   352,   358,   367,   nil,   368,
     495   383,   nil,   nil,   324,   390,   nil,   329,   nil,   nil,   321,
     496   nil,   nil,   326,   340,   nil,   nil,   350,   356,   nil,   nil,
     497   366,   339,   589,   nil,   349,   355,   nil,   nil,   365,   nil,
     498   nil,   nil,   nil,   412,   nil,   nil,   nil,   nil,   nil,   nil,
     499   nil,   522,   nil,   nil,   nil,   nil,   471,   nil,   nil,   nil,
     500   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     501   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     502   nil,   nil,   nil,   nil,   nil,   448,   nil,   nil,   nil,   nil,
     503   nil,   nil,   450,   nil,   nil,   432,   nil,   nil,   nil,   434,
     504   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     505   418,   nil,   nil,   nil,   nil,   459,   416,   nil,   nil,   nil,
     506   nil,   nil,   461,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     507   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     508   nil,   nil,   nil,   nil,   nil,   nil,   467,   476,   nil,   469,
     509   nil,   nil,   498,   nil,   nil,   nil,   nil,   nil,   nil,   500,
     510   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   465,   nil,
     511   nil,   nil,   507,   nil,   494,   463,   nil,   nil,   496,   509,
     512   nil,   nil,   503,   nil,   nil,   nil,   505,   nil,   nil,   nil,
     513   nil,   489,   nil,   nil,   nil,   492,   nil,   487,   nil,   nil,
     514   nil,   490,   nil,   nil,   nil,   518,   nil,   412,   nil,   nil,
     515   308,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     516   nil,   253,   556,   nil,   nil,   nil,   nil,   nil,   nil,   558,
     517   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   580,
     518   nil,   nil,   520,   nil,   552,   nil,   nil,   nil,   554,   nil,
     519   nil,   nil,   nil,   nil,   nil,   518,   nil,   nil,   nil,   nil,
     520   308,   342,   352,   358,   368,   550,   nil,   nil,   595,   nil,
     521   nil,   548,   nil,   nil,   nil,   nil,    40,   566,   nil,   569,
     522   nil,   571,   nil,   nil,   nil,   nil,   412,   nil,   607,   nil,
     523   nil,   nil,   520,   nil,   nil,   597,   600,   nil,   nil,   nil,
    524524   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    525525   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     
    530530
    531531racc_goto_check = [
    532     56,    80,    23,    34,    15,    22,   103,    82,    23,    24,
    533     15,   114,    83,   108,    77,    81,    58,    48,    71,    61,
    534     26,    65,    70,    55,   104,    14,    59,    23,    56,    54,
    535     86,    23,    68,     1,    51,    53,    59,    50,    57,    39,
    536     14,    54,    84,    80,    59,    53,    37,    68,    56,    82,
    537     87,    55,   104,    36,    83,    25,    67,    81,    20,    52,
    538    108,    18,    73,   108,    70,   108,    74,   108,   108,    75,
    539    108,    76,    86,    26,    17,    78,    79,    71,    16,    85,
    540     65,    13,    12,    11,    84,    10,   109,   109,     9,   109,
    541     58,   109,    87,    61,   109,     8,     7,    89,    90,    91,
    542     92,    93,    94,    95,    96,    23,    97,    98,    99,    23,
    543    100,    15,    56,   101,    56,    56,    56,    56,    56,    48,
    544    102,    85,     6,     5,   105,   107,     4,     3,   111,   112,
    545    108,   113,     2,   115,    80,   126,   128,   nil,   nil,   nil,
    546    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    81,   nil,
    547    nil,   nil,   nil,   nil,    80,   nil,   nil,   nil,   nil,   nil,
    548    nil,   nil,   nil,    86,   nil,   nil,   nil,   nil,    81,   nil,
    549    nil,   nil,   nil,   nil,   nil,    84,    77,   nil,    77,   nil,
    550    nil,   nil,   nil,    87,   nil,   nil,   nil,    82,   nil,   nil,
    551     82,   nil,   nil,   nil,    83,    80,    81,    83,   nil,    80,
    552    nil,    80,    80,   nil,   nil,   nil,   nil,   nil,    80,    81,
    553     80,   nil,    85,    81,   nil,    81,    81,   nil,    86,   nil,
    554    nil,   nil,    86,    81,    86,   nil,    84,   nil,    86,    84,
    555     86,    86,   nil,   nil,   nil,   nil,    84,   nil,   nil,   nil,
    556     84,    87,    84,    84,    87,   nil,   nil,   nil,    87,   nil,
    557     87,    87,   nil,    87,   114,   nil,   nil,   nil,   nil,   nil,
    558    nil,    80,   nil,   nil,   nil,    85,   nil,   nil,    85,   nil,
    559    nil,   nil,   nil,    85,   nil,    24,   nil,    85,   nil,    85,
    560     85,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    561    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    81,
    562    nil,   nil,   nil,   103,   nil,   nil,   nil,   nil,   nil,   nil,
    563    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    80,
    564    nil,   nil,   nil,   nil,   nil,   nil,    86,   nil,   nil,   nil,
    565    nil,   nil,   nil,    80,    84,   nil,   nil,   nil,   nil,   nil,
    566    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    81,
    567     82,   nil,   nil,   nil,    87,   nil,   nil,   nil,   nil,   nil,
    568    nil,   nil,   nil,   nil,   nil,   nil,   nil,    86,   nil,   nil,
    569     80,   nil,    81,    85,    81,   nil,   nil,    84,   nil,   nil,
    570    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    87,   nil,
    571    nil,   nil,   nil,   nil,   nil,    86,   nil,    80,   nil,   nil,
    572    nil,   nil,   nil,    84,   nil,    86,   nil,   nil,   nil,   nil,
    573    nil,   nil,   nil,    84,   nil,    85,   nil,    87,   nil,   nil,
    574    nil,   nil,   nil,    80,   nil,   nil,    80,   nil,   nil,   nil,
    575    nil,   nil,   nil,    87,    22,   nil,   nil,    81,   nil,    80,
    576    nil,   nil,    85,   nil,    81,   nil,   nil,   nil,   nil,   nil,
    577    nil,   nil,    85,   nil,   nil,   nil,    23,   nil,   nil,   nil,
    578    nil,    87,   nil,   nil,   nil,    86,   nil,   nil,   nil,   nil,
    579    nil,   nil,   nil,    84,   nil,   nil,    80,   nil,   nil,   nil,
    580    nil,   nil,   nil,   nil,   nil,   nil,    22,    87,   nil,   nil,
    581     81,   nil,    23,   nil,    15,    23,   nil,    23,   nil,   nil,
    582     87,    87,    87,    87,    80,   nil,   nil,    34,   nil,    23,
    583    nil,   nil,    85,   nil,    80,    80,   nil,   nil,   nil,   nil,
     532    56,    80,    34,    22,   103,    24,    81,    23,    15,   114,
     533    77,    83,    23,    15,    70,    71,   108,    65,    58,    61,
     534    59,    56,    48,    82,    26,    68,    14,    86,    55,    87,
     535   104,    53,     1,    23,    51,    50,    59,    54,    57,    39,
     536    53,    37,    14,    59,    36,    68,    56,    23,    54,    55,
     537    85,   104,    25,   109,   109,    67,    20,   109,    84,   109,
     538    52,   109,    18,    73,   108,   108,    74,   108,    75,   108,
     539    80,   108,   108,    76,    26,    81,    58,    61,    17,    78,
     540    83,    79,    16,    70,    13,    12,    11,    10,     9,     8,
     541     7,    89,    82,    90,    91,    92,    86,    93,    87,    94,
     542    95,    96,    97,    98,    99,    23,    71,   100,    65,    56,
     543   101,   102,    56,    56,    56,    56,    23,    15,    56,    85,
     544    48,     6,     5,   105,   107,     4,     3,    84,   111,   112,
     545   113,     2,   115,   126,    80,   108,   128,   nil,   nil,    81,
     546   nil,   nil,    77,   nil,    77,   nil,   nil,   nil,   nil,   nil,
     547   nil,   nil,   nil,   nil,   nil,   nil,    80,   nil,   nil,   nil,
     548    86,    81,    87,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     549   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     550   nil,   nil,   nil,    85,   nil,   nil,   nil,   nil,   nil,   nil,
     551   nil,    84,   nil,    83,    80,   nil,   nil,    80,    80,    81,
     552   nil,    80,    81,    81,   nil,    80,    81,    80,   nil,   nil,
     553   nil,    81,    86,   nil,    81,   nil,    86,    87,   nil,    87,
     554    86,    83,    87,    86,    86,    87,    87,    86,   nil,    87,
     555    82,   nil,   nil,    85,    82,   nil,    85,   nil,   nil,    84,
     556   nil,   nil,    84,    85,   nil,   nil,    85,    85,   nil,   nil,
     557    85,    84,   114,   nil,    84,    84,   nil,   nil,    84,   nil,
     558   nil,   nil,   nil,    80,   nil,   nil,   nil,   nil,   nil,   nil,
     559   nil,    24,   nil,   nil,   nil,   nil,   103,   nil,   nil,   nil,
     560   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     561   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     562   nil,   nil,   nil,   nil,   nil,    80,   nil,   nil,   nil,   nil,
     563   nil,   nil,    81,   nil,   nil,    86,   nil,   nil,   nil,    87,
     564   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     565    85,   nil,   nil,   nil,   nil,    80,    84,   nil,   nil,   nil,
     566   nil,   nil,    81,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     567   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     568   nil,   nil,   nil,   nil,   nil,   nil,    86,    82,   nil,    87,
     569   nil,   nil,    80,   nil,   nil,   nil,   nil,   nil,   nil,    81,
     570   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    85,   nil,
     571   nil,   nil,    80,   nil,    86,    84,   nil,   nil,    87,    81,
     572   nil,   nil,    86,   nil,   nil,   nil,    87,   nil,   nil,   nil,
     573   nil,    85,   nil,   nil,   nil,    85,   nil,    84,   nil,   nil,
     574   nil,    84,   nil,   nil,   nil,    80,   nil,    80,   nil,   nil,
     575    81,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     576   nil,    87,    80,   nil,   nil,   nil,   nil,   nil,   nil,    81,
     577   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    22,
     578   nil,   nil,    23,   nil,    86,   nil,   nil,   nil,    87,   nil,
     579   nil,   nil,   nil,   nil,   nil,    80,   nil,   nil,   nil,   nil,
     580    81,    87,    87,    87,    87,    85,   nil,   nil,    22,   nil,
     581   nil,    84,   nil,   nil,   nil,   nil,    23,    15,   nil,    23,
     582   nil,    23,   nil,   nil,   nil,   nil,    80,   nil,    34,   nil,
     583   nil,   nil,    23,   nil,   nil,    80,    80,   nil,   nil,   nil,
    584584   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    585585   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
     
    590590
    591591racc_goto_pointer = [
    592    nil,    33,   132,   127,   120,   110,   102,    69,    62,    36,
    593     16,    83,    78,    70,    14,   -24,    25,    21,     8,   nil,
    594   -158,   nil,   -83,   -26,  -207,  -161,  -462,   nil,   nil,   nil,
    595    nil,   nil,   nil,   nil,   -87,   nil,  -550,  -563,   nil,  -174,
    596    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  -199,   nil,
    597   -445,  -278,  -347,  -573,  -584,   -30,   -53,    -4,   -41,   -23,
    598    nil,   -38,   nil,   nil,   nil,   -26,   nil,    10,   -14,   nil,
    599    -38,   -29,   nil,   -44,   -36,   -33,   -31,   -88,   -27,  -326,
    600    -59,   -45,   -53,   -48,   -18,    19,   -30,   -10,   nil,    -5,
    601     -4,    -3,    -2,    -1,     0,     1,     2,     4,     5,     6,
    602      8,    11,    18,   -96,   -29,    30,   nil,    47,   -88,   -63,
    603    nil,   -16,  -386,  -432,  -309,  -352,   nil,   nil,   nil,   nil,
    604    nil,   nil,   nil,   nil,   nil,   nil,  -438,   nil,  -404 ]
     592   nil,    32,   131,   126,   120,   111,   102,    64,    58,    36,
     593    18,    86,    79,    70,    12,   -19,    29,    25,     9,   nil,
     594  -160,   nil,   -81,   -20,  -211,  -164,  -458,   nil,   nil,   nil,
     595   nil,   nil,   nil,   nil,   -87,   nil,  -559,  -568,   nil,  -174,
     596   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  -194,   nil,
     597  -447,  -283,  -348,  -577,  -576,   -25,   -53,     5,   -49,   -21,
     598   nil,   -48,   nil,   nil,   nil,   -23,   nil,    16,   -14,   nil,
     599   -44,   -25,   nil,   -68,   -61,   -59,   -54,  -117,   -48,  -320,
     600   -57,   -52,   -35,   -47,     0,    -8,   -31,   -29,   nil,   -36,
     601   -34,   -33,   -32,   -30,   -28,   -27,   -26,   -25,   -24,   -23,
     602   -20,   -17,   -16,  -123,   -23,    31,   nil,    48,   -83,   -92,
     603   nil,   -15,  -386,  -433,  -311,  -352,   nil,   nil,   nil,   nil,
     604   nil,   nil,   nil,   nil,   nil,   nil,  -439,   nil,  -400 ]
    605605
    606606racc_goto_default = [
    607607   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    608    nil,   nil,   nil,   nil,   nil,   nil,   nil,   542,   nil,    84,
    609    nil,    88,   nil,   142,   nil,   nil,   nil,   527,   528,   530,
    610    532,   534,   537,   539,    93,   541,   nil,   nil,   517,   519,
    611    281,   284,   287,   292,   295,   299,   304,   310,   nil,   314,
    612    nil,   nil,   nil,   nil,   614,   615,   616,    49,    51,    37,
    613     40,   nil,   105,    43,    44,    45,    46,   nil,   nil,    63,
    614    nil,    39,    42,   104,   nil,   nil,   nil,   nil,   nil,   126,
    615     99,    71,   nil,   nil,   279,   282,   285,   289,   124,   298,
    616    303,   308,   nil,   nil,   nil,   nil,   nil,   nil,   291,   294,
    617    297,   302,   307,   271,   nil,    76,    79,    82,    85,    87,
    618     89,    92,   nil,   nil,   nil,   412,   277,   280,   283,   286,
    619    290,   293,   296,   301,   305,   531,   533,   536,   nil ]
     608   nil,   nil,   nil,   nil,   nil,   nil,   nil,   539,   nil,    79,
     609   nil,    84,   nil,   138,   nil,   nil,   nil,   524,   525,   526,
     610   528,   531,   534,   535,    88,   538,   nil,   nil,   540,   542,
     611   276,   279,   282,   287,   290,   294,   298,   304,   nil,   318,
     612   nil,   nil,   nil,   nil,   614,   615,   616,    41,    43,    45,
     613    49,   nil,   130,    36,    37,    38,    39,   nil,   nil,    61,
     614   nil,    47,    33,   129,   nil,   nil,   nil,   nil,   nil,   114,
     615    94,    96,   nil,   nil,   274,   277,   280,   284,   113,   293,
     616   297,   302,   nil,   nil,   nil,   nil,   nil,   nil,   286,   289,
     617   292,   296,   301,   306,   nil,    70,    73,    77,    80,    82,
     618    85,    87,   nil,   nil,   nil,   415,   272,   275,   278,   281,
     619   285,   288,   291,   295,   299,   527,   530,   533,   nil ]
    620620
    621621racc_reduce_table = [
    622622  0, 0, :racc_error,
    623   2, 96, :_reduce_1,
    624   1, 96, :_reduce_none,
    625   8, 97, :_reduce_3,
    626   2, 98, :_reduce_4,
    627   2, 98, :_reduce_5,
    628   1, 106, :_reduce_6,
    629   2, 106, :_reduce_7,
    630   3, 107, :_reduce_8,
    631   1, 108, :_reduce_9,
    632   3, 108, :_reduce_10,
    633   3, 109, :_reduce_11,
    634   1, 109, :_reduce_12,
    635   0, 99, :_reduce_none,
    636   2, 99, :_reduce_14,
     623  2, 94, :_reduce_1,
     624  1, 94, :_reduce_none,
     625  8, 95, :_reduce_3,
     626  2, 96, :_reduce_4,
     627  2, 96, :_reduce_5,
     628  1, 104, :_reduce_6,
     629  2, 104, :_reduce_7,
     630  3, 105, :_reduce_8,
     631  1, 106, :_reduce_9,
     632  3, 106, :_reduce_10,
     633  3, 107, :_reduce_11,
     634  1, 107, :_reduce_12,
     635  0, 97, :_reduce_none,
     636  2, 97, :_reduce_14,
     637  2, 97, :_reduce_none,
     638  2, 98, :_reduce_16,
     639  2, 98, :_reduce_none,
     640  0, 99, :_reduce_18,
     641  2, 99, :_reduce_19,
    637642  2, 99, :_reduce_none,
    638   2, 100, :_reduce_16,
     643  0, 100, :_reduce_none,
     644  2, 100, :_reduce_22,
    639645  2, 100, :_reduce_none,
    640   0, 101, :_reduce_18,
    641   2, 101, :_reduce_19,
     646  2, 101, :_reduce_24,
    642647  2, 101, :_reduce_none,
     648  1, 109, :_reduce_26,
     649  1, 109, :_reduce_27,
     650  5, 110, :_reduce_28,
     651  5, 110, :_reduce_29,
     652  2, 112, :_reduce_30,
     653  1, 114, :_reduce_31,
     654  2, 114, :_reduce_32,
     655  1, 113, :_reduce_none,
     656  1, 113, :_reduce_34,
     657  1, 119, :_reduce_35,
     658  1, 119, :_reduce_36,
     659  1, 119, :_reduce_37,
     660  1, 119, :_reduce_38,
     661  1, 119, :_reduce_39,
     662  1, 119, :_reduce_40,
     663  1, 119, :_reduce_41,
     664  1, 119, :_reduce_42,
     665  1, 119, :_reduce_none,
     666  1, 119, :_reduce_none,
     667  3, 126, :_reduce_45,
     668  4, 120, :_reduce_46,
     669  3, 120, :_reduce_none,
     670  6, 121, :_reduce_48,
     671  2, 128, :_reduce_49,
     672  2, 131, :_reduce_50,
     673  3, 131, :_reduce_none,
     674  2, 131, :_reduce_none,
     675  1, 125, :_reduce_53,
     676  1, 132, :_reduce_54,
     677  1, 132, :_reduce_55,
     678  1, 132, :_reduce_56,
     679  1, 132, :_reduce_57,
     680  1, 132, :_reduce_58,
     681  1, 132, :_reduce_59,
     682  1, 132, :_reduce_60,
     683  1, 132, :_reduce_61,
     684  1, 117, :_reduce_none,
     685  1, 118, :_reduce_63,
     686  2, 118, :_reduce_64,
     687  5, 141, :_reduce_65,
     688  5, 141, :_reduce_66,
     689  5, 141, :_reduce_67,
     690  2, 142, :_reduce_68,
     691  3, 142, :_reduce_69,
     692  1, 143, :_reduce_70,
     693  2, 143, :_reduce_71,
     694  1, 143, :_reduce_72,
     695  0, 129, :_reduce_none,
     696  2, 129, :_reduce_74,
     697  0, 130, :_reduce_none,
     698  2, 130, :_reduce_76,
     699  1, 146, :_reduce_none,
     700  2, 146, :_reduce_none,
     701  3, 147, :_reduce_none,
     702  1, 147, :_reduce_none,
     703  3, 147, :_reduce_none,
    643704  0, 102, :_reduce_none,
    644   2, 102, :_reduce_22,
    645705  2, 102, :_reduce_none,
    646   2, 103, :_reduce_24,
     706  2, 102, :_reduce_none,
     707  2, 103, :_reduce_85,
    647708  2, 103, :_reduce_none,
    648   1, 111, :_reduce_26,
    649   1, 111, :_reduce_27,
    650   5, 112, :_reduce_28,
    651   5, 112, :_reduce_29,
    652   2, 114, :_reduce_30,
    653   1, 116, :_reduce_31,
    654   2, 116, :_reduce_32,
    655   1, 115, :_reduce_none,
    656   1, 115, :_reduce_34,
    657   1, 121, :_reduce_35,
    658   1, 121, :_reduce_36,
    659   1, 121, :_reduce_37,
    660   1, 121, :_reduce_38,
    661   1, 121, :_reduce_39,
    662   1, 121, :_reduce_40,
    663   1, 121, :_reduce_41,
    664   1, 121, :_reduce_42,
    665   1, 121, :_reduce_none,
    666   1, 121, :_reduce_none,
    667   3, 128, :_reduce_45,
    668   4, 122, :_reduce_46,
    669   3, 122, :_reduce_none,
    670   6, 123, :_reduce_48,
    671   2, 130, :_reduce_49,
    672   2, 133, :_reduce_50,
    673   3, 133, :_reduce_none,
    674   2, 133, :_reduce_none,
    675   1, 127, :_reduce_53,
    676   1, 134, :_reduce_54,
    677   1, 134, :_reduce_55,
    678   1, 134, :_reduce_56,
    679   1, 134, :_reduce_57,
    680   1, 134, :_reduce_58,
    681   1, 134, :_reduce_59,
    682   1, 134, :_reduce_60,
    683   1, 134, :_reduce_61,
    684   1, 119, :_reduce_none,
    685   1, 120, :_reduce_63,
    686   2, 120, :_reduce_64,
    687   5, 143, :_reduce_65,
    688   5, 143, :_reduce_66,
    689   5, 143, :_reduce_67,
    690   2, 144, :_reduce_68,
    691   3, 144, :_reduce_69,
    692   1, 145, :_reduce_70,
    693   2, 145, :_reduce_71,
    694   1, 145, :_reduce_72,
    695   0, 131, :_reduce_none,
    696   2, 131, :_reduce_74,
    697   0, 132, :_reduce_none,
    698   2, 132, :_reduce_76,
    699   1, 148, :_reduce_none,
    700   2, 148, :_reduce_none,
    701   3, 149, :_reduce_none,
    702   1, 149, :_reduce_none,
    703   3, 149, :_reduce_none,
    704   0, 104, :_reduce_none,
    705   2, 104, :_reduce_none,
    706   2, 104, :_reduce_none,
    707   2, 105, :_reduce_85,
    708   2, 105, :_reduce_none,
    709   0, 110, :_reduce_none,
    710   1, 110, :_reduce_88,
    711   1, 110, :_reduce_89,
    712   1, 152, :_reduce_90,
    713   2, 152, :_reduce_91,
    714   3, 152, :_reduce_92,
    715   3, 154, :_reduce_93,
    716   1, 155, :_reduce_94,
    717   2, 155, :_reduce_none,
    718   1, 156, :_reduce_96,
    719   1, 156, :_reduce_97,
    720   1, 153, :_reduce_98,
    721   1, 153, :_reduce_99,
    722   1, 159, :_reduce_100,
    723   2, 159, :_reduce_101,
    724   3, 160, :_reduce_102,
    725   1, 161, :_reduce_103,
    726   1, 162, :_reduce_104,
    727   2, 162, :_reduce_105,
    728   3, 163, :_reduce_106,
    729   3, 164, :_reduce_107,
    730   1, 158, :_reduce_108,
    731   2, 158, :_reduce_109,
    732   2, 166, :_reduce_110,
    733   3, 166, :_reduce_111,
    734   1, 167, :_reduce_none,
    735   1, 157, :_reduce_113,
    736   2, 157, :_reduce_114,
    737   3, 168, :_reduce_115,
    738   1, 169, :_reduce_116,
    739   1, 169, :_reduce_117,
    740   1, 169, :_reduce_118,
    741   1, 169, :_reduce_119,
    742   1, 169, :_reduce_120,
    743   1, 165, :_reduce_121,
    744   1, 165, :_reduce_122,
    745   1, 165, :_reduce_123,
    746   1, 165, :_reduce_124,
    747   1, 165, :_reduce_125,
    748   1, 165, :_reduce_126,
    749   1, 165, :_reduce_127,
    750   1, 165, :_reduce_128,
    751   1, 165, :_reduce_129,
    752   1, 165, :_reduce_130,
    753   1, 170, :_reduce_131,
    754   1, 170, :_reduce_132,
    755   1, 170, :_reduce_133,
    756   1, 170, :_reduce_134,
    757   1, 170, :_reduce_135,
    758   1, 170, :_reduce_136,
    759   1, 170, :_reduce_137,
    760   1, 170, :_reduce_138,
    761   1, 170, :_reduce_139,
    762   1, 171, :_reduce_none,
    763   1, 171, :_reduce_none,
    764   1, 171, :_reduce_none,
    765   1, 171, :_reduce_none,
    766   1, 171, :_reduce_none,
    767   1, 171, :_reduce_none,
    768   1, 118, :_reduce_146,
    769   1, 118, :_reduce_147,
    770   1, 174, :_reduce_148,
    771   3, 184, :_reduce_149,
    772   3, 184, :_reduce_150,
    773   3, 184, :_reduce_151,
    774   1, 175, :_reduce_152,
    775   2, 175, :_reduce_153,
    776   2, 175, :_reduce_154,
     709  0, 108, :_reduce_none,
     710  1, 108, :_reduce_88,
     711  1, 108, :_reduce_89,
     712  1, 150, :_reduce_90,
     713  2, 150, :_reduce_91,
     714  3, 150, :_reduce_92,
     715  3, 152, :_reduce_93,
     716  1, 153, :_reduce_94,
     717  2, 153, :_reduce_none,
     718  1, 154, :_reduce_96,
     719  1, 154, :_reduce_97,
     720  1, 151, :_reduce_98,
     721  1, 151, :_reduce_99,
     722  1, 157, :_reduce_100,
     723  2, 157, :_reduce_101,
     724  3, 158, :_reduce_102,
     725  1, 159, :_reduce_103,
     726  1, 160, :_reduce_104,
     727  2, 160, :_reduce_105,
     728  3, 161, :_reduce_106,
     729  3, 162, :_reduce_107,
     730  1, 156, :_reduce_108,
     731  2, 156, :_reduce_109,
     732  2, 164, :_reduce_110,
     733  3, 164, :_reduce_111,
     734  1, 165, :_reduce_none,
     735  1, 155, :_reduce_113,
     736  2, 155, :_reduce_114,
     737  3, 166, :_reduce_115,
     738  1, 167, :_reduce_116,
     739  1, 167, :_reduce_117,
     740  1, 167, :_reduce_118,
     741  1, 167, :_reduce_119,
     742  1, 167, :_reduce_120,
     743  1, 163, :_reduce_121,
     744  1, 163, :_reduce_122,
     745  1, 163, :_reduce_123,
     746  1, 163, :_reduce_124,
     747  1, 163, :_reduce_125,
     748  1, 163, :_reduce_126,
     749  1, 163, :_reduce_127,
     750  1, 163, :_reduce_128,
     751  1, 163, :_reduce_129,
     752  1, 163, :_reduce_130,
     753  1, 168, :_reduce_131,
     754  1, 168, :_reduce_132,
     755  1, 168, :_reduce_133,
     756  1, 168, :_reduce_134,
     757  1, 168, :_reduce_135,
     758  1, 168, :_reduce_136,
     759  1, 168, :_reduce_137,
     760  1, 168, :_reduce_138,
     761  1, 168, :_reduce_139,
     762  1, 169, :_reduce_none,
     763  1, 169, :_reduce_none,
     764  1, 169, :_reduce_none,
     765  1, 169, :_reduce_none,
     766  1, 169, :_reduce_none,
     767  1, 169, :_reduce_none,
     768  1, 116, :_reduce_146,
     769  1, 116, :_reduce_147,
     770  1, 172, :_reduce_148,
     771  3, 182, :_reduce_149,
     772  3, 182, :_reduce_150,
     773  3, 182, :_reduce_151,
     774  1, 173, :_reduce_152,
     775  2, 173, :_reduce_153,
     776  2, 173, :_reduce_154,
     777  3, 183, :_reduce_none,
     778  3, 183, :_reduce_none,
     779  3, 183, :_reduce_none,
     780  5, 191, :_reduce_none,
     781  6, 191, :_reduce_none,
     782  6, 191, :_reduce_none,
     783  7, 191, :_reduce_none,
     784  4, 191, :_reduce_none,
     785  4, 191, :_reduce_none,
     786  4, 191, :_reduce_none,
     787  4, 191, :_reduce_none,
     788  3, 191, :_reduce_none,
     789  1, 174, :_reduce_167,
     790  2, 174, :_reduce_168,
     791  2, 174, :_reduce_169,
     792  3, 184, :_reduce_none,
     793  3, 184, :_reduce_none,
     794  3, 184, :_reduce_none,
     795  5, 192, :_reduce_none,
     796  6, 192, :_reduce_none,
     797  6, 192, :_reduce_none,
     798  7, 192, :_reduce_none,
     799  4, 192, :_reduce_none,
     800  4, 192, :_reduce_none,
     801  4, 192, :_reduce_none,
     802  4, 192, :_reduce_none,
     803  3, 192, :_reduce_none,
     804  1, 175, :_reduce_182,
     805  1, 175, :_reduce_183,
    777806  3, 185, :_reduce_none,
    778807  3, 185, :_reduce_none,
    779808  3, 185, :_reduce_none,
     809  1, 176, :_reduce_none,
     810  3, 186, :_reduce_none,
     811  3, 186, :_reduce_none,
     812  3, 186, :_reduce_none,
     813  1, 177, :_reduce_191,
     814  3, 187, :_reduce_none,
     815  3, 187, :_reduce_none,
     816  3, 187, :_reduce_none,
    780817  5, 193, :_reduce_none,
    781818  6, 193, :_reduce_none,
     
    787824  4, 193, :_reduce_none,
    788825  3, 193, :_reduce_none,
    789   1, 176, :_reduce_167,
    790   2, 176, :_reduce_168,
    791   2, 176, :_reduce_169,
    792   3, 186, :_reduce_none,
    793   3, 186, :_reduce_none,
    794   3, 186, :_reduce_none,
     826  1, 178, :_reduce_none,
     827  3, 188, :_reduce_none,
     828  3, 188, :_reduce_none,
     829  3, 188, :_reduce_none,
    795830  5, 194, :_reduce_none,
    796831  6, 194, :_reduce_none,
     
    802837  4, 194, :_reduce_none,
    803838  3, 194, :_reduce_none,
    804   1, 177, :_reduce_182,
    805   1, 177, :_reduce_183,
    806   3, 187, :_reduce_none,
    807   3, 187, :_reduce_none,
    808   3, 187, :_reduce_none,
    809   1, 178, :_reduce_none,
    810   3, 188, :_reduce_none,
    811   3, 188, :_reduce_none,
    812   3, 188, :_reduce_none,
    813   1, 179, :_reduce_191,
     839  1, 179, :_reduce_217,
    814840  3, 189, :_reduce_none,
    815841  3, 189, :_reduce_none,
     
    824850  4, 195, :_reduce_none,
    825851  3, 195, :_reduce_none,
    826   1, 180, :_reduce_none,
     852  1, 180, :_reduce_230,
    827853  3, 190, :_reduce_none,
    828854  3, 190, :_reduce_none,
     
    837863  4, 196, :_reduce_none,
    838864  3, 196, :_reduce_none,
    839   1, 181, :_reduce_none,
    840   3, 191, :_reduce_none,
    841   3, 191, :_reduce_none,
    842   3, 191, :_reduce_none,
    843   5, 197, :_reduce_none,
    844   6, 197, :_reduce_none,
    845   6, 197, :_reduce_none,
    846   7, 197, :_reduce_none,
    847   4, 197, :_reduce_none,
    848   4, 197, :_reduce_none,
    849   4, 197, :_reduce_none,
    850   4, 197, :_reduce_none,
     865  1, 170, :_reduce_243,
     866  3, 171, :_reduce_none,
     867  3, 171, :_reduce_none,
     868  3, 171, :_reduce_none,
     869  1, 181, :_reduce_247,
     870  1, 111, :_reduce_none,
     871  2, 111, :_reduce_none,
    851872  3, 197, :_reduce_none,
    852   1, 182, :_reduce_230,
    853   3, 192, :_reduce_none,
    854   3, 192, :_reduce_none,
    855   3, 192, :_reduce_none,
    856   5, 198, :_reduce_none,
    857   6, 198, :_reduce_none,
    858   6, 198, :_reduce_none,
    859   7, 198, :_reduce_none,
    860   4, 198, :_reduce_none,
    861   4, 198, :_reduce_none,
    862   4, 198, :_reduce_none,
    863   4, 198, :_reduce_none,
     873  1, 197, :_reduce_none,
     874  3, 197, :_reduce_none,
     875  1, 149, :_reduce_none,
     876  1, 149, :_reduce_none,
     877  2, 199, :_reduce_none,
     878  2, 199, :_reduce_none,
     879  5, 199, :_reduce_none,
     880  5, 199, :_reduce_none,
     881  2, 199, :_reduce_none,
     882  3, 199, :_reduce_none,
     883  3, 199, :_reduce_none,
     884  3, 199, :_reduce_none,
     885  3, 199, :_reduce_none,
     886  3, 199, :_reduce_none,
     887  3, 199, :_reduce_none,
     888  3, 199, :_reduce_none,
     889  3, 199, :_reduce_none,
     890  3, 199, :_reduce_none,
     891  3, 199, :_reduce_none,
    864892  3, 198, :_reduce_none,
    865   1, 172, :_reduce_243,
    866   3, 173, :_reduce_none,
    867   3, 173, :_reduce_none,
    868   3, 173, :_reduce_none,
    869   1, 183, :_reduce_247,
    870   1, 113, :_reduce_none,
    871   2, 113, :_reduce_none,
    872   3, 199, :_reduce_none,
    873   1, 199, :_reduce_none,
    874   3, 199, :_reduce_none,
    875   1, 151, :_reduce_none,
    876   1, 151, :_reduce_none,
    877   2, 201, :_reduce_none,
    878   2, 201, :_reduce_none,
    879   5, 201, :_reduce_none,
    880   5, 201, :_reduce_none,
    881   2, 201, :_reduce_none,
    882   3, 201, :_reduce_none,
    883   3, 201, :_reduce_none,
    884   3, 201, :_reduce_none,
    885   3, 201, :_reduce_none,
    886   3, 201, :_reduce_none,
    887   3, 201, :_reduce_none,
    888   3, 201, :_reduce_none,
    889   3, 201, :_reduce_none,
    890   3, 201, :_reduce_none,
    891   3, 201, :_reduce_none,
     893  1, 198, :_reduce_none,
     894  1, 198, :_reduce_none,
     895  1, 201, :_reduce_none,
     896  1, 201, :_reduce_none,
     897  3, 203, :_reduce_none,
     898  3, 203, :_reduce_none,
     899  3, 203, :_reduce_none,
     900  3, 203, :_reduce_none,
     901  3, 203, :_reduce_none,
     902  3, 202, :_reduce_none,
     903  1, 202, :_reduce_none,
     904  1, 202, :_reduce_none,
     905  1, 202, :_reduce_none,
     906  1, 127, :_reduce_none,
     907  2, 127, :_reduce_none,
     908  1, 200, :_reduce_none,
    892909  3, 200, :_reduce_none,
    893   1, 200, :_reduce_none,
    894   1, 200, :_reduce_none,
    895   1, 203, :_reduce_none,
    896   1, 203, :_reduce_none,
    897   3, 205, :_reduce_none,
    898   3, 205, :_reduce_none,
    899   3, 205, :_reduce_none,
    900   3, 205, :_reduce_none,
    901   3, 205, :_reduce_none,
    902   3, 204, :_reduce_none,
    903   1, 204, :_reduce_none,
    904   1, 204, :_reduce_none,
    905   1, 204, :_reduce_none,
    906   1, 129, :_reduce_none,
    907   2, 129, :_reduce_none,
    908   1, 202, :_reduce_none,
    909   3, 202, :_reduce_none,
    910   2, 206, :_reduce_288,
    911   1, 206, :_reduce_289,
    912   0, 146, :_reduce_290,
    913   5, 146, :_reduce_291,
    914   1, 207, :_reduce_292,
    915   3, 207, :_reduce_293,
    916   5, 147, :_reduce_294,
    917   1, 208, :_reduce_none,
    918   3, 208, :_reduce_none,
    919   3, 208, :_reduce_none,
    920   3, 208, :_reduce_none,
    921   5, 208, :_reduce_none,
    922   5, 208, :_reduce_none,
    923   5, 208, :_reduce_none,
    924   5, 208, :_reduce_none,
    925   1, 210, :_reduce_303,
    926   1, 210, :_reduce_304,
    927   0, 117, :_reduce_none,
    928   5, 117, :_reduce_306,
    929   2, 117, :_reduce_none,
    930   1, 209, :_reduce_308,
    931   3, 209, :_reduce_309,
     910  2, 204, :_reduce_288,
     911  1, 204, :_reduce_289,
     912  0, 144, :_reduce_290,
     913  5, 144, :_reduce_291,
     914  1, 205, :_reduce_292,
     915  3, 205, :_reduce_293,
     916  5, 145, :_reduce_294,
     917  1, 206, :_reduce_none,
     918  3, 206, :_reduce_none,
     919  3, 206, :_reduce_none,
     920  3, 206, :_reduce_none,
     921  5, 206, :_reduce_none,
     922  5, 206, :_reduce_none,
     923  5, 206, :_reduce_none,
     924  5, 206, :_reduce_none,
     925  1, 208, :_reduce_303,
     926  1, 208, :_reduce_304,
     927  0, 115, :_reduce_none,
     928  5, 115, :_reduce_306,
     929  2, 115, :_reduce_none,
     930  1, 207, :_reduce_308,
     931  3, 207, :_reduce_309,
     932  1, 209, :_reduce_none,
     933  1, 209, :_reduce_none,
     934  1, 209, :_reduce_none,
     935  1, 133, :_reduce_none,
     936  3, 133, :_reduce_none,
     937  3, 133, :_reduce_none,
     938  1, 210, :_reduce_none,
     939  1, 210, :_reduce_none,
     940  1, 210, :_reduce_none,
     941  1, 134, :_reduce_none,
     942  3, 134, :_reduce_none,
     943  3, 134, :_reduce_none,
    932944  1, 211, :_reduce_none,
    933945  1, 211, :_reduce_none,
     
    949961  3, 137, :_reduce_none,
    950962  1, 214, :_reduce_none,
     963  3, 214, :_reduce_none,
    951964  1, 214, :_reduce_none,
    952965  1, 214, :_reduce_none,
     
    954967  3, 138, :_reduce_none,
    955968  3, 138, :_reduce_none,
    956   1, 215, :_reduce_none,
    957   1, 215, :_reduce_none,
    958   1, 215, :_reduce_none,
     969  1, 216, :_reduce_none,
     970  1, 216, :_reduce_none,
     971  3, 216, :_reduce_none,
    959972  1, 139, :_reduce_none,
    960973  3, 139, :_reduce_none,
    961974  3, 139, :_reduce_none,
    962   1, 216, :_reduce_none,
    963   3, 216, :_reduce_none,
    964   1, 216, :_reduce_none,
    965   1, 216, :_reduce_none,
    966   1, 140, :_reduce_none,
    967   3, 140, :_reduce_none,
    968   3, 140, :_reduce_none,
    969   1, 218, :_reduce_none,
     975  1, 217, :_reduce_353,
     976  1, 217, :_reduce_354,
     977  3, 217, :_reduce_355,
     978  3, 217, :_reduce_356,
     979  1, 140, :_reduce_357,
     980  3, 140, :_reduce_358,
     981  3, 140, :_reduce_359,
     982  1, 124, :_reduce_none,
     983  3, 124, :_reduce_none,
     984  3, 124, :_reduce_none,
    970985  1, 218, :_reduce_none,
    971986  3, 218, :_reduce_none,
    972   1, 141, :_reduce_none,
    973   3, 141, :_reduce_none,
    974   3, 141, :_reduce_none,
    975   1, 219, :_reduce_353,
    976   1, 219, :_reduce_354,
    977   3, 219, :_reduce_355,
    978   3, 219, :_reduce_356,
    979   1, 142, :_reduce_357,
    980   3, 142, :_reduce_358,
    981   3, 142, :_reduce_359,
    982   1, 126, :_reduce_none,
    983   3, 126, :_reduce_none,
    984   3, 126, :_reduce_none,
    985   1, 220, :_reduce_none,
    986   3, 220, :_reduce_none,
    987   3, 221, :_reduce_365,
    988   1, 125, :_reduce_366,
    989   1, 125, :_reduce_367,
    990   3, 222, :_reduce_368,
    991   0, 223, :_reduce_none,
    992   1, 223, :_reduce_none,
    993   2, 223, :_reduce_none,
    994   1, 124, :_reduce_372,
    995   1, 150, :_reduce_373,
    996   1, 150, :_reduce_374,
    997   1, 217, :_reduce_375 ]
     987  3, 219, :_reduce_365,
     988  1, 123, :_reduce_366,
     989  1, 123, :_reduce_367,
     990  3, 220, :_reduce_368,
     991  0, 221, :_reduce_none,
     992  1, 221, :_reduce_none,
     993  2, 221, :_reduce_none,
     994  1, 122, :_reduce_372,
     995  1, 148, :_reduce_373,
     996  1, 148, :_reduce_374,
     997  1, 215, :_reduce_375 ]
    998998
    999999racc_reduce_n = 376
     
    10371037  :c_complx_object_head => 33,
    10381038  :SYM_MATCHES => 34,
    1039   :START_REGEXP_BLOCK => 35,
     1039  :Slash_code => 35,
    10401040  :REGEXP_BODY => 36,
    1041   :END_REGEXP_BLOCK => 37,
    1042   :ERR_C_DOMAIN_TYPE => 38,
    1043   :START_V_C_DOMAIN_TYPE_BLOCK => 39,
    1044   :END_V_C_DOMAIN_TYPE_BLOCK => 40,
    1045   :SYM_USE_NODE => 41,
    1046   :SYM_ALLOW_ARCHETYPE => 42,
    1047   :Star_code => 43,
    1048   :V_ATTRIBUTE_IDENTIFIER => 44,
    1049   :SYM_INCLUDE => 45,
    1050   :SYM_EXCLUDE => 46,
    1051   ":" => 47,
    1052   :SYM_INVARIANT => 48,
    1053   :V_ASSERTION_TEXT => 49,
    1054   :SYM_ONTOLOGY => 50,
    1055   :Left_bracket_code => 51,
    1056   :Right_bracket_code => 52,
    1057   :V_TYPE_IDENTIFIER => 53,
    1058   :V_GENERIC_TYPE_IDENTIFIER => 54,
    1059   :V_STRING => 55,
    1060   :Comma_code => 56,
    1061   :SYM_LIST_CONTINUE => 57,
    1062   :V_INTEGER => 58,
    1063   :Plus_code => 59,
    1064   :Minus_code => 60,
    1065   :SYM_INTERVAL_DELIM => 61,
    1066   :SYM_ELLIPSIS => 62,
    1067   :V_REAL => 63,
    1068   :SYM_TRUE => 64,
    1069   :SYM_FALSE => 65,
    1070   :V_CHARACTER => 66,
    1071   :V_ISO8601_EXTENDED_DATE => 67,
    1072   :V_ISO8601_EXTENDED_TIME => 68,
    1073   :V_ISO8601_EXTENDED_DATE_TIME => 69,
    1074   :V_ISO8601_DURATION => 70,
    1075   :V_QUALIFIED_TERM_CODE_REF => 71,
    1076   :V_URI => 72,
    1077   :SYM_EXISTS => 73,
    1078   :SYM_NOT => 74,
    1079   "=" => 75,
    1080   :SYM_AND => 76,
    1081   :SYM_OR => 77,
    1082   :SYM_XOR => 78,
    1083   :SYM_IMPLIES => 79,
    1084   :Slash_code => 80,
    1085   "^" => 81,
    1086   :SYM_EXISTENCE => 82,
    1087   :SYM_CARDINALITY => 83,
    1088   :SYM_ORDERED => 84,
    1089   :SYM_UNORDERED => 85,
    1090   :SYM_UNIQUE => 86,
    1091   :SYM_OCCURRENCES => 87,
    1092   :V_ISO8601_DATE_CONSTRAINT_PATTERN => 88,
    1093   :V_ISO8601_TIME_CONSTRAINT_PATTERN => 89,
    1094   :V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN => 90,
    1095   :START_TERM_CODE_CONSTRAINT => 91,
    1096   :END_TERM_CODE_CONSTRAINT => 92,
    1097   :TERM_CODE => 93,
    1098   :V_ISO8601_DURATION_CONSTRAINT_PATTERN => 94 }
    1099 
    1100 racc_nt_base = 95
     1041  :ERR_C_DOMAIN_TYPE => 37,
     1042  :START_V_C_DOMAIN_TYPE_BLOCK => 38,
     1043  :END_V_C_DOMAIN_TYPE_BLOCK => 39,
     1044  :SYM_USE_NODE => 40,
     1045  :SYM_ALLOW_ARCHETYPE => 41,
     1046  :Star_code => 42,
     1047  :V_ATTRIBUTE_IDENTIFIER => 43,
     1048  :SYM_INCLUDE => 44,
     1049  :SYM_EXCLUDE => 45,
     1050  ":" => 46,
     1051  :SYM_INVARIANT => 47,
     1052  :V_ASSERTION_TEXT => 48,
     1053  :SYM_ONTOLOGY => 49,
     1054  :Left_bracket_code => 50,
     1055  :Right_bracket_code => 51,
     1056  :V_TYPE_IDENTIFIER => 52,
     1057  :V_GENERIC_TYPE_IDENTIFIER => 53,
     1058  :V_STRING => 54,
     1059  :Comma_code => 55,
     1060  :SYM_LIST_CONTINUE => 56,
     1061  :V_INTEGER => 57,
     1062  :Plus_code => 58,
     1063  :Minus_code => 59,
     1064  :SYM_INTERVAL_DELIM => 60,
     1065  :SYM_ELLIPSIS => 61,
     1066  :V_REAL => 62,
     1067  :SYM_TRUE => 63,
     1068  :SYM_FALSE => 64,
     1069  :V_CHARACTER => 65,
     1070  :V_ISO8601_EXTENDED_DATE => 66,
     1071  :V_ISO8601_EXTENDED_TIME => 67,
     1072  :V_ISO8601_EXTENDED_DATE_TIME => 68,
     1073  :V_ISO8601_DURATION => 69,
     1074  :V_QUALIFIED_TERM_CODE_REF => 70,
     1075  :V_URI => 71,
     1076  :SYM_EXISTS => 72,
     1077  :SYM_NOT => 73,
     1078  "=" => 74,
     1079  :SYM_AND => 75,
     1080  :SYM_OR => 76,
     1081  :SYM_XOR => 77,
     1082  :SYM_IMPLIES => 78,
     1083  "^" => 79,
     1084  :SYM_EXISTENCE => 80,
     1085  :SYM_CARDINALITY => 81,
     1086  :SYM_ORDERED => 82,
     1087  :SYM_UNORDERED => 83,
     1088  :SYM_UNIQUE => 84,
     1089  :SYM_OCCURRENCES => 85,
     1090  :V_ISO8601_DATE_CONSTRAINT_PATTERN => 86,
     1091  :V_ISO8601_TIME_CONSTRAINT_PATTERN => 87,
     1092  :V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN => 88,
     1093  :START_TERM_CODE_CONSTRAINT => 89,
     1094  :END_TERM_CODE_CONSTRAINT => 90,
     1095  :TERM_CODE => 91,
     1096  :V_ISO8601_DURATION_CONSTRAINT_PATTERN => 92 }
     1097
     1098racc_nt_base = 93
    11011099
    11021100racc_use_result_var = true
     
    11541152  "c_complx_object_head",
    11551153  "SYM_MATCHES",
    1156   "START_REGEXP_BLOCK",
     1154  "Slash_code",
    11571155  "REGEXP_BODY",
    1158   "END_REGEXP_BLOCK",
    11591156  "ERR_C_DOMAIN_TYPE",
    11601157  "START_V_C_DOMAIN_TYPE_BLOCK",
     
    11991196  "SYM_XOR",
    12001197  "SYM_IMPLIES",
    1201   "Slash_code",
    12021198  "\"^\"",
    12031199  "SYM_EXISTENCE",
     
    15411537.,.,
    15421538
    1543 module_eval(<<'.,.,', 'parser.y', 168)
     1539module_eval(<<'.,.,', 'parser.y', 169)
    15441540  def _reduce_28(val, _values, result)
    15451541        result = OpenEhr::AM::Archetype::ConstraintModel::C_COMPLEX_OBJECT.create(:attributes => val[3]) do |c_complex_object|
     
    15531549.,.,
    15541550
    1555 module_eval(<<'.,.,', 'parser.y', 176)
     1551module_eval(<<'.,.,', 'parser.y', 177)
    15561552  def _reduce_29(val, _values, result)
    15571553        result = OpenEhr::AM::Archetype::ConstraintModel::C_COMPLEX_OBJECT.create(:attributes => val[3]) do |c_complex_object|
     
    15651561.,.,
    15661562
    1567 module_eval(<<'.,.,', 'parser.y', 187)
     1563module_eval(<<'.,.,', 'parser.y', 188)
    15681564  def _reduce_30(val, _values, result)
    15691565        result = {:c_complex_object_id => val[0], :c_occurrences => val[1]}
     
    15731569.,.,
    15741570
    1575 module_eval(<<'.,.,', 'parser.y', 192)
     1571module_eval(<<'.,.,', 'parser.y', 193)
    15761572  def _reduce_31(val, _values, result)
    15771573        result = {:type_identifier => val[0]}
     
    15811577.,.,
    15821578
    1583 module_eval(<<'.,.,', 'parser.y', 196)
     1579module_eval(<<'.,.,', 'parser.y', 197)
    15841580  def _reduce_32(val, _values, result)
    15851581        result = {:type_identifier => val[0], :local_term_code_ref => val[1]}
     
    15911587# reduce 33 omitted
    15921588
    1593 module_eval(<<'.,.,', 'parser.y', 202)
     1589module_eval(<<'.,.,', 'parser.y', 203)
    15941590  def _reduce_34(val, _values, result)
    15951591        result = OpenEhr::AM::Archetype::ConstraintModel::C_COMPLEX_OBJECT.new(:attributes => val[0])
     
    15991595.,.,
    16001596
    1601 module_eval(<<'.,.,', 'parser.y', 220)
     1597module_eval(<<'.,.,', 'parser.y', 221)
    16021598  def _reduce_35(val, _values, result)
    16031599        @@logger.debug("#{__FILE__}:#{__LINE__}: c_complex_object = #{val[0].inspect} at #{@filename}:#{@lineno}")
     
    16081604.,.,
    16091605
    1610 module_eval(<<'.,.,', 'parser.y', 225)
     1606module_eval(<<'.,.,', 'parser.y', 226)
    16111607  def _reduce_36(val, _values, result)
    16121608        result = OpenEhr::AM::Archetype::ConstraintModel::ARCHETYPE_INTERNAL_REF.create do |archetype_internal_ref|
     
    16201616.,.,
    16211617
    1622 module_eval(<<'.,.,', 'parser.y', 233)
     1618module_eval(<<'.,.,', 'parser.y', 234)
    16231619  def _reduce_37(val, _values, result)
    16241620        result = val[0]
     
    16281624.,.,
    16291625
    1630 module_eval(<<'.,.,', 'parser.y', 237)
     1626module_eval(<<'.,.,', 'parser.y', 238)
    16311627  def _reduce_38(val, _values, result)
    16321628        result = OpenEhr::AM::Archetype::ConstraintModel::CONSTRAINT_REF.create do |constraint_ref|
     
    16381634.,.,
    16391635
    1640 module_eval(<<'.,.,', 'parser.y', 243)
     1636module_eval(<<'.,.,', 'parser.y', 244)
    16411637  def _reduce_39(val, _values, result)
    16421638        result = val[0]
     
    16461642.,.,
    16471643
    1648 module_eval(<<'.,.,', 'parser.y', 247)
     1644module_eval(<<'.,.,', 'parser.y', 248)
    16491645  def _reduce_40(val, _values, result)
    16501646        result = val[0]
     
    16541650.,.,
    16551651
    1656 module_eval(<<'.,.,', 'parser.y', 251)
     1652module_eval(<<'.,.,', 'parser.y', 252)
    16571653  def _reduce_41(val, _values, result)
    16581654        result = val[0]
     
    16621658.,.,
    16631659
    1664 module_eval(<<'.,.,', 'parser.y', 255)
     1660module_eval(<<'.,.,', 'parser.y', 256)
    16651661  def _reduce_42(val, _values, result)
    16661662        result = val[0]
     
    16741670# reduce 44 omitted
    16751671
    1676 module_eval(<<'.,.,', 'parser.y', 288)
     1672module_eval(<<'.,.,', 'parser.y', 289)
    16771673  def _reduce_45(val, _values, result)
    16781674        result = val[1]
     
    16821678.,.,
    16831679
    1684 module_eval(<<'.,.,', 'parser.y', 294)
     1680module_eval(<<'.,.,', 'parser.y', 295)
    16851681  def _reduce_46(val, _values, result)
    16861682        result = {:type_identifier => val[1], :c_occurrences => val[2], :absolute_path => val[3] }
     
    16921688# reduce 47 omitted
    16931689
    1694 module_eval(<<'.,.,', 'parser.y', 301)
     1690module_eval(<<'.,.,', 'parser.y', 302)
    16951691  def _reduce_48(val, _values, result)
    16961692        result = OpenEhr::AM::Archetype::ConstraintModel::ARCHETYPE_SLOT.create do |archetype_slot|
     
    17051701.,.,
    17061702
    1707 module_eval(<<'.,.,', 'parser.y', 310)
     1703module_eval(<<'.,.,', 'parser.y', 311)
    17081704  def _reduce_49(val, _values, result)
    17091705        result = {:c_archetype_slot_id => val[0],:c_occurrences => val[1]}
     
    17131709.,.,
    17141710
    1715 module_eval(<<'.,.,', 'parser.y', 315)
     1711module_eval(<<'.,.,', 'parser.y', 316)
    17161712  def _reduce_50(val, _values, result)
    17171713        result = val[1]
     
    17251721# reduce 52 omitted
    17261722
    1727 module_eval(<<'.,.,', 'parser.y', 323)
     1723module_eval(<<'.,.,', 'parser.y', 324)
    17281724  def _reduce_53(val, _values, result)
    17291725        assert_at(__FILE__,__LINE__){val[0].kind_of?(OpenEhr::AM::Archetype::ConstraintModel::Primitive::C_PRIMITIVE)}
     
    17361732.,.,
    17371733
    1738 module_eval(<<'.,.,', 'parser.y', 331)
     1734module_eval(<<'.,.,', 'parser.y', 332)
    17391735  def _reduce_54(val, _values, result)
    17401736        @@logger.debug("#{__FILE__}:#{__LINE__}: c_integer = #{val[0]} at #{@filename}:#{@lineno}")
     
    17491745.,.,
    17501746
    1751 module_eval(<<'.,.,', 'parser.y', 340)
     1747module_eval(<<'.,.,', 'parser.y', 341)
    17521748  def _reduce_55(val, _values, result)
    17531749        @@logger.debug("#{__FILE__}:#{__LINE__}: c_real = #{val[0]} at #{@filename}:#{@lineno}")
     
    17581754.,.,
    17591755
    1760 module_eval(<<'.,.,', 'parser.y', 345)
     1756module_eval(<<'.,.,', 'parser.y', 346)
    17611757  def _reduce_56(val, _values, result)
    17621758        @@logger.debug("#{__FILE__}:#{__LINE__}: c_date = #{val[0]} at #{@filename}:#{@lineno}")
     
    17671763.,.,
    17681764
    1769 module_eval(<<'.,.,', 'parser.y', 350)
     1765module_eval(<<'.,.,', 'parser.y', 351)
    17701766  def _reduce_57(val, _values, result)
    17711767        @@logger.debug("#{__FILE__}:#{__LINE__}: c_time = #{val[0]} at #{@filename}:#{@lineno}")
     
    17761772.,.,
    17771773
    1778 module_eval(<<'.,.,', 'parser.y', 355)
     1774module_eval(<<'.,.,', 'parser.y', 356)
    17791775  def _reduce_58(val, _values, result)
    17801776        @@logger.debug("#{__FILE__}:#{__LINE__}: c_date_time = #{val[0]} at #{@filename}:#{@lineno}")
     
    17851781.,.,
    17861782
    1787 module_eval(<<'.,.,', 'parser.y', 360)
     1783module_eval(<<'.,.,', 'parser.y', 361)
    17881784  def _reduce_59(val, _values, result)
    17891785        @@logger.debug("#{__FILE__}:#{__LINE__}: c_duration = #{val[0]} at #{@filename}:#{@lineno}")
     
    17941790.,.,
    17951791
    1796 module_eval(<<'.,.,', 'parser.y', 365)
     1792module_eval(<<'.,.,', 'parser.y', 366)
    17971793  def _reduce_60(val, _values, result)
    17981794        @@logger.debug("#{__FILE__}:#{__LINE__}: c_string = #{val[0]} at #{@filename}:#{@lineno}")
     
    18031799.,.,
    18041800
    1805 module_eval(<<'.,.,', 'parser.y', 370)
     1801module_eval(<<'.,.,', 'parser.y', 371)
    18061802  def _reduce_61(val, _values, result)
    18071803        assert_at(__FILE__,__LINE__){val[0].instance_of?(OpenEhr::AM::Archetype::ConstraintModel::Primitive::C_BOOLEAN)}
     
    18151811# reduce 62 omitted
    18161812
    1817 module_eval(<<'.,.,', 'parser.y', 382)
     1813module_eval(<<'.,.,', 'parser.y', 383)
    18181814  def _reduce_63(val, _values, result)
    18191815        result = [val[0]]
     
    18231819.,.,
    18241820
    1825 module_eval(<<'.,.,', 'parser.y', 386)
     1821module_eval(<<'.,.,', 'parser.y', 387)
    18261822  def _reduce_64(val, _values, result)
    18271823        result = (val[0] << val[1])
     
    18311827.,.,
    18321828
    1833 module_eval(<<'.,.,', 'parser.y', 392)
     1829module_eval(<<'.,.,', 'parser.y', 393)
    18341830  def _reduce_65(val, _values, result)
    18351831        assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEhr::AM::Archetype::ConstraintModel::C_ATTRIBUTE)}
     
    18421838.,.,
    18431839
    1844 module_eval(<<'.,.,', 'parser.y', 399)
     1840module_eval(<<'.,.,', 'parser.y', 401)
    18451841  def _reduce_66(val, _values, result)
    18461842        assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEhr::AM::Archetype::ConstraintModel::C_ATTRIBUTE)}
     
    18511847.,.,
    18521848
    1853 module_eval(<<'.,.,', 'parser.y', 404)
     1849module_eval(<<'.,.,', 'parser.y', 406)
    18541850  def _reduce_67(val, _values, result)
    18551851        assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEhr::AM::Archetype::ConstraintModel::C_ATTRIBUTE)}
     
    18601856.,.,
    18611857
    1862 module_eval(<<'.,.,', 'parser.y', 411)
     1858module_eval(<<'.,.,', 'parser.y', 413)
    18631859  def _reduce_68(val, _values, result)
    18641860        @@logger.debug("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]}, c_existence = #{val[1]} at #{@filename}")
     
    18731869.,.,
    18741870
    1875 module_eval(<<'.,.,', 'parser.y', 420)
     1871module_eval(<<'.,.,', 'parser.y', 422)
    18761872  def _reduce_69(val, _values, result)
    18771873        assert_at(__FILE__,__LINE__){ val[2].instance_of?(OpenEhr::AM::Archetype::ConstraintModel::CARDINALITY) }
     
    18871883.,.,
    18881884
    1889 module_eval(<<'.,.,', 'parser.y', 431)
     1885module_eval(<<'.,.,', 'parser.y', 433)
    18901886  def _reduce_70(val, _values, result)
    18911887        result = Array[val[0]]
     
    18951891.,.,
    18961892
    1897 module_eval(<<'.,.,', 'parser.y', 435)
     1893module_eval(<<'.,.,', 'parser.y', 437)
    18981894  def _reduce_71(val, _values, result)
    18991895        result = (val[0] << val[1])
     
    19031899.,.,
    19041900
    1905 module_eval(<<'.,.,', 'parser.y', 439)
     1901module_eval(<<'.,.,', 'parser.y', 441)
    19061902  def _reduce_72(val, _values, result)
    19071903        result = Array[val[0]]
     
    19131909# reduce 73 omitted
    19141910
    1915 module_eval(<<'.,.,', 'parser.y', 447)
     1911module_eval(<<'.,.,', 'parser.y', 449)
    19161912  def _reduce_74(val, _values, result)
    19171913        result = val[1]
     
    19231919# reduce 75 omitted
    19241920
    1925 module_eval(<<'.,.,', 'parser.y', 455)
     1921module_eval(<<'.,.,', 'parser.y', 457)
    19261922  def _reduce_76(val, _values, result)
    19271923        result = val[1]
     
    19471943# reduce 84 omitted
    19481944
    1949 module_eval(<<'.,.,', 'parser.y', 475)
     1945module_eval(<<'.,.,', 'parser.y', 477)
    19501946  def _reduce_85(val, _values, result)
    19511947        dadl_section = val[1]
     
    19601956# reduce 87 omitted
    19611957
    1962 module_eval(<<'.,.,', 'parser.y', 485)
     1958module_eval(<<'.,.,', 'parser.y', 487)
    19631959  def _reduce_88(val, _values, result)
    19641960        @@logger.debug("#{__FILE__}:#{__LINE__}:dadl_section attr_vals = \n#{val[0].to_yaml}")
     
    19691965.,.,
    19701966
    1971 module_eval(<<'.,.,', 'parser.y', 490)
     1967module_eval(<<'.,.,', 'parser.y', 492)
    19721968  def _reduce_89(val, _values, result)
    19731969        @@logger.debug("#{__FILE__}:#{__LINE__}:dadl_section complex_object_block = \n#{val[0].to_yaml}")
     
    19781974.,.,
    19791975
    1980 module_eval(<<'.,.,', 'parser.y', 497)
     1976module_eval(<<'.,.,', 'parser.y', 499)
    19811977  def _reduce_90(val, _values, result)
    19821978        result = Array[val[0]]
     
    19861982.,.,
    19871983
    1988 module_eval(<<'.,.,', 'parser.y', 501)
     1984module_eval(<<'.,.,', 'parser.y', 503)
    19891985  def _reduce_91(val, _values, result)
    19901986        result = (val[0] << val[1])
     
    19941990.,.,
    19951991
    1996 module_eval(<<'.,.,', 'parser.y', 505)
     1992module_eval(<<'.,.,', 'parser.y', 507)
    19971993  def _reduce_92(val, _values, result)
    19981994        result = (val[0] << val[2])
     
    20021998.,.,
    20031999
    2004 module_eval(<<'.,.,', 'parser.y', 510)
     2000module_eval(<<'.,.,', 'parser.y', 512)
    20052001  def _reduce_93(val, _values, result)
    20062002        @@logger.debug("#{__FILE__}:#{__LINE__}:attr_val\n attr_id = #{val[0]}, object_block = #{val[1]}")
     
    20112007.,.,
    20122008
    2013 module_eval(<<'.,.,', 'parser.y', 516)
     2009module_eval(<<'.,.,', 'parser.y', 518)
    20142010  def _reduce_94(val, _values, result)
    20152011        @@logger.debug("#{__FILE__}:#{__LINE__}: V_ATTRIBUTE_IDENTIFIER = #{val[0]}")
     
    20222018# reduce 95 omitted
    20232019
    2024 module_eval(<<'.,.,', 'parser.y', 523)
     2020module_eval(<<'.,.,', 'parser.y', 525)
    20252021  def _reduce_96(val, _values, result)
    20262022        result = val[0]
     
    20302026.,.,
    20312027
    2032 module_eval(<<'.,.,', 'parser.y', 527)
     2028module_eval(<<'.,.,', 'parser.y', 529)
    20332029  def _reduce_97(val, _values, result)
    20342030        result = val[0]
     
    20382034.,.,
    20392035
    2040 module_eval(<<'.,.,', 'parser.y', 532)
     2036module_eval(<<'.,.,', 'parser.y', 534)
    20412037  def _reduce_98(val, _values, result)
    20422038        result = val[0]
     
    20462042.,.,
    20472043
    2048 module_eval(<<'.,.,', 'parser.y', 536)
     2044module_eval(<<'.,.,', 'parser.y', 538)
    20492045  def _reduce_99(val, _values, result)
    20502046        result = val[0]
     
    20542050.,.,
    20552051
    2056 module_eval(<<'.,.,', 'parser.y', 541)
     2052module_eval(<<'.,.,', 'parser.y', 543)
    20572053  def _reduce_100(val, _values, result)
    20582054        result = {:untyped_multiple_attr_object_block => val[0]}
     
    20622058.,.,
    20632059
    2064 module_eval(<<'.,.,', 'parser.y', 545)
     2060module_eval(<<'.,.,', 'parser.y', 547)
    20652061  def _reduce_101(val, _values, result)
    20662062        result = {:type_identifier => val[0], :untyped_multiple_attr_object_block => val[1]}
     
    20702066.,.,
    20712067
    2072 module_eval(<<'.,.,', 'parser.y', 550)
     2068module_eval(<<'.,.,', 'parser.y', 552)
    20732069  def _reduce_102(val, _values, result)
    20742070        result = {:multiple_attr_object_block_head => val[0], :keyed_objects => val[1]}
     
    20782074.,.,
    20792075
    2080 module_eval(<<'.,.,', 'parser.y', 555)
     2076module_eval(<<'.,.,', 'parser.y', 557)
    20812077  def _reduce_103(val, _values, result)
    20822078        result = val[0]
     
    20862082.,.,
    20872083
    2088 module_eval(<<'.,.,', 'parser.y', 560)
     2084module_eval(<<'.,.,', 'parser.y', 562)
    20892085  def _reduce_104(val, _values, result)
    20902086        result = Array[val[0]]
     
    20942090.,.,
    20952091
    2096 module_eval(<<'.,.,', 'parser.y', 564)
     2092module_eval(<<'.,.,', 'parser.y', 566)
    20972093  def _reduce_105(val, _values, result)
    20982094        result = (val[0] << val[1])
     
    21022098.,.,
    21032099
    2104 module_eval(<<'.,.,', 'parser.y', 569)
     2100module_eval(<<'.,.,', 'parser.y', 571)
    21052101  def _reduce_106(val, _values, result)
    21062102        @@logger.debug("#{__FILE__}:#{__LINE__}: keyed_object = #{val[0]} at #{@filename}:#{@lineno}")
     
    21112107.,.,
    21122108
    2113 module_eval(<<'.,.,', 'parser.y', 575)
     2109module_eval(<<'.,.,', 'parser.y', 577)
    21142110  def _reduce_107(val, _values, result)
    21152111        @@logger.debug("object_key: [#{val[1]}] at #{@filename}:#{@lineno}")
     
    21202116.,.,
    21212117
    2122 module_eval(<<'.,.,', 'parser.y', 581)
     2118module_eval(<<'.,.,', 'parser.y', 583)
    21232119  def _reduce_108(val, _values, result)
    21242120        result = {:untyped_single_attr_object_block => val[0]}
     
    21282124.,.,
    21292125
    2130 module_eval(<<'.,.,', 'parser.y', 585)
     2126module_eval(<<'.,.,', 'parser.y', 587)
    21312127  def _reduce_109(val, _values, result)
    21322128        result = {:type_identifier => val[0], :untyped_single_attr_object_block => val[1]}
     
    21362132.,.,
    21372133
    2138 module_eval(<<'.,.,', 'parser.y', 590)
     2134module_eval(<<'.,.,', 'parser.y', 592)
    21392135  def _reduce_110(val, _values, result)
    21402136        @@logger.debug("#{__FILE__}:#{__LINE__}: single_attr_object_complex_head = #{val[0]} at #{@filename}:#{@lineno}")
     
    21452141.,.,
    21462142
    2147 module_eval(<<'.,.,', 'parser.y', 595)
     2143module_eval(<<'.,.,', 'parser.y', 597)
    21482144  def _reduce_111(val, _values, result)
    21492145        @@logger.debug("#{__FILE__}:#{__LINE__}: attr_vals = #{val[1]} at #{@filename}:#{@lineno}")
     
    21562152# reduce 112 omitted
    21572153
    2158 module_eval(<<'.,.,', 'parser.y', 601)
     2154module_eval(<<'.,.,', 'parser.y', 603)
    21592155  def _reduce_113(val, _values, result)
    21602156        @@logger.debug("#{__FILE__}:#{__LINE__}: untyped_primitive_object_block = #{val[0]} at #{@filename}:#{@lineno}")
     
    21652161.,.,
    21662162
    2167 module_eval(<<'.,.,', 'parser.y', 606)
     2163module_eval(<<'.,.,', 'parser.y', 608)
    21682164  def _reduce_114(val, _values, result)
    21692165        @@logger.debug("#{__FILE__}:#{__LINE__}: type_identifier = #{val[0]}, untyped_primitive_object_block = #{val[1]} at #{@filename}:#{@lineno}")
     
    21742170.,.,
    21752171
    2176 module_eval(<<'.,.,', 'parser.y', 611)
     2172module_eval(<<'.,.,', 'parser.y', 613)
    21772173  def _reduce_115(val, _values, result)
    21782174        @@logger.debug("#{__FILE__}:#{__LINE__}: primitive_object_block = <#{val[1]}> at #{@filename}:#{@lineno}")
     
    21832179.,.,
    21842180
    2185 module_eval(<<'.,.,', 'parser.y', 616)
     2181module_eval(<<'.,.,', 'parser.y', 618)
    21862182  def _reduce_116(val, _values, result)
    21872183        result = val[0]
     
    21912187.,.,
    21922188
    2193 module_eval(<<'.,.,', 'parser.y', 620)
     2189module_eval(<<'.,.,', 'parser.y', 622)
    21942190  def _reduce_117(val, _values, result)
    21952191        result = val[0]
     
    21992195.,.,
    22002196
    2201 module_eval(<<'.,.,', 'parser.y', 624)
     2197module_eval(<<'.,.,', 'parser.y', 626)
    22022198  def _reduce_118(val, _values, result)
    22032199        result = val[0]
     
    22072203.,.,
    22082204
    2209 module_eval(<<'.,.,', 'parser.y', 628)
     2205module_eval(<<'.,.,', 'parser.y', 630)
    22102206  def _reduce_119(val, _values, result)
    22112207        result = val[0]
     
    22152211.,.,
    22162212
    2217 module_eval(<<'.,.,', 'parser.y', 632)
     2213module_eval(<<'.,.,', 'parser.y', 634)
    22182214  def _reduce_120(val, _values, result)
    22192215        result = val[0]
     
    22232219.,.,
    22242220
    2225 module_eval(<<'.,.,', 'parser.y', 636)
     2221module_eval(<<'.,.,', 'parser.y', 638)
    22262222  def _reduce_121(val, _values, result)
    22272223        @@logger.debug("string_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    22322228.,.,
    22332229
    2234 module_eval(<<'.,.,', 'parser.y', 641)
     2230module_eval(<<'.,.,', 'parser.y', 643)
    22352231  def _reduce_122(val, _values, result)
    22362232        @@logger.debug("integer_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    22412237.,.,
    22422238
    2243 module_eval(<<'.,.,', 'parser.y', 646)
     2239module_eval(<<'.,.,', 'parser.y', 648)
    22442240  def _reduce_123(val, _values, result)
    22452241        @@logger.debug("real_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    22502246.,.,
    22512247
    2252 module_eval(<<'.,.,', 'parser.y', 651)
     2248module_eval(<<'.,.,', 'parser.y', 653)
    22532249  def _reduce_124(val, _values, result)
    22542250        @@logger.debug("boolean_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    22592255.,.,
    22602256
    2261 module_eval(<<'.,.,', 'parser.y', 656)
     2257module_eval(<<'.,.,', 'parser.y', 658)
    22622258  def _reduce_125(val, _values, result)
    22632259        @@logger.debug("character_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    22682264.,.,
    22692265
    2270 module_eval(<<'.,.,', 'parser.y', 661)
     2266module_eval(<<'.,.,', 'parser.y', 663)
    22712267  def _reduce_126(val, _values, result)
    22722268        @@logger.debug("date_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    22772273.,.,
    22782274
    2279 module_eval(<<'.,.,', 'parser.y', 666)
     2275module_eval(<<'.,.,', 'parser.y', 668)
    22802276  def _reduce_127(val, _values, result)
    22812277        @@logger.debug("time_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    22862282.,.,
    22872283
    2288 module_eval(<<'.,.,', 'parser.y', 671)
     2284module_eval(<<'.,.,', 'parser.y', 673)
    22892285  def _reduce_128(val, _values, result)
    22902286        @@logger.debug("date_time_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    22952291.,.,
    22962292
    2297 module_eval(<<'.,.,', 'parser.y', 676)
     2293module_eval(<<'.,.,', 'parser.y', 678)
    22982294  def _reduce_129(val, _values, result)
    22992295        @@logger.debug("duration_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    23042300.,.,
    23052301
    2306 module_eval(<<'.,.,', 'parser.y', 681)
     2302module_eval(<<'.,.,', 'parser.y', 683)
    23072303  def _reduce_130(val, _values, result)
    23082304        @@logger.debug("uri_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    23132309.,.,
    23142310
    2315 module_eval(<<'.,.,', 'parser.y', 687)
     2311module_eval(<<'.,.,', 'parser.y', 689)
    23162312  def _reduce_131(val, _values, result)
    23172313        @@logger.debug("string_list_value: #{val[0]} at #{@filename}:#{@lineno}")
     
    23222318.,.,
    23232319
    2324 module_eval(<<'.,.,', 'parser.y', 692)
     2320module_eval(<<'.,.,', 'parser.y', 694)
    23252321  def _reduce_132(val, _values, result)
    23262322        result = val[0]
     
    23302326.,.,
    23312327
    2332 module_eval(<<'.,.,', 'parser.y', 696)
     2328module_eval(<<'.,.,', 'parser.y', 698)
    23332329  def _reduce_133(val, _values, result)
    23342330        result = val[0]
     
    23382334.,.,
    23392335
    2340 module_eval(<<'.,.,', 'parser.y', 700)
     2336module_eval(<<'.,.,', 'parser.y', 702)
    23412337  def _reduce_134(val, _values, result)
    23422338        result = val[0]
     
    23462342.,.,
    23472343
    2348 module_eval(<<'.,.,', 'parser.y', 704)
     2344module_eval(<<'.,.,', 'parser.y', 706)
    23492345  def _reduce_135(val, _values, result)
    23502346        result = val[0]
     
    23542350.,.,
    23552351
    2356 module_eval(<<'.,.,', 'parser.y', 708)
     2352module_eval(<<'.,.,', 'parser.y', 710)
    23572353  def _reduce_136(val, _values, result)
    23582354        result = val[0]
     
    23622358.,.,
    23632359
    2364 module_eval(<<'.,.,', 'parser.y', 712)
     2360module_eval(<<'.,.,', 'parser.y', 714)
    23652361  def _reduce_137(val, _values, result)
    23662362        result = val[0]
     
    23702366.,.,
    23712367
    2372 module_eval(<<'.,.,', 'parser.y', 716)
     2368module_eval(<<'.,.,', 'parser.y', 718)
    23732369  def _reduce_138(val, _values, result)
    23742370        result = val[0]
     
    23782374.,.,
    23792375
    2380 module_eval(<<'.,.,', 'parser.y', 720)
     2376module_eval(<<'.,.,', 'parser.y', 722)
    23812377  def _reduce_139(val, _values, result)
    23822378        result = val[0]
     
    23982394# reduce 145 omitted
    23992395
    2400 module_eval(<<'.,.,', 'parser.y', 732)
     2396module_eval(<<'.,.,', 'parser.y', 734)
    24012397  def _reduce_146(val, _values, result)
    24022398        @@logger.debug("V_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}")
     
    24072403.,.,
    24082404
    2409 module_eval(<<'.,.,', 'parser.y', 737)
     2405module_eval(<<'.,.,', 'parser.y', 739)
    24102406  def _reduce_147(val, _values, result)
    24112407        @@logger.debug("V_GENERIC_TYPE_IDENTIFIER: #{val[0]} at #{@filename}:#{@lineno}")
     
    24162412.,.,
    24172413
    2418 module_eval(<<'.,.,', 'parser.y', 743)
     2414module_eval(<<'.,.,', 'parser.y', 745)
    24192415  def _reduce_148(val, _values, result)
    24202416        @@logger.debug("V_STRING: #{val[0]} at #{@filename}:#{@lineno}")
     
    24252421.,.,
    24262422
    2427 module_eval(<<'.,.,', 'parser.y', 749)
     2423module_eval(<<'.,.,', 'parser.y', 751)
    24282424  def _reduce_149(val, _values, result)
    24292425        result = [val[0],val[2]]
     
    24332429.,.,
    24342430
    2435 module_eval(<<'.,.,', 'parser.y', 753)
     2431module_eval(<<'.,.,', 'parser.y', 755)
    24362432  def _reduce_150(val, _values, result)
    24372433        result = val[0] << val[2]
     
    24412437.,.,
    24422438
    2443 module_eval(<<'.,.,', 'parser.y', 757)
     2439module_eval(<<'.,.,', 'parser.y', 759)
    24442440  def _reduce_151(val, _values, result)
    24452441        result = val[0]
     
    24492445.,.,
    24502446
    2451 module_eval(<<'.,.,', 'parser.y', 762)
     2447module_eval(<<'.,.,', 'parser.y', 764)
    24522448  def _reduce_152(val, _values, result)
    24532449        begin
     
    24622458.,.,
    24632459
    2464 module_eval(<<'.,.,', 'parser.y', 771)
     2460module_eval(<<'.,.,', 'parser.y', 773)
    24652461  def _reduce_153(val, _values, result)
    24662462        begin
     
    24752471.,.,
    24762472
    2477 module_eval(<<'.,.,', 'parser.y', 780)
     2473module_eval(<<'.,.,', 'parser.y', 782)
    24782474  def _reduce_154(val, _values, result)
    24792475        begin
     
    25122508# reduce 166 omitted
    25132509
    2514 module_eval(<<'.,.,', 'parser.y', 806)
     2510module_eval(<<'.,.,', 'parser.y', 808)
    25152511  def _reduce_167(val, _values, result)
    25162512        begin
     
    25252521.,.,
    25262522
    2527 module_eval(<<'.,.,', 'parser.y', 815)
     2523module_eval(<<'.,.,', 'parser.y', 817)
    25282524  def _reduce_168(val, _values, result)
    25292525        begin
     
    25382534.,.,
    25392535
    2540 module_eval(<<'.,.,', 'parser.y', 824)
     2536module_eval(<<'.,.,', 'parser.y', 826)
    25412537  def _reduce_169(val, _values, result)
    25422538        begin
     
    25752571# reduce 181 omitted
    25762572
    2577 module_eval(<<'.,.,', 'parser.y', 849)
     2573module_eval(<<'.,.,', 'parser.y', 851)
    25782574  def _reduce_182(val, _values, result)
    25792575        result = true
     
    25832579.,.,
    25842580
    2585 module_eval(<<'.,.,', 'parser.y', 853)
     2581module_eval(<<'.,.,', 'parser.y', 855)
    25862582  def _reduce_183(val, _values, result)
    25872583        result = false
     
    26052601# reduce 190 omitted
    26062602
    2607 module_eval(<<'.,.,', 'parser.y', 868)
     2603module_eval(<<'.,.,', 'parser.y', 870)
    26082604  def _reduce_191(val, _values, result)
    26092605        result = val[0]
     
    26632659# reduce 216 omitted
    26642660
    2665 # reduce 217 omitted
     2661module_eval(<<'.,.,', 'parser.y', 905)
     2662  def _reduce_217(val, _values, result)
     2663        @@logger.debug("V_ISO8601_EXTENDED_DATE_TIME: #{val[0]} at #{@filename}:#{@lineno}")
     2664    result = val[0]
     2665 
     2666    result
     2667  end
     2668.,.,
    26662669
    26672670# reduce 218 omitted
     
    26892692# reduce 229 omitted
    26902693
    2691 module_eval(<<'.,.,', 'parser.y', 919)
     2694module_eval(<<'.,.,', 'parser.y', 925)
    26922695  def _reduce_230(val, _values, result)
    26932696        @@logger.debug("V_ISO8601_DURATION: #{val[0]} at #{@filename}:#{@lineno}")
     
    27222725# reduce 242 omitted
    27232726
    2724 module_eval(<<'.,.,', 'parser.y', 939)
     2727module_eval(<<'.,.,', 'parser.y', 945)
    27252728  def _reduce_243(val, _values, result)
    27262729        @@logger.debug("#{__FILE__}:#{__LINE__}: V_QUALIFIED_TERM_CODE_REF = #{val[0]} at #{@filename}:#{@lineno}")
     
    27372740# reduce 246 omitted
    27382741
    2739 module_eval(<<'.,.,', 'parser.y', 949)
     2742module_eval(<<'.,.,', 'parser.y', 955)
    27402743  def _reduce_247(val, _values, result)
    27412744        @@logger.debug("#{__FILE__}:#{__LINE__}: V_URI = #{val[0]} at #{@filename}:#{@lineno}")
     
    28262829# reduce 287 omitted
    28272830
    2828 module_eval(<<'.,.,', 'parser.y', 1019)
     2831module_eval(<<'.,.,', 'parser.y', 1026)
    28292832  def _reduce_288(val, _values, result)
    28302833        @@logger.debug("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}")
     
    28342837.,.,
    28352838
    2836 module_eval(<<'.,.,', 'parser.y', 1023)
     2839module_eval(<<'.,.,', 'parser.y', 1030)
    28372840  def _reduce_289(val, _values, result)
    28382841        @@logger.debug("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{val[0]} at #{@filename}")
     
    28422845.,.,
    28432846
    2844 module_eval(<<'.,.,', 'parser.y', 1034)
     2847module_eval(<<'.,.,', 'parser.y', 1041)
    28452848  def _reduce_290(val, _values, result)
    28462849        result = Range.new(1,1)
     
    28502853.,.,
    28512854
    2852 module_eval(<<'.,.,', 'parser.y', 1038)
     2855module_eval(<<'.,.,', 'parser.y', 1045)
    28532856  def _reduce_291(val, _values, result)
    28542857        result = val[3]
     
    28582861.,.,
    28592862
    2860 module_eval(<<'.,.,', 'parser.y', 1043)
     2863module_eval(<<'.,.,', 'parser.y', 1050)
    28612864  def _reduce_292(val, _values, result)
    28622865        begin
     
    28712874.,.,
    28722875
    2873 module_eval(<<'.,.,', 'parser.y', 1052)
     2876module_eval(<<'.,.,', 'parser.y', 1059)
    28742877  def _reduce_293(val, _values, result)
    28752878        begin
     
    28852888.,.,
    28862889
    2887 module_eval(<<'.,.,', 'parser.y', 1063)
     2890module_eval(<<'.,.,', 'parser.y', 1070)
    28882891  def _reduce_294(val, _values, result)
    28892892        result = OpenEhr::AM::Archetype::ConstraintModel::CARDINALITY.new
     
    29092912# reduce 302 omitted
    29102913
    2911 module_eval(<<'.,.,', 'parser.y', 1077)
     2914module_eval(<<'.,.,', 'parser.y', 1084)
    29122915  def _reduce_303(val, _values, result)
    29132916        result = val[0]
     
    29172920.,.,
    29182921
    2919 module_eval(<<'.,.,', 'parser.y', 1081)
     2922module_eval(<<'.,.,', 'parser.y', 1088)
    29202923  def _reduce_304(val, _values, result)
    29212924        result = val[0]
     
    29272930# reduce 305 omitted
    29282931
    2929 module_eval(<<'.,.,', 'parser.y', 1088)
     2932module_eval(<<'.,.,', 'parser.y', 1095)
    29302933  def _reduce_306(val, _values, result)
    29312934        case val[3]
     
    29422945# reduce 307 omitted
    29432946
    2944 module_eval(<<'.,.,', 'parser.y', 1099)
     2947module_eval(<<'.,.,', 'parser.y', 1106)
    29452948  def _reduce_308(val, _values, result)
    29462949        result = val[0]
     
    29502953.,.,
    29512954
    2952 module_eval(<<'.,.,', 'parser.y', 1103)
     2955module_eval(<<'.,.,', 'parser.y', 1110)
    29532956  def _reduce_309(val, _values, result)
    29542957        result = OpenEhr::RM::Support::AssumedTypes::Interval.new(val[0], val[2])
     
    30443047# reduce 352 omitted
    30453048
    3046 module_eval(<<'.,.,', 'parser.y', 1169)
     3049module_eval(<<'.,.,', 'parser.y', 1176)
    30473050  def _reduce_353(val, _values, result)
    30483051        result = OpenEhr::AM::Archetype::ConstraintModel::Primitive::C_BOOLEAN.new(:true_valid => true)
     
    30523055.,.,
    30533056
    3054 module_eval(<<'.,.,', 'parser.y', 1173)
     3057module_eval(<<'.,.,', 'parser.y', 1180)
    30553058  def _reduce_354(val, _values, result)
    30563059        result = OpenEhr::AM::Archetype::ConstraintModel::Primitive::C_BOOLEAN.new(:true_valid => false)
     
    30603063.,.,
    30613064
    3062 module_eval(<<'.,.,', 'parser.y', 1177)
     3065module_eval(<<'.,.,', 'parser.y', 1184)
    30633066  def _reduce_355(val, _values, result)
    30643067        result = OpenEhr::AM::Archetype::ConstraintModel::Primitive::C_BOOLEAN.new(:true_valid => true,:false_valid => false)
     
    30683071.,.,
    30693072
    3070 module_eval(<<'.,.,', 'parser.y', 1181)
     3073module_eval(<<'.,.,', 'parser.y', 1188)
    30713074  def _reduce_356(val, _values, result)
    30723075        result = OpenEhr::AM::Archetype::ConstraintModel::Primitive::C_BOOLEAN.new(:true_valid => false,:false_valid => true)
     
    30763079.,.,
    30773080
    3078 module_eval(<<'.,.,', 'parser.y', 1186)
     3081module_eval(<<'.,.,', 'parser.y', 1193)
    30793082  def _reduce_357(val, _values, result)
    30803083        result = val[0]
     
    30843087.,.,
    30853088
    3086 module_eval(<<'.,.,', 'parser.y', 1190)
     3089module_eval(<<'.,.,', 'parser.y', 1197)
    30873090  def _reduce_358(val, _values, result)
    30883091        raise 'Not implemented yet'
     
    30923095.,.,
    30933096
    3094 module_eval(<<'.,.,', 'parser.y', 1194)
     3097module_eval(<<'.,.,', 'parser.y', 1201)
    30953098  def _reduce_359(val, _values, result)
    30963099        raise 'Not implemented yet'
     
    31103113# reduce 364 omitted
    31113114
    3112 module_eval(<<'.,.,', 'parser.y', 1206)
     3115module_eval(<<'.,.,', 'parser.y', 1213)
    31133116  def _reduce_365(val, _values, result)
    31143117        @in_interval = false
     
    31193122.,.,
    31203123
    3121 module_eval(<<'.,.,', 'parser.y', 1213)
     3124module_eval(<<'.,.,', 'parser.y', 1220)
    31223125  def _reduce_366(val, _values, result)
    31233126          result = val[0]
     
    31273130.,.,
    31283131
    3129 module_eval(<<'.,.,', 'parser.y', 1217)
     3132module_eval(<<'.,.,', 'parser.y', 1224)
    31303133  def _reduce_367(val, _values, result)
    31313134          result = val[0]
     
    31353138.,.,
    31363139
    3137 module_eval(<<'.,.,', 'parser.y', 1223)
     3140module_eval(<<'.,.,', 'parser.y', 1230)
    31383141  def _reduce_368(val, _values, result)
    31393142        @@logger.debug("#{__FILE__}:#{__LINE__}, START_TERM_CODE_CONSTRAINT = #{val[0]} at #{@filename}")
     
    31523155# reduce 371 omitted
    31533156
    3154 module_eval(<<'.,.,', 'parser.y', 1239)
     3157module_eval(<<'.,.,', 'parser.y', 1246)
    31553158  def _reduce_372(val, _values, result)
    31563159          result = val[0]
     
    31603163.,.,
    31613164
    3162 module_eval(<<'.,.,', 'parser.y', 1244)
     3165module_eval(<<'.,.,', 'parser.y', 1251)
    31633166  def _reduce_373(val, _values, result)
    31643167          result = val[0]
     
    31683171.,.,
    31693172
    3170 module_eval(<<'.,.,', 'parser.y', 1248)
     3173module_eval(<<'.,.,', 'parser.y', 1255)
    31713174  def _reduce_374(val, _values, result)
    31723175        @@logger.debug("#{__FILE__}:#{__LINE__}, V_ATTRIBUTE_IDENTIFIER = #{word} at #{@filename}")
     
    31773180.,.,
    31783181
    3179 module_eval(<<'.,.,', 'parser.y', 1259)
     3182module_eval(<<'.,.,', 'parser.y', 1266)
    31803183  def _reduce_375(val, _values, result)
    31813184        result = OpenEhr::AM::Archetype::ConstraintModel::Primitive::C_DURATION.new #val[0]
  • ruby/trunk/lib/adl_parser/lib/parser.y

    r318 r320  
    165165
    166166#c_complex_object: c_complex_object_head SYM_MATCHES SYM_START_CBLOCK c_complex_object_body SYM_END_CBLOCK
    167 c_complex_object: c_complx_object_head SYM_MATCHES START_REGEXP_BLOCK REGEXP_BODY END_REGEXP_BLOCK # added by akimichi
     167#c_complex_object: c_complx_object_head SYM_MATCHES START_REGEXP_BLOCK REGEXP_BODY END_REGEXP_BLOCK # added by akimichi
     168c_complex_object: c_complx_object_head SYM_MATCHES Slash_code REGEXP_BODY Slash_code # added by akimichi
    168169  {
    169170    result = OpenEhr::AM::Archetype::ConstraintModel::C_COMPLEX_OBJECT.create(:attributes => val[3]) do |c_complex_object|
     
    396397    result = c_attribute
    397398  }
    398   | c_attr_head SYM_MATCHES START_REGEXP_BLOCK REGEXP_BODY END_REGEXP_BLOCK # added by akimichi
     399#  | c_attr_head SYM_MATCHES START_REGEXP_BLOCK REGEXP_BODY END_REGEXP_BLOCK # added by akimichi
     400  | c_attr_head SYM_MATCHES Slash_code REGEXP_BODY Slash_code # added by akimichi
    399401  {
    400402    assert_at(__FILE__,__LINE__){ val[0].kind_of?(OpenEhr::AM::Archetype::ConstraintModel::C_ATTRIBUTE)}
     
    901903
    902904date_time_value: V_ISO8601_EXTENDED_DATE_TIME
     905  {
     906    @@logger.debug("V_ISO8601_EXTENDED_DATE_TIME: #{val[0]} at #{@filename}:#{@lineno}")
     907    result = val[0]
     908  }
    903909
    904910date_time_list_value: date_time_value Comma_code date_time_value
     
    971977  | SYM_EXISTS error
    972978  | relative_path SYM_MATCHES SYM_START_CBLOCK c_primitive SYM_END_CBLOCK
    973   | relative_path SYM_MATCHES START_REGEXP_BLOCK REGEXP_BODY END_REGEXP_BLOCK # added by akimichi
     979#  | relative_path SYM_MATCHES START_REGEXP_BLOCK REGEXP_BODY END_REGEXP_BLOCK # added by akimichi
     980  | relative_path SYM_MATCHES Slash_code REGEXP_BODY Slash_code # added by akimichi
    974981  | SYM_NOT boolean_leaf
    975982  | arithmetic_expression '=' arithmetic_expression
     
    12981305
    12991306###----------/* keywords */ ---------------------------------------------
    1300 @@adl_reserved = {
    1301     'archetype' => :SYM_ARCHETYPE,
    1302     'adl_version' => :SYM_ADL_VERSION,
    1303     'controlled' => :SYM_IS_CONTROLLED,
    1304     'specialize' => :SYM_SPECIALIZE,
    1305     'concept' => :SYM_CONCEPT,
    1306     'language' => :SYM_LANGUAGE,
    1307     'description' => :SYM_DESCRIPTION,
    1308     'definition' => :SYM_DEFINITION,
    1309     'invariant' => :SYM_INVARIANT,
    1310     'ontology' => :SYM_ONTOLOGY,
    1311     'matches' => :SYM_MATCHES,
    1312     'is_in' => :SYM_MATCHES,
    1313     'occurrences' => :SYM_OCCURRENCES,
    1314     'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
    1315     'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
    1316     'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
    1317 }
    1318 
    1319 @@dadl_reserved = {
    1320   'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
    1321   'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
    1322   'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
    1323 }
    1324 
    1325 @@cadl_reserved = {
    1326   'then' => :SYM_THEN, # [Tt][Hh][Ee][Nn]
    1327   'else' => :SYM_ELSE, # [Ee][Ll][Ss][Ee]
    1328   'and' => :SYM_AND, # [Aa][Nn][Dd]
    1329   'or' => :SYM_OR, # [Oo][Rr]
    1330   'xor' => :SYM_XOR, # [Xx][Oo][Rr]
    1331   'not' => :SYM_NOT, # [Nn][Oo][Tt]
    1332   'implies' => :SYM_IMPLIES, # [Ii][Mm][Pp][Ll][Ii][Ee][Ss]
    1333   'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
    1334   'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
    1335   'forall' => :SYM_FORALL, # [Ff][Oo][Rr][_][Aa][Ll][Ll]
    1336   'exists' => :SYM_EXISTS, # [Ee][Xx][Ii][Ss][Tt][Ss]
    1337   'existence' => :SYM_EXISTENCE, # [Ee][Xx][Iu][Ss][Tt][Ee][Nn][Cc][Ee]
    1338   'occurrences' => :SYM_OCCURRENCES, # [Oo][Cc][Cc][Uu][Rr][Rr][Ee][Nn][Cc][Ee][Ss]
    1339   'cardinality' => :SYM_CARDINALITY, # [Cc][Aa][Rr][Dd][Ii][Nn][Aa][Ll][Ii][Tt][Yy]
    1340   'ordered' => :SYM_ORDERED, # [Oo][Rr][Dd][Ee][Rr][Ee][Dd]
    1341   'unordered' => :SYM_UNORDERED, # [Uu][Nn][Oo][Rr][Dd][Ee][Rr][Ee][Dd]
    1342   'unique' => :SYM_UNIQUE, # [Uu][Nn][Ii][Qq][Uu][Ee]
    1343   'matches' => :SYM_MATCHES, # [Mm][Aa][Tt][Cc][Hh][Ee][Ss]
    1344   'is_in' => :SYM_MATCHES, # [Ii][Ss][_][Ii][Nn]
    1345   'invariant' => :SYM_INVARIANT, # [Ii][Nn][Vv][Aa][Rr][Ii][Aa][Nn][Tt]
    1346   'infinity' => :SYM_INFINITY, # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
    1347   'use_node' => :SYM_USE_NODE, # [Uu][Ss][Ee][_][Nn][Oo][Dd][Ee]
    1348   'use_archetype' => :SYM_ALLOW_ARCHETYPE, # [Uu][Ss][Ee][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee]
    1349   'allow_archetype' => :SYM_ALLOW_ARCHETYPE, # [Aa][Ll][Ll][Oo][Ww][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee]
    1350   'include' => :SYM_INCLUDE, # [Ii][Nn][Cc][Ll][Uu][Dd][Ee]
    1351   'exclude' => :SYM_EXCLUDE # [Ee][Xx][Cc][Ll][Uu][Dd][Ee]
    1352 }
     1307### @@adl_reserved = {
     1308###     'archetype' => :SYM_ARCHETYPE,
     1309###     'adl_version' => :SYM_ADL_VERSION,
     1310###     'controlled' => :SYM_IS_CONTROLLED,
     1311###     'specialize' => :SYM_SPECIALIZE,
     1312###     'concept' => :SYM_CONCEPT,
     1313###     'language' => :SYM_LANGUAGE,
     1314###     'description' => :SYM_DESCRIPTION,
     1315###     'definition' => :SYM_DEFINITION,
     1316###     'invariant' => :SYM_INVARIANT,
     1317###     'ontology' => :SYM_ONTOLOGY,
     1318###     'matches' => :SYM_MATCHES,
     1319###     'is_in' => :SYM_MATCHES,
     1320###     'occurrences' => :SYM_OCCURRENCES,
     1321###     'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
     1322###     'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
     1323###     'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
     1324### }
     1325
     1326### @@dadl_reserved = {
     1327###   'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
     1328###   'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
     1329###   'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
     1330### }
     1331
     1332### @@cadl_reserved = {
     1333###   'then' => :SYM_THEN, # [Tt][Hh][Ee][Nn]
     1334###   'else' => :SYM_ELSE, # [Ee][Ll][Ss][Ee]
     1335###   'and' => :SYM_AND, # [Aa][Nn][Dd]
     1336###   'or' => :SYM_OR, # [Oo][Rr]
     1337###   'xor' => :SYM_XOR, # [Xx][Oo][Rr]
     1338###   'not' => :SYM_NOT, # [Nn][Oo][Tt]
     1339###   'implies' => :SYM_IMPLIES, # [Ii][Mm][Pp][Ll][Ii][Ee][Ss]
     1340###   'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
     1341###   'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
     1342###   'forall' => :SYM_FORALL, # [Ff][Oo][Rr][_][Aa][Ll][Ll]
     1343###   'exists' => :SYM_EXISTS, # [Ee][Xx][Ii][Ss][Tt][Ss]
     1344###   'existence' => :SYM_EXISTENCE, # [Ee][Xx][Iu][Ss][Tt][Ee][Nn][Cc][Ee]
     1345###   'occurrences' => :SYM_OCCURRENCES, # [Oo][Cc][Cc][Uu][Rr][Rr][Ee][Nn][Cc][Ee][Ss]
     1346###   'cardinality' => :SYM_CARDINALITY, # [Cc][Aa][Rr][Dd][Ii][Nn][Aa][Ll][Ii][Tt][Yy]
     1347###   'ordered' => :SYM_ORDERED, # [Oo][Rr][Dd][Ee][Rr][Ee][Dd]
     1348###   'unordered' => :SYM_UNORDERED, # [Uu][Nn][Oo][Rr][Dd][Ee][Rr][Ee][Dd]
     1349###   'unique' => :SYM_UNIQUE, # [Uu][Nn][Ii][Qq][Uu][Ee]
     1350###   'matches' => :SYM_MATCHES, # [Mm][Aa][Tt][Cc][Hh][Ee][Ss]
     1351###   'is_in' => :SYM_MATCHES, # [Ii][Ss][_][Ii][Nn]
     1352###   'invariant' => :SYM_INVARIANT, # [Ii][Nn][Vv][Aa][Rr][Ii][Aa][Nn][Tt]
     1353###   'infinity' => :SYM_INFINITY, # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
     1354###   'use_node' => :SYM_USE_NODE, # [Uu][Ss][Ee][_][Nn][Oo][Dd][Ee]
     1355###   'use_archetype' => :SYM_ALLOW_ARCHETYPE, # [Uu][Ss][Ee][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee]
     1356###   'allow_archetype' => :SYM_ALLOW_ARCHETYPE, # [Aa][Ll][Ll][Oo][Ww][_][Aa][Rr][Cc][Hh][Ee][Tt][Yy][Pp][Ee]
     1357###   'include' => :SYM_INCLUDE, # [Ii][Nn][Cc][Ll][Uu][Dd][Ee]
     1358###   'exclude' => :SYM_EXCLUDE # [Ee][Xx][Cc][Ll][Uu][Dd][Ee]
     1359### }
    13531360
    13541361
  • ruby/trunk/lib/adl_parser/test/parser_test.rb

    r319 r320  
    66  end
    77
    8   must "assert parser instance" do
    9     assert_instance_of ::OpenEhr::ADL::Parser,@parser
    10   end
     8#   must "assert parser instance" do
     9#     assert_instance_of ::OpenEhr::ADL::Parser,@parser
     10#   end
    1111
    1212#   must "openEHR-EHR-CLUSTER.exam-uterus.v1.adl be properly parsed" do
     
    265265  end
    266266
     267#   must "adl-test-ENTRY.basic_types.v1.adl be properly parsed" do
     268#     file =  File.read("#{TEST_ROOT_DIR}/adl/adl-test-ENTRY.basic_types.v1.adl")
     269#     assert_nothing_raised do
     270#       ast = @parser.parse(file, 'adl-test-ENTRY.basic_types.v1')
     271#       assert_instance_of OpenEhr::RM::Support::Identification::ArchetypeID, ast.archetype_id
     272#     end
     273#   end
     274
    267275end
  • ruby/trunk/lib/adl_parser/test/scanner_test.rb

    r319 r320  
    7474  end
    7575
     76  must "assert CADLScanner scanner scan V_STRING" do
     77    @scanner.scan("\"string\"") do |sym, val|
     78      assert_equal :V_STRING,sym
     79      assert_equal "string",val
     80    end
     81    @scanner.scan("\"1605E211E9BFB4093A72CCE7A9792FF9\"") do |sym, val|
     82      assert_equal :V_STRING,sym
     83      assert_equal "1605E211E9BFB4093A72CCE7A9792FF9",val
     84    end
     85  end
     86
    7687  must "assert CADLScanner scanner scan V_QUALIFIED_TERM_CODE_REF" do
    7788    @scanner.scan("[ICD10AM(1998)::F23]") do |sym, val|
    7889      assert_equal :V_QUALIFIED_TERM_CODE_REF,sym
    7990      assert_equal "ICD10AM(1998)::F23",val
     91    end
     92  end
     93
     94
     95  must "assert CADLScanner scanner scan V_ISO8601_DURATION_CONSTRAINT_PATTERN" do
     96    @scanner.scan("PW") do |sym, val|
     97      assert_equal :V_ISO8601_DURATION_CONSTRAINT_PATTERN,sym
     98      assert_equal "PW",val
     99    end
     100    @scanner.scan("PTs") do |sym, val|
     101      assert_equal :V_ISO8601_DURATION_CONSTRAINT_PATTERN,sym
     102      assert_equal "PTs",val
    80103    end
    81104  end
     
    89112    @scanner.scan("P1D") do |sym, val|
    90113      assert_equal :V_ISO8601_DURATION,sym
    91       assert_equal "PT1M",val
     114      assert_equal "P1D",val
     115    end
     116
     117    @scanner.scan("PT1H30M") do |sym, val|
     118      assert_equal :V_ISO8601_DURATION,sym
     119      assert_equal "PT1H30M",val
    92120    end
    93121  end
    94122
    95   must "assert CADLScanner scanner scan V_STRING" do
    96     @scanner.scan("\"string\"") do |sym, val|
    97       assert_equal :V_STRING,sym
    98       assert_equal "string",val
    99     end
    100     @scanner.scan("\"1605E211E9BFB4093A72CCE7A9792FF9\"") do |sym, val|
    101       assert_equal :V_STRING,sym
    102       assert_equal "1605E211E9BFB4093A72CCE7A9792FF9",val
     123  must "assert CADLScanner scanner scan V_ISO8601_EXTENDED_DATE_TIME" do
     124    @scanner.scan("2000-01-01T01:00:00") do |sym, val|
     125      assert_equal :V_ISO8601_EXTENDED_DATE_TIME,sym
     126      assert_equal "2000-01-01T01:00:00",val
    103127    end
    104128  end
    105129
    106   must "assert CADLScanner scanner scan V_ISO8601_DURATION_CONSTRAINT_PATTERN" do
    107     @scanner.scan("PW") do |sym, val|
    108       assert_equal :V_ISO8601_DURATION_CONSTRAINT_PATTERN,sym
    109       assert_equal "PW",val
    110     end
    111   end
    112130end
    113131
     
    155173  end
    156174end
     175
     176class RegexScannerTest < Test::Unit::TestCase
     177  def setup
     178    @scanner = OpenEhr::ADL::Scanner::RegexScanner.new([:regexp], "filename")
     179  end
     180
     181  must "assert RegexScanner scanner scan " do
     182    @scanner.scan("this|that|something else") do |sym, val|
     183      assert_equal :REGEXP_BODY,sym
     184      assert_equal "this|that|something else",val
     185    end
     186  end
     187end
Note: See TracChangeset for help on using the changeset viewer.