You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by rm...@apache.org on 2010/04/05 22:08:52 UTC

svn commit: r930947 - in /lucene/java/branches/flex_1458/src: java/org/apache/lucene/util/automaton/BasicAutomata.java test/org/apache/lucene/search/TestAutomatonQuery.java test/org/apache/lucene/util/automaton/TestBasicOperations.java

Author: rmuir
Date: Mon Apr  5 20:08:51 2010
New Revision: 930947

URL: http://svn.apache.org/viewvc?rev=930947&view=rev
Log:
LUCENE-2265: simplify/remove some unused automaton functionality

Modified:
    lucene/java/branches/flex_1458/src/java/org/apache/lucene/util/automaton/BasicAutomata.java
    lucene/java/branches/flex_1458/src/test/org/apache/lucene/search/TestAutomatonQuery.java
    lucene/java/branches/flex_1458/src/test/org/apache/lucene/util/automaton/TestBasicOperations.java

Modified: lucene/java/branches/flex_1458/src/java/org/apache/lucene/util/automaton/BasicAutomata.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/flex_1458/src/java/org/apache/lucene/util/automaton/BasicAutomata.java?rev=930947&r1=930946&r2=930947&view=diff
==============================================================================
--- lucene/java/branches/flex_1458/src/java/org/apache/lucene/util/automaton/BasicAutomata.java (original)
+++ lucene/java/branches/flex_1458/src/java/org/apache/lucene/util/automaton/BasicAutomata.java Mon Apr  5 20:08:51 2010
@@ -30,10 +30,7 @@
 package org.apache.lucene.util.automaton;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
 
 /**
  * Construction of basic automata.
@@ -41,9 +38,6 @@ import java.util.Set;
  * @lucene.experimental
  */
 final public class BasicAutomata {
-  // used by getWhitespaceAutomaton to match basic whitespace
-  private static final Automaton ws = Automaton.minimize(BasicAutomata
-      .makeCharSet(" \t\n\r").repeat());
   
   private BasicAutomata() {}
   
@@ -117,24 +111,6 @@ final public class BasicAutomata {
   }
   
   /**
-   * Returns a new (deterministic) automaton that accepts a single character in
-   * the given set.
-   */
-  public static Automaton makeCharSet(String set) {
-    if (set.length() == 1) return makeChar(set.charAt(0));
-    Automaton a = new Automaton();
-    State s1 = new State();
-    State s2 = new State();
-    a.initial = s1;
-    s2.accept = true;
-    for (int i = 0; i < set.length(); i++)
-      s1.transitions.add(new Transition(set.charAt(i), s2));
-    a.deterministic = true;
-    a.reduce();
-    return a;
-  }
-  
-  /**
    * Constructs sub-automaton corresponding to decimal numbers of length
    * x.substring(n).length().
    */
@@ -211,7 +187,7 @@ final public class BasicAutomata {
    * non-negative integers in the given interval.
    * 
    * @param min minimal value of interval
-   * @param max maximal value of inverval (both end points are included in the
+   * @param max maximal value of interval (both end points are included in the
    *          interval)
    * @param digits if >0, use fixed number of digits (strings must be prefixed
    *          by 0's to obtain the right length) - otherwise, the number of
@@ -263,217 +239,4 @@ final public class BasicAutomata {
     a.deterministic = true;
     return a;
   }
-  
-  /**
-   * Constructs automaton that accept strings representing nonnegative integers
-   * that are not larger than the given value.
-   * 
-   * @param n string representation of maximum value
-   */
-  public static Automaton makeMaxInteger(String n) {
-    int i = 0;
-    while (i < n.length() && n.charAt(i) == '0')
-      i++;
-    StringBuilder b = new StringBuilder();
-    b.append("0*(0|");
-    if (i < n.length()) b.append("[0-9]{1," + (n.length() - i - 1) + "}|");
-    maxInteger(n.substring(i), 0, b);
-    b.append(")");
-    return Automaton.minimize((new RegExp(b.toString())).toAutomaton());
-  }
-  
-  private static void maxInteger(String n, int i, StringBuilder b) {
-    b.append('(');
-    if (i < n.length()) {
-      char c = n.charAt(i);
-      if (c != '0') b.append("[0-" + (char) (c - 1) + "][0-9]{"
-          + (n.length() - i - 1) + "}|");
-      b.append(c);
-      maxInteger(n, i + 1, b);
-    }
-    b.append(')');
-  }
-  
-  /**
-   * Constructs automaton that accept strings representing nonnegative integers
-   * that are not less that the given value.
-   * 
-   * @param n string representation of minimum value
-   */
-  public static Automaton makeMinInteger(String n) {
-    int i = 0;
-    while (i + 1 < n.length() && n.charAt(i) == '0')
-      i++;
-    StringBuilder b = new StringBuilder();
-    b.append("0*");
-    minInteger(n.substring(i), 0, b);
-    b.append("[0-9]*");
-    return Automaton.minimize((new RegExp(b.toString())).toAutomaton());
-  }
-  
-  private static void minInteger(String n, int i, StringBuilder b) {
-    b.append('(');
-    if (i < n.length()) {
-      char c = n.charAt(i);
-      if (c != '9') b.append("[" + (char) (c + 1) + "-9][0-9]{"
-          + (n.length() - i - 1) + "}|");
-      b.append(c);
-      minInteger(n, i + 1, b);
-    }
-    b.append(')');
-  }
-  
-  /**
-   * Constructs automaton that accept strings representing decimal numbers that
-   * can be written with at most the given number of digits. Surrounding
-   * whitespace is permitted.
-   * 
-   * @param i max number of necessary digits
-   */
-  public static Automaton makeTotalDigits(int i) {
-    return Automaton.minimize((new RegExp("[ \t\n\r]*[-+]?0*([0-9]{0," + i
-        + "}|((([0-9]\\.*){0," + i + "})&@\\.@)0*)[ \t\n\r]*")).toAutomaton());
-  }
-  
-  /**
-   * Constructs automaton that accept strings representing decimal numbers that
-   * can be written with at most the given number of digits in the fraction
-   * part. Surrounding whitespace is permitted.
-   * 
-   * @param i max number of necessary fraction digits
-   */
-  public static Automaton makeFractionDigits(int i) {
-    return Automaton.minimize((new RegExp("[ \t\n\r]*[-+]?[0-9]+(\\.[0-9]{0,"
-        + i + "}0*)?[ \t\n\r]*")).toAutomaton());
-  }
-  
-  /**
-   * Constructs automaton that accept strings representing the given integer.
-   * Surrounding whitespace is permitted.
-   * 
-   * @param value string representation of integer
-   */
-  public static Automaton makeIntegerValue(String value) {
-    boolean minus = false;
-    int i = 0;
-    while (i < value.length()) {
-      char c = value.charAt(i);
-      if (c == '-') minus = true;
-      if (c >= '1' && c <= '9') break;
-      i++;
-    }
-    StringBuilder b = new StringBuilder();
-    b.append(value.substring(i));
-    if (b.length() == 0) b.append("0");
-    Automaton s;
-    if (minus) s = makeChar('-');
-    else s = makeChar('+').optional();
-    Automaton ws = getWhitespaceAutomaton();
-    return Automaton.minimize(ws.concatenate(
-        s.concatenate(makeChar('0').repeat()).concatenate(
-            makeString(b.toString()))).concatenate(ws));
-  }
-  
-  /**
-   * Constructs automaton that accept strings representing the given decimal
-   * number. Surrounding whitespace is permitted.
-   * 
-   * @param value string representation of decimal number
-   */
-  public static Automaton makeDecimalValue(String value) {
-    boolean minus = false;
-    int i = 0;
-    while (i < value.length()) {
-      char c = value.charAt(i);
-      if (c == '-') minus = true;
-      if ((c >= '1' && c <= '9') || c == '.') break;
-      i++;
-    }
-    StringBuilder b1 = new StringBuilder();
-    StringBuilder b2 = new StringBuilder();
-    int p = value.indexOf('.', i);
-    if (p == -1) b1.append(value.substring(i));
-    else {
-      b1.append(value.substring(i, p));
-      i = value.length() - 1;
-      while (i > p) {
-        char c = value.charAt(i);
-        if (c >= '1' && c <= '9') break;
-        i--;
-      }
-      b2.append(value.substring(p + 1, i + 1));
-    }
-    if (b1.length() == 0) b1.append("0");
-    Automaton s;
-    if (minus) s = makeChar('-');
-    else s = makeChar('+').optional();
-    Automaton d;
-    if (b2.length() == 0) d = makeChar('.')
-        .concatenate(makeChar('0').repeat(1)).optional();
-    else d = makeChar('.').concatenate(makeString(b2.toString())).concatenate(
-        makeChar('0').repeat());
-    Automaton ws = getWhitespaceAutomaton();
-    return Automaton.minimize(ws.concatenate(
-        s.concatenate(makeChar('0').repeat()).concatenate(
-            makeString(b1.toString())).concatenate(d)).concatenate(ws));
-  }
-  
-  /**
-   * Constructs deterministic automaton that matches strings that contain the
-   * given substring.
-   */
-  public static Automaton makeStringMatcher(String s) {
-    Automaton a = new Automaton();
-    State[] states = new State[s.length() + 1];
-    states[0] = a.initial;
-    for (int i = 0; i < s.length(); i++)
-      states[i + 1] = new State();
-    State f = states[s.length()];
-    f.accept = true;
-    f.transitions.add(new Transition(Character.MIN_VALUE, Character.MAX_VALUE,
-        f));
-    for (int i = 0; i < s.length(); i++) {
-      Set<Character> done = new HashSet<Character>();
-      char c = s.charAt(i);
-      states[i].transitions.add(new Transition(c, states[i + 1]));
-      done.add(c);
-      for (int j = i; j >= 1; j--) {
-        char d = s.charAt(j - 1);
-        if (!done.contains(d)
-            && s.substring(0, j - 1).equals(s.substring(i - j + 1, i))) {
-          states[i].transitions.add(new Transition(d, states[j]));
-          done.add(d);
-        }
-      }
-      char[] da = new char[done.size()];
-      int h = 0;
-      for (char w : done)
-        da[h++] = w;
-      Arrays.sort(da);
-      int from = Character.MIN_VALUE;
-      int k = 0;
-      while (from <= Character.MAX_VALUE) {
-        while (k < da.length && da[k] == from) {
-          k++;
-          from++;
-        }
-        if (from <= Character.MAX_VALUE) {
-          int to = Character.MAX_VALUE;
-          if (k < da.length) {
-            to = da[k] - 1;
-            k++;
-          }
-          states[i].transitions.add(new Transition((char) from, (char) to,
-              states[0]));
-          from = to + 2;
-        }
-      }
-    }
-    a.deterministic = true;
-    return a;
-  }
-  
-  private static Automaton getWhitespaceAutomaton() {
-    return ws;
-  }
 }

Modified: lucene/java/branches/flex_1458/src/test/org/apache/lucene/search/TestAutomatonQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/flex_1458/src/test/org/apache/lucene/search/TestAutomatonQuery.java?rev=930947&r1=930946&r2=930947&view=diff
==============================================================================
--- lucene/java/branches/flex_1458/src/test/org/apache/lucene/search/TestAutomatonQuery.java (original)
+++ lucene/java/branches/flex_1458/src/test/org/apache/lucene/search/TestAutomatonQuery.java Mon Apr  5 20:08:51 2010
@@ -106,23 +106,14 @@ public class TestAutomatonQuery extends 
     assertAutomatonHits(2, BasicAutomata.makeString("doc"));
     assertAutomatonHits(1, BasicAutomata.makeChar('a'));
     assertAutomatonHits(2, BasicAutomata.makeCharRange('a', 'b'));
-    assertAutomatonHits(2, BasicAutomata.makeCharSet("ab"));
-    assertAutomatonHits(1, BasicAutomata.makeDecimalValue("5678.9"));
-    assertAutomatonHits(1, BasicAutomata.makeDecimalValue("2345"));
-    assertAutomatonHits(3, BasicAutomata.makeFractionDigits(3));
-    assertAutomatonHits(1, BasicAutomata.makeIntegerValue("1234"));
     assertAutomatonHits(2, BasicAutomata.makeInterval(1233, 2346, 0));
     assertAutomatonHits(1, BasicAutomata.makeInterval(0, 2000, 0));
-    assertAutomatonHits(2, BasicAutomata.makeMaxInteger("003000"));
-    assertAutomatonHits(1, BasicAutomata.makeMinInteger("002000"));
-    assertAutomatonHits(2, BasicAutomata.makeStringMatcher("ome"));
-    assertAutomatonHits(2, BasicAutomata.makeTotalDigits(5));
     assertAutomatonHits(2, BasicOperations.union(BasicAutomata.makeChar('a'),
         BasicAutomata.makeChar('b')));
     assertAutomatonHits(0, BasicOperations.intersection(BasicAutomata
         .makeChar('a'), BasicAutomata.makeChar('b')));
-    assertAutomatonHits(1, BasicOperations.minus(BasicAutomata
-        .makeMaxInteger("3000"), BasicAutomata.makeIntegerValue("1234")));
+    assertAutomatonHits(1, BasicOperations.minus(BasicAutomata.makeCharRange('a', 'b'), 
+        BasicAutomata.makeChar('a')));
   }
   
   /**

Modified: lucene/java/branches/flex_1458/src/test/org/apache/lucene/util/automaton/TestBasicOperations.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/flex_1458/src/test/org/apache/lucene/util/automaton/TestBasicOperations.java?rev=930947&r1=930946&r2=930947&view=diff
==============================================================================
--- lucene/java/branches/flex_1458/src/test/org/apache/lucene/util/automaton/TestBasicOperations.java (original)
+++ lucene/java/branches/flex_1458/src/test/org/apache/lucene/util/automaton/TestBasicOperations.java Mon Apr  5 20:08:51 2010
@@ -23,7 +23,7 @@ public class TestBasicOperations extends
   public void testSingletonConcatenate() {
     Automaton singleton = BasicAutomata.makeString("prefix");
     Automaton expandedSingleton = singleton.cloneExpanded();
-    Automaton other = BasicAutomata.makeMaxInteger("57");
+    Automaton other = BasicAutomata.makeCharRange('5', '7');
     Automaton concat = BasicOperations.concatenate(singleton, other);
     assertTrue(concat.isDeterministic());
     assertEquals(BasicOperations.concatenate(expandedSingleton, other), concat);
@@ -45,7 +45,7 @@ public class TestBasicOperations extends
   public void testEmptySingletonConcatenate() {
     Automaton singleton = BasicAutomata.makeString("");
     Automaton expandedSingleton = singleton.cloneExpanded();
-    Automaton other = BasicAutomata.makeMaxInteger("57");
+    Automaton other = BasicAutomata.makeCharRange('5', '7');
     Automaton concat1 = BasicOperations.concatenate(expandedSingleton, other);
     Automaton concat2 = BasicOperations.concatenate(singleton, other);
     assertTrue(concat2.isDeterministic());