posts - 18,  comments - 0,  trackbacks - 0
          公告
          這個世界的美麗在于變化
          而一個人的美麗在于奮斗
          ......
          <2007年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          JAVA網址

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

             在目前的WHERE條件中,針對where ((a > 0) and (c = 'hjd'))之間的邏輯表達式無法識別,參考oracle的語法文件,我修改了語法文件,語法已可以驗證,但在遍歷語法樹時,TOKEN下面的子TOKEN內容無法獲取,語法定義的內容如下:

          /*==================================================================//
          //                                                                  //
          //      Where Condition Begin                                       //
          //                                                                  //
          //==================================================================*/
          where_condition
           : condition
                  { #where_condition = #([WHERE_CONDITION, "where_condition"], #where_condition); }
              ;

          condition
           :  logical_term ( ("or"^ | "或者"^) logical_term )*
           ;

          logical_term
           : logical_factor ( ("and"^ | "并且"^) logical_factor )*
           ;

          logical_factor
           : ( exp_simple compare_op exp_simple ) => (exp_simple compare_op exp_simple )
            {#logical_factor = #([COMPARE_OP, "comp_op"], #logical_factor);}
           |  ( exp_simple ( "in" | "在于" ) ) => exp_simple ( "in" | "在于" ) exp_set
            { #logical_factor = #([LOGICAL_CONTAIN, "logic_contain"], #logical_factor); }
           | ( exp_simple ( "not in" | "不在于" ) ) => exp_simple ( "not in" | "不在于" ) exp_set
            { #logical_factor = #([LOGICAL_CONTAIN, "logic_contain"], #logical_factor); }
           |  ( exp_simple ( "like" | "包含" ) ) => exp_simple ("like" | "包含" ) where_expression ( "escape" QUOTED_STRING )?
            { #logical_factor = #([LOGICAL_LIKE, "logic_like"], #logical_factor); }
           |  ( exp_simple ( "not like" | "不包含" ) ) => exp_simple ("not like" | "不包含" ) where_expression ( "escape" QUOTED_STRING )?
            { #logical_factor = #([LOGICAL_LIKE, "logic_like"], #logical_factor); }
           |  ( exp_simple ( "between"| "范圍" ) ) => exp_simple ( "between" | "范圍" ) exp_simple exp_simple
            { #logical_factor = #([LOGICAL_BETWEEN, "logic_between"], #logical_factor); }
           |  ( exp_simple ( "not between"| "不在范圍" ) ) => exp_simple ( "not between" | "不在范圍" ) exp_simple exp_simple
            { #logical_factor = #([LOGICAL_BETWEEN, "logic_between"], #logical_factor); }
           |  ( exp_simple ( "is null" | "為空" ) ) => exp_simple ( "is null" | "為空" )
            { #logical_factor = #([LOGICAL_NULL, "logic_null"], #logical_factor); }
           |  ( exp_simple ( "is not null" | "非空" ) ) => exp_simple ( "is not null" | "非空" )
            { #logical_factor = #([LOGICAL_NULL, "logic_null"], #logical_factor); }
           |  ( quantified_factor ) => quantified_factor
            { #logical_factor = #([LOGICAL_EXISTS, "logic_exists"], #logical_factor); }
           |  ( ( "not" | "非" ) condition ) => ( "not" | "非" ) condition
            { #logical_factor = #([COND_NOT, "cond_not"], #logical_factor); }
           |  ( LPAREN condition RPAREN )
            { #logical_factor = #([COND_PAREN, "cond_paren"], #logical_factor); }
              ;

          quantified_factor
           : ( exp_simple compare_op ( "all" | "any" )? subquery ) => exp_simple compare_op ( "all" | "any" )? subquery
              |  ( ( "not" )? "exists" subquery ) => ( "not" )? "exists" subquery
              |  subquery
              ;

          exp_simple
           :  where_expression
           ;

          where_expression
           :  term ( ( PLUS^ | MINUS^ | "加"^ | "減"^) term )*
              ;

          term
           :  factor ( ( MUL^ | DIVIDE^ | "乘"^ | "除"^) factor )*
              ;
           
          multiply
           : MUL | "乘"
                  { #multiply = #([MULTIPLY, "multiply"], #multiply); }
              ;

          factor
           : ( sql_literal ) => sql_literal
           | ( ( PLUS | MINUS ) where_expression ) => ( PLUS | MINUS ) where_expression
           | ( function_name ( LPAREN where_expression ( COMMA where_expression )* RPAREN ) ) => function_name ( LPAREN where_expression ( COMMA where_expression )* RPAREN )
            { #factor = #([NORMAL_FUNCTION, "normal_function"], #factor); }
           |  ( aggregate_func_name LPAREN ( STAR | "all" | "distinct" )? (where_expression)? RPAREN ) => aggregate_func_name LPAREN ( STAR | "all" | "distinct" )? (where_expression)? RPAREN
                  { #factor = #([GROUP_FUNCTION, "group_function"], #factor); }
           | ( LPAREN where_expression RPAREN ) => LPAREN where_expression RPAREN
            { #factor = #([EXPRESSION_PAREN, "expression_paren"], #factor); }
           ;

          sql_literal
           : constant
           | field_name
           ;

          where_expression_list
           : LPAREN where_expression ( COMMA where_expression )+ RPAREN
           ;

          exp_set
           :  LPAREN constexpset RPAREN
           {#exp_set = #([SUBCONTAIN_OP, "subcontain_op"], #exp_set);}
          // | subquery
           ;

          constexpset
           : constant (COMMA^ constant)*
          // {#constexpset = #([SUBCONTAIN_CONTENT, "subcontain_content"], #constexpset);}
           ;
          /*==================================================================//
          //                                                                 //
          //      Where Condition End                                        //
          //                                                                 //
          //==================================================================*/

          posted on 2007-04-12 10:50 LORD BLOG 閱讀(573) 評論(0)  編輯  收藏 所屬分類: 工作日志
          主站蜘蛛池模板: 牡丹江市| 大田县| 元朗区| 孝昌县| 岳阳市| 奉化市| 五家渠市| 辽阳市| 五华县| 扎囊县| 中卫市| 徐汇区| 辽阳县| 瑞金市| 荆门市| 无为县| 英山县| 揭东县| 汝州市| 弋阳县| 遂溪县| 绥芬河市| 石楼县| 渝北区| 内江市| 东宁县| 镶黄旗| 芦山县| 汶上县| 河北区| 博爱县| 中阳县| 鹤壁市| 海淀区| 三门县| 岳阳市| 贺州市| 临沧市| 海安县| 江都市| 西华县|