Atitit.java expression fsm 表达式分词fsm引擎
Atitit.java expression fsm 表达式分词fsm引擎
C:\0workspace\AtiPlatf_cms\src\com\attilax\fsm\JavaExpFsm.java
String code = "new(com.attilax.util.connReduceDync).set_resfile(uc_js.txt).joinNout() "
.trim();
$code=new(com.attilax.user.AgentService).login(admin,admin)
[
"new",
"(",
"com.attilax.user.AgentService",
")",
".",
"login",
"(",
"admin",
"admin",
")"
]
作者:: ★(attilax)>>> 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
package com.attilax.fsm;
import java.util.List;
import com.google.common.collect.Lists;
public class JavaExpFsm {
List<String> tokens = Lists.newLinkedList();
String curToken = "";
//String splitors = "(),\"";
String curStat = "ini";
private String code;
public char[] code_char_arr;
public JavaExpFsm(String code) {
this.code = code;
}
/**
* http://localhost/new(com.attilax.util.connReduceDync).set_resfile(uc_js.txt).joinNout()
* http://localhost/wrmiServlet?code=new(com.attilax.util.connReduceDync).set_resfile(uc_js.txt).joinNout()
* @param args
*/
public static void main(String[] args) {
String code = "new(com.attilax.util.connReduceDync).set_resfile(uc_js.txt).joinNout() "
.trim();
code= " new(com.attilax.agent.AgentRechargeService).getSubMemTotalsRecycleByAgentId(\"promoter:$pid$,fld2:v2\")";
List li = new JavaExpFsm(code).getTokens();
for (Object object : li) {
System.out.println(object);
}
System.out.println(li);
}
public List getTokens() {
code_char_arr = code.toCharArray();
for (char c : code_char_arr) {
// get next char,,then change stat
// jude cur char and cur stat...then if or not chage stat
if (c == '(' && !this.curStat.equals("strStart")) { //&& cur stta=ini
this.curStat = "brkStart";
tokens.add(this.curToken);
tokens.add("(");
this.curToken = "";
continue;
}
//if (c == '.' && this.curStat.equals("brkStart")) {
//
//curToken = curToken + String.valueOf(c);
//continue;
//
//// this.curStat.equals("brkEnd"))
//
//}
//
if (c == ')' && !this.curStat.equals("strStart") ) { //&& cur stat =brk start
this.curStat = "brkEnd";
if(this.curToken.length()>0)
tokens.add(this.curToken);
tokens.add(")");
this.curToken = "";
continue;
}
if (c == '.' && this.curStat.equals("brkEnd")) {
tokens.add(".");
curToken = "";
continue;
}
if(c=='\"' && this.curStat.equals("brkStart"))
{
this.curStat = "strStart";
//tokens.add(c);
this.curToken = "";
continue;
}
if(c=='\"' && this.curStat.equals("strStart"))
{
this.curStat = "strEnd";
tokens.add(this.curToken);
this.curToken = "";
continue;
}
if(c==',' && this.curStat.equals("brkStart"))
{
//this.curStat = "strEnd";
tokens.add(this.curToken);
this.curToken = "";
continue;
}
//if (this.curStat.equals("ini"))
curToken = curToken + String.valueOf(c);
}
return tokens;
}
}
Atitit.java expression fsm 表达式分词fsm引擎的更多相关文章
- Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx
Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx C:\0workspace\AtiPlatf_cms\src\com\attilax\fsm\Java ...
- Atitit..状态机与词法分析 通用分词器 分词引擎的设计与实现 attilax总结
Atitit..状态机与词法分析 通用分词器 分词引擎的设计与实现 attilax总结 1. 状态机 理论参考1 2. 词法分析理论1 3. 词法分析实例2 4. ---code fsm 状态机通用 ...
- atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- Aviator 表达式求值引擎开源框架
简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...
- 深入浅出 Java 8 Lambda 表达式
摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...
- Java 8 Lambda表达式10个示例【存】
PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...
- atitit.报告最佳实践oae 和报告引擎的选择
atitit.报告最佳实践oae 与报表引擎选型 1. 报表的基本的功能and结构 2 1.1. 查询设计器(配置化,metadata in html) ,anno 2 1.2. 查询引擎 2 1.3 ...
- Java 8 lambda表达式示例
例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...
随机推荐
- git push throws error: RPC failed; result=22, HTTP code = 411的解决办法
原因:默认 Git 设置 http post 的缓存为 1MB,将其设置为 500MB 解决办法如下: git config http.postBuffer 524288000
- java并发的理解
我认为并发大体上分为两种情况 1,多个线程或者进程访问公共资源,比如12306 2,多个线程访问同一个实例变量,比如tomcat 多个请求的线程访问同一个单例bean,如果bean是有状态的,就可能出 ...
- Java关键字总结及详解
Java关键字是Java的保留字,这些保留字不能用来作为常量.变量.类名.方法名及其他一切标识符的名称. 一.基本数据类型 Java中有八种基本数据类型,六种数字类型(四个整数型.六中浮点型),一种字 ...
- [aspx]控件及代码小例
1. 原生 asp 方式遍历 DataTable 2. aspx 的控件 Repeater 后台绑定 <%-- DataTable dt = OleDbHelper.GetTable(&quo ...
- MongoDB文档、集合、数据库简介
文档 概述 文档是MongoDB的核心概念,是数据的基本单元,非常类似于关系数据库中的行.在MongoDB中,文档表示为键值对的一个有序集.MongoDB使用Javascript shell,文档的表 ...
- android中的MVP模式
1.建立bean public class UserBean { private String mFirstName; private String mLastName; public UserBea ...
- 让IE8支持HTML5及canvas功能!chart.js图表绘制工具库IE8上兼容方案
第一步,我们加上对html5的支持. <!--[if IE]> <script src="/public/html5.js" type="text/ja ...
- WPF中ListBox的样式设置
设置之后的效果为
- rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>
大概思路如下: 使用Linux自带的rsyslog服务来做底层,然后再使用mysql与rsyslog的模板来存储文件,并且以web来进行显示出来.<模板的存储以日期的树形结构来存储,并且以服务器 ...
- Int16, Int32, Int64 范围
Int16, 等于short, 占2个字节. -32768 32767 Int32, 等于int, 占4个字节. -2147483648 2147483647 Int64, 等于long, 占8个字节 ...