Add classes for visitor traversal
[cql-java-moved-to-github.git] / src / main / java / org / z3950 / zing / cql / CQLParser.java
index 4d4f025..cbe64d5 100644 (file)
@@ -244,14 +244,15 @@ public class CQLParser {
            if (!isRelation())
               break; //we're done if no relation
            
+            //render relation
+           String relstr = (lexer.what() == CQLTokenizer.TT_WORD ?
+                            lexer.value() : lexer.render(lexer.what(), false));
             //we have relation, but it only makes sense if preceded by a single term
             if (all.length() > first.length()) {
-              throw new CQLParseException("unexpected relation '"+lexer.value()+"'"
+              throw new CQLParseException("unexpected relation '"+relstr+"'"
                 , lexer.pos());
             }
             index = first;
-           String relstr = (lexer.what() == CQLTokenizer.TT_WORD ?
-                            lexer.value() : lexer.render(lexer.what(), false));
            relation = new CQLRelation(relstr);
            match(lexer.what());
            ModifierSet ms = gatherModifiers(relstr);
@@ -478,6 +479,11 @@ public class CQLParser {
            root = parser.parse(cql);
        } catch (CQLParseException ex) {
            System.err.println("Syntax error: " + ex.getMessage());
+            StringBuilder space = new StringBuilder(cql.length());
+            System.out.println(cql);
+            for (int i=0; i<ex.getPosition(); i++) space.append(" ");
+            space.append("^");
+            System.err.println(space.toString());
            System.exit(3);
             return; //compiler
        } catch (IOException ex) {