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 ...
随机推荐
- HTML插入Flash的全兼容完美解决方案-SWFObject
Flash 嵌入的问题朋友们可能认为很简单,但是具体到一些问题上来讲,就不是那么简单了,比如:IE浏览器对FLASH的拦截虚框怎么去掉?在FF.OP.NS等其它浏览器是否兼容?代码是否符合W3C标准? ...
- P1159岳麓山上打水
P1159岳麓山上打水 https://vijos.org/p/1159 dfsID,第一次听说这东西,但是感觉不太靠谱啊. 一开始的时候,想到了排个序后,然后进行dp,如果要输出字典序最小其实还是可 ...
- cms替换主页的步骤
cms替换主页的步骤 .先做好静态页面: .在D:\wamp\www\phpcms\install_package\phpcms\templates文件夹下建新的文件夹tianqiwangluo(项目 ...
- Xml文件操作的其中一个使用方法:
XmlNodeList students = doc.DocumentElement.ChildNodes;//Student节点集合 foreach (XmlNode stu in students ...
- 打开div层
$('#moneyWin').dialog('open').dialog('center').dialog('setTitle', '用户充值');
- windbg符号
Symbol Server (Microsoft): srv*c:\mss*http://msdl.microsoft.com/download/symbols Symbol Server (Citr ...
- Android Log介绍
android.util.Log常用的方法有以下5个:Log.v() ,Log.d() ,Log.i() ,Log.w() ,Log.e() .按照日志级别从高到低为ERROR, WARN, INFO ...
- Codeforces 714C. Sonya and Queries Tire树
C. Sonya and Queries time limit per test:1 second memory limit per test: 256 megabytes input:standar ...
- 今天想用jquery来实现div的拖放功能
html5标签.拖放(Drag 和 drop)是 HTML5 标准的组成部分. 步骤一:首先设置标签可以被拖 draggable="true" 步骤二:选取被拖的标签,和要放置被拖 ...
- SQLServer 脚本测试
最近在做大数据同步的工作.很少数据需要特殊清洗算法,每次测试,都测试全部数据,浪费时间,可以只测试那些特殊数据即可(切记).