<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
    問題描述:
       由于編譯器中將使用到not、 not in、not exists、not like、is not null等包含英文not的單詞,而ANTLR在進行詞法分析時,無法根據空格進行解析。而且原來用("not"^) search_condition對整個WHERE條件的邏輯非構造語法樹,也與其他地方的not產生沖突,導致無法識別英文的not。

    處理過程:
       1、對整個WHERE條件的英文邏輯非(not),增加一個SEARCH_NOT_CONDITION TOKEN,用來分辨此為整個WHERE條件,而中文的非仍熱為整個WHERE條件的根節點,語法定義如下:
       
    1 search_condition
    2     :    bool_exp
    3     |    ( "not"
    4         {#search_condition = #([SEARCH_NOT_CONDITION, "search_not_condition"], search_condition);}
    5         | ""^
    6         ) search_condition
    7     ;
          
       2、增加LOGICAL_NOT_LIKE、LOGICAL_NULL、LOGICAL_NOT_NULL、LOGICAL_IN、LOGICAL_NOT_IN TOKEN,用來針對這些英文的關鍵字進行分析,語法定義如下:
          
     1 equation
     2     :    expression (
     3         
     4         //關系運算符(+ - * /) 表達式
     5         ("=" | compare_op) expression
     6           {#equation=#([COMPARE_OP, "comp_op"], #equation);}
     7           
     8         //關系運算符NOT LIKE 表達式
     9     |    ("not" "like") expression
    10         {#equation=#([LOGICAL_NOT_LIKE, "logic_not_like"], #equation);}    
    11 
    12         //關系運算符IS NULL/IS NOT NULL
    13     |    ( "is" "null"
    14           {#equation = #([LOGICAL_NULL, "logic_null"], #equation);}
    15         | "is" "not" "null"
    16           {#equation = #([LOGICAL_NOT_NULL, "logic_not_null"], #equation);}
    17         | "為空"^ | "非空"^
    18         )
    19     
    20         //關系運算符BETWEEN AND
    21     |     ("between"^ | "范圍"^) expression ("and"!)? expression
    22     
    23         //關系運算符IN/NOT IN
    24     |    ( "in"
    25           {#equation = #([LOGICAL_IN, "logic_in"], #equation);}
    26         | "not" "in"
    27           {#equation = #([LOGICAL_NOT_IN, "logic_not_in"], #equation);}
    28         | "在于"^ | "不在于"^
    29         ) exp_set
    30     )
    31     ;
          語法樹遍歷代碼如下:
     1 equation returns [EquationModel model]
     2 {
     3     ExpressionModel e1, e2, e3;
     4     EquationModel equation;
     5     model=new EquationModel();
     6     String nullStr = "";
     7 }
     8     :    #(COMPARE_OP e1=expression op:compare_op e2=expression)
     9     {model.addExpression(e1); model.addOperator(op.getText()); model.addExpression(e2);}
    10     
    11     |    #(LOGICAL_NOT_LIKE e1=expression "not" "like" e2=expression)
    12     {model.addExpression(e1); model.addOperator("not like"); model.addExpression(e2);}
    13     
    14     |    #(LOGICAL_NULL e1=expression "is" "null")
    15     {model.addExpression(e1); model.addOperator("is null");}
    16     |    #(n:"為空" e1=expression)
    17     {model.addExpression(e1); model.addOperator(n.getText());}
    18     |    #(LOGICAL_NOT_NULL e1=expression "is" "not" "null")
    19     {model.addExpression(e1); model.addOperator("is not null");}
    20     |    #(nn:"非空" e1=expression)
    21     {model.addExpression(e1); model.addOperator(nn.getText());}
    22     |    #("between" e1=expression e2=expression e3=expression)
    23     {model.addExpression(e1); model.addOperator("between");
    24      model.addExpression(e2); model.addExpression(e3);}
    25     |    #(btw:"范圍" e1=expression e2=expression e3=expression)
    26     {model.addExpression(e1); model.addOperator(btw.getText());
    27      model.addExpression(e2); model.addExpression(e3);
    28     }
    29     
    30     |    #(LOGICAL_IN e1=expression "in" e2=exp_set)
    31     {model.addExpression(e1); model.addOperator("in"); model.addExpression(e2);}
    32     |    #(ct1:"在于" e1=expression e2=exp_set)
    33     {model.addExpression(e1); model.addOperator(ct1.getText()); model.addExpression(e2);}
    34     |    #(LOGICAL_NOT_IN e1=expression "not" "in" e2=exp_set)
    35     {model.addExpression(e1); model.addOperator("not in"); model.addExpression(e2);}
    36     |    #(ct2:"不在于" e1=expression e2=exp_set)
    37     {model.addExpression(e1); model.addOperator(ct2.getText()); model.addExpression(e2);}
    38     ;

     

      LORD

      jiandeh@sina.com

      2007-05-22

    posted on 2007-05-22 16:44 LORD BLOG 閱讀(232) 評論(0)  編輯  收藏 所屬分類: 工作日志
    主站蜘蛛池模板: 日本免费人成视频在线观看| 无码的免费不卡毛片视频| 两个人日本WWW免费版| 亚洲国产精品综合久久网络| 在线观看亚洲专区| 免费**毛片在线播放直播| 国产精品观看在线亚洲人成网| 国产精品二区三区免费播放心| 亚洲AV无码一区二区三区在线| 青娱乐免费在线视频| 亚洲一区二区三区免费观看| 亚洲黄色免费在线观看| 亚洲福利视频网站| 丁香花免费高清视频完整版| 7777久久亚洲中文字幕| 国内一级一级毛片a免费| 看亚洲a级一级毛片| 亚洲日韩精品无码专区网站| 两性色午夜免费视频| 久久精品国产亚洲AV无码娇色| 中国人xxxxx69免费视频| 77777午夜亚洲| 俄罗斯极品美女毛片免费播放| jizz免费在线观看| 香蕉蕉亚亚洲aav综合| 97碰公开在线观看免费视频| 亚洲欧洲AV无码专区| 亚洲人成无码网WWW| 久久青草免费91观看| 中文日韩亚洲欧美制服| 免费人成无码大片在线观看| 四虎影视无码永久免费| 亚洲狠狠狠一区二区三区| 日本大片在线看黄a∨免费| 国产成人精品免费大全| 亚洲人成网站在线播放影院在线| 在线视频免费观看www动漫| 中文日本免费高清| 亚洲国产成人精品青青草原| 亚洲国产成人a精品不卡在线| 2022久久国产精品免费热麻豆|