Added CQL base YACC grammar.
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 15 Nov 2005 12:23:32 +0000 (12:23 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 15 Nov 2005 12:23:32 +0000 (12:23 +0000)
src/cqlstd.y [new file with mode: 0644]

diff --git a/src/cqlstd.y b/src/cqlstd.y
new file mode 100644 (file)
index 0000000..0d81a5a
--- /dev/null
@@ -0,0 +1,49 @@
+/* $Id: cqlstd.y,v 1.1 2005-11-15 12:23:32 adam Exp $ 
+  YACC CQL grammar taken verbatim from the official spec. We don't
+  use that in YAZ but I don't know of a better place to put it.
+ */
+%term GE LE NE AND OR NOT PROX CHARSTRING1 CHARSTRING2
+
+%%
+cqlQuery : prefixAssignment cqlQuery | scopedClause;
+
+prefixAssignment : '>' prefix '=' uri | '>' uri;
+
+scopedClause : scopedClause booleanGroup searchClause | searchClause ;
+
+booleanGroup: boolean | boolean modifierList;
+
+boolean : AND | OR | NOT | PROX ;
+
+searchClause : '(' cqlQuery ')'
+             | index relation searchTerm
+            | searchTerm
+            ;
+
+relation : comparitor | comparitor modifierList;
+
+comparitor : comparitorSymbol | namedComparitor ;
+
+comparitorSymbol : '=' | '>' | '<' | GE | LE | NE;
+
+namedComparitor : identifier;
+
+modifierList : modifierList modifier  | modifier;
+
+modifier : '/' modifierName 
+         | '/' modifierName comparitorSymbol modifierValue
+        ;
+     
+
+prefix : term;
+uri : term;
+modifierName: term;
+modifierValue: term;
+searchTerm: term;
+index: term;
+
+term: identifier | AND | OR | NOT | PROX ;
+
+identifier: CHARSTRING1 | CHARSTRING2;
+
+%%