module Treetop::Compiler::Metagrammar

Public Instance Methods

_nt_alpha_char() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 4015
def _nt_alpha_char
  start_index = index
  if node_cache[:alpha_char].has_key?(index)
    cached = node_cache[:alpha_char][index]
    if cached
      node_cache[:alpha_char][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  if has_terminal?(@regexps[gr = '\A[A-Za-z_]'] ||= Regexp.new(gr), :regexp, index)
    r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
    @index += 1
  else
    terminal_parse_failure('[A-Za-z_]')
    r0 = nil
  end

  node_cache[:alpha_char][start_index] = r0

  r0
end
_nt_alphanumeric_char() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 4039
def _nt_alphanumeric_char
  start_index = index
  if node_cache[:alphanumeric_char].has_key?(index)
    cached = node_cache[:alphanumeric_char][index]
    if cached
      node_cache[:alphanumeric_char][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_alpha_char
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
      r2 = true
      @index += 1
    else
      terminal_parse_failure('[0-9]')
      r2 = nil
    end
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:alphanumeric_char][start_index] = r0

  r0
end
_nt_alternative() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1407
def _nt_alternative
  start_index = index
  if node_cache[:alternative].has_key?(index)
    cached = node_cache[:alternative][index]
    if cached
      node_cache[:alternative][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_sequence
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_primary
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:alternative][start_index] = r0

  r0
end
_nt_anything_symbol() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 3484
def _nt_anything_symbol
  start_index = index
  if node_cache[:anything_symbol].has_key?(index)
    cached = node_cache[:anything_symbol][index]
    if cached
      node_cache[:anything_symbol][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  if (match_len = has_terminal?('.', false, index))
    r0 = instantiate_node(AnythingSymbol,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'.\'')
    r0 = nil
  end

  node_cache[:anything_symbol][start_index] = r0

  r0
end
_nt_atomic() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2493
def _nt_atomic
  start_index = index
  if node_cache[:atomic].has_key?(index)
    cached = node_cache[:atomic][index]
    if cached
      node_cache[:atomic][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_terminal
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_nonterminal
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      r3 = _nt_parenthesized_expression
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        @index = i0
        r0 = nil
      end
    end
  end

  node_cache[:atomic][start_index] = r0

  r0
end
_nt_bracket_expression() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 3264
def _nt_bracket_expression
  start_index = index
  if node_cache[:bracket_expression].has_key?(index)
    cached = node_cache[:bracket_expression][index]
    if cached
      node_cache[:bracket_expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('[:', false, index))
    r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'[:\'')
    r1 = nil
  end
  s0 << r1
  if r1
    if (match_len = has_terminal?('^', false, index))
      r3 = true
      @index += match_len
    else
      terminal_parse_failure('\'^\'')
      r3 = nil
    end
    if r3
      r2 = r3
    else
      r2 = instantiate_node(SyntaxNode,input, index...index)
    end
    s0 << r2
    if r2
      i4 = index
      if (match_len = has_terminal?('alnum', false, index))
        r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
        @index += match_len
      else
        terminal_parse_failure('\'alnum\'')
        r5 = nil
      end
      if r5
        r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
        r4 = r5
      else
        if (match_len = has_terminal?('alpha', false, index))
          r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
          @index += match_len
        else
          terminal_parse_failure('\'alpha\'')
          r6 = nil
        end
        if r6
          r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
          r4 = r6
        else
          if (match_len = has_terminal?('blank', false, index))
            r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
            @index += match_len
          else
            terminal_parse_failure('\'blank\'')
            r7 = nil
          end
          if r7
            r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
            r4 = r7
          else
            if (match_len = has_terminal?('cntrl', false, index))
              r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
              @index += match_len
            else
              terminal_parse_failure('\'cntrl\'')
              r8 = nil
            end
            if r8
              r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
              r4 = r8
            else
              if (match_len = has_terminal?('digit', false, index))
                r9 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                @index += match_len
              else
                terminal_parse_failure('\'digit\'')
                r9 = nil
              end
              if r9
                r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
                r4 = r9
              else
                if (match_len = has_terminal?('graph', false, index))
                  r10 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                  @index += match_len
                else
                  terminal_parse_failure('\'graph\'')
                  r10 = nil
                end
                if r10
                  r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
                  r4 = r10
                else
                  if (match_len = has_terminal?('lower', false, index))
                    r11 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                    @index += match_len
                  else
                    terminal_parse_failure('\'lower\'')
                    r11 = nil
                  end
                  if r11
                    r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
                    r4 = r11
                  else
                    if (match_len = has_terminal?('print', false, index))
                      r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                      @index += match_len
                    else
                      terminal_parse_failure('\'print\'')
                      r12 = nil
                    end
                    if r12
                      r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
                      r4 = r12
                    else
                      if (match_len = has_terminal?('punct', false, index))
                        r13 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                        @index += match_len
                      else
                        terminal_parse_failure('\'punct\'')
                        r13 = nil
                      end
                      if r13
                        r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
                        r4 = r13
                      else
                        if (match_len = has_terminal?('space', false, index))
                          r14 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                          @index += match_len
                        else
                          terminal_parse_failure('\'space\'')
                          r14 = nil
                        end
                        if r14
                          r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true
                          r4 = r14
                        else
                          if (match_len = has_terminal?('upper', false, index))
                            r15 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                            @index += match_len
                          else
                            terminal_parse_failure('\'upper\'')
                            r15 = nil
                          end
                          if r15
                            r15 = SyntaxNode.new(input, (index-1)...index) if r15 == true
                            r4 = r15
                          else
                            if (match_len = has_terminal?('xdigit', false, index))
                              r16 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                              @index += match_len
                            else
                              terminal_parse_failure('\'xdigit\'')
                              r16 = nil
                            end
                            if r16
                              r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true
                              r4 = r16
                            else
                              if (match_len = has_terminal?('word', false, index))
                                r17 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                                @index += match_len
                              else
                                terminal_parse_failure('\'word\'')
                                r17 = nil
                              end
                              if r17
                                r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
                                r4 = r17
                              else
                                @index = i4
                                r4 = nil
                              end
                            end
                          end
                        end
                      end
                    end
                  end
                end
              end
            end
          end
        end
      end
      s0 << r4
      if r4
        if (match_len = has_terminal?(':]', false, index))
          r18 = instantiate_node(SyntaxNode,input, index...(index + match_len))
          @index += match_len
        else
          terminal_parse_failure('\':]\'')
          r18 = nil
        end
        s0 << r18
      end
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(BracketExpression0)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:bracket_expression][start_index] = r0

  r0
end
_nt_character_class() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 3090
def _nt_character_class
  start_index = index
  if node_cache[:character_class].has_key?(index)
    cached = node_cache[:character_class][index]
    if cached
      node_cache[:character_class][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('[', false, index))
    r1 = true
    @index += match_len
  else
    terminal_parse_failure('\'[\'')
    r1 = nil
  end
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      i3, s3 = index, []
      i4 = index
      if (match_len = has_terminal?(']', false, index))
        r5 = true
        @index += match_len
      else
        terminal_parse_failure('\']\'')
        r5 = nil
      end
      if r5
        @index = i4
        r4 = nil
        terminal_parse_failure('\']\'', true)
      else
        @terminal_failures.pop
        @index = i4
        r4 = instantiate_node(SyntaxNode,input, index...index)
      end
      s3 << r4
      if r4
        i6 = index
        i7, s7 = index, []
        if (match_len = has_terminal?('\\', false, index))
          r8 = true
          @index += match_len
        else
          terminal_parse_failure('\'\\\\\'')
          r8 = nil
        end
        s7 << r8
        if r8
          if index < input_length
            r9 = true
            @index += 1
          else
            terminal_parse_failure("any character")
            r9 = nil
          end
          s7 << r9
        end
        if s7.last
          r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
          r7.extend(CharacterClass0)
        else
          @index = i7
          r7 = nil
        end
        if r7
          r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
          r6 = r7
        else
          r10 = _nt_bracket_expression
          if r10
            r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
            r6 = r10
          else
            i11, s11 = index, []
            i12 = index
            if (match_len = has_terminal?('\\', false, index))
              r13 = true
              @index += match_len
            else
              terminal_parse_failure('\'\\\\\'')
              r13 = nil
            end
            if r13
              @index = i12
              r12 = nil
              terminal_parse_failure('\'\\\\\'', true)
            else
              @terminal_failures.pop
              @index = i12
              r12 = instantiate_node(SyntaxNode,input, index...index)
            end
            s11 << r12
            if r12
              if index < input_length
                r14 = true
                @index += 1
              else
                terminal_parse_failure("any character")
                r14 = nil
              end
              s11 << r14
            end
            if s11.last
              r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
              r11.extend(CharacterClass1)
            else
              @index = i11
              r11 = nil
            end
            if r11
              r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
              r6 = r11
            else
              @index = i6
              r6 = nil
            end
          end
        end
        s3 << r6
      end
      if s3.last
        r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
        r3.extend(CharacterClass2)
      else
        @index = i3
        r3 = nil
      end
      if r3
        s2 << r3
      else
        break
      end
    end
    if s2.empty?
      @index = i2
      r2 = nil
    else
      r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    end
    s0 << r2
    if r2
      if (match_len = has_terminal?(']', false, index))
        r15 = true
        @index += match_len
      else
        terminal_parse_failure('\']\'')
        r15 = nil
      end
      s0 << r15
    end
  end
  if s0.last
    r0 = instantiate_node(CharacterClass,input, i0...index, s0)
    r0.extend(CharacterClass3)
    r0.extend(CharacterClass4)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:character_class][start_index] = r0

  r0
end
_nt_choice() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1107
def _nt_choice
  start_index = index
  if node_cache[:choice].has_key?(index)
    cached = node_cache[:choice][index]
    if cached
      node_cache[:choice][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r1 = _nt_alternative
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      i3, s3 = index, []
      r5 = _nt_space
      if r5
        r4 = r5
      else
        r4 = instantiate_node(SyntaxNode,input, index...index)
      end
      s3 << r4
      if r4
        if (match_len = has_terminal?('/', false, index))
          r6 = true
          @index += match_len
        else
          terminal_parse_failure('\'/\'')
          r6 = nil
        end
        s3 << r6
        if r6
          r8 = _nt_space
          if r8
            r7 = r8
          else
            r7 = instantiate_node(SyntaxNode,input, index...index)
          end
          s3 << r7
          if r7
            r9 = _nt_alternative
            s3 << r9
          end
        end
      end
      if s3.last
        r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
        r3.extend(Choice0)
      else
        @index = i3
        r3 = nil
      end
      if r3
        s2 << r3
      else
        break
      end
    end
    if s2.empty?
      @index = i2
      r2 = nil
    else
      r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    end
    s0 << r2
  end
  if s0.last
    r0 = instantiate_node(Choice,input, i0...index, s0)
    r0.extend(Choice1)
    r0.extend(Choice2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:choice][start_index] = r0

  r0
end
_nt_comment_to_eol() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 4129
def _nt_comment_to_eol
  start_index = index
  if node_cache[:comment_to_eol].has_key?(index)
    cached = node_cache[:comment_to_eol][index]
    if cached
      node_cache[:comment_to_eol][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('#', false, index))
    r1 = true
    @index += match_len
  else
    terminal_parse_failure('\'#\'')
    r1 = nil
  end
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      i3, s3 = index, []
      i4 = index
      if (match_len = has_terminal?("\n", false, index))
        r5 = true
        @index += match_len
      else
        terminal_parse_failure('"\\n"')
        r5 = nil
      end
      if r5
        @index = i4
        r4 = nil
        terminal_parse_failure('"\\n"', true)
      else
        @terminal_failures.pop
        @index = i4
        r4 = instantiate_node(SyntaxNode,input, index...index)
      end
      s3 << r4
      if r4
        if index < input_length
          r6 = true
          @index += 1
        else
          terminal_parse_failure("any character")
          r6 = nil
        end
        s3 << r6
      end
      if s3.last
        r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
        r3.extend(CommentToEol0)
      else
        @index = i3
        r3 = nil
      end
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(CommentToEol1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:comment_to_eol][start_index] = r0

  r0
end
_nt_declaration() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 785
def _nt_declaration
  start_index = index
  if node_cache[:declaration].has_key?(index)
    cached = node_cache[:declaration][index]
    if cached
      node_cache[:declaration][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_parsing_rule
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_include_declaration
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:declaration][start_index] = r0

  r0
end
_nt_declaration_sequence() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 710
def _nt_declaration_sequence
  start_index = index
  if node_cache[:declaration_sequence].has_key?(index)
    cached = node_cache[:declaration_sequence][index]
    if cached
      node_cache[:declaration_sequence][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  i1, s1 = index, []
  r2 = _nt_declaration
  s1 << r2
  if r2
    s3, i3 = [], index
    loop do
      i4, s4 = index, []
      r5 = _nt_space
      s4 << r5
      if r5
        r6 = _nt_declaration
        s4 << r6
      end
      if s4.last
        r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
        r4.extend(DeclarationSequence0)
      else
        @index = i4
        r4 = nil
      end
      if r4
        s3 << r4
      else
        break
      end
    end
    r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
    s1 << r3
  end
  if s1.last
    r1 = instantiate_node(DeclarationSequence,input, i1...index, s1)
    r1.extend(DeclarationSequence1)
    r1.extend(DeclarationSequence2)
  else
    @index = i1
    r1 = nil
  end
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    if (match_len = has_terminal?('', false, index))
      r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
      r7.extend(DeclarationSequence3)
      @index += match_len
    else
      terminal_parse_failure('\'\'')
      r7 = nil
    end
    if r7
      r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
      r0 = r7
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:declaration_sequence][start_index] = r0

  r0
end
_nt_double_quoted_string() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2812
def _nt_double_quoted_string
  start_index = index
  if node_cache[:double_quoted_string].has_key?(index)
    cached = node_cache[:double_quoted_string][index]
    if cached
      node_cache[:double_quoted_string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('"', false, index))
    r1 = true
    @index += match_len
  else
    terminal_parse_failure('\'"\'')
    r1 = nil
  end
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      i3, s3 = index, []
      i4 = index
      if (match_len = has_terminal?('"', false, index))
        r5 = true
        @index += match_len
      else
        terminal_parse_failure('\'"\'')
        r5 = nil
      end
      if r5
        @index = i4
        r4 = nil
        terminal_parse_failure('\'"\'', true)
      else
        @terminal_failures.pop
        @index = i4
        r4 = instantiate_node(SyntaxNode,input, index...index)
      end
      s3 << r4
      if r4
        i6 = index
        if (match_len = has_terminal?("\\\\", false, index))
          r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
          @index += match_len
        else
          terminal_parse_failure('"\\\\\\\\"')
          r7 = nil
        end
        if r7
          r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
          r6 = r7
        else
          if (match_len = has_terminal?('\"', false, index))
            r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
            @index += match_len
          else
            terminal_parse_failure('\'\\"\'')
            r8 = nil
          end
          if r8
            r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
            r6 = r8
          else
            if index < input_length
              r9 = true
              @index += 1
            else
              terminal_parse_failure("any character")
              r9 = nil
            end
            if r9
              r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
              r6 = r9
            else
              @index = i6
              r6 = nil
            end
          end
        end
        s3 << r6
      end
      if s3.last
        r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
        r3.extend(DoubleQuotedString0)
      else
        @index = i3
        r3 = nil
      end
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
    if r2
      if (match_len = has_terminal?('"', false, index))
        r10 = true
        @index += match_len
      else
        terminal_parse_failure('\'"\'')
        r10 = nil
      end
      s0 << r10
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(DoubleQuotedString1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:double_quoted_string][start_index] = r0

  r0
end
_nt_grammar() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 530
def _nt_grammar
  start_index = index
  if node_cache[:grammar].has_key?(index)
    cached = node_cache[:grammar][index]
    if cached
      node_cache[:grammar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('grammar', false, index))
    r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'grammar\'')
    r1 = nil
  end
  s0 << r1
  if r1
    r2 = _nt_space
    s0 << r2
    if r2
      r3 = _nt_grammar_name
      s0 << r3
      if r3
        r4 = _nt_space
        s0 << r4
        if r4
          i6, s6 = index, []
          if (match_len = has_terminal?('do', false, index))
            r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
            @index += match_len
          else
            terminal_parse_failure('\'do\'')
            r7 = nil
          end
          s6 << r7
          if r7
            r8 = _nt_space
            s6 << r8
          end
          if s6.last
            r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
            r6.extend(Grammar0)
          else
            @index = i6
            r6 = nil
          end
          if r6
            r5 = r6
          else
            r5 = instantiate_node(SyntaxNode,input, index...index)
          end
          s0 << r5
          if r5
            r9 = _nt_declaration_sequence
            s0 << r9
            if r9
              r11 = _nt_space
              if r11
                r10 = r11
              else
                r10 = instantiate_node(SyntaxNode,input, index...index)
              end
              s0 << r10
              if r10
                if (match_len = has_terminal?('end', false, index))
                  r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                  @index += match_len
                else
                  terminal_parse_failure('\'end\'')
                  r12 = nil
                end
                s0 << r12
              end
            end
          end
        end
      end
    end
  end
  if s0.last
    r0 = instantiate_node(Grammar,input, i0...index, s0)
    r0.extend(Grammar1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:grammar][start_index] = r0

  r0
end
_nt_grammar_name() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 629
def _nt_grammar_name
  start_index = index
  if node_cache[:grammar_name].has_key?(index)
    cached = node_cache[:grammar_name][index]
    if cached
      node_cache[:grammar_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
    r1 = true
    @index += 1
  else
    terminal_parse_failure('[A-Z]')
    r1 = nil
  end
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      r3 = _nt_alphanumeric_char
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(GrammarName0)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:grammar_name][start_index] = r0

  r0
end
_nt_include_declaration() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 830
def _nt_include_declaration
  start_index = index
  if node_cache[:include_declaration].has_key?(index)
    cached = node_cache[:include_declaration][index]
    if cached
      node_cache[:include_declaration][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('include', false, index))
    r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'include\'')
    r1 = nil
  end
  s0 << r1
  if r1
    r2 = _nt_space
    s0 << r2
    if r2
      if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
        r3 = true
        @index += 1
      else
        terminal_parse_failure('[A-Z]')
        r3 = nil
      end
      s0 << r3
      if r3
        s4, i4 = [], index
        loop do
          i5 = index
          r6 = _nt_alphanumeric_char
          if r6
            r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
            r5 = r6
          else
            if (match_len = has_terminal?('::', false, index))
              r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
              @index += match_len
            else
              terminal_parse_failure('\'::\'')
              r7 = nil
            end
            if r7
              r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
              r5 = r7
            else
              @index = i5
              r5 = nil
            end
          end
          if r5
            s4 << r5
          else
            break
          end
        end
        r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
        s0 << r4
      end
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(IncludeDeclaration0)
    r0.extend(IncludeDeclaration1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:include_declaration][start_index] = r0

  r0
end
_nt_inline_module() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 3794
def _nt_inline_module
  start_index = index
  if node_cache[:inline_module].has_key?(index)
    cached = node_cache[:inline_module][index]
    if cached
      node_cache[:inline_module][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('{', false, index))
    r1 = true
    @index += match_len
  else
    terminal_parse_failure('\'{\'')
    r1 = nil
  end
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      i3 = index
      r4 = _nt_inline_module
      if r4
        r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
        r3 = r4
      else
        i5, s5 = index, []
        i6 = index
        if has_terminal?(@regexps[gr = '\A[{}]'] ||= Regexp.new(gr), :regexp, index)
          r7 = true
          @index += 1
        else
          terminal_parse_failure('[{}]')
          r7 = nil
        end
        if r7
          @index = i6
          r6 = nil
          terminal_parse_failure('[{}]', true)
        else
          @terminal_failures.pop
          @index = i6
          r6 = instantiate_node(SyntaxNode,input, index...index)
        end
        s5 << r6
        if r6
          if index < input_length
            r8 = true
            @index += 1
          else
            terminal_parse_failure("any character")
            r8 = nil
          end
          s5 << r8
        end
        if s5.last
          r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
          r5.extend(InlineModule0)
        else
          @index = i5
          r5 = nil
        end
        if r5
          r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
          r3 = r5
        else
          @index = i3
          r3 = nil
        end
      end
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
    if r2
      if (match_len = has_terminal?('}', false, index))
        r9 = true
        @index += match_len
      else
        terminal_parse_failure('\'}\'')
        r9 = nil
      end
      s0 << r9
    end
  end
  if s0.last
    r0 = instantiate_node(InlineModule,input, i0...index, s0)
    r0.extend(InlineModule1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:inline_module][start_index] = r0

  r0
end
_nt_keyword_inside_grammar() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 3902
def _nt_keyword_inside_grammar
  start_index = index
  if node_cache[:keyword_inside_grammar].has_key?(index)
    cached = node_cache[:keyword_inside_grammar][index]
    if cached
      node_cache[:keyword_inside_grammar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  i1 = index
  if (match_len = has_terminal?('rule', false, index))
    r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'rule\'')
    r2 = nil
  end
  if r2
    r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
    r1 = r2
  else
    if (match_len = has_terminal?('end', false, index))
      r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
      @index += match_len
    else
      terminal_parse_failure('\'end\'')
      r3 = nil
    end
    if r3
      r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
      r1 = r3
    else
      @index = i1
      r1 = nil
    end
  end
  s0 << r1
  if r1
    i4 = index
    r5 = _nt_non_space_char
    if r5
      @index = i4
      r4 = nil
    else
      @index = i4
      r4 = instantiate_node(SyntaxNode,input, index...index)
    end
    s0 << r4
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(KeywordInsideGrammar0)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:keyword_inside_grammar][start_index] = r0

  r0
end
_nt_label() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1858
def _nt_label
  start_index = index
  if node_cache[:label].has_key?(index)
    cached = node_cache[:label][index]
    if cached
      node_cache[:label][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_named_label
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_null_label
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:label][start_index] = r0

  r0
end
_nt_labeled_expression_sequence_body() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1387
def _nt_labeled_expression_sequence_body
  start_index = index
  if node_cache[:labeled_expression_sequence_body].has_key?(index)
    cached = node_cache[:labeled_expression_sequence_body][index]
    if cached
      node_cache[:labeled_expression_sequence_body][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  r0 = _nt_labeled_sequence_primary
  r0.extend(LabeledExpressionSequenceBody0)
  r0.extend(LabeledExpressionSequenceBody0)

  node_cache[:labeled_expression_sequence_body][start_index] = r0

  r0
end
_nt_labeled_sequence_primary() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1762
def _nt_labeled_sequence_primary
  start_index = index
  if node_cache[:labeled_sequence_primary].has_key?(index)
    cached = node_cache[:labeled_sequence_primary][index]
    if cached
      node_cache[:labeled_sequence_primary][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r1 = _nt_named_label
  s0 << r1
  if r1
    r2 = _nt_sequence_primary
    s0 << r2
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(LabeledSequencePrimary0)
    r0.extend(LabeledSequencePrimary1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:labeled_sequence_primary][start_index] = r0

  r0
end
_nt_module_declaration() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 310
def _nt_module_declaration
  start_index = index
  if node_cache[:module_declaration].has_key?(index)
    cached = node_cache[:module_declaration][index]
    if cached
      node_cache[:module_declaration][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  i1, s1 = index, []
  i2 = index
  if (match_len = has_terminal?('module', false, index))
    r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'module\'')
    r3 = nil
  end
  if r3
    r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
    r2 = r3
  else
    if (match_len = has_terminal?('class', false, index))
      r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
      @index += match_len
    else
      terminal_parse_failure('\'class\'')
      r4 = nil
    end
    if r4
      r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
      r2 = r4
    else
      @index = i2
      r2 = nil
    end
  end
  s1 << r2
  if r2
    r5 = _nt_space
    s1 << r5
    if r5
      i6, s6 = index, []
      if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
        r7 = true
        @index += 1
      else
        terminal_parse_failure('[A-Z]')
        r7 = nil
      end
      s6 << r7
      if r7
        s8, i8 = [], index
        loop do
          r9 = _nt_alphanumeric_char
          if r9
            s8 << r9
          else
            break
          end
        end
        r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
        s6 << r8
        if r8
          s10, i10 = [], index
          loop do
            i11, s11 = index, []
            if (match_len = has_terminal?('::', false, index))
              r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
              @index += match_len
            else
              terminal_parse_failure('\'::\'')
              r12 = nil
            end
            s11 << r12
            if r12
              if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
                r13 = true
                @index += 1
              else
                terminal_parse_failure('[A-Z]')
                r13 = nil
              end
              s11 << r13
              if r13
                s14, i14 = [], index
                loop do
                  r15 = _nt_alphanumeric_char
                  if r15
                    s14 << r15
                  else
                    break
                  end
                end
                r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
                s11 << r14
              end
            end
            if s11.last
              r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
              r11.extend(ModuleDeclaration0)
            else
              @index = i11
              r11 = nil
            end
            if r11
              s10 << r11
            else
              break
            end
          end
          r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
          s6 << r10
        end
      end
      if s6.last
        r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
        r6.extend(ModuleDeclaration1)
      else
        @index = i6
        r6 = nil
      end
      s1 << r6
      if r6
        r16 = _nt_space
        s1 << r16
      end
    end
  end
  if s1.last
    r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
    r1.extend(ModuleDeclaration2)
  else
    @index = i1
    r1 = nil
  end
  s0 << r1
  if r1
    i17 = index
    r18 = _nt_module_declaration
    if r18
      r18 = SyntaxNode.new(input, (index-1)...index) if r18 == true
      r17 = r18
    else
      r19 = _nt_grammar
      if r19
        r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
        r17 = r19
      else
        @index = i17
        r17 = nil
      end
    end
    s0 << r17
    if r17
      i20, s20 = index, []
      r21 = _nt_space
      s20 << r21
      if r21
        if (match_len = has_terminal?('end', false, index))
          r22 = instantiate_node(SyntaxNode,input, index...(index + match_len))
          @index += match_len
        else
          terminal_parse_failure('\'end\'')
          r22 = nil
        end
        s20 << r22
      end
      if s20.last
        r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
        r20.extend(ModuleDeclaration3)
      else
        @index = i20
        r20 = nil
      end
      s0 << r20
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(ModuleDeclaration4)
    r0.extend(ModuleDeclaration5)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:module_declaration][start_index] = r0

  r0
end
_nt_module_or_grammar() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 227
def _nt_module_or_grammar
  start_index = index
  if node_cache[:module_or_grammar].has_key?(index)
    cached = node_cache[:module_or_grammar][index]
    if cached
      node_cache[:module_or_grammar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_module_declaration
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_grammar
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:module_or_grammar][start_index] = r0

  r0
end
_nt_named_label() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1906
def _nt_named_label
  start_index = index
  if node_cache[:named_label].has_key?(index)
    cached = node_cache[:named_label][index]
    if cached
      node_cache[:named_label][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  i1, s1 = index, []
  r2 = _nt_alpha_char
  s1 << r2
  if r2
    s3, i3 = [], index
    loop do
      r4 = _nt_alphanumeric_char
      if r4
        s3 << r4
      else
        break
      end
    end
    r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
    s1 << r3
  end
  if s1.last
    r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
    r1.extend(NamedLabel0)
  else
    @index = i1
    r1 = nil
  end
  s0 << r1
  if r1
    if (match_len = has_terminal?(':', false, index))
      r5 = true
      @index += match_len
    else
      terminal_parse_failure('\':\'')
      r5 = nil
    end
    s0 << r5
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(NamedLabel1)
    r0.extend(NamedLabel2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:named_label][start_index] = r0

  r0
end
_nt_node_class_declarations() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2265
def _nt_node_class_declarations
  start_index = index
  if node_cache[:node_class_declarations].has_key?(index)
    cached = node_cache[:node_class_declarations][index]
    if cached
      node_cache[:node_class_declarations][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r1 = _nt_node_class_expression
  s0 << r1
  if r1
    r2 = _nt_trailing_inline_module
    s0 << r2
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(NodeClassDeclarations0)
    r0.extend(NodeClassDeclarations1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:node_class_declarations][start_index] = r0

  r0
end
_nt_node_class_expression() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 3530
def _nt_node_class_expression
  start_index = index
  if node_cache[:node_class_expression].has_key?(index)
    cached = node_cache[:node_class_expression][index]
    if cached
      node_cache[:node_class_expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  i1, s1 = index, []
  r2 = _nt_space
  s1 << r2
  if r2
    if (match_len = has_terminal?('<', false, index))
      r3 = true
      @index += match_len
    else
      terminal_parse_failure('\'<\'')
      r3 = nil
    end
    s1 << r3
    if r3
      s4, i4 = [], index
      loop do
        i5, s5 = index, []
        i6 = index
        if (match_len = has_terminal?('>', false, index))
          r7 = true
          @index += match_len
        else
          terminal_parse_failure('\'>\'')
          r7 = nil
        end
        if r7
          @index = i6
          r6 = nil
          terminal_parse_failure('\'>\'', true)
        else
          @terminal_failures.pop
          @index = i6
          r6 = instantiate_node(SyntaxNode,input, index...index)
        end
        s5 << r6
        if r6
          if index < input_length
            r8 = true
            @index += 1
          else
            terminal_parse_failure("any character")
            r8 = nil
          end
          s5 << r8
        end
        if s5.last
          r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
          r5.extend(NodeClassExpression0)
        else
          @index = i5
          r5 = nil
        end
        if r5
          s4 << r5
        else
          break
        end
      end
      if s4.empty?
        @index = i4
        r4 = nil
      else
        r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
      end
      s1 << r4
      if r4
        if (match_len = has_terminal?('>', false, index))
          r9 = true
          @index += match_len
        else
          terminal_parse_failure('\'>\'')
          r9 = nil
        end
        s1 << r9
      end
    end
  end
  if s1.last
    r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
    r1.extend(NodeClassExpression1)
    r1.extend(NodeClassExpression2)
  else
    @index = i1
    r1 = nil
  end
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    if (match_len = has_terminal?('', false, index))
      r10 = instantiate_node(SyntaxNode,input, index...(index + match_len))
      r10.extend(NodeClassExpression3)
      @index += match_len
    else
      terminal_parse_failure('\'\'')
      r10 = nil
    end
    if r10
      r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
      r0 = r10
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:node_class_expression][start_index] = r0

  r0
end
_nt_non_space_char() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 3970
def _nt_non_space_char
  start_index = index
  if node_cache[:non_space_char].has_key?(index)
    cached = node_cache[:non_space_char][index]
    if cached
      node_cache[:non_space_char][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  i1 = index
  r2 = _nt_space
  if r2
    @index = i1
    r1 = nil
  else
    @index = i1
    r1 = instantiate_node(SyntaxNode,input, index...index)
  end
  s0 << r1
  if r1
    if index < input_length
      r3 = true
      @index += 1
    else
      terminal_parse_failure("any character")
      r3 = nil
    end
    s0 << r3
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(NonSpaceChar0)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:non_space_char][start_index] = r0

  r0
end
_nt_nonterminal() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2626
def _nt_nonterminal
  start_index = index
  if node_cache[:nonterminal].has_key?(index)
    cached = node_cache[:nonterminal][index]
    if cached
      node_cache[:nonterminal][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  i1 = index
  r2 = _nt_keyword_inside_grammar
  if r2
    @index = i1
    r1 = nil
  else
    @index = i1
    r1 = instantiate_node(SyntaxNode,input, index...index)
  end
  s0 << r1
  if r1
    i3, s3 = index, []
    r4 = _nt_alpha_char
    s3 << r4
    if r4
      s5, i5 = [], index
      loop do
        r6 = _nt_alphanumeric_char
        if r6
          s5 << r6
        else
          break
        end
      end
      r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
      s3 << r5
    end
    if s3.last
      r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
      r3.extend(Nonterminal0)
    else
      @index = i3
      r3 = nil
    end
    s0 << r3
  end
  if s0.last
    r0 = instantiate_node(Nonterminal,input, i0...index, s0)
    r0.extend(Nonterminal1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:nonterminal][start_index] = r0

  r0
end
_nt_null_label() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1972
def _nt_null_label
  start_index = index
  if node_cache[:null_label].has_key?(index)
    cached = node_cache[:null_label][index]
    if cached
      node_cache[:null_label][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  if (match_len = has_terminal?('', false, index))
    r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
    r0.extend(NullLabel0)
    @index += match_len
  else
    terminal_parse_failure('\'\'')
    r0 = nil
  end

  node_cache[:null_label][start_index] = r0

  r0
end
_nt_occurrence_range() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2357
def _nt_occurrence_range
  start_index = index
  if node_cache[:occurrence_range].has_key?(index)
    cached = node_cache[:occurrence_range][index]
    if cached
      node_cache[:occurrence_range][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r2 = _nt_space
  if r2
    r1 = r2
  else
    r1 = instantiate_node(SyntaxNode,input, index...index)
  end
  s0 << r1
  if r1
    s3, i3 = [], index
    loop do
      if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
        r4 = true
        @index += 1
      else
        terminal_parse_failure('[0-9]')
        r4 = nil
      end
      if r4
        s3 << r4
      else
        break
      end
    end
    r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
    s0 << r3
    if r3
      if (match_len = has_terminal?('..', false, index))
        r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
        @index += match_len
      else
        terminal_parse_failure('\'..\'')
        r5 = nil
      end
      s0 << r5
      if r5
        s6, i6 = [], index
        loop do
          if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
            r7 = true
            @index += 1
          else
            terminal_parse_failure('[0-9]')
            r7 = nil
          end
          if r7
            s6 << r7
          else
            break
          end
        end
        r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
        s0 << r6
      end
    end
  end
  if s0.last
    r0 = instantiate_node(OccurrenceRange,input, i0...index, s0)
    r0.extend(OccurrenceRange0)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:occurrence_range][start_index] = r0

  r0
end
_nt_optional_suffix() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2213
def _nt_optional_suffix
  start_index = index
  if node_cache[:optional_suffix].has_key?(index)
    cached = node_cache[:optional_suffix][index]
    if cached
      node_cache[:optional_suffix][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  if (match_len = has_terminal?('?', false, index))
    r0 = instantiate_node(Optional,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'?\'')
    r0 = nil
  end

  node_cache[:optional_suffix][start_index] = r0

  r0
end
_nt_optionally_labeled_sequence_primary() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1702
def _nt_optionally_labeled_sequence_primary
  start_index = index
  if node_cache[:optionally_labeled_sequence_primary].has_key?(index)
    cached = node_cache[:optionally_labeled_sequence_primary][index]
    if cached
      node_cache[:optionally_labeled_sequence_primary][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_labeled_sequence_primary
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_unlabeled_sequence_primary
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:optionally_labeled_sequence_primary][start_index] = r0

  r0
end
_nt_parenthesized_expression() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2550
def _nt_parenthesized_expression
  start_index = index
  if node_cache[:parenthesized_expression].has_key?(index)
    cached = node_cache[:parenthesized_expression][index]
    if cached
      node_cache[:parenthesized_expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('(', false, index))
    r1 = true
    @index += match_len
  else
    terminal_parse_failure('\'(\'')
    r1 = nil
  end
  s0 << r1
  if r1
    r3 = _nt_space
    if r3
      r2 = r3
    else
      r2 = instantiate_node(SyntaxNode,input, index...index)
    end
    s0 << r2
    if r2
      r4 = _nt_parsing_expression
      s0 << r4
      if r4
        r6 = _nt_space
        if r6
          r5 = r6
        else
          r5 = instantiate_node(SyntaxNode,input, index...index)
        end
        s0 << r5
        if r5
          if (match_len = has_terminal?(')', false, index))
            r7 = true
            @index += match_len
          else
            terminal_parse_failure('\')\'')
            r7 = nil
          end
          s0 << r7
        end
      end
    end
  end
  if s0.last
    r0 = instantiate_node(ParenthesizedExpression,input, i0...index, s0)
    r0.extend(ParenthesizedExpression0)
    r0.extend(ParenthesizedExpression1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:parenthesized_expression][start_index] = r0

  r0
end
_nt_parsing_expression() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1031
def _nt_parsing_expression
  start_index = index
  if node_cache[:parsing_expression].has_key?(index)
    cached = node_cache[:parsing_expression][index]
    if cached
      node_cache[:parsing_expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_choice
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_sequence
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      r3 = _nt_primary
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        @index = i0
        r0 = nil
      end
    end
  end

  node_cache[:parsing_expression][start_index] = r0

  r0
end
_nt_parsing_rule() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 940
def _nt_parsing_rule
  start_index = index
  if node_cache[:parsing_rule].has_key?(index)
    cached = node_cache[:parsing_rule][index]
    if cached
      node_cache[:parsing_rule][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('rule', false, index))
    r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'rule\'')
    r1 = nil
  end
  s0 << r1
  if r1
    r2 = _nt_space
    s0 << r2
    if r2
      r3 = _nt_nonterminal
      s0 << r3
      if r3
        r4 = _nt_space
        s0 << r4
        if r4
          i6, s6 = index, []
          if (match_len = has_terminal?('do', false, index))
            r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
            @index += match_len
          else
            terminal_parse_failure('\'do\'')
            r7 = nil
          end
          s6 << r7
          if r7
            r8 = _nt_space
            s6 << r8
          end
          if s6.last
            r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
            r6.extend(ParsingRule0)
          else
            @index = i6
            r6 = nil
          end
          if r6
            r5 = r6
          else
            r5 = instantiate_node(SyntaxNode,input, index...index)
          end
          s0 << r5
          if r5
            r9 = _nt_parsing_expression
            s0 << r9
            if r9
              r10 = _nt_space
              s0 << r10
              if r10
                if (match_len = has_terminal?('end', false, index))
                  r11 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                  @index += match_len
                else
                  terminal_parse_failure('\'end\'')
                  r11 = nil
                end
                s0 << r11
              end
            end
          end
        end
      end
    end
  end
  if s0.last
    r0 = instantiate_node(ParsingRule,input, i0...index, s0)
    r0.extend(ParsingRule1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:parsing_rule][start_index] = r0

  r0
end
_nt_predicate_block() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 3751
def _nt_predicate_block
  start_index = index
  if node_cache[:predicate_block].has_key?(index)
    cached = node_cache[:predicate_block][index]
    if cached
      node_cache[:predicate_block][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?('', false, index))
    r1 = true
    @index += match_len
  else
    terminal_parse_failure('\'\'')
    r1 = nil
  end
  s0 << r1
  if r1
    r2 = _nt_inline_module
    s0 << r2
  end
  if s0.last
    r0 = instantiate_node(PredicateBlock,input, i0...index, s0)
    r0.extend(PredicateBlock0)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:predicate_block][start_index] = r0

  r0
end
_nt_prefix() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2437
def _nt_prefix
  start_index = index
  if node_cache[:prefix].has_key?(index)
    cached = node_cache[:prefix][index]
    if cached
      node_cache[:prefix][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  if (match_len = has_terminal?('&', false, index))
    r1 = instantiate_node(AndPredicate,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'&\'')
    r1 = nil
  end
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    if (match_len = has_terminal?('!', false, index))
      r2 = instantiate_node(NotPredicate,input, index...(index + match_len))
      @index += match_len
    else
      terminal_parse_failure('\'!\'')
      r2 = nil
    end
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      if (match_len = has_terminal?('~', false, index))
        r3 = instantiate_node(TransientPrefix,input, index...(index + match_len))
        @index += match_len
      else
        terminal_parse_failure('\'~\'')
        r3 = nil
      end
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        @index = i0
        r0 = nil
      end
    end
  end

  node_cache[:prefix][start_index] = r0

  r0
end
_nt_primary() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1589
def _nt_primary
  start_index = index
  if node_cache[:primary].has_key?(index)
    cached = node_cache[:primary][index]
    if cached
      node_cache[:primary][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  i1, s1 = index, []
  r2 = _nt_prefix
  s1 << r2
  if r2
    r3 = _nt_atomic
    s1 << r3
  end
  if s1.last
    r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
    r1.extend(Primary0)
    r1.extend(Primary1)
  else
    @index = i1
    r1 = nil
  end
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    i4, s4 = index, []
    r5 = _nt_prefix
    s4 << r5
    if r5
      r7 = _nt_space
      if r7
        r6 = r7
      else
        r6 = instantiate_node(SyntaxNode,input, index...index)
      end
      s4 << r6
      if r6
        r8 = _nt_predicate_block
        s4 << r8
      end
    end
    if s4.last
      r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
      r4.extend(Primary2)
      r4.extend(Primary3)
    else
      @index = i4
      r4 = nil
    end
    if r4
      r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
      r0 = r4
    else
      i9, s9 = index, []
      r10 = _nt_atomic
      s9 << r10
      if r10
        r11 = _nt_suffix
        s9 << r11
        if r11
          r12 = _nt_node_class_declarations
          s9 << r12
        end
      end
      if s9.last
        r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
        r9.extend(Primary4)
        r9.extend(Primary5)
      else
        @index = i9
        r9 = nil
      end
      if r9
        r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
        r0 = r9
      else
        i13, s13 = index, []
        r14 = _nt_atomic
        s13 << r14
        if r14
          r15 = _nt_node_class_declarations
          s13 << r15
        end
        if s13.last
          r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
          r13.extend(Primary6)
          r13.extend(Primary7)
        else
          @index = i13
          r13 = nil
        end
        if r13
          r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
          r0 = r13
        else
          @index = i0
          r0 = nil
        end
      end
    end
  end

  node_cache[:primary][start_index] = r0

  r0
end
_nt_quoted_string() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2741
def _nt_quoted_string
  start_index = index
  if node_cache[:quoted_string].has_key?(index)
    cached = node_cache[:quoted_string][index]
    if cached
      node_cache[:quoted_string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  i1 = index
  r2 = _nt_single_quoted_string
  if r2
    r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
    r1 = r2
  else
    r3 = _nt_double_quoted_string
    if r3
      r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
      r1 = r3
    else
      @index = i1
      r1 = nil
    end
  end
  s0 << r1
  if r1
    s4, i4 = [], index
    loop do
      if has_terminal?(@regexps[gr = '\A[ir]'] ||= Regexp.new(gr), :regexp, index)
        r5 = true
        @index += 1
      else
        terminal_parse_failure('[ir]')
        r5 = nil
      end
      if r5
        s4 << r5
      else
        break
      end
    end
    r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
    s0 << r4
  end
  if s0.last
    r0 = instantiate_node(Terminal,input, i0...index, s0)
    r0.extend(QuotedString0)
    r0.extend(QuotedString1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:quoted_string][start_index] = r0

  r0
end
_nt_repetition_suffix() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2297
def _nt_repetition_suffix
  start_index = index
  if node_cache[:repetition_suffix].has_key?(index)
    cached = node_cache[:repetition_suffix][index]
    if cached
      node_cache[:repetition_suffix][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  if (match_len = has_terminal?('+', false, index))
    r1 = instantiate_node(OneOrMore,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('\'+\'')
    r1 = nil
  end
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    if (match_len = has_terminal?('*', false, index))
      r2 = instantiate_node(ZeroOrMore,input, index...(index + match_len))
      @index += match_len
    else
      terminal_parse_failure('\'*\'')
      r2 = nil
    end
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      r3 = _nt_occurrence_range
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        @index = i0
        r0 = nil
      end
    end
  end

  node_cache[:repetition_suffix][start_index] = r0

  r0
end
_nt_require_statement() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 127
def _nt_require_statement
  start_index = index
  if node_cache[:require_statement].has_key?(index)
    cached = node_cache[:require_statement][index]
    if cached
      node_cache[:require_statement][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r2 = _nt_space
  if r2
    r1 = r2
  else
    r1 = instantiate_node(SyntaxNode,input, index...index)
  end
  s0 << r1
  if r1
    if (match_len = has_terminal?("require", false, index))
      r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
      @index += match_len
    else
      terminal_parse_failure('"require"')
      r3 = nil
    end
    s0 << r3
    if r3
      s4, i4 = [], index
      loop do
        if has_terminal?(@regexps[gr = '\A[ \\t]'] ||= Regexp.new(gr), :regexp, index)
          r5 = true
          @index += 1
        else
          terminal_parse_failure('[ \\t]')
          r5 = nil
        end
        if r5
          s4 << r5
        else
          break
        end
      end
      if s4.empty?
        @index = i4
        r4 = nil
      else
        r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
      end
      s0 << r4
      if r4
        s6, i6 = [], index
        loop do
          if has_terminal?(@regexps[gr = '\A[^\\n\\r]'] ||= Regexp.new(gr), :regexp, index)
            r7 = true
            @index += 1
          else
            terminal_parse_failure('[^\\n\\r]')
            r7 = nil
          end
          if r7
            s6 << r7
          else
            break
          end
        end
        if s6.empty?
          @index = i6
          r6 = nil
        else
          r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
        end
        s0 << r6
        if r6
          if has_terminal?(@regexps[gr = '\A[\\n\\r]'] ||= Regexp.new(gr), :regexp, index)
            r8 = true
            @index += 1
          else
            terminal_parse_failure('[\\n\\r]')
            r8 = nil
          end
          s0 << r8
        end
      end
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(RequireStatement0)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:require_statement][start_index] = r0

  r0
end
_nt_sequence() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1228
def _nt_sequence
  start_index = index
  if node_cache[:sequence].has_key?(index)
    cached = node_cache[:sequence][index]
    if cached
      node_cache[:sequence][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r1 = _nt_sequence_body
  s0 << r1
  if r1
    r2 = _nt_node_class_declarations
    s0 << r2
  end
  if s0.last
    r0 = instantiate_node(Sequence,input, i0...index, s0)
    r0.extend(Sequence0)
    r0.extend(Sequence1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:sequence][start_index] = r0

  r0
end
_nt_sequence_body() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1260
def _nt_sequence_body
  start_index = index
  if node_cache[:sequence_body].has_key?(index)
    cached = node_cache[:sequence_body][index]
    if cached
      node_cache[:sequence_body][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_variable_length_sequence_body
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_labeled_expression_sequence_body
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:sequence_body][start_index] = r0

  r0
end
_nt_sequence_primary() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2086
def _nt_sequence_primary
  start_index = index
  if node_cache[:sequence_primary].has_key?(index)
    cached = node_cache[:sequence_primary][index]
    if cached
      node_cache[:sequence_primary][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  i1, s1 = index, []
  r2 = _nt_prefix
  s1 << r2
  if r2
    r3 = _nt_atomic
    s1 << r3
  end
  if s1.last
    r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
    r1.extend(SequencePrimary0)
    r1.extend(SequencePrimary1)
  else
    @index = i1
    r1 = nil
  end
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    i4, s4 = index, []
    r5 = _nt_prefix
    s4 << r5
    if r5
      r7 = _nt_space
      if r7
        r6 = r7
      else
        r6 = instantiate_node(SyntaxNode,input, index...index)
      end
      s4 << r6
      if r6
        r8 = _nt_predicate_block
        s4 << r8
      end
    end
    if s4.last
      r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
      r4.extend(SequencePrimary2)
      r4.extend(SequencePrimary3)
    else
      @index = i4
      r4 = nil
    end
    if r4
      r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
      r0 = r4
    else
      i9, s9 = index, []
      r10 = _nt_atomic
      s9 << r10
      if r10
        r11 = _nt_suffix
        s9 << r11
      end
      if s9.last
        r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
        r9.extend(SequencePrimary4)
        r9.extend(SequencePrimary5)
      else
        @index = i9
        r9 = nil
      end
      if r9
        r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
        r0 = r9
      else
        r12 = _nt_atomic
        if r12
          r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
          r0 = r12
        else
          @index = i0
          r0 = nil
        end
      end
    end
  end

  node_cache[:sequence_primary][start_index] = r0

  r0
end
_nt_single_quoted_string() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2945
def _nt_single_quoted_string
  start_index = index
  if node_cache[:single_quoted_string].has_key?(index)
    cached = node_cache[:single_quoted_string][index]
    if cached
      node_cache[:single_quoted_string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  if (match_len = has_terminal?("'", false, index))
    r1 = true
    @index += match_len
  else
    terminal_parse_failure('"\'"')
    r1 = nil
  end
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      i3, s3 = index, []
      i4 = index
      if (match_len = has_terminal?("'", false, index))
        r5 = true
        @index += match_len
      else
        terminal_parse_failure('"\'"')
        r5 = nil
      end
      if r5
        @index = i4
        r4 = nil
        terminal_parse_failure('"\'"', true)
      else
        @terminal_failures.pop
        @index = i4
        r4 = instantiate_node(SyntaxNode,input, index...index)
      end
      s3 << r4
      if r4
        i6 = index
        if (match_len = has_terminal?("\\\\", false, index))
          r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
          @index += match_len
        else
          terminal_parse_failure('"\\\\\\\\"')
          r7 = nil
        end
        if r7
          r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
          r6 = r7
        else
          if (match_len = has_terminal?("\\'", false, index))
            r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
            @index += match_len
          else
            terminal_parse_failure('"\\\\\'"')
            r8 = nil
          end
          if r8
            r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
            r6 = r8
          else
            if index < input_length
              r9 = true
              @index += 1
            else
              terminal_parse_failure("any character")
              r9 = nil
            end
            if r9
              r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
              r6 = r9
            else
              @index = i6
              r6 = nil
            end
          end
        end
        s3 << r6
      end
      if s3.last
        r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
        r3.extend(SingleQuotedString0)
      else
        @index = i3
        r3 = nil
      end
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
    if r2
      if (match_len = has_terminal?("'", false, index))
        r10 = true
        @index += match_len
      else
        terminal_parse_failure('"\'"')
        r10 = nil
      end
      s0 << r10
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(SingleQuotedString1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:single_quoted_string][start_index] = r0

  r0
end
_nt_space() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 4077
def _nt_space
  start_index = index
  if node_cache[:space].has_key?(index)
    cached = node_cache[:space][index]
    if cached
      node_cache[:space][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  s0, i0 = [], index
  loop do
    i1 = index
    r2 = _nt_white
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r1 = r2
    else
      r3 = _nt_comment_to_eol
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r1 = r3
      else
        @index = i1
        r1 = nil
      end
    end
    if r1
      s0 << r1
    else
      break
    end
  end
  if s0.empty?
    @index = i0
    r0 = nil
  else
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
  end

  node_cache[:space][start_index] = r0

  r0
end
_nt_suffix() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2181
def _nt_suffix
  start_index = index
  if node_cache[:suffix].has_key?(index)
    cached = node_cache[:suffix][index]
    if cached
      node_cache[:suffix][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_repetition_suffix
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_optional_suffix
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:suffix][start_index] = r0

  r0
end
_nt_terminal() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 2687
def _nt_terminal
  start_index = index
  if node_cache[:terminal].has_key?(index)
    cached = node_cache[:terminal][index]
    if cached
      node_cache[:terminal][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_quoted_string
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_character_class
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      r3 = _nt_anything_symbol
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        @index = i0
        r0 = nil
      end
    end
  end

  node_cache[:terminal][start_index] = r0

  r0
end
_nt_trailing_inline_module() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 3692
def _nt_trailing_inline_module
  start_index = index
  if node_cache[:trailing_inline_module].has_key?(index)
    cached = node_cache[:trailing_inline_module][index]
    if cached
      node_cache[:trailing_inline_module][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  i1, s1 = index, []
  r2 = _nt_space
  s1 << r2
  if r2
    r3 = _nt_inline_module
    s1 << r3
  end
  if s1.last
    r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
    r1.extend(TrailingInlineModule0)
    r1.extend(TrailingInlineModule1)
  else
    @index = i1
    r1 = nil
  end
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    if (match_len = has_terminal?('', false, index))
      r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
      r4.extend(TrailingInlineModule2)
      @index += match_len
    else
      terminal_parse_failure('\'\'')
      r4 = nil
    end
    if r4
      r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
      r0 = r4
    else
      @index = i0
      r0 = nil
    end
  end

  node_cache[:trailing_inline_module][start_index] = r0

  r0
end
_nt_treetop_file() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 43
def _nt_treetop_file
  start_index = index
  if node_cache[:treetop_file].has_key?(index)
    cached = node_cache[:treetop_file][index]
    if cached
      node_cache[:treetop_file][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  s1, i1 = [], index
  loop do
    i2, s2 = index, []
    r4 = _nt_space
    if r4
      r3 = r4
    else
      r3 = instantiate_node(SyntaxNode,input, index...index)
    end
    s2 << r3
    if r3
      r5 = _nt_require_statement
      s2 << r5
    end
    if s2.last
      r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
      r2.extend(TreetopFile0)
    else
      @index = i2
      r2 = nil
    end
    if r2
      s1 << r2
    else
      break
    end
  end
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
  s0 << r1
  if r1
    r7 = _nt_space
    if r7
      r6 = r7
    else
      r6 = instantiate_node(SyntaxNode,input, index...index)
    end
    s0 << r6
    if r6
      r8 = _nt_module_or_grammar
      s0 << r8
      if r8
        r10 = _nt_space
        if r10
          r9 = r10
        else
          r9 = instantiate_node(SyntaxNode,input, index...index)
        end
        s0 << r9
      end
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(TreetopFile1)
    r0.extend(TreetopFile2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:treetop_file][start_index] = r0

  r0
end
_nt_unlabeled_sequence_primary() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1826
def _nt_unlabeled_sequence_primary
  start_index = index
  if node_cache[:unlabeled_sequence_primary].has_key?(index)
    cached = node_cache[:unlabeled_sequence_primary][index]
    if cached
      node_cache[:unlabeled_sequence_primary][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r1 = _nt_null_label
  s0 << r1
  if r1
    r2 = _nt_sequence_primary
    s0 << r2
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(UnlabeledSequencePrimary0)
    r0.extend(UnlabeledSequencePrimary1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:unlabeled_sequence_primary][start_index] = r0

  r0
end
_nt_variable_length_sequence_body() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 1318
def _nt_variable_length_sequence_body
  start_index = index
  if node_cache[:variable_length_sequence_body].has_key?(index)
    cached = node_cache[:variable_length_sequence_body][index]
    if cached
      node_cache[:variable_length_sequence_body][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r1 = _nt_optionally_labeled_sequence_primary
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      i3, s3 = index, []
      r4 = _nt_space
      s3 << r4
      if r4
        r5 = _nt_optionally_labeled_sequence_primary
        s3 << r5
      end
      if s3.last
        r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
        r3.extend(VariableLengthSequenceBody0)
      else
        @index = i3
        r3 = nil
      end
      if r3
        s2 << r3
      else
        break
      end
    end
    if s2.empty?
      @index = i2
      r2 = nil
    else
      r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    end
    s0 << r2
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(VariableLengthSequenceBody1)
    r0.extend(VariableLengthSequenceBody2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:variable_length_sequence_body][start_index] = r0

  r0
end
_nt_white() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 4210
def _nt_white
  start_index = index
  if node_cache[:white].has_key?(index)
    cached = node_cache[:white][index]
    if cached
      node_cache[:white][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  if has_terminal?(@regexps[gr = '\A[ \\t\\n\\r]'] ||= Regexp.new(gr), :regexp, index)
    r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
    @index += 1
  else
    terminal_parse_failure('[ \\t\\n\\r]')
    r0 = nil
  end

  node_cache[:white][start_index] = r0

  r0
end
root() click to toggle source
# File lib/treetop/compiler/metagrammar.rb, line 9
def root
  @root ||= :treetop_file
end