北京火星人教育
4000336013
新闻详情

北京web前端培训学校选哪家好

来源:北京火星人教育时间:2020/5/17 14:58:18 浏览量:173

北京哪里有培训web前端?北京火星人教育开设的Web前端工程师课程是针对大专及以上学历人群求学和求职双重需求而设计,面向社会招生采用面授方式的IT课程,培养精通HTML5、CSS3、Ajax、JQuery等Web前端编程技术,具备互联网交互设计能力,熟悉后端服务器运行环境和数据通信协议,掌握响应式布局框架、Bootstrap、AngularJS等的JS框架的网站建设人才。


之前花了一周的断断续续时间实现了个简单的正则表达式引擎regex,之所以想要实现这个项目,主要是因为早期在网上偶然看到了一位名叫airtrack的coder写的正则表达式的实现1,2,当看完之后发觉如果按照经典龙书的教程来实现貌似也不是那么的难。正好一直都想实现个正则表达式引擎,于是就开始着手实现了下。

北京web前端培训学校选哪家好

由于之前有过实现解释器A2的经验,所以从词法分析->抽象语法树->NFA这整个阶段都还是很顺利的,问题主要是出现在了NFA生成DFA以及DFA化简阶段,用C这种静态而且缺乏各种数据结构的语言去描述各种数学上的解析步骤,写起来简直让人蛋疼无比。数学家在写出实现过程时,未必会去考虑工程师能否很快捷的实现。但,在工程师去实现过程中,却要把这个流程实现的尽可能的以及简单。尤其NFA转换成DFA使用的是subset construction方法。为了避免多次的进行遍历和创建临时队列,在实现过程中,其实用了一些看起来比较dirty的方法,对于阅读者来说,看代码会觉得比较晦涩。而且在实现时,都会不禁发问是否会有更好的方案来实现,但是后还是坚持的按照经典教程的案例把DFA实现出来了。


整个代码仅仅是包含了正则表达式基础的部分:与(ab),或(a|b),重复(a*).后续我又添加了一些转义字符和匹配特性(详情请见readme,但是总体上还是比web,perl的正则引擎差些。但这仅仅是功能添加问题,由于DFA生成已经实现,之后添加功能还是比较容易的。


设计


大致流程如下:


大部分代码主要是去构造小化DFA,之后拿到生成DFA状态图,进行匹配输入字符串。由于提供的正则规则比较少,而且没有backreference,capture,not greedy。所以遍历DFA的代码是很简单的,而且是O(N)的性能,N的大小取决于输入的原字符串的长度。通过这个来生成一个pattern对象,在数据结构中存储了DFA状态机,当调用API时,其实只是做了DFA遍历。遍历中如果遇到终结状态,则返回。如果遇到无法匹配的状态或者字符串到了结尾,但是依旧没匹配到终结状态,则返回0.


parse生成AST


parse的代码主要是在中,由于正则本身的文法就很简单,其实是可以完全省略过生成AST的部分,直接生成NFA状态的。但是在实现的时候,我还是习惯先生成AST,这样在流程上会清晰些,AST的生成用的是递归下降。AST的每个节点是如下结构:


struct reg_ast_node{


enum reg_op op;//节点类别


union{


struct reg_range range;//value


}value;


struct reg_ast_node*childs[2];//子节点


};


通过内部API生成根节点,之后生成NFA。


尊重原创文章,转载请注明出处与链接:http://www.soxsok.com/wnews167275.html 违者必究! 以上就是关于“北京web前端培训学校选哪家好”的全部内容了,想了解更多相关知识请持续关注本站。

温馨提示:为不影响您的学业,来 北京h5培训 校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
教学环境
预约申请
  • * 您的姓名
  • * 联系电话
  • * 报名课程
  •   备注说明
提交报名
版权所有:搜学搜课(www.soxsok.com) 技术支持:搜学搜课网