Add ability to parse from char streams
authorJakub Skoczen <jakub@indexdata.dk>
Thu, 19 Jan 2012 12:01:14 +0000 (13:01 +0100)
committerJakub Skoczen <jakub@indexdata.dk>
Thu, 19 Jan 2012 12:01:14 +0000 (13:01 +0100)
src/main/java/org/z3950/zing/cql/CQLLexer.java
src/main/java/org/z3950/zing/cql/CQLParser.java

index 7bbf115..69211c8 100644 (file)
@@ -1,6 +1,8 @@
 // $Id: CQLLexer.java,v 1.14 2007-07-03 13:30:42 mike Exp $
 
 package org.z3950.zing.cql;
+import java.io.InputStream;
+import java.io.Reader;
 import java.io.StreamTokenizer;
 import java.io.StringReader;
 
@@ -56,8 +58,12 @@ class CQLLexer extends StreamTokenizer {
     // Controls debugging output
     private static boolean DEBUG;
 
-    CQLLexer(String cql, boolean lexdebug) {
-       super(new StringReader(cql));
+    public CQLLexer(String cql, boolean lexdebug) {
+        this(new StringReader(cql), DEBUG);
+    }
+    
+    CQLLexer(Reader cql, boolean lexdebug) {
+       super(cql);
        wordChars('!', '?');    // ASCII-dependency!
        wordChars('[', '`');    // ASCII-dependency!
        quoteChar('"');
index be365de..9970aa7 100644 (file)
@@ -6,6 +6,8 @@ import java.util.Properties;
 import java.io.InputStream;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.Reader;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -55,6 +57,26 @@ public class CQLParser {
        if (DEBUG)
            System.err.println("PARSEDEBUG: " + str);
     }
+    
+    /**
+     * Compiles a CQL query.
+     * <P>
+     * The resulting parse tree may be further processed by hand (see
+     * the individual node-types' documentation for details on the
+     * data structure) or, more often, simply rendered out in the
+     * desired form using one of the back-ends.  <TT>toCQL()</TT>
+     * returns a decompiled CQL query equivalent to the one that was
+     * compiled in the first place; <TT>toXCQL()</TT> returns an
+     * XML snippet representing the query; and <TT>toPQF()</TT>
+     * returns the query rendered in Index Data's Prefix Query
+     * Format.
+     *
+     * @param cql      The query
+     * @return         A CQLNode object which is the root of a parse
+     * tree representing the query.  */
+    public CQLNode parse(String cql) throws CQLParseException, IOException {
+        return parse(new StringReader(cql));
+    }
 
     /**
      * Compiles a CQL query.
@@ -72,7 +94,7 @@ public class CQLParser {
      * @param cql      The query
      * @return         A CQLNode object which is the root of a parse
      * tree representing the query.  */
-    public CQLNode parse(String cql)
+    public CQLNode parse(Reader cql)
        throws CQLParseException, IOException {
        lexer = new CQLLexer(cql, LEXDEBUG);