module OracleSqlParser::Grammar::Expression::Compound

Public Instance Methods

_nt_compound_expression() click to toggle source
# File lib/oracle-sql-parser/grammar/expression/compound.rb, line 67
def _nt_compound_expression
  start_index = index
  if node_cache[:compound_expression].has_key?(index)
    cached = node_cache[:compound_expression][index]
    if cached
      node_cache[:compound_expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
      @index = cached.interval.end
    end
    return cached
  end

  i0, s0 = index, []
  i1 = index
  i2, s2 = index, []
  if (match_len = has_terminal?('(', false, index))
    r3 = true
    @index += match_len
  else
    terminal_parse_failure('\'(\'')
    r3 = nil
  end
  s2 << r3
  if r3
    r5 = _nt_space
    if r5
      r4 = r5
    else
      r4 = instantiate_node(SyntaxNode,input, index...index)
    end
    s2 << r4
    if r4
      r6 = _nt_expr
      s2 << r6
      if r6
        r8 = _nt_space
        if r8
          r7 = r8
        else
          r7 = instantiate_node(SyntaxNode,input, index...index)
        end
        s2 << r7
        if r7
          if (match_len = has_terminal?(')', false, index))
            r9 = true
            @index += match_len
          else
            terminal_parse_failure('\')\'')
            r9 = nil
          end
          s2 << r9
        end
      end
    end
  end
  if s2.last
    r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
    r2.extend(CompoundExpression0)
  else
    @index = i2
    r2 = nil
  end
  if r2
    r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
    r1 = r2
  else
    i10, s10 = index, []
    r11 = _nt_not_loop_sql_expression
    s10 << r11
    if r11
      r13 = _nt_space
      if r13
        r12 = r13
      else
        r12 = instantiate_node(SyntaxNode,input, index...index)
      end
      s10 << r12
      if r12
        i14 = index
        if (match_len = has_terminal?('*', false, index))
          r15 = true
          @index += match_len
        else
          terminal_parse_failure('\'*\'')
          r15 = nil
        end
        if r15
          r15 = SyntaxNode.new(input, (index-1)...index) if r15 == true
          r14 = r15
        else
          if (match_len = has_terminal?('/', false, index))
            r16 = true
            @index += match_len
          else
            terminal_parse_failure('\'/\'')
            r16 = nil
          end
          if r16
            r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true
            r14 = r16
          else
            if (match_len = has_terminal?('+', false, index))
              r17 = true
              @index += match_len
            else
              terminal_parse_failure('\'+\'')
              r17 = nil
            end
            if r17
              r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
              r14 = r17
            else
              if (match_len = has_terminal?('-', false, index))
                r18 = true
                @index += match_len
              else
                terminal_parse_failure('\'-\'')
                r18 = nil
              end
              if r18
                r18 = SyntaxNode.new(input, (index-1)...index) if r18 == true
                r14 = r18
              else
                if (match_len = has_terminal?('||', false, index))
                  r19 = instantiate_node(SyntaxNode,input, index...(index + match_len))
                  @index += match_len
                else
                  terminal_parse_failure('\'||\'')
                  r19 = nil
                end
                if r19
                  r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
                  r14 = r19
                else
                  @index = i14
                  r14 = nil
                end
              end
            end
          end
        end
        s10 << r14
        if r14
          r21 = _nt_space
          if r21
            r20 = r21
          else
            r20 = instantiate_node(SyntaxNode,input, index...index)
          end
          s10 << r20
          if r20
            r22 = _nt_expr
            s10 << r22
          end
        end
      end
    end
    if s10.last
      r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
      r10.extend(CompoundExpression1)
    else
      @index = i10
      r10 = nil
    end
    if r10
      r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
      r1 = r10
    else
      i23, s23 = index, []
      i24 = index
      r25 = _nt_number_literal
      if r25
        @index = i24
        r24 = nil
      else
        @index = i24
        r24 = instantiate_node(SyntaxNode,input, index...index)
      end
      s23 << r24
      if r24
        i26 = index
        r27 = _nt_prior_keyword
        if r27
          r27 = SyntaxNode.new(input, (index-1)...index) if r27 == true
          r26 = r27
        else
          if (match_len = has_terminal?('-', false, index))
            r28 = true
            @index += match_len
          else
            terminal_parse_failure('\'-\'')
            r28 = nil
          end
          if r28
            r28 = SyntaxNode.new(input, (index-1)...index) if r28 == true
            r26 = r28
          else
            if (match_len = has_terminal?('+', false, index))
              r29 = true
              @index += match_len
            else
              terminal_parse_failure('\'+\'')
              r29 = nil
            end
            if r29
              r29 = SyntaxNode.new(input, (index-1)...index) if r29 == true
              r26 = r29
            else
              @index = i26
              r26 = nil
            end
          end
        end
        s23 << r26
        if r26
          r31 = _nt_space
          if r31
            r30 = r31
          else
            r30 = instantiate_node(SyntaxNode,input, index...index)
          end
          s23 << r30
          if r30
            r32 = _nt_expr
            s23 << r32
          end
        end
      end
      if s23.last
        r23 = instantiate_node(SyntaxNode,input, i23...index, s23)
        r23.extend(CompoundExpression2)
      else
        @index = i23
        r23 = nil
      end
      if r23
        r23 = SyntaxNode.new(input, (index-1)...index) if r23 == true
        r1 = r23
      else
        @index = i1
        r1 = nil
      end
    end
  end
  s0 << r1
  if s0.last
    r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
    r0.extend(CompoundExpression3)
    r0.extend(CompoundExpression4)
  else
    @index = i0
    r0 = nil
  end

  node_cache[:compound_expression][start_index] = r0

  r0
end
root() click to toggle source
# File lib/oracle-sql-parser/grammar/expression/compound.rb, line 8
def root
  @root ||= :compound_expression
end