⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queryparser.java

📁 lucene2.2.0版本
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* Generated By:JavaCC: Do not edit this line. QueryParser.java */package org.apache.lucene.queryParser.surround.parser;import java.util.ArrayList;import java.util.List;import java.io.StringReader;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.queryParser.surround.query.SrndQuery;import org.apache.lucene.queryParser.surround.query.FieldsQuery;import org.apache.lucene.queryParser.surround.query.OrQuery;import org.apache.lucene.queryParser.surround.query.AndQuery;import org.apache.lucene.queryParser.surround.query.NotQuery;import org.apache.lucene.queryParser.surround.query.DistanceQuery;import org.apache.lucene.queryParser.surround.query.SrndTermQuery;import org.apache.lucene.queryParser.surround.query.SrndPrefixQuery;import org.apache.lucene.queryParser.surround.query.SrndTruncQuery;/** * This class is generated by JavaCC.  The only method that clients should need * to call is <a href="#parse">parse()</a>. */public class QueryParser implements QueryParserConstants {  final int minimumPrefixLength = 3;  final int minimumCharsInTrunc = 3;  final String truncationErrorMessage = "Too unrestrictive truncation: ";  final String boostErrorMessage = "Cannot handle boost value: ";  /* CHECKME: These should be the same as for the tokenizer. How? */  final char truncator = '*';  final char anyChar = '?';  final char quote = '\"';  final char fieldOperator = ':';  final char comma = ','; /* prefix list separator */  final char carat = '^'; /* weight oparator */  static public SrndQuery parse(String query) throws ParseException {    QueryParser parser = new QueryParser();    return parser.parse2(query);  }  public QueryParser() {    this(new FastCharStream(new StringReader("")));  }  public SrndQuery parse2(String query) throws ParseException {    ReInit(new FastCharStream(new StringReader(query)));    try {      return TopSrndQuery();    } catch (TokenMgrError tme) {      throw new ParseException(tme.getMessage());    }  }  protected SrndQuery getFieldsQuery(      SrndQuery q, ArrayList fieldNames) {    /* FIXME: check acceptable subquery: at least one subquery should not be     * a fields query.     */    return new FieldsQuery(q, fieldNames, fieldOperator);  }  protected SrndQuery getOrQuery(List queries, boolean infix, Token orToken) {    return new OrQuery(queries, infix, orToken.image);  }  protected SrndQuery getAndQuery(List queries, boolean infix, Token andToken) {    return new AndQuery( queries, infix, andToken.image);  }  protected SrndQuery getNotQuery(List queries, Token notToken) {    return new NotQuery( queries, notToken.image);  }  protected static int getOpDistance(String distanceOp) {    /* W, 2W, 3W etc -> 1, 2 3, etc. Same for N, 2N ... */    return distanceOp.length() == 1      ? 1      : Integer.parseInt( distanceOp.substring( 0, distanceOp.length() - 1));  }  protected static void checkDistanceSubQueries(DistanceQuery distq, String opName)  throws ParseException {    String m = distq.distanceSubQueryNotAllowed();    if (m != null) {      throw new ParseException("Operator " + opName + ": " + m);    }  }  protected SrndQuery getDistanceQuery(        List queries,        boolean infix,        Token dToken,        boolean ordered) throws ParseException {    DistanceQuery dq = new DistanceQuery(queries,                                        infix,                                        getOpDistance(dToken.image),                                        dToken.image,                                        ordered);    checkDistanceSubQueries(dq, dToken.image);    return dq;  }  protected SrndQuery getTermQuery(        String term, boolean quoted) {    return new SrndTermQuery(term, quoted);  }  protected boolean allowedSuffix(String suffixed) {    return (suffixed.length() - 1) >= minimumPrefixLength;  }  protected SrndQuery getPrefixQuery(      String prefix, boolean quoted) {    return new SrndPrefixQuery(prefix, quoted, truncator);  }  protected boolean allowedTruncation(String truncated) {    /* At least 3 normal characters needed. */    int nrNormalChars = 0;    for (int i = 0; i < truncated.length(); i++) {      char c = truncated.charAt(i);      if ((c != truncator) && (c != anyChar)) {        nrNormalChars++;      }    }    return nrNormalChars >= minimumCharsInTrunc;  }  protected SrndQuery getTruncQuery(String truncated) {    return new SrndTruncQuery(truncated, truncator, anyChar);  }  final public SrndQuery TopSrndQuery() throws ParseException {  SrndQuery q;    q = FieldsQuery();    jj_consume_token(0);   {if (true) return q;}    throw new Error("Missing return statement in function");  }  final public SrndQuery FieldsQuery() throws ParseException {  SrndQuery q;  ArrayList fieldNames;    fieldNames = OptionalFields();    q = OrQuery();   {if (true) return (fieldNames == null) ? q : getFieldsQuery(q, fieldNames);}    throw new Error("Missing return statement in function");  }  final public ArrayList OptionalFields() throws ParseException {  Token fieldName;  ArrayList fieldNames = null;    label_1:    while (true) {      if (jj_2_1(2)) {        ;      } else {        break label_1;      }      // to the colon          fieldName = jj_consume_token(TERM);      jj_consume_token(COLON);      if (fieldNames == null) {        fieldNames = new ArrayList();      }      fieldNames.add(fieldName.image);    }   {if (true) return fieldNames;}    throw new Error("Missing return statement in function");  }  final public SrndQuery OrQuery() throws ParseException {  SrndQuery q;  ArrayList queries = null;  Token oprt = null;    q = AndQuery();    label_2:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case OR:        ;        break;      default:        jj_la1[0] = jj_gen;        break label_2;      }      oprt = jj_consume_token(OR);                  /* keep only last used operator */      if (queries == null) {        queries = new ArrayList();        queries.add(q);      }      q = AndQuery();      queries.add(q);    }   {if (true) return (queries == null) ? q : getOrQuery(queries, true /* infix */, oprt);}    throw new Error("Missing return statement in function");  }  final public SrndQuery AndQuery() throws ParseException {  SrndQuery q;  ArrayList queries = null;  Token oprt = null;    q = NotQuery();    label_3:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case AND:        ;        break;      default:        jj_la1[1] = jj_gen;        break label_3;      }      oprt = jj_consume_token(AND);                   /* keep only last used operator */      if (queries == null) {        queries = new ArrayList();        queries.add(q);      }      q = NotQuery();      queries.add(q);    }   {if (true) return (queries == null) ? q : getAndQuery(queries, true /* infix */, oprt);}    throw new Error("Missing return statement in function");  }  final public SrndQuery NotQuery() throws ParseException {  SrndQuery q;  ArrayList queries = null;  Token oprt = null;    q = NQuery();    label_4:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case NOT:        ;        break;      default:        jj_la1[2] = jj_gen;        break label_4;      }      oprt = jj_consume_token(NOT);                    /* keep only last used operator */      if (queries == null) {        queries = new ArrayList();        queries.add(q);      }      q = NQuery();      queries.add(q);    }   {if (true) return (queries == null) ? q : getNotQuery(queries, oprt);}    throw new Error("Missing return statement in function");  }  final public SrndQuery NQuery() throws ParseException {  SrndQuery q;  ArrayList queries;  Token dt;    q = WQuery();    label_5:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case N:        ;        break;      default:        jj_la1[3] = jj_gen;        break label_5;      }      dt = jj_consume_token(N);      queries = new ArrayList();      queries.add(q); /* left associative */      q = WQuery();      queries.add(q);      q = getDistanceQuery(queries, true /* infix */, dt, false /* not ordered */);    }   {if (true) return q;}    throw new Error("Missing return statement in function");  }  final public SrndQuery WQuery() throws ParseException {  SrndQuery q;  ArrayList queries;  Token wt;    q = PrimaryQuery();    label_6:    while (true) {      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {      case W:        ;        break;      default:        jj_la1[4] = jj_gen;        break label_6;      }      wt = jj_consume_token(W);      queries = new ArrayList();      queries.add(q); /* left associative */      q = PrimaryQuery();      queries.add(q);      q = getDistanceQuery(queries, true /* infix */, wt, true /* ordered */);    }   {if (true) return q;}    throw new Error("Missing return statement in function");  }  final public SrndQuery PrimaryQuery() throws ParseException {                             /* bracketed weighted query or weighted term */  SrndQuery q;    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {    case LPAREN:      jj_consume_token(LPAREN);      q = FieldsQuery();      jj_consume_token(RPAREN);      break;    case OR:    case AND:    case W:    case N:      q = PrefixOperatorQuery();      break;    case TRUNCQUOTED:    case QUOTED:    case SUFFIXTERM:    case TRUNCTERM:    case TERM:      q = SimpleTerm();      break;    default:      jj_la1[5] = jj_gen;      jj_consume_token(-1);      throw new ParseException();    }    OptionalWeights(q);   {if (true) return q;}    throw new Error("Missing return statement in function");  }  final public SrndQuery PrefixOperatorQuery() throws ParseException {  Token oprt;  List queries;    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {    case OR:      oprt = jj_consume_token(OR);      /* prefix OR */          queries = FieldsQueryList();     {if (true) return getOrQuery(queries, false /* not infix */, oprt);}      break;    case AND:      oprt = jj_consume_token(AND);      /* prefix AND */          queries = FieldsQueryList();     {if (true) return getAndQuery(queries, false /* not infix */, oprt);}      break;    case N:      oprt = jj_consume_token(N);      /* prefix N */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -