Atitit.linq java的原理与实现 解释器模式
来源:互联网 发布:最后的幸存者小说知临 编辑:程序博客网 时间:2024/05/19 00:17
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:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/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
- Atitit.linq java的原理与实现 解释器模式
- Atitit 异常的实现原理 与用户业务异常
- Atitit 实现java的linq 以及与stream api的比较
- Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++
- Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
- Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理
- Atitit。Tree文件解析器的原理流程与设计实现 java c# php js
- Atitit 自然语言处理原理与实现 attilax总结
- atitit.js 与c# java交互html5化的原理与总结.doc
- Atitit.异常的设计原理与 策略处理 java 最佳实践 p93
- atitit. groupby linq的实现(1)-----linq框架选型 java .net php
- Atitit 面向对象 封装的实现原理
- atitit.md5算法的原理 与 总结
- Atitit.执行cli cmd的原理与调试
- Atitit.数据库存储引擎的原理与attilax 总结
- atitit.复合变量,也就是类似$$a的变量的原理与实现 java c#.net php js
- atitit.java解析sql语言解析器解释器的实现
- Atitit. 单列索引与多列索引 多个条件的查询原理与设计实现
- nginx做负载均衡时的session问题解决办法jvm-route原理
- 若有以下定义,且0<=i<4,则不正确的赋值语句是 int b[4][6],*p,*q[4]; A q[i]=b[i]; B p=b; C p=b[i]; D q[i]=&b[0][0];
- 11. Container With Most Water
- HDOJ 1715 大菲波数
- 为什么我要选择使用Yarn来做Docker的调度引擎
- Atitit.linq java的原理与实现 解释器模式
- Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is inse
- [MTK6574] 移植odin问题总结
- 如何使用js实现电影海报画廊特效?
- Android Studio中Junit单元测试使用JSON对象异常的问题
- HDU 2612
- LeetCode题解:Best Time to Buy and Sell Stock with Cooldown
- .NET使用VS2010开发Web Service
- nw.js node-webkit系列(13)Native UI API 其它