zoukankan      html  css  js  c++  java
  • Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结

    Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结

     

     

    1状态机 理论参考1

    2词法分析理论1

    3词法分析实例2

    4---code fsm 状态机通用实现2

    4.1. Context2

    4.2. public abstract  class State {3

    4.3. public class Token {4

    4.4. public class FinishState extends State {4

    5扫描器5

    5.1. public class Scanner  {5

     

     

    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.valuetoken.value+String.valueOf(curChar);

    context.curToken=token;

    }

    public void addCurTokenNnewToken(Context contextchar 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;

    }

     

  • 相关阅读:
    robotframework-ride1.7.3.1更新安装
    批量删除新浪微博
    Redis
    GET和POST两种基本请求方法的区别
    selenium2自动化测试实战--基于Python语言
    同步/异步/阻塞/非阻塞/BIO/NIO/AIO
    HTTP抓包实战
    LCT模板(BZOJ2631)
    树链剖分模板(BZOJ3083)
    凸包(BZOJ1069)
  • 原文地址:https://www.cnblogs.com/attilax/p/5110286.html
Copyright © 2011-2022 走看看