<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"  |  "求當前日期時間"
     | "abs"   |  "求絕對值"
     | "substring" |  "字符串截取"
     | "round"  | "格式化數值"
     | "right"  |  "字符串右截"
     | "ltrim"  | "去掉左空格"
     | "rtrim"  | "去掉右空格"
     | "char_length" | "求字符串的長度"
     | "floor"  | "求四舍后的整數"
     | "ceiling" | "求五入后的整數"
     | "lower"  |  "將字符串轉為小寫"
     | "charindex" | "存在于"
     | "str"   |  "數值轉字符串"
     ;


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

    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 閱讀(383) 評論(0)  編輯  收藏 所屬分類: 項目筆記
    主站蜘蛛池模板: 亚洲精品无码成人AAA片| 亚洲激情黄色小说| 日本黄色动图免费在线观看| 337p欧洲亚洲大胆艺术| 久久久久久国产a免费观看黄色大片 | 自拍偷自拍亚洲精品情侣| 国产精品免费高清在线观看| 国产99在线|亚洲| 亚洲一区二区三区在线播放| 国产自国产自愉自愉免费24区| 91亚洲精品麻豆| www.亚洲一区| 日韩在线播放全免费| 美女18毛片免费视频| 亚洲午夜久久久精品影院| 国产高清视频在线免费观看| 久久久久久免费一区二区三区| 亚洲综合一区二区三区四区五区| 国产亚洲精品a在线观看| 国产美女在线精品免费观看| 中国毛片免费观看| 亚洲av永久中文无码精品综合 | 麻花传媒剧在线mv免费观看| 黄色免费在线网址| 亚洲国产精品成人精品软件| 国产亚洲成人久久| 成全高清视频免费观看| 久久永久免费人妻精品| 免费无码午夜福利片69| 亚洲国产激情在线一区| 亚洲国产日韩一区高清在线| 亚洲第一福利网站在线观看| 国产美女在线精品免费观看| 久久大香香蕉国产免费网站| kk4kk免费视频毛片| 亚洲AV成人一区二区三区观看 | 亚洲人成77777在线观看网| 亚洲嫩草影院久久精品| 亚洲永久无码3D动漫一区| 国产免费观看网站| 97人伦色伦成人免费视频|