<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)  編輯  收藏 所屬分類: 工作日志
    主站蜘蛛池模板: 自拍偷自拍亚洲精品被多人伦好爽| 全黄性性激高免费视频| 亚洲级αV无码毛片久久精品| 国产成人亚洲毛片| 特级淫片国产免费高清视频| 亚洲色偷偷色噜噜狠狠99网| 日韩吃奶摸下AA片免费观看| 亚洲熟妇无码AV| 国产精品无码一二区免费| 在线播放亚洲精品| 亚洲AV中文无码乱人伦在线视色| 羞羞漫画小舞被黄漫免费| 免费在线观看a级毛片| 四虎影视久久久免费| 亚洲美日韩Av中文字幕无码久久久妻妇 | 亚洲一区二区三区高清| 国产高清不卡免费视频| 日韩精品亚洲人成在线观看| 最近2019中文字幕免费大全5 | 在线观看av永久免费| 亚洲欧美国产国产一区二区三区| 成人免费无码大片a毛片| 久久精品国产亚洲av天美18| 亚洲精品无码久久毛片| 成人影片一区免费观看| 亚洲a级在线观看| 国产真人无遮挡作爱免费视频| 香港经典a毛片免费观看看| 国产AV无码专区亚洲AWWW| 无码人妻丰满熟妇区免费| 亚洲男人天堂2022| 亚洲欧洲自拍拍偷精品 美利坚| 国产一级a毛一级a看免费视频| 久久亚洲AV无码精品色午夜 | 亚欧免费视频一区二区三区| 亚洲精品无播放器在线播放 | 中文字幕免费在线| 污污免费在线观看| 亚洲s色大片在线观看| 亚洲第一成年免费网站| 一区二区三区免费视频观看|