<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 18,  comments - 0,  trackbacks - 0

    class P extends Parser;

    options {
     k=5;
     buildAST = true;
     defaultErrorHandler = false;
    }

    tokens {
     SELECT_STATEMENT;
     GROUP_BY; ORDER_BY;
     ALIAS_EQU;
     FUNCTION;
     LOGIC_OP;
     ALL_FIELDS;
    }

    segment
     : (COLUMN column
     | WHERE search_condition)
     EOF!
     ;

    statements
     : statement (SEMI^ statement)* EOF!;

    statement
     : tableUnion
     | tableCompare
     | select_statement
     {#statement=#([SELECT_STATEMENT], #statement);}
     ;

    tableUnion
     : ("t_union"^|"表合并"^) table_name COMMA! table_name
     ;

    tableCompare
     : ("t_compare"^|"表比較"^) table_name COMMA! table_name ("where"!|"條件"!) comparemethod_name search_condition
     ;

    select_statement
     : ("select"^|"查詢"^) ("distinct"^|"唯一"^)? select_list
      (("from"^|"來自"^) table_list)?
      (("where"^|"條件"^) search_condition)?
      (("group"^ "by"!|"分組"^) aggregate_expression_list)?
      (("order"^ "by"!|"排序"^) order_expression_list)?
     ;

    select_list
     : column (COMMA^ column)*
     ;

    table_list
     : table_name (COMMA^ table_name)*
     ;
    search_condition
     : equation
      (logic_op search_condition {#search_condition=#([LOGIC_OP, "logic_op"], #search_condition);})?
     ;

    aggregate_expression_list
     : aggregate_expr (COMMA^ aggregate_expr)*
     ;

    order_expression_list
     : order_expression (COMMA^ order_expression)*
     ;

    column
     : expression_with_aggr_func (("as"^|"作為"^) alias)?
     | alias ("="|"等于")! expression_with_aggr_func {#column=#([ALIAS_EQU, "="], #column);}
     | all:"所有" {#column=#([ALL_FIELDS, all.getText()]);}
     | STAR {#column=#([ALL_FIELDS, "*"]);}
     ;
    aggregate_expr
     : (field_name|function) (
      two_arg_op aggregate_expr {#aggregate_expr=#([TWO_ARG_OP, "two_arg_op"], #aggregate_expr);})?
     ;
    order_expression
     : (alias|field_name|aggregate_func|function) ("升序"^|"降序"^|"asc"^|"desc"^)?
     ;
    expression
     : (field_name|constant|function|param_equ)
      (two_arg_op expression {#expression=#([TWO_ARG_OP, "two_arg_op"], #expression);})?
     | LPAREN expression RPAREN
      (two_arg_op expression {#expression=#([TWO_ARG_OP, "two_arg_op"], #expression);})?
     | one_arg_op expression {#expression=#([ONE_ARG_OP, "one_arg_op"], #expression);}
     ;
    expression_with_aggr_func
     : (field_name|constant|function|aggregate_func)
      (two_arg_op expression_with_aggr_func
      {#expression_with_aggr_func=#([TWO_ARG_OP, "two_arg_op"], #expression_with_aggr_func);})?
     | LPAREN expression_with_aggr_func RPAREN
      (two_arg_op expression_with_aggr_func
      {#expression_with_aggr_func=#([TWO_ARG_OP, "two_arg_op"], #expression_with_aggr_func);})?
     | one_arg_op expression_with_aggr_func
      {#expression_with_aggr_func=#([ONE_ARG_OP, "one_arg_op"], #expression_with_aggr_func);}
     ;

    equation
     : expression (("="|compare_op) expression
      {#equation=#([COMPARE_OP, "comp_op"], #equation);}
     |  ("is"! "null"^|"is"! "not"^ "null"!|"為空"^|"非空"^)
     |  ("between"^|"范圍"^) expression ("and"!)? expression)
     ;

    //param_equ
    // : PARAM_LPAREN ID^ PARAM_RPAREN
    // ;

    param_equ
     : PARAM_ID
     ;

    alias
     : ID | QUOTED_STRING;
    field_name
     : ID POINT^ ID;
    //field_name
    // : ID
    // | ID POINT^ ID;
    constant
     : REAL_NUM
     | QUOTED_STRING
     | "null"
     ;

    function
     : function_name LPAREN! parameters RPAREN!
     ;
    aggregate_func
     : aggregate_func_name LPAREN! ("all"^|"全部"^|"distinct"^|"唯一"^)? parameters RPAREN!
     ;

    parameters
     : expression (COMMA^ expression)*
     ;
    table_name
     : ID (("as"^|"作為"^) alias)?
     ;

    function_name
     : "sqrt"   |  "求平方根"
     | "getdate"  |  "求當(dāng)前日期時間"
     | "abs"   |  "求絕對值"
     | "substring" |  "字符串截取"
     | "round"  | "格式化數(shù)值"
     | "right"  |  "字符串右截"
     | "ltrim"  | "去掉左空格"
     | "rtrim"  | "去掉右空格"
     | "char_length" | "求字符串的長度"
     | "floor"  | "求四舍后的整數(shù)"
     | "ceiling" | "求五入后的整數(shù)"
     | "lower"  |  "將字符串轉(zhuǎn)為小寫"
     | "charindex" | "存在于"
     | "str"   |  "數(shù)值轉(zhuǎn)字符串"
     ;


    aggregate_func_name
     : "sum"  | "求和"
     | "avg"  | "求平均數(shù)"
     | "max"  | "求最大值"
     | "min"  | "求最小值"
     | "count" | "求記錄數(shù)"
     ;

    one_arg_op
     : ONE_ARG_OP | "非";
    two_arg_op
     : TWO_ARG_OP | STAR
     | "與" | "或" | "異或" | "加" | "減" | "乘" | "除" | "求模";
    compare_op
     : COMPARE_OP | "等于" | "like"
     | "大于等于" | "小于等于" | "大于" | "小于" | "不等于"
     | "包含" | "不包含";
    logic_op
     : "and" | "or" | "并且" | "或者";

    comparemethod_name
     : "not exist" | "不存在"
     | "exist" | "存在";

    posted on 2007-04-03 18:00 LORD BLOG 閱讀(381) 評論(0)  編輯  收藏 所屬分類: 項目筆記
    主站蜘蛛池模板: 久久精品亚洲福利| gogo全球高清大胆亚洲| 亚洲AV无码久久精品狠狠爱浪潮| 日韩免费在线中文字幕| 亚洲成a人片在线观看国产| 男男黄GAY片免费网站WWW| 日本午夜免费福利视频| 亚洲熟女综合色一区二区三区| 好大好深好猛好爽视频免费| 亚洲欧美中文日韩视频| 亚洲av区一区二区三| 精品人妻系列无码人妻免费视频| 黑人精品videos亚洲人| 永久在线免费观看| 亚洲乱色伦图片区小说| 一区国严二区亚洲三区| 精品国产免费一区二区三区香蕉 | 亚洲精品无码专区久久同性男| 一级做a爰片久久毛片免费陪 | 亚洲日本在线免费观看| 中国在线观看免费国语版| 亚洲AV无码一区二区三区性色| 亚洲国产成人五月综合网 | 久久久久久亚洲精品不卡| 久久久久免费看黄a级试看| 亚洲人成在线免费观看| 免费日本黄色网址| 免费成人在线视频观看| 亚洲欧美日韩久久精品| 亚洲熟妇无码八AV在线播放| 最近中文字幕无免费| 亚洲国产成人AV在线播放| 国产成人综合亚洲AV第一页| 亚洲免费在线视频播放| 老子影院午夜伦不卡亚洲| 亚洲AV无码专区国产乱码电影 | 亚洲精品成a人在线观看夫| 亚洲精品国产精品国自产观看| 亚洲免费视频网站| 国产在亚洲线视频观看| 亚洲一区二区在线免费观看|