Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx
Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx
C:\0workspace\AtiPlatf_cms\src\com\attilax\fsm\JavaExpFsm.java
String code = "new(com.attilax.util.connReduceDync).set_resfile(uc_js.txt).joinNout() "
.trim();
Ver2 新特性
字符串单引号括起来的支持
字符串可以不要双引号括起来..方便的使用path等..
$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://blog.cnb.net/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;
}
}
Atiend
相关文章
- JAVA多线程面试题_java多线程的实现方式
- java calendar 设置小时_Java Calendar.set 方法设置时间的问题
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java axis_Java 使用Axis实现WebService实例
- Java 中常用进制转换
- 【说站】java怎么从键盘输入一个数
- vscode配置java环境变量_配置Java
- java书店带商家商城书店多商家书店系统源码
- Java 近期新闻:Helidon Níma、Spring Framework、MicroProfile
- IntelliJ IDEA 2022 for Mac 完美兼容版:全新UI和协作功能的Java IDE
- java实现链栈与队列详解编程语言
- Java 数组的 12 个最佳方法详解编程语言
- JAVA小技巧详解编程语言
- Java 多线程详解(二)——如何创建进程和线程编程语言
- Java高效操作MySQL数据库(java写入mysql)
- Java 关闭 Redis 连接的指南(java关闭redis)
- 程序兵法:Java String 源码的排序算法(一)
- 使用Java连接MySQL实现查询功能(java连接mysql查询)
- 让Java开发能力在Linux下得到更大发挥(java linux编程)
- Java更新提升Oracle软件性能(java更新oracle)
- java得到某年某周的第一天实现思路及代码