_nt_negative_expression

in logstash-core/lib/logstash/config/grammar.rb [2631:2738]


  def _nt_negative_expression
    start_index = index
    if node_cache[:negative_expression].has_key?(index)
      cached = node_cache[:negative_expression][index]
      if cached
        node_cache[:negative_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
        if (match_len = has_terminal?("(", false, index))
          r4 = true
          @index += match_len
        else
          terminal_parse_failure('"("')
          r4 = nil
        end
        s1 << r4
        if r4
          r5 = _nt_cs
          s1 << r5
          if r5
            r6 = _nt_condition
            s1 << r6
            if r6
              r7 = _nt_cs
              s1 << r7
              if r7
                if (match_len = has_terminal?(")", false, index))
                  r8 = true
                  @index += match_len
                else
                  terminal_parse_failure('")"')
                  r8 = nil
                end
                s1 << r8
              end
            end
          end
        end
      end
    end
    if s1.last
      r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
      r1.extend(NegativeExpression0)
    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::NegativeExpression)
    else
      i9, s9 = index, []
      if (match_len = has_terminal?("!", false, index))
        r10 = true
        @index += match_len
      else
        terminal_parse_failure('"!"')
        r10 = nil
      end
      s9 << r10
      if r10
        r11 = _nt_cs
        s9 << r11
        if r11
          r12 = _nt_selector
          s9 << r12
        end
      end
      if s9.last
        r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
        r9.extend(NegativeExpression1)
      else
        @index = i9
        r9 = nil
      end
      if r9
        r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
        r0 = r9
        r0.extend(LogStash::Config::AST::NegativeExpression)
      else
        @index = i0
        r0 = nil
      end
    end

    node_cache[:negative_expression][start_index] = r0

    r0
  end