<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 閱讀(231) 評論(0)  編輯  收藏 所屬分類: 工作日志
    主站蜘蛛池模板: 国产成人免费网站| 亚洲一区在线免费观看| 两个人的视频高清在线观看免费| 亚洲精品视频免费观看| 亚洲人成电影网站色| 久久精品九九亚洲精品| 久久久久亚洲精品男人的天堂 | 国产成人毛片亚洲精品| 日韩一级视频免费观看| AA免费观看的1000部电影| 无码人妻精品中文字幕免费| 一个人免费观看日本www视频| 亚洲国产精品成人AV在线| 亚洲精品**中文毛片| 亚洲爆乳精品无码一区二区三区 | 久久亚洲最大成人网4438| 亚洲av无码不卡| 亚洲午夜福利精品无码| 亚洲国产成人久久综合碰| 国产禁女女网站免费看| 永久中文字幕免费视频网站| 日韩精品成人无码专区免费| 久久九九兔免费精品6| 91网站免费观看| 国产在线jyzzjyzz免费麻豆| 在线人成精品免费视频| 无码av免费网站| 久久精品无码专区免费东京热 | 亚洲A∨无码一区二区三区| 亚洲色精品88色婷婷七月丁香| 亚洲人成无码网站久久99热国产| www国产亚洲精品久久久| 免费大片在线观看网站| 亚洲成?Ⅴ人在线观看无码| 亚洲不卡AV影片在线播放| 亚洲视频在线一区二区| 久久亚洲精品无码播放| 日韩亚洲变态另类中文| 亚洲国产精品无码久久一线 | 久久国产乱子免费精品| 免费国产黄网站在线观看可以下载|