code: @Override
      public void enterObject(TagQueryParser.ObjectContext ctx) {
          Stack<String> objectStack = new Stack<>();
          stack.push(objectStack);
          String eval;
          if (ctx.getParent().getParent() == null && ctx.tagexp() != null) {
              eval = getEval(ctx.tagexp());
              evalsPostfix.add(eval);
          }
          if (ctx.logical_operator() != null) {
              TagexpContext left = ctx.object(0).tagexp();
              TagexpContext right = ctx.object(1).tagexp();
              if (left != null && right != null) {
                  String lEval = getEval(left);
                  String rEval = getEval(right);
                  if (isNot(lEval) && !isNot(rEval)) {
                      evalsPostfix.add(rEval);
                      evalsPostfix.add(lEval);
                  } else {
                      evalsPostfix.add(lEval);
                      evalsPostfix.add(rEval);
                  }
              } else if (left != null && right == null) {
                  String lEval = getEval(left);
                  if (!isNot(lEval)) {
                      evalsPostfix.add(lEval);
                  } else {
                      objectStack.push(lEval);
                  }
              }  else if (left == null && right != null) {
                  String rEval = getEval(right);
                  evalsPostfix.add(rEval);
              }
          }
      }
docs: Grammar analysis