Author: aadamchik
Date: Mon Aug 21 08:33:48 2006
New Revision: 433264

URL: http://svn.apache.org/viewvc?rev=433264&view=rev
Log:
improving EJBQL parser - still lots of warnings

Modified:
    
incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/jjtree/JavaCCEJBQLParser.jjt

Modified: 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/jjtree/JavaCCEJBQLParser.jjt
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/jjtree/JavaCCEJBQLParser.jjt?rev=433264&r1=433263&r2=433264&view=diff
==============================================================================
--- 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/jjtree/JavaCCEJBQLParser.jjt
 (original)
+++ 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/jjtree/JavaCCEJBQLParser.jjt
 Mon Aug 21 08:33:48 2006
@@ -49,6 +49,116 @@
 }
 PARSER_END(JavaCCEJBQLParser)
 
+// ======================================================
+// TOKENS
+// ======================================================
+
+SKIP :
+{
+  " "
+| "\t"
+| "\n"
+| "\r"
+}
+
+/* keywords */
+TOKEN :
+{
+  < ALL: "ALL" >
+| < AND: "AND" >
+| < ANY: "ANY" >
+| < AS: "AS" >
+| < ASC: "ASC" >
+| < AVG: "AVG" >
+| < BETWEEN: "BETWEEN" >
+| < BIT_LENGTH: "BIT_LENGTH" >
+| < BY: "BY" >
+| < CHARACTER_LENGTH: "CHARACTER_LENGTH" >
+| < CHAR_LENGTH: "CHAR_LENGTH" >
+| < COUNT: "COUNT" >
+| < CURRENT_DATE: "CURRENT_DATE" >
+| < CURRENT_TIME: "CURRENT_TIME" >
+| < CURRENT_TIMESTAMP: "CURRENT_TIMESTAMP" >
+| < DELETE: "DELETE" >
+| < DESC: "DESC" >
+| < DISTINCT: "DISTINCT" >
+| < EMPTY: "EMPTY" >
+| < EXISTS: "EXISTS" >
+| < FALSE: "FASLE" >
+| < FETCH: "FETCH" >
+| < FROM: "FROM" >
+| < GROUP: "GROUP" >
+| < HAVING: "HAVING" >
+| < IN: "IN" >
+| < INNER: "INNER" >
+| < IS: "IS" >
+| < JOIN: "JOIN" >
+| < LEFT: "LEFT" >
+| < LIKE: "LIKE" >
+| < LOWER: "LOWER" > 
+| < MAX: "MAX" >
+| < MEMBER: "MEMBER" >
+| < MIN: "MIN" >
+| < MOD: "MOD" >
+| < NEW: "NEW" >
+| < NOT: "NOT" >
+| < NULL: "NULL" >
+| < OBJECT: "OBJECT" >
+| < OF: "OF" >
+| < ORDER: "ORDER" >
+| < OR: "OR" >
+| < OUTER: "OUTER" > 
+| < POSITION: "POSITION" >
+| < SELECT: "SELECT" >
+| < SET: "SET" >
+| < SOME: "SOME" >
+| < SUM: "SUM" >
+| < TRIM: "TRIM" >
+| < TRUE: "TRUE" >
+| < WHERE: "WHERE" >
+| < UNKNOWN: "UNKNOWN" >
+| < UPDATE: "UPDATE" >
+| < UPPER: "UPPER" >
+}
+
+TOKEN :
+{
+  < TRIM_SPEC: "LEADING" | "TRAILING" | "BOTH" (~["\n","\r"])? >
+| < ESCAPE_SPEC: "ESCAPE" (~["\n","\r"])? >
+| < PROPERTY_PATH: <IDENTIFIER> ( "." <IDENTIFIER>) *>
+| < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* >
+| < #LETTER: ["_","$","a"-"z","A"-"Z"] >
+| < #DIGIT: ["0"-"9"] >
+| < DECIMAL_DIGITS: (["0"-"9"])+ >
+}
+
+MORE:
+{
+    "'"  { stringBuffer = new StringBuffer(); }: WithinSingleQuoteLiteral
+}
+
+<WithinSingleQuoteLiteral> MORE:
+{
+       < ESC: "\\" ( ["n","r","t","b","f","\\","'","`","\""]
+                | (["0"-"3"])? ["0"-"7"] (["0"-"7"])?
+                )
+    >
+        { stringBuffer.append( escapeChar() ); }
+ |
+    < (~["'","\\"]) >
+        { stringBuffer.append( image.charAt(image.length()-1) ); }
+}
+
+<WithinSingleQuoteLiteral> TOKEN :
+{
+    <SINGLE_QUOTED_STRING: "'">
+        : DEFAULT
+}
+
+// ======================================================
+// GRAMMAR
+// ======================================================
+
 
 QLStatement qlStatement() : {}
 {
@@ -84,7 +194,7 @@
 
 void fromClause() : {} 
 {
-   "FROM" 
+   <FROM> 
    identificationVariableDeclaration()
    ( "," 
      ( identificationVariableDeclaration()
@@ -105,7 +215,7 @@
 void rangeVariableDeclaration() : {}
 {
    abstractSchemaName()
-   ["AS"]
+   [<AS>]
    identificationVariable()
 }
 
@@ -113,14 +223,14 @@
 {
    joinSpec()
    joinAssociationPathExpression()
-   ["AS"]
+   [<AS>]
    identificationVariable()
 }
 
 void fetchJoin() : {}
 {
    joinSpec()
-   "FETCH"
+   <FETCH>
    joinAssociationPathExpression()
 }
 
@@ -135,10 +245,10 @@
 void joinSpec() : {}
 {
    [ 
-      ( "LEFT" [ "OUTER" ] )
-      | "INNER"
+      ( <LEFT> [ <OUTER> ] )
+      | <INNER>
    ]
-   "JOIN"
+   <JOIN>
 }
 
 void joinAssociationPathExpression() : {}
@@ -151,21 +261,21 @@
 
 void collectionMemberDeclaration() : {}
 {
-   "IN ("
+   <IN> "("
    <PROPERTY_PATH> // **** SPEC NOTE: defined as 
"colection_valued_path_expression"
    ")"
-   [ "AS" ] 
+   [ <AS> ] 
    identificationVariable()
 }
 
 void updateClause() : {}
 {
-  "UPDATE" 
+  <UPDATE> 
   abstractSchemaName()
-  [ [ "AS" ]
+  [ [ <AS> ]
      identificationVariable()
   ]
-  "SET"
+  <SET>
   updateItem()
   ( ","
      updateItem()
@@ -186,27 +296,28 @@
 void newValue() : {}
 {
      simpleArithmeticExpression()
-  // | stringPrimary()
- //  | datetimePrimary()
-  // | booleanPrimary()
- //  | enumPrimary()
- //  | simpleEntityExpression()
-   | "NULL"
+   | stringLiteral()
+   | functionsReturningDatetime()
+   | aggregateExpression()
+   | booleanLiteral()
+   | inputParameter()
+   | enumLiteral()
+   | <NULL>
 }
 
 void deleteClause() : {}
 {
-  "DELETE" "FROM" 
+  <DELETE> <FROM> 
   abstractSchemaName()
-  [ [ "AS" ]
+  [ [ <AS> ]
      identificationVariable()
   ]
 }
 
 void selectClause() : {} 
 {
-   "SELECT"
-   [ "DISTINCT" ]
+   <SELECT>
+   [ <DISTINCT> ]
    selectExpression()
    ( ","
      selectExpression()
@@ -217,7 +328,7 @@
 {
      <PROPERTY_PATH> // **** SPEC NOTE: defined as 
"single_valued_path_expression | identification_variable"   
    | aggregateExpression()
-   | ( "OBJECT(" 
+   | ( "OBJECT" "(" 
      identificationVariable()
      ")" 
      )
@@ -267,13 +378,13 @@
 
 void whereClause() : {} 
 {
-   "WHERE"
+   <WHERE>
    conditionalExpression() 
 }
 
 void groupByClause() : {} 
 {
-   "GROUP" "BY"
+   <GROUP> <BY>
    groupByItem()
    ( ","
      groupByItem()
@@ -287,12 +398,12 @@
 
 void havingClause() : {} 
 {
-   "HAVING" conditionalExpression()
+   <HAVING> // conditionalExpression()
 }
 
 void orderByClause() : {} 
 {
-   "ORDER BY"
+   <ORDER> <BY>
    orderByItem()
    ( ","
      orderByItem()
@@ -310,13 +421,13 @@
    simpleSelectClause()
    subqueryFromClause()
    [ whereClause() ]
-   [ groupByClause() ]
-   [ havingClause() ]
+   [ LOOKAHEAD(2) groupByClause() ]
+   [ LOOKAHEAD(2) havingClause() ]
 }
 
 void subqueryFromClause() : {}
 {
-   "FROM" 
+   <FROM> 
    subselectIdentificationVariableDeclaration()
    ( "," subselectIdentificationVariableDeclaration() 
    )*
@@ -326,7 +437,7 @@
 {
      identificationVariableDeclaration()
    | ( associationPathExpression() 
-       [ "AS" ]
+       [ <AS> ]
        identificationVariable()
      )
    | collectionMemberDeclaration()
@@ -334,8 +445,8 @@
 
 void simpleSelectClause() : {}
 {
-   "SELECT" 
-   [ "DISTINCT" ]
+   <SELECT> 
+   [ <DISTINCT> ]
    simpleSelectExpression()
 }
 
@@ -348,7 +459,7 @@
 void conditionalExpression() : {}
 {
      conditionalTerm()
-     ( "OR" 
+     ( LOOKAHEAD(2) <OR> 
        conditionalTerm()
      )*
 }
@@ -356,14 +467,14 @@
 void conditionalTerm() : {}
 {
      conditionalFactor()
-    ( "AND" 
+     ( LOOKAHEAD(2)  <AND> 
        conditionalFactor()
      )*
 }
 
 void conditionalFactor() : {}
 {
-   [ "NOT" ]
+   [ <NOT> ]
    conditionalPrimary()
 }
 
@@ -378,7 +489,7 @@
 
 void simpleCondExpression() : {}
 {
-     comparisonExpression()
+     LOOKAHEAD(3) comparisonExpression()
    | LOOKAHEAD(3) betweenExpression()
    | LOOKAHEAD(3) likeExpression()
    | LOOKAHEAD(3) inExpression()
@@ -390,30 +501,27 @@
 
 void betweenExpression() : {}
 {
-     ( arithmeticExpression()
-       ( [ "NOT" ]
-         "BETWEEN"
-       )
-       arithmeticExpression()
-       "AND" 
-       arithmeticExpression()
-     )
-     | ( stringExpression()
-       ( [ "NOT" ]
-         "BETWEEN"
-       )
-       stringExpression()
-       "AND" 
-       stringExpression()
-     ) 
-     | ( datetimeExpression()
-       ( [ "NOT" ]
-         "BETWEEN"
-       )
-       datetimeExpression()
-       "AND" 
-       datetimeExpression()
-     )
+       ( LOOKAHEAD(2) arithmeticPrimary()
+       | stringLiteral()
+       | functionsReturningDatetime()
+       | ( "(" subquery() ")" )
+       )
+          
+    [ "NOT" ] "BETWEEN"
+       
+    ( LOOKAHEAD(2) arithmeticPrimary()
+       | stringLiteral()
+       | functionsReturningDatetime()
+       | ( "(" subquery() ")" )
+       )
+       
+    "AND" 
+       
+    ( LOOKAHEAD(2) arithmeticPrimary()
+       | stringLiteral()
+       | functionsReturningDatetime()
+       | ( "(" subquery() ")" )
+       )
 }
 
 void inExpression() : {}
@@ -439,13 +547,14 @@
 
 void likeExpression() : {}
 {
-   stringExpression()
-   [ "NOT" ]
-   "LIKE"
+   ( stringPrimary() 
+   | ( "(" subquery() ")" )
+   )
+   
+   [ <NOT> ]
+   <LIKE>
    patternValue()
-   [ "ESCAPE"
-     escapeCharacter()
-   ]
+   [ <ESCAPE_SPEC>]
 }
 
 void nullComparisonExpression() : {}
@@ -467,7 +576,7 @@
 
 void collectionMemberExpression() : {}
 {
-   entityExpression()
+   <PROPERTY_PATH> // **** SPEC NOTE: defined as "entity_expression"   
    [ "NOT" ]
    "MEMBER"
    [ "OF" ]
@@ -476,16 +585,16 @@
 
 void existsExpression() : {}
 {
-   [ "NOT" ] 
-   "EXISTS"
+   [ <NOT> ] 
+   <EXISTS>
    subquery()
 }
 
 void allOrAnyExpression() : {}
 {
-   ( "ALL"
-   | "ANY"
-   | "SOME"
+   ( <ALL>
+   | <ANY>
+   | <SOME>
    )
    "("
    subquery()
@@ -494,47 +603,23 @@
 
 void comparisonExpression() : {}
 {
-   ( stringExpression() 
-     comparisonOperator()
-     ( stringExpression()
-     | allOrAnyExpression()
-     )
-   )
-   | ( booleanExpression() 
-     ( "="
-     | "<>"
-     )
-     ( booleanExpression()
-     | allOrAnyExpression()
-     )
-   )
-   | ( enumExpression() 
-     ( "="
-     | "<>"
-     )
-     ( enumExpression()
-     | allOrAnyExpression()
-     )
-   )
-   | ( datetimeExpression() 
-     comparisonOperator()
-     ( datetimeExpression()
-     | allOrAnyExpression()
-     )
-   )
-   | ( entityExpression() 
-     ( "="
-     | "<>"
-     )
-     ( entityExpression()
-     | allOrAnyExpression()
-     )
+   // must enforce comparison type rules in the code - it is impossible to do 
it in the parser.
+   
+   ( stringLiteral()
+   | booleanLiteral()
+   | functionsReturningDatetime()
+   | LOOKAHEAD(2) simpleArithmeticExpression()
+   | LOOKAHEAD(2) ( "(" subquery() ")" )
    )
-   | ( arithmeticExpression() 
-     comparisonOperator()
-     ( arithmeticExpression()
-     | allOrAnyExpression()
-     )
+   
+   comparisonOperator()
+   
+   ( stringLiteral()
+   | booleanLiteral()
+   | functionsReturningDatetime()
+   | LOOKAHEAD(2) simpleArithmeticExpression()
+   | LOOKAHEAD(2) ( "(" subquery() ")" )
+   | allOrAnyExpression()
    )
 }
 
@@ -548,16 +633,6 @@
    | "<>"
 }
 
-void arithmeticExpression() : {}
-{
-   LOOKAHEAD(2)  
-   simpleArithmeticExpression()
-   | ( "(" 
-       subquery()
-       ")"
-     )
-}
-
 void simpleArithmeticExpression() : {}
 {
       arithmeticTerm()
@@ -593,8 +668,7 @@
 {
      <PROPERTY_PATH> // **** SPEC NOTE: defined as 
"state_field_path_expression"       
    | numericLiteral()
-   | (
-       "("
+   | ( "("
        simpleArithmeticExpression()
        ")"
      )
@@ -603,15 +677,6 @@
    | aggregateExpression()
 }
 
-void stringExpression() : {} 
-{
-   stringPrimary()
-   | ( "(" 
-       subquery()
-       ")"
-     )
-}
-
 void stringPrimary() : {}
 {
      <PROPERTY_PATH> // **** SPEC NOTE: defined as 
"state_field_path_expression"       
@@ -621,66 +686,6 @@
    | aggregateExpression()
 }
 
-void datetimeExpression() : {} 
-{
-      datetimePrimary()
-   | ( "(" 
-       subquery()
-       ")"
-     )
-}
-
-void datetimePrimary() : {}
-{
-     <PROPERTY_PATH> // **** SPEC NOTE: defined as 
"state_field_path_expression"       
-   | inputParameter()
-   | functionsReturningDatetime()
-   | aggregateExpression()
-}
-
-void booleanExpression() : {} 
-{
-     booleanPrimary()
-   | ( "(" 
-       subquery()
-       ")"
-     )
-}
-
-void booleanPrimary() : {}
-{
-     <PROPERTY_PATH> // **** SPEC NOTE: defined as 
"state_field_path_expression"       
-   | booleanLiteral()
-   | inputParameter()
-}
-
-void enumExpression() : {} 
-{
-     enumPrimary()
-   | ( "(" 
-       subquery()
-       ")"
-     )
-}
-
-void enumPrimary() : {}
-{
-     <PROPERTY_PATH> // **** SPEC NOTE: defined as 
"state_field_path_expression"       
-   | enumLiteral()
-   | inputParameter()
-}
-
-void entityExpression() : {}
-{
-       <PROPERTY_PATH> // **** SPEC NOTE: defined as 
"single_valued_association_path_expression | simple_entity_expression"
-}
-
-void simpleEntityExpression() : {}
-{
-     identificationVariable()
-   | inputParameter()
-}
-
 void functionsReturningNumerics() : {}
 {
      ( "LENGTH(" 
@@ -739,11 +744,10 @@
        simpleArithmeticExpression()
        ")"
      )
-   | ( "TRIM("
+   | ( <TRIM> "("
        [
          [ trimSpecification() ]
-         [ trimCharacter() ]
-         "FROM"
+         <FROM>
        ] 
        stringPrimary()
        ")"
@@ -760,9 +764,7 @@
 
 void trimSpecification() : {}
 {
-     "LEADING" 
-   | "TRAILING"
-   | "BOTH"
+   <TRIM_SPEC>
 }
 
 void abstractSchemaName() : {}
@@ -811,8 +813,8 @@
 
 void booleanLiteral() : {}
 {
-     "TRUE" 
-   | "FALSE"
+     <TRUE> 
+   | <FALSE>
 }
 
 void constructorName() : {}
@@ -820,66 +822,7 @@
    <IDENTIFIER>
 }
 
-void trimCharacter() : {}
-{
-   <ANY_CHAR>
-}
-
-void escapeCharacter() : {}
-{
-   <ANY_CHAR>
-}
-
 void patternValue() : {}
 {
    stringLiteral()
 }
-
-// **** TOKENS ****
-
-SKIP :
-{
-  " "
-| "\t"
-| "\n"
-| "\r"
-}
-
-TOKEN :
-{
-  < PROPERTY_PATH: <IDENTIFIER> ( "." <IDENTIFIER>) *>
-|
-  < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* >
-|
-  < #LETTER: ["_","$","a"-"z","A"-"Z"] >
-|
-  < #DIGIT: ["0"-"9"] >
-| 
-  < DECIMAL_DIGITS: (["0"-"9"])+ >
-| 
-  < ANY_CHAR: ~["\n","\r"]>
-}
-
-
-MORE:
-{
-    "'"  { stringBuffer = new StringBuffer(); }: WithinSingleQuoteLiteral
-}
-
-<WithinSingleQuoteLiteral> MORE:
-{
-       < ESC: "\\" ( ["n","r","t","b","f","\\","'","`","\""]
-                | (["0"-"3"])? ["0"-"7"] (["0"-"7"])?
-                )
-    >
-        { stringBuffer.append( escapeChar() ); }
- |
-    < (~["'","\\"]) >
-        { stringBuffer.append( image.charAt(image.length()-1) ); }
-}
-
-<WithinSingleQuoteLiteral> TOKEN :
-{
-    <SINGLE_QUOTED_STRING: "'">
-        : DEFAULT
-}
\ No newline at end of file


Reply via email to