src/services/QueryParser.java
BeforeProposed
+6−6
2929 }
3030 public Query parse() {
3131 if(words.isEmpty())return new Query("ALL",List.of(),null,null);
32 Query result=and();
32 Query result=or();
3333 if(index!=words.size())throw new IllegalArgumentException("invalid-query");
3434 return result;
3535 }
3636 private Query or() {
37 Query value=unary();
38 while(take("OR"))value=new Query("OR",List.of(),value,unary());
37 Query value=and();
38 while(take("OR"))value=new Query("OR",List.of(),value,and());
3939 return value;
4040 }
4141 private Query and() {
42 Query value=or();
43 while(take("AND"))value=new Query("AND",List.of(),value,or());
42 Query value=unary();
43 while(take("AND"))value=new Query("AND",List.of(),value,unary());
4444 return value;
4545 }
4646 private Query unary() {
4747 if(take("NOT"))return new Query("NOT",List.of(),unary(),null);
48 if(take("(")){Query value=and();if(!take(")"))throw new IllegalArgumentException("invalid-query");return value;}
48 if(take("(")){Query value=or();if(!take(")"))throw new IllegalArgumentException("invalid-query");return value;}
4949 if(index>=words.size())throw new IllegalArgumentException("invalid-query");
5050 Lexeme atom=words.get(index++);
5151 if(!Set.of("TERM","PHRASE").contains(atom.kind))throw new IllegalArgumentException("invalid-query");