test_class.file: parser/src/test/java/com/qihoo/qsql/org/apache/calcite/util/PrecedenceClimbingParserTest.java
test_class.identifier: PrecedenceClimbingParserTest
test_case.body: @Test public void testSpecial() {
      // price > 5 and price between 1 + 2 and 3 * 4 and price is null
      final PrecedenceClimbingParser p = new PrecedenceClimbingParser.Builder()
          .atom("price")
          .infix(">", 4, true)
          .atom("5")
          .infix("and", 2, true)
          .atom("price")
          .special("between", 3, 3,
              (parser, op) ->
                  new PrecedenceClimbingParser.Result(op.previous,
                      op.next.next.next,
                      parser.call(op,
                          ImmutableList.of(op.previous, op.next,
                              op.next.next.next))))
          .atom("1")
          .infix("+", 5, true)
          .atom("2")
          .infix("and", 2, true)
          .atom("3")
          .infix("*", 6, true)
          .atom("4")
          .infix("and", 2, true)
          .atom("price")
          .postfix("is null", 4)
          .build();
      final PrecedenceClimbingParser.Token token = p.parse();
      assertThat(p.print(token),
          is("(((price > 5) and between(price, (1 + 2), (3 * 4)))"
              + " and (price is null))"));
    }
test_case.class_method_signature: PrecedenceClimbingParserTest.testSpecial()
test_case.full_signature: @Test public void testSpecial()
test_case.identifier: testSpecial
test_case.invocations: build postfix atom infix atom infix atom infix atom infix atom special atom infix atom infix atom call of parse assertThat print is
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testSpecial()
focal_class.declarator: first
focal_class.modifier: private
focal_class.original_string: private Token first;
focal_class.type: Token
focal_class.var_name: first
focal_class.declarator: last
focal_class.modifier: private
focal_class.original_string: private Token last;
focal_class.type: Token
focal_class.var_name: last
focal_class.file: parser/src/main/java/com/qihoo/qsql/org/apache/calcite/util/PrecedenceClimbingParser.java
focal_class.identifier: PrecedenceClimbingParser
focal_class.class_method_signature: PrecedenceClimbingParser.PrecedenceClimbingParser(List<Token> tokens)
focal_class.full_signature: private  PrecedenceClimbingParser(List<Token> tokens)
focal_class.identifier: PrecedenceClimbingParser
focal_class.modifiers: private
focal_class.parameters: (List<Token> tokens)
focal_class.signature:  PrecedenceClimbingParser(List<Token> tokens)
focal_class.class_method_signature: PrecedenceClimbingParser.atom(Object o)
focal_class.full_signature: public Token atom(Object o)
focal_class.identifier: atom
focal_class.modifiers: public
focal_class.parameters: (Object o)
focal_class.return: Token
focal_class.signature: Token atom(Object o)
focal_class.class_method_signature: PrecedenceClimbingParser.call(Op op, ImmutableList<Token> args)
focal_class.full_signature: public Call call(Op op, ImmutableList<Token> args)
focal_class.identifier: call
focal_class.modifiers: public
focal_class.parameters: (Op op, ImmutableList<Token> args)
focal_class.return: Call
focal_class.signature: Call call(Op op, ImmutableList<Token> args)
focal_class.class_method_signature: PrecedenceClimbingParser.infix(Object o, int precedence, boolean left)
focal_class.full_signature: public Op infix(Object o, int precedence, boolean left)
focal_class.identifier: infix
focal_class.modifiers: public
focal_class.parameters: (Object o, int precedence, boolean left)
focal_class.return: Op
focal_class.signature: Op infix(Object o, int precedence, boolean left)
focal_class.class_method_signature: PrecedenceClimbingParser.prefix(Object o, int precedence)
focal_class.full_signature: public Op prefix(Object o, int precedence)
focal_class.identifier: prefix
focal_class.modifiers: public
focal_class.parameters: (Object o, int precedence)
focal_class.return: Op
focal_class.signature: Op prefix(Object o, int precedence)
focal_class.class_method_signature: PrecedenceClimbingParser.postfix(Object o, int precedence)
focal_class.full_signature: public Op postfix(Object o, int precedence)
focal_class.identifier: postfix
focal_class.modifiers: public
focal_class.parameters: (Object o, int precedence)
focal_class.return: Op
focal_class.signature: Op postfix(Object o, int precedence)
focal_class.class_method_signature: PrecedenceClimbingParser.special(Object o, int leftPrec, int rightPrec,
        Special special)
focal_class.full_signature: public SpecialOp special(Object o, int leftPrec, int rightPrec,
        Special special)
focal_class.identifier: special
focal_class.modifiers: public
focal_class.parameters: (Object o, int leftPrec, int rightPrec,
        Special special)
focal_class.return: SpecialOp
focal_class.signature: SpecialOp special(Object o, int leftPrec, int rightPrec,
        Special special)
focal_class.class_method_signature: PrecedenceClimbingParser.parse()
focal_class.full_signature: public Token parse()
focal_class.identifier: parse
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: Token
focal_class.signature: Token parse()
focal_class.class_method_signature: PrecedenceClimbingParser.partialParse()
focal_class.full_signature: public void partialParse()
focal_class.identifier: partialParse
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void partialParse()
focal_class.class_method_signature: PrecedenceClimbingParser.toString()
focal_class.full_signature: @Override public String toString()
focal_class.identifier: toString
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String toString()
focal_class.class_method_signature: PrecedenceClimbingParser.all()
focal_class.full_signature: public List<Token> all()
focal_class.identifier: all
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: List<Token>
focal_class.signature: List<Token> all()
focal_class.class_method_signature: PrecedenceClimbingParser.replace(Token t, Token previous, Token next)
focal_class.full_signature: private void replace(Token t, Token previous, Token next)
focal_class.identifier: replace
focal_class.modifiers: private
focal_class.parameters: (Token t, Token previous, Token next)
focal_class.return: void
focal_class.signature: void replace(Token t, Token previous, Token next)
focal_class.class_method_signature: PrecedenceClimbingParser.highest()
focal_class.full_signature: private Op highest()
focal_class.identifier: highest
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: Op
focal_class.signature: Op highest()
focal_class.class_method_signature: PrecedenceClimbingParser.prevRight(Token token)
focal_class.full_signature: private int prevRight(Token token)
focal_class.identifier: prevRight
focal_class.modifiers: private
focal_class.parameters: (Token token)
focal_class.return: int
focal_class.signature: int prevRight(Token token)
focal_class.class_method_signature: PrecedenceClimbingParser.nextLeft(Token token)
focal_class.full_signature: private int nextLeft(Token token)
focal_class.identifier: nextLeft
focal_class.modifiers: private
focal_class.parameters: (Token token)
focal_class.return: int
focal_class.signature: int nextLeft(Token token)
focal_class.class_method_signature: PrecedenceClimbingParser.print(Token token)
focal_class.full_signature: public String print(Token token)
focal_class.identifier: print
focal_class.modifiers: public
focal_class.parameters: (Token token)
focal_class.return: String
focal_class.signature: String print(Token token)
focal_class.class_method_signature: PrecedenceClimbingParser.copy(int start, Predicate<Token> predicate)
focal_class.full_signature: public PrecedenceClimbingParser copy(int start, Predicate<Token> predicate)
focal_class.identifier: copy
focal_class.modifiers: public
focal_class.parameters: (int start, Predicate<Token> predicate)
focal_class.return: PrecedenceClimbingParser
focal_class.signature: PrecedenceClimbingParser copy(int start, Predicate<Token> predicate)
focal_method.body: public SpecialOp special(Object o, int leftPrec, int rightPrec,
        Special special) {
      return new SpecialOp(o, leftPrec * 2, rightPrec * 2, special);
    }
focal_method.class_method_signature: PrecedenceClimbingParser.special(Object o, int leftPrec, int rightPrec,
        Special special)
focal_method.full_signature: public SpecialOp special(Object o, int leftPrec, int rightPrec,
        Special special)
focal_method.identifier: special
focal_method.modifiers: public
focal_method.parameters: (Object o, int leftPrec, int rightPrec,
        Special special)
focal_method.return: SpecialOp
focal_method.signature: SpecialOp special(Object o, int leftPrec, int rightPrec,
        Special special)