module Q

Constants

VERSION

Public Class Methods

load(debug = false) click to toggle source
# File lib/q.rb, line 4
def self.load debug = false
  if debug
    return Treetop.load "#{File.dirname __FILE__}/q"
  end

  return require 'q/parser'
end

Public Instance Methods

_nt_assignment() click to toggle source
# File lib/q/parser.rb, line 394
def _nt_assignment
  start_index = index
  if node_cache[:assignment].has_key?(index)
    cached = node_cache[:assignment][index]
    if cached
      node_cache[:assignment][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_self
  if r2
    r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
    r1 = r2
  else
    r3 = _nt_identifier
    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
      r5 = _nt_ws
      if r5
        s4 << r5
      else
        break
      end
    end
    r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
    s0 << r4
    if r4
      if (match_len = has_terminal?('<:', false, index))
        r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
        @index += match_len
      else
        terminal_parse_failure('<:')
        r6 = nil
      end
      s0 << r6
      if r6
        s7, i7 = [], index
        loop do
          r8 = _nt_ws
          if r8
            s7 << r8
          else
            break
          end
        end
        r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
        s0 << r7
        if r7
          r9 = _nt_expression
          s0 << r9
        end
      end
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Assignment0)
    r0.extend(Assignment1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:assignment][start_index] = r0

  r0
end
_nt_binomial() click to toggle source
# File lib/q/parser.rb, line 685
def _nt_binomial
  start_index = index
  if node_cache[:binomial].has_key?(index)
    cached = node_cache[:binomial][index]
    if cached
      node_cache[:binomial][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r1 = _nt_monomial
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      r3 = _nt_ws
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
    if r2
      s4, i4 = [], index
      loop do
        i5, s5 = index, []
        s6, i6 = [], index
        loop do
          r7 = _nt_ws
          if r7
            s6 << r7
          else
            break
          end
        end
        r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
        s5 << r6
        if r6
          r8 = _nt_binomial_operator
          s5 << r8
          if r8
            s9, i9 = [], index
            loop do
              r10 = _nt_ws
              if r10
                s9 << r10
              else
                break
              end
            end
            r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
            s5 << r9
            if r9
              r11 = _nt_monomial
              s5 << r11
            end
          end
        end
        if s5.last
          r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
          r5.extend(Binomial0)
        else
          @index = i5
          r5 = nil
        end
        if r5
          s4 << r5
        else
          break
        end
      end
      r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
      s0 << r4
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Binomial1)
    r0.extend(Binomial2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:binomial][start_index] = r0

  r0
end
_nt_binomial_operator() click to toggle source
# File lib/q/parser.rb, line 1394
def _nt_binomial_operator
  start_index = index
  if node_cache[:binomial_operator].has_key?(index)
    cached = node_cache[:binomial_operator][index]
    if cached
      node_cache[:binomial_operator][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_minus
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_plus
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      r3 = _nt_comparison_operators
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        @index = i0
        r0 = nil
      end
    end
  end

  node_cache[:binomial_operator][start_index] = r0

  r0
end
_nt_call() click to toggle source
# File lib/q/parser.rb, line 510
def _nt_call
  start_index = index
  if node_cache[:call].has_key?(index)
    cached = node_cache[:call][index]
    if cached
      node_cache[:call][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_function
  if r2
    r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
    r1 = r2
  else
    r3 = _nt_self
    if r3
      r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
      r1 = r3
    else
      r4 = _nt_identifier
      if r4
        r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
        r1 = r4
      else
        @index = i1
        r1 = nil
      end
    end
  end
  s0 << r1
  if r1
    s5, i5 = [], index
    loop do
      r6 = _nt_ws
      if r6
        s5 << r6
      else
        break
      end
    end
    r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
    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
      if r7
        s8, i8 = [], index
        loop do
          i9, s9 = index, []
          s10, i10 = [], index
          loop do
            r11 = _nt_ws
            if r11
              s10 << r11
            else
              break
            end
          end
          r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
          s9 << r10
          if r10
            r12 = _nt_expression
            s9 << r12
            if r12
              s13, i13 = [], index
              loop do
                r14 = _nt_ws
                if r14
                  s13 << r14
                else
                  break
                end
              end
              r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
              s9 << r13
            end
          end
          if s9.last
            r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
            r9.extend(Call0)
          else
            @index = i9
            r9 = nil
          end
          if r9
            s8 << r9
          else
            break
          end
        end
        r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
        s0 << r8
        if r8
          if (match_len = has_terminal?(')', false, index))
            r15 = true
            @index += match_len
          else
            terminal_parse_failure(')')
            r15 = nil
          end
          s0 << r15
        end
      end
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Call1)
    r0.extend(Call2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:call][start_index] = r0

  r0
end
_nt_comment() click to toggle source
# File lib/q/parser.rb, line 2652
def _nt_comment
  start_index = index
  if node_cache[:comment].has_key?(index)
    cached = node_cache[:comment][index]
    if cached
      node_cache[:comment][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
      i5 = index
      if (match_len = has_terminal?("\n", false, index))
        r6 = true
        @index += match_len
      else
        terminal_parse_failure("\n")
        r6 = nil
      end
      if r6
        r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
        r5 = r6
      else
        if (match_len = has_terminal?("\r", false, index))
          r7 = true
          @index += match_len
        else
          terminal_parse_failure("\r")
          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
        r4 = nil
      else
        @index = i4
        r4 = instantiate_node(SyntaxNode,input, index...index)
      end
      s3 << r4
      if r4
        if index < input_length
          r8 = true
          @index += 1
        else
          terminal_parse_failure("any character")
          r8 = nil
        end
        s3 << r8
      end
      if s3.last
        r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
        r3.extend(Comment0)
      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
      s9, i9 = [], index
      loop do
        i10 = index
        if (match_len = has_terminal?("\n", false, index))
          r11 = true
          @index += match_len
        else
          terminal_parse_failure("\n")
          r11 = nil
        end
        if r11
          r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
          r10 = r11
        else
          if (match_len = has_terminal?("\r", false, index))
            r12 = true
            @index += match_len
          else
            terminal_parse_failure("\r")
            r12 = nil
          end
          if r12
            r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
            r10 = r12
          else
            @index = i10
            r10 = nil
          end
        end
        if r10
          s9 << r10
        else
          break
        end
      end
      if s9.empty?
        @index = i9
        r9 = nil
      else
        r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
      end
      s0 << r9
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Comment1)
    r0.extend(Comment2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:comment][start_index] = r0

  r0
end
_nt_comparison_operators() click to toggle source
# File lib/q/parser.rb, line 1622
def _nt_comparison_operators
  start_index = index
  if node_cache[:comparison_operators].has_key?(index)
    cached = node_cache[:comparison_operators][index]
    if cached
      node_cache[:comparison_operators][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_lt
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_lte
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      r3 = _nt_gt
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        r4 = _nt_gte
        if r4
          r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
          r0 = r4
        else
          r5 = _nt_neq
          if r5
            r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
            r0 = r5
          else
            r6 = _nt_eq
            if r6
              r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
              r0 = r6
            else
              @index = i0
              r0 = nil
            end
          end
        end
      end
    end
  end

  node_cache[:comparison_operators][start_index] = r0

  r0
end
_nt_conditional() click to toggle source
# File lib/q/parser.rb, line 933
def _nt_conditional
  start_index = index
  if node_cache[:conditional].has_key?(index)
    cached = node_cache[:conditional][index]
    if cached
      node_cache[:conditional][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?('if', false, index))
    r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
    @index += match_len
  else
    terminal_parse_failure('if')
    r1 = nil
  end
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      r3 = _nt_ws
      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))
        r4 = true
        @index += match_len
      else
        terminal_parse_failure('[')
        r4 = nil
      end
      s0 << r4
      if r4
        i5 = index
        r6 = _nt_conditional_expression
        if r6
          r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
          r5 = r6
        else
          r7 = _nt_statements
          if r7
            r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
            r5 = r7
          else
            @index = i5
            r5 = nil
          end
        end
        s0 << r5
        if r5
          if (match_len = has_terminal?(']', false, index))
            r8 = true
            @index += match_len
          else
            terminal_parse_failure(']')
            r8 = nil
          end
          s0 << r8
          if r8
            s9, i9 = [], index
            loop do
              r10 = _nt_ws
              if r10
                s9 << r10
              else
                break
              end
            end
            r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
            s0 << r9
            if r9
              if (match_len = has_terminal?('then', false, index))
                r11 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                @index += match_len
              else
                terminal_parse_failure('then')
                r11 = nil
              end
              s0 << r11
              if r11
                s12, i12 = [], index
                loop do
                  r13 = _nt_ws
                  if r13
                    s12 << r13
                  else
                    break
                  end
                end
                r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
                s0 << r12
                if r12
                  if (match_len = has_terminal?('[', false, index))
                    r14 = true
                    @index += match_len
                  else
                    terminal_parse_failure('[')
                    r14 = nil
                  end
                  s0 << r14
                  if r14
                    i15 = index
                    r16 = _nt_conditional_expression
                    if r16
                      r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true
                      r15 = r16
                    else
                      r17 = _nt_statements
                      if r17
                        r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
                        r15 = r17
                      else
                        @index = i15
                        r15 = nil
                      end
                    end
                    s0 << r15
                    if r15
                      if (match_len = has_terminal?(']', false, index))
                        r18 = true
                        @index += match_len
                      else
                        terminal_parse_failure(']')
                        r18 = nil
                      end
                      s0 << r18
                      if r18
                        i20, s20 = index, []
                        s21, i21 = [], index
                        loop do
                          r22 = _nt_ws
                          if r22
                            s21 << r22
                          else
                            break
                          end
                        end
                        r21 = instantiate_node(SyntaxNode,input, i21...index, s21)
                        s20 << r21
                        if r21
                          if (match_len = has_terminal?('else', false, index))
                            r23 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                            @index += match_len
                          else
                            terminal_parse_failure('else')
                            r23 = nil
                          end
                          s20 << r23
                          if r23
                            s24, i24 = [], index
                            loop do
                              r25 = _nt_ws
                              if r25
                                s24 << r25
                              else
                                break
                              end
                            end
                            r24 = instantiate_node(SyntaxNode,input, i24...index, s24)
                            s20 << r24
                            if r24
                              if (match_len = has_terminal?('[', false, index))
                                r26 = true
                                @index += match_len
                              else
                                terminal_parse_failure('[')
                                r26 = nil
                              end
                              s20 << r26
                              if r26
                                i27 = index
                                r28 = _nt_conditional_expression
                                if r28
                                  r28 = SyntaxNode.new(input, (index-1)...index) if r28 == true
                                  r27 = r28
                                else
                                  r29 = _nt_statements
                                  if r29
                                    r29 = SyntaxNode.new(input, (index-1)...index) if r29 == true
                                    r27 = r29
                                  else
                                    @index = i27
                                    r27 = nil
                                  end
                                end
                                s20 << r27
                                if r27
                                  if (match_len = has_terminal?(']', false, index))
                                    r30 = true
                                    @index += match_len
                                  else
                                    terminal_parse_failure(']')
                                    r30 = nil
                                  end
                                  s20 << r30
                                end
                              end
                            end
                          end
                        end
                        if s20.last
                          r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
                          r20.extend(Conditional0)
                        else
                          @index = i20
                          r20 = nil
                        end
                        if r20
                          r19 = r20
                        else
                          r19 = instantiate_node(SyntaxNode,input, index...index)
                        end
                        s0 << r19
                      end
                    end
                  end
                end
              end
            end
          end
        end
      end
    end
  end
  if s0.last
    r0 = instantiate_node(Q::Syntax::Conditional,input, i0...index, s0)
    r0.extend(Conditional1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:conditional][start_index] = r0

  r0
end
_nt_conditional_expression() click to toggle source
# File lib/q/parser.rb, line 1192
def _nt_conditional_expression
  start_index = index
  if node_cache[:conditional_expression].has_key?(index)
    cached = node_cache[:conditional_expression][index]
    if cached
      node_cache[:conditional_expression][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
    r2 = _nt_ws
    if r2
      s1 << r2
    else
      break
    end
  end
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
  s0 << r1
  if r1
    r3 = _nt_expression
    s0 << r3
    if r3
      s4, i4 = [], index
      loop do
        r5 = _nt_ws
        if r5
          s4 << r5
        else
          break
        end
      end
      r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
      s0 << r4
      if r4
        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 = instantiate_node(SyntaxNode,input, index...index)
        else
          r6 = nil
        end
        s0 << r6
      end
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(ConditionalExpression0)
    r0.extend(ConditionalExpression1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:conditional_expression][start_index] = r0

  r0
end
_nt_double_quote_string() click to toggle source
# File lib/q/parser.rb, line 2304
def _nt_double_quote_string
  start_index = index
  if node_cache[:double_quote_string].has_key?(index)
    cached = node_cache[:double_quote_string][index]
    if cached
      node_cache[:double_quote_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 = index
      if (match_len = has_terminal?('\"', false, index))
        r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
        @index += match_len
      else
        terminal_parse_failure('\"')
        r4 = nil
      end
      if r4
        r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
        r3 = r4
      else
        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
          r6 = nil
        else
          @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(DoubleQuoteString0)
        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(SyntaxNode,input, i0...index, s0)
    r0.extend(DoubleQuoteString1)
    r0.extend(DoubleQuoteString2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:double_quote_string][start_index] = r0

  r0
end
_nt_eq() click to toggle source
# File lib/q/parser.rb, line 1808
def _nt_eq
  start_index = index
  if node_cache[:eq].has_key?(index)
    cached = node_cache[:eq][index]
    if cached
      node_cache[:eq][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(Eq0)
    @index += match_len
  else
    terminal_parse_failure('=')
    r0 = nil
  end

  node_cache[:eq][start_index] = r0

  r0
end
_nt_expression() click to toggle source
# File lib/q/parser.rb, line 201
def _nt_expression
  start_index = index
  if node_cache[:expression].has_key?(index)
    cached = node_cache[:expression][index]
    if cached
      node_cache[:expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_call
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_assignment
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      r3 = _nt_conditional
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        r4 = _nt_binomial
        if r4
          r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
          r0 = r4
        else
          @index = i0
          r0 = nil
        end
      end
    end
  end

  node_cache[:expression][start_index] = r0

  r0
end
_nt_function() click to toggle source
# File lib/q/parser.rb, line 263
def _nt_function
  start_index = index
  if node_cache[:function].has_key?(index)
    cached = node_cache[:function][index]
    if cached
      node_cache[:function][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, []
      s4, i4 = [], index
      loop do
        r5 = _nt_ws
        if r5
          s4 << r5
        else
          break
        end
      end
      r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
      s3 << r4
      if r4
        r6 = _nt_identifier
        s3 << r6
        if r6
          s7, i7 = [], index
          loop do
            r8 = _nt_ws
            if r8
              s7 << r8
            else
              break
            end
          end
          r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
          s3 << r7
        end
      end
      if s3.last
        r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
        r3.extend(Function0)
      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))
        r9 = true
        @index += match_len
      else
        terminal_parse_failure(')')
        r9 = nil
      end
      s0 << r9
      if r9
        if (match_len = has_terminal?('{', false, index))
          r10 = true
          @index += match_len
        else
          terminal_parse_failure('{')
          r10 = nil
        end
        s0 << r10
        if r10
          r11 = _nt_statements
          s0 << r11
          if r11
            if (match_len = has_terminal?('}', false, index))
              r12 = true
              @index += match_len
            else
              terminal_parse_failure('}')
              r12 = nil
            end
            s0 << r12
          end
        end
      end
    end
  end
  if s0.last
    r0 = instantiate_node(Q::Syntax::Function,input, i0...index, s0)
    r0.extend(Function1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:function][start_index] = r0

  r0
end
_nt_gt() click to toggle source
# File lib/q/parser.rb, line 1715
def _nt_gt
  start_index = index
  if node_cache[:gt].has_key?(index)
    cached = node_cache[:gt][index]
    if cached
      node_cache[:gt][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(Gt0)
    @index += match_len
  else
    terminal_parse_failure('>')
    r0 = nil
  end

  node_cache[:gt][start_index] = r0

  r0
end
_nt_gte() click to toggle source
# File lib/q/parser.rb, line 1777
def _nt_gte
  start_index = index
  if node_cache[:gte].has_key?(index)
    cached = node_cache[:gte][index]
    if cached
      node_cache[:gte][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(Gte0)
    @index += match_len
  else
    terminal_parse_failure('>=')
    r0 = nil
  end

  node_cache[:gte][start_index] = r0

  r0
end
_nt_identifier() click to toggle source
# File lib/q/parser.rb, line 2521
def _nt_identifier
  start_index = index
  if node_cache[:identifier].has_key?(index)
    cached = node_cache[:identifier][index]
    if cached
      node_cache[:identifier][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-zA-Z_]'] ||= Regexp.new(gr), :regexp, index)
    r1 = true
    @index += 1
  else
    terminal_parse_failure('[a-zA-Z_]')
    r1 = nil
  end
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      if has_terminal?(@regexps[gr = '\A[a-zA-Z0-9_]'] ||= Regexp.new(gr), :regexp, index)
        r3 = true
        @index += 1
      else
        terminal_parse_failure('[a-zA-Z0-9_]')
        r3 = nil
      end
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
    if r2
      i5 = index
      if (match_len = has_terminal?('?', false, index))
        r6 = true
        @index += match_len
      else
        terminal_parse_failure('?')
        r6 = nil
      end
      if r6
        r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
        r5 = r6
      else
        if (match_len = has_terminal?('!', false, index))
          r7 = true
          @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
        r4 = r5
      else
        r4 = instantiate_node(SyntaxNode,input, index...index)
      end
      s0 << r4
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Identifier0)
    r0.extend(Identifier1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:identifier][start_index] = r0

  r0
end
_nt_lie() click to toggle source
# File lib/q/parser.rb, line 2075
def _nt_lie
  start_index = index
  if node_cache[:lie].has_key?(index)
    cached = node_cache[:lie][index]
    if cached
      node_cache[:lie][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', false, index))
    r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
    r0.extend(Lie0)
    @index += match_len
  else
    terminal_parse_failure('false')
    r0 = nil
  end

  node_cache[:lie][start_index] = r0

  r0
end
_nt_lt() click to toggle source
# File lib/q/parser.rb, line 1684
def _nt_lt
  start_index = index
  if node_cache[:lt].has_key?(index)
    cached = node_cache[:lt][index]
    if cached
      node_cache[:lt][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(Lt0)
    @index += match_len
  else
    terminal_parse_failure('<')
    r0 = nil
  end

  node_cache[:lt][start_index] = r0

  r0
end
_nt_lte() click to toggle source
# File lib/q/parser.rb, line 1746
def _nt_lte
  start_index = index
  if node_cache[:lte].has_key?(index)
    cached = node_cache[:lte][index]
    if cached
      node_cache[:lte][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(Lte0)
    @index += match_len
  else
    terminal_parse_failure('<=')
    r0 = nil
  end

  node_cache[:lte][start_index] = r0

  r0
end
_nt_minus() click to toggle source
# File lib/q/parser.rb, line 1901
def _nt_minus
  start_index = index
  if node_cache[:minus].has_key?(index)
    cached = node_cache[:minus][index]
    if cached
      node_cache[:minus][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(Minus0)
    @index += match_len
  else
    terminal_parse_failure('-')
    r0 = nil
  end

  node_cache[:minus][start_index] = r0

  r0
end
_nt_monomial() click to toggle source
# File lib/q/parser.rb, line 819
def _nt_monomial
  start_index = index
  if node_cache[:monomial].has_key?(index)
    cached = node_cache[:monomial][index]
    if cached
      node_cache[:monomial][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r1 = _nt_primary
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      r3 = _nt_ws
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
    if r2
      s4, i4 = [], index
      loop do
        i5, s5 = index, []
        s6, i6 = [], index
        loop do
          r7 = _nt_ws
          if r7
            s6 << r7
          else
            break
          end
        end
        r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
        s5 << r6
        if r6
          r8 = _nt_monomial_operator
          s5 << r8
          if r8
            s9, i9 = [], index
            loop do
              r10 = _nt_ws
              if r10
                s9 << r10
              else
                break
              end
            end
            r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
            s5 << r9
            if r9
              r11 = _nt_monomial
              s5 << r11
            end
          end
        end
        if s5.last
          r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
          r5.extend(Monomial0)
        else
          @index = i5
          r5 = nil
        end
        if r5
          s4 << r5
        else
          break
        end
      end
      r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
      s0 << r4
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Monomial1)
    r0.extend(Monomial2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:monomial][start_index] = r0

  r0
end
_nt_monomial_operator() click to toggle source
# File lib/q/parser.rb, line 1432
def _nt_monomial_operator
  start_index = index
  if node_cache[:monomial_operator].has_key?(index)
    cached = node_cache[:monomial_operator][index]
    if cached
      node_cache[:monomial_operator][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

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

  node_cache[:monomial_operator][start_index] = r0

  r0
end
_nt_negation() click to toggle source
# File lib/q/parser.rb, line 1508
def _nt_negation
  start_index = index
  if node_cache[:negation].has_key?(index)
    cached = node_cache[:negation][index]
    if cached
      node_cache[:negation][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
      r3 = _nt_ws
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
    if r2
      r4 = _nt_primary
      s0 << r4
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Negation0)
    r0.extend(Negation1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:negation][start_index] = r0

  r0
end
_nt_negative() click to toggle source
# File lib/q/parser.rb, line 1571
def _nt_negative
  start_index = index
  if node_cache[:negative].has_key?(index)
    cached = node_cache[:negative][index]
    if cached
      node_cache[:negative][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
      r3 = _nt_ws
      if r3
        s2 << r3
      else
        break
      end
    end
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    s0 << r2
    if r2
      r4 = _nt_primary
      s0 << r4
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Negative0)
    r0.extend(Negative1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:negative][start_index] = r0

  r0
end
_nt_neq() click to toggle source
# File lib/q/parser.rb, line 1839
def _nt_neq
  start_index = index
  if node_cache[:neq].has_key?(index)
    cached = node_cache[:neq][index]
    if cached
      node_cache[:neq][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(Neq0)
    @index += match_len
  else
    terminal_parse_failure('!=')
    r0 = nil
  end

  node_cache[:neq][start_index] = r0

  r0
end
_nt_nil() click to toggle source
# File lib/q/parser.rb, line 2106
def _nt_nil
  start_index = index
  if node_cache[:nil].has_key?(index)
    cached = node_cache[:nil][index]
    if cached
      node_cache[:nil][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

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

  node_cache[:nil][start_index] = r0

  r0
end
_nt_number() click to toggle source
# File lib/q/parser.rb, line 2430
def _nt_number
  start_index = index
  if node_cache[:number].has_key?(index)
    cached = node_cache[:number][index]
    if cached
      node_cache[:number][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
    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
      s1 << r2
    else
      break
    end
  end
  if s1.empty?
    @index = i1
    r1 = nil
  else
    r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
  end
  s0 << r1
  if r1
    if (match_len = has_terminal?('.', false, index))
      r4 = true
      @index += match_len
    else
      terminal_parse_failure('.')
      r4 = nil
    end
    if r4
      r3 = r4
    else
      r3 = instantiate_node(SyntaxNode,input, index...index)
    end
    s0 << r3
    if r3
      s5, i5 = [], index
      loop do
        if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
          r6 = true
          @index += 1
        else
          terminal_parse_failure('[0-9]')
          r6 = nil
        end
        if r6
          s5 << r6
        else
          break
        end
      end
      r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
      s0 << r5
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Number0)
    r0.extend(Number1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:number][start_index] = r0

  r0
end
_nt_plus() click to toggle source
# File lib/q/parser.rb, line 1870
def _nt_plus
  start_index = index
  if node_cache[:plus].has_key?(index)
    cached = node_cache[:plus][index]
    if cached
      node_cache[:plus][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(Plus0)
    @index += match_len
  else
    terminal_parse_failure('+')
    r0 = nil
  end

  node_cache[:plus][start_index] = r0

  r0
end
_nt_primary() click to toggle source
# File lib/q/parser.rb, line 1276
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
  r1 = _nt_call
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_function
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      r3 = _nt_self
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        r4 = _nt_unary
        if r4
          r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
          r0 = r4
        else
          r5 = _nt_value
          if r5
            r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
            r0 = r5
          else
            r6 = _nt_identifier
            if r6
              r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
              r0 = r6
            else
              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
                s9, i9 = [], index
                loop do
                  r10 = _nt_ws
                  if r10
                    s9 << r10
                  else
                    break
                  end
                end
                r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
                s7 << r9
                if r9
                  r11 = _nt_expression
                  s7 << r11
                  if r11
                    s12, i12 = [], index
                    loop do
                      r13 = _nt_ws
                      if r13
                        s12 << r13
                      else
                        break
                      end
                    end
                    r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
                    s7 << r12
                    if r12
                      if (match_len = has_terminal?(')', false, index))
                        r14 = true
                        @index += match_len
                      else
                        terminal_parse_failure(')')
                        r14 = nil
                      end
                      s7 << r14
                    end
                  end
                end
              end
              if s7.last
                r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
                r7.extend(Primary0)
                r7.extend(Primary1)
              else
                @index = i7
                r7 = nil
              end
              if r7
                r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
                r0 = r7
              else
                @index = i0
                r0 = nil
              end
            end
          end
        end
      end
    end
  end

  node_cache[:primary][start_index] = r0

  r0
end
_nt_self() click to toggle source
# File lib/q/parser.rb, line 2615
def _nt_self
  start_index = index
  if node_cache[:self].has_key?(index)
    cached = node_cache[:self][index]
    if cached
      node_cache[:self][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(Self0)
    @index += match_len
  else
    terminal_parse_failure('@')
    r0 = nil
  end

  node_cache[:self][start_index] = r0

  r0
end
_nt_single_quote_string() click to toggle source
# File lib/q/parser.rb, line 2179
def _nt_single_quote_string
  start_index = index
  if node_cache[:single_quote_string].has_key?(index)
    cached = node_cache[:single_quote_string][index]
    if cached
      node_cache[:single_quote_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 = index
      if (match_len = has_terminal?("\\'", false, index))
        r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
        @index += match_len
      else
        terminal_parse_failure("\\'")
        r4 = nil
      end
      if r4
        r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
        r3 = r4
      else
        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
          r6 = nil
        else
          @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(SingleQuoteString0)
        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(SyntaxNode,input, i0...index, s0)
    r0.extend(SingleQuoteString1)
    r0.extend(SingleQuoteString2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:single_quote_string][start_index] = r0

  r0
end
_nt_slash() click to toggle source
# File lib/q/parser.rb, line 1963
def _nt_slash
  start_index = index
  if node_cache[:slash].has_key?(index)
    cached = node_cache[:slash][index]
    if cached
      node_cache[:slash][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(Slash0)
    @index += match_len
  else
    terminal_parse_failure('/')
    r0 = nil
  end

  node_cache[:slash][start_index] = r0

  r0
end
_nt_star() click to toggle source
# File lib/q/parser.rb, line 1932
def _nt_star
  start_index = index
  if node_cache[:star].has_key?(index)
    cached = node_cache[:star][index]
    if cached
      node_cache[:star][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(Star0)
    @index += match_len
  else
    terminal_parse_failure('*')
    r0 = nil
  end

  node_cache[:star][start_index] = r0

  r0
end
_nt_statement() click to toggle source
# File lib/q/parser.rb, line 150
def _nt_statement
  start_index = index
  if node_cache[:statement].has_key?(index)
    cached = node_cache[:statement][index]
    if cached
      node_cache[:statement][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  r1 = _nt_expression
  s0 << r1
  if r1
    s2, i2 = [], index
    loop do
      r3 = _nt_ws
      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))
        r4 = true
        @index += match_len
      else
        terminal_parse_failure(';')
        r4 = nil
      end
      s0 << r4
    end
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Statement0)
    r0.extend(Statement1)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:statement][start_index] = r0

  r0
end
_nt_statements() click to toggle source
# File lib/q/parser.rb, line 38
def _nt_statements
  start_index = index
  if node_cache[:statements].has_key?(index)
    cached = node_cache[:statements][index]
    if cached
      node_cache[:statements][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, []
    s3, i3 = [], index
    loop do
      r4 = _nt_ws
      if r4
        s3 << r4
      else
        break
      end
    end
    r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
    s2 << r3
    if r3
      i5 = index
      r6 = _nt_comment
      if r6
        r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
        r5 = r6
      else
        r7 = _nt_statement
        if r7
          r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
          r5 = r7
        else
          @index = i5
          r5 = nil
        end
      end
      s2 << r5
      if r5
        s8, i8 = [], index
        loop do
          r9 = _nt_ws
          if r9
            s8 << r9
          else
            break
          end
        end
        r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
        s2 << r8
      end
    end
    if s2.last
      r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
      r2.extend(Statements0)
    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
    s10, i10 = [], index
    loop do
      r11 = _nt_ws
      if r11
        s10 << r11
      else
        break
      end
    end
    r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
    s0 << r10
  end
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(Statements1)
    r0.extend(Statements2)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:statements][start_index] = r0

  r0
end
_nt_string() click to toggle source
# File lib/q/parser.rb, line 2131
def _nt_string
  start_index = index
  if node_cache[:string].has_key?(index)
    cached = node_cache[:string][index]
    if cached
      node_cache[:string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

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

  node_cache[:string][start_index] = r0

  r0
end
_nt_truth() click to toggle source
# File lib/q/parser.rb, line 2044
def _nt_truth
  start_index = index
  if node_cache[:truth].has_key?(index)
    cached = node_cache[:truth][index]
    if cached
      node_cache[:truth][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

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

  node_cache[:truth][start_index] = r0

  r0
end
_nt_unary() click to toggle source
# File lib/q/parser.rb, line 1464
def _nt_unary
  start_index = index
  if node_cache[:unary].has_key?(index)
    cached = node_cache[:unary][index]
    if cached
      node_cache[:unary][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

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

  node_cache[:unary][start_index] = r0

  r0
end
_nt_value() click to toggle source
# File lib/q/parser.rb, line 1988
def _nt_value
  start_index = index
  if node_cache[:value].has_key?(index)
    cached = node_cache[:value][index]
    if cached
      node_cache[:value][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0 = index
  r1 = _nt_number
  if r1
    r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
    r0 = r1
  else
    r2 = _nt_string
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      r3 = _nt_truth
      if r3
        r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
        r0 = r3
      else
        r4 = _nt_lie
        if r4
          r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
          r0 = r4
        else
          r5 = _nt_nil
          if r5
            r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
            r0 = r5
          else
            @index = i0
            r0 = nil
          end
        end
      end
    end
  end

  node_cache[:value][start_index] = r0

  r0
end
_nt_ws() click to toggle source
# File lib/q/parser.rb, line 2795
def _nt_ws
  start_index = index
  if node_cache[:ws].has_key?(index)
    cached = node_cache[:ws][index]
    if cached
      node_cache[:ws][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 = true
    @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?("\n", false, index))
      r2 = true
      @index += match_len
    else
      terminal_parse_failure("\n")
      r2 = nil
    end
    if r2
      r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
      r0 = r2
    else
      if (match_len = has_terminal?("\r", false, index))
        r3 = true
        @index += match_len
      else
        terminal_parse_failure("\r")
        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[:ws][start_index] = r0

  r0
end
root() click to toggle source
# File lib/q/parser.rb, line 10
def root
  @root ||= :statements
end