程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Atitit.linq java的原理與實現 解釋器模式,atitit.linq解釋器

Atitit.linq java的原理與實現 解釋器模式,atitit.linq解釋器

編輯:JAVA綜合教程

Atitit.linq java的原理與實現 解釋器模式,atitit.linq解釋器


Atitit.linq java的原理與實現 解釋器模式

 

 

1. Linq  from  where 的實現1

2. Where expr 的實現1

3. Attilax的一點變化2

4. 解釋器模式的結構2

5. Code3

5.1. EqExpression3

5.2. LikeExpression4

5.3. AndExpression4

5.4. AExpression5

6. 參考5

 

 

 

1. Linq  from  where 的實現

Map row= from(ColumnsDefs).where(eq("COLUMN_NAME", key)).exe().get(0);

 

2. Where expr 的實現

 

大概有15個expr。。。  關系(大小比較),邏輯expr。。。In like 等。。

 

作者:: 綽號:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 ) 漢字名:艾龍,  EMAIL:[email protected]

轉載請注明來源: http://www.cnblogs.com/attilax/

 

 

3. Attilax的一點變化

沒使用終結符號的概念..兩個數據類型..express類型,common data..

要是express類型..就是可以計算的express...  貝兒走普通的數據..

 

Note::checkSuitOk should  use  interpreter

 

4. 解釋器模式的結構

· 抽象解釋器:聲明一個所有具體表達式都要實現的抽象接口(或者抽象類),接口中主要是一個interpret()方法,稱為解釋操作。具體解釋任務由它的各個實現類來完成,具體的解釋器分別由終結符解釋器TerminalExpression和非終結符解釋器NonterminalExpression完成。

· 終結符表達式:實現與文法中的元素相關聯的解釋操作,通常一個解釋器模式中只有一個終結符表達式,但有多個實例,對應不同的終結符。終結符一半是文法中的運算單元,比如有一個簡單的公式R=R1+R2,在裡面R1和R2就是終結符,對應的解析R1和R2的解釋器就是終結符表達式。                                

· 非終結符表達式:文法中的每條規則對應於一個非終結符表達式,非終結符表達式一般是文法中的運算符或者其他關鍵字,比如公式R=R1+R2中,+就是非終結符,解析+的解釋器就是一個非終結符表達式。非終結符表達式根據邏輯的復雜程度而增加,原則上每個文法規則都對應一個非終結符表達式。

 

僅有兩類元素:運算元素和運算符號,運算元素就是指a、b、c等符號,需要具體賦值的對象,也叫做終結符號,為什麼叫終結符號呢?因為這些元素除了需要賦值外,不需要做任何處理,所有運算元素都對應一個具體的業務參數,這是語法中最小的單元邏輯,不可再拆分;運算符號就是加減符號,需要我們編寫算法進行處理,每個運算符號都要對應處理單元,否則公式無法運行,運算符號也叫做非終結符號

 

們就可以先畫一個簡單的類圖,如圖27-1所示。

5. Code

5.1. EqExpression 

package com.attilax.linq;

 

import java.util.Map;

 

public class EqExpression extends AExpression {

 

public EqExpression(String leftCol, Object ritVal) {

this.left=leftCol;

this.rit=ritVal;

}

public boolean interpreter(Map row) {

//LikeExpression le=(LikeExpression) whereExpressAst;

 

if(row.get(this.left.toString()).toString().equals(this.rit.toString()))

return true;

else

return false;

}

 

5.2. LikeExpression 

package com.attilax.linq;

 

import java.util.Map;

 

public class LikeExpression extends AExpression{

 

 

public LikeExpression(String col, String val) {

this.left=col;

this.rit=val;

}

public boolean checkSuitOk(Map row) {

//LikeExpression le=(LikeExpression) whereExpressAst;

if(row.get(this.left.toString()).toString().contains(this.rit.toString()))

return true;

else

return false;

}

 

}

5.3. AndExpression 

package com.attilax.linq;

 

import java.util.Map;

 

public class AndExpression extends AExpression {

 

public AndExpression(AExpression whereExpressAst, AExpression eq) {

this.left=whereExpressAst;

this.rit=eq;

}

public boolean checkSuitOk(Map row) {

//LikeExpression le=(LikeExpression) whereExpressAst;

AExpression lft_exp=(AExpression) this.left;

AExpression rit_exp=(AExpression) this.rit;

return  lft_exp.checkSuitOk(row) && rit_exp.checkSuitOk(row);

}

 

}

5.4. AExpression 

package com.attilax.linq;

 

import java.util.Map;

 

public class AExpression {

public Object left;

public Object rit;

 

public boolean checkSuitOk(Map row) {

throw new RuntimeException("no imp in base aexp class");

}

 

}

 

 

6. 參考

Atitit.linq api 兼容性草案 v2.docx

23種設計模式(14):解釋器模式 - 卡奴達摩的專欄 - 博客頻道 - CSDN.NET.htm

解釋器模式 詳解 - 瘋狂程序員 - 博客頻道 - CSDN.NET.htm

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved