Atitit..状态机与词法分析 通用分词器 分词引擎的设计与实现 attilax总结
Atitit..状态机与词法分析 通用分词器 分词引擎的设计与实现 attilax总结
4.2. public abstract class State {3
4.4. public class FinishState extends State {4
1. 状态机 理论参考
Atitit. 有限状态机 fsm 状态模式 - attilax的专栏 - 博客频道 - CSDN.NET.htm
Atitit. 有限状态机 fsm 状态模式 - attilax的专栏 - 博客频道 - CSDN.NET.htm
2. 词法分析理论
atitit.词法分析的实现token attilax总结 - attilax的专栏 - 博客频道 - CSDN.NET.htm
atitit.自己动手开发编译器and解释器(1) ------词法分析--attilax总结 - attilax的专栏 - 博客频道 - CSDN.NET.htm
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
3. 词法分析实例
atitit..sql update语法的词法分析,与语法ast构建 - attilax的专栏 - 博客频道 - CSDN.NET.htm
atitit.java解析sql语言解析器解释器的实现 - 其他综合 - 红黑联盟.htm
4. ---code fsm 状态机通用实现
package com.attilax.fsm;
import java.util.ArrayList;
import java.util.List;
import com.attilax.lang.text.strUtil;
4.1. Context
public class Context {
public State state;
public List<Token> tokenList=new ArrayList <Token>();
public Token curToken=new Token();
public int curcharIndex;
public char[] sa;
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public void request(String s) {
if(sa==null)
sa=s.toCharArray();
state.handle(s, this);
}
}
package com.attilax.fsm;
import java.util.List;
import com.attilax.fsm.camelScanner.iniState;
package com.attilax.fsm;
4.2. public abstract class State {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public boolean MoveNextisEnd(Context context) {
context.curcharIndex++;
if(context.curcharIndex>=context.sa.length)
{
addCurToken(context );
context.state=new FinishState();
return true;
}
return false;
}
public void addCurToken(Context context) {
context.tokenList.add(context.curToken);
}
public void newToken(Context context , char curChar) {
Token token = new Token();
token.value= token.value+String.valueOf(curChar);
context.curToken=token;
}
public void addCurTokenNnewToken(Context context, char curChar) {
addCurToken(context);
newToken(context,curChar);
}
public abstract void handle(String sampleParameter, Context context) ;
}
package com.attilax.fsm;
4.3. public class Token {
public String value="";
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package com.attilax.fsm;
4.4. public class FinishState extends State {
@Override
public void handle(String sampleParameter, Context context) {
// TODO Auto-generated method stub
}
}
5. 扫描器
5.1. public class Scanner {
public static void main(String[] args) {
// TODO Auto-generated method stub
Strings = "fld1=1,fld2='at''t,lax',fld3='val3'";
s="aaaaCamelJSONObject123forMac";
}
public List getTokenList(String s) {
// DslPaserContext context = new DslPaserContext();
Context context = new Context ();
context.setState(new iniState());
int n = 0;
while (!(context.state instanceof FinishState)) {
// System.out.println(n);
// ����
context.request(s);
n++;
if (n > 200)
break;
}
for (Token tk : context.tokenList) {
// if(tk.value.trim().length()>0)
System.out.println(tk.value + "===");
}
return (List) context.tokenList;
}
}
public List<String> getTokenList_retStr(String s)
{
if(s.length()==0)
return new ArrayList<String>();
List<String> li_r=new ArrayList<String>();
List<Token> li=getTokenList(s);
for (Token token : li) {
li_r.add(token.value);
}
return li_r;
}
Atitit..状态机与词法分析 通用分词器 分词引擎的设计与实现 attilax总结的更多相关文章
- Atitit. camel分词器 分词引擎 camel拆分 的实现设计
Atitit. camel分词器 分词引擎 camel拆分 的实现设计 1. camel分词器1 1.1. 实现的界定符号大写字母小写字母数字1 1.2. 特殊处理 对于JSONObject 多个大写 ...
- IKanalyzer分词器分词并且统计词频
<dependency> <groupId>com.janeluo</groupId> <artifactId>ikanalyzer</artif ...
- ElasticSearch最全分词器比较及使用方法
介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elasticsearch 是用 Java 开 ...
- Apache Lucene(全文检索引擎)—分词器
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...
- 2.IKAnalyzer 中文分词器配置和使用
一.配置 IKAnalyzer 中文分词器配置,简单,超简单. IKAnalyzer 中文分词器下载,注意版本问题,貌似出现向下不兼容的问题,solr的客户端界面Logging会提示错误. 给出我配置 ...
- Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】
对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...
- Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- Elasticsearch之分词器的作用
前提 什么是倒排索引? Analyzer(分词器)的作用是把一段文本中的词按一定规则进行切分.对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同的语言,要用不同的 ...
- Elastic Search中normalization和分词器
为key_words提供更加完整的倒排索引. 如:时态转化(like | liked),单复数转化(man | men),全写简写(china | cn),同义词(small | little)等. ...
随机推荐
- luogu P1194 买礼物
题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只花K[I,J]元,更 ...
- 【动态规划】Gym - 100923A - Por Costel and Azerah
azerah.in / azerah.out Por Costel the Pig has received a royal invitation to the palace of the Egg-E ...
- 【可持久化Trie】【set】bzoj3166 [Heoi2013]Alo
枚举每个数,计算以其为次大数的最大区间,显然,只需要用这个区间的答案 对 答案进行更新即可. 找到每个数右侧.左侧第1.2个比它大的数,然后分类讨论一下即可. 找到的过程中把数sort以后,从大到小把 ...
- python3 Django框架报错(备忘录)
这篇博客主要总结的学习Django框架中,遇到的报错如何去解决问题: 1.decimal.InvalidOperation: decimal.InvalidOperation: [<class ...
- [CF865C]Gotta Go Fast
题目大意: 一个游戏关卡有$n(n\le50)$个任务,若在$m$秒内按顺序完成所有任务则算作通过当前关卡.每个关卡有三个属性$a_i,b_i,p_i(1\le a_i<b_i\le100,80 ...
- 自定义数据类型写入SequenceFile并读出
开头对这边博客的内容做个概述,首先是定义了一个DoubleArrayWritable的类,用于存放矩阵的列向量,然后将其作为value写入SequenceFile中,key就是对应的矩阵的列号,最后( ...
- linux之touch命令修改文件的时间戳
功能:对已经存在文件的时间进行修改,存取时间(access time).修改时间(modification time).对不存在的文件,进行创建新的空白文件. 语法:touch [选项] 文件 ...
- rem 自适应
最近在写一个关于小说阅读的webApp,由于没有借用任何框架,所以很多底层的内容都需要自己去解决,幸好的是这次只是关于移动端的内容,还不至于去向着jquery的方向码代码.言归正传,前几天在处理底色切 ...
- spring-data-jpa查询语句的书写实例小计
//查询语句List<AuctionLot> alots = auctionLotRepository.findAllByAuctionIdAndAucIdIsNotNullAndIsOf ...
- 前端:微信支付和支付宝支付在pc端和h5页面中的应用
1:h5微信支付 使用的是https://pay.weixin.qq.com/wiki/doc/api/index.html 中的 (1):公司需要首先要配置公众号微信支付地址和测试白名单(支付的时 ...