_nt_expression

in logstash-core/lib/logstash/config/grammar.rb [2496:2601]


  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
    i1, s1 = index, []
    if (match_len = has_terminal?("(", false, index))
      r2 = true
      @index += match_len
    else
      terminal_parse_failure('"("')
      r2 = nil
    end
    s1 << r2
    if r2
      r3 = _nt_cs
      s1 << r3
      if r3
        r4 = _nt_condition
        s1 << r4
        if r4
          r5 = _nt_cs
          s1 << r5
          if r5
            if (match_len = has_terminal?(")", false, index))
              r6 = true
              @index += match_len
            else
              terminal_parse_failure('")"')
              r6 = nil
            end
            s1 << r6
          end
        end
      end
    end
    if s1.last
      r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
      r1.extend(Expression0)
    else
      @index = i1
      r1 = nil
    end
    if r1
      r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
      r0 = r1
      r0.extend(LogStash::Config::AST::Expression)
    else
      r7 = _nt_negative_expression
      if r7
        r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
        r0 = r7
        r0.extend(LogStash::Config::AST::Expression)
      else
        r8 = _nt_in_expression
        if r8
          r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
          r0 = r8
          r0.extend(LogStash::Config::AST::Expression)
        else
          r9 = _nt_not_in_expression
          if r9
            r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
            r0 = r9
            r0.extend(LogStash::Config::AST::Expression)
          else
            r10 = _nt_compare_expression
            if r10
              r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
              r0 = r10
              r0.extend(LogStash::Config::AST::Expression)
            else
              r11 = _nt_regexp_expression
              if r11
                r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
                r0 = r11
                r0.extend(LogStash::Config::AST::Expression)
              else
                r12 = _nt_rvalue
                if r12
                  r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
                  r0 = r12
                  r0.extend(LogStash::Config::AST::Expression)
                else
                  @index = i0
                  r0 = nil
                end
              end
            end
          end
        end
      end
    end

    node_cache[:expression][start_index] = r0

    r0
  end