Atitit 发帖机系列(7) 词法分析的方法attilax大总结)

1.1. 词法分析貌似俩大方法,一个直接根据状态图转换,一个根据dfa1

1.2. switchcase或者ifelse 最原始方法1

1.3. .  状态表 比较实用2

1.4.  使用NFA、DFA构建FSM( 专业方法,难度大) DFA实际上就是高级版的状态表2

1.5. 构建词法分析器一般需要几个步骤:2

1.5.1. 为正规式设计NFA  由正规式构造FA——Thompson法2

1.6. 优先递归 替换循环3

1.7. 状态转移表3

界面与后端通讯需要传递dsl,需要做词法分析。。

1.1. 词法分析貌似俩大方法,一个直接根据状态图转换,一个根据dfa

简单点儿说,词法分析就是进行正则表达式匹配。词法分析程序就是根据要匹配的正则表达式生成它的NFA或者DFA,再将待匹配的字符串放到这些NFA或者DFA中进行处理,从而分析出输入字符串是否匹配给定的正则表达式

词法分析器的任务是按照一定模式从源程序中识别出记号(token).

我们使用正规式描述这一模式,并通过有限自动机进行识别.

因为NFA对状态转移不加限制在实际应用中带来很多问题, 通常我们将NFA转换为等价的DFA. 这里所谓的自动机等价是指它们识别同样的正规集.

1.2. switchcase或者ifelse 最原始方法

这无意是最直观的方式,使用一堆条件判断,会编程的人都可以做到,对简单小巧的状态机来说最合适,但是毫无疑问,这样的方式比较原始,对庞大的状态机难以维护。

但checkStateChange()和performStateChange()这两个函数本身依然会在面对很复杂的状态机时,内部逻辑变得异常臃肿,甚至可能是难以实现。

在很长一段时期内,使用switch语 句一直是实现有限状态机的唯一方法,甚至像编译器这样复杂的软件系统,大部分也都直接采用这种实现方式。但 之后随着状态机应用的逐渐深入,构造出来的状态 机越来越复杂,这种方法也开始面临各种严峻的考验,其中最令人头痛的是如果状态机中的状态非常多,或者状 态之间的转换关系异常复杂,那么简单地使用switch语句构造出来的状态机将是不可维护的。

1.3. .  状态表 比较实用

1.4.  使用NFA、DFA构建FSM( 专业方法,难度大) DFA实际上就是高级版的状态表

使用DFA的方法完成的可配置词法分析器的性能是相当好

一般来说,比较高性能的DFA的实现是一张二维的表。行代表字符,列代表DFA 的状态,单元格代表该状态经输入某个字符之后进行转移的目标状态。此外还有一张表用来记录哪些状态对应哪些规则的结束状态

1.5. 构建词法分析器一般需要几个步骤:

00001.

用正规式描述记号的模式

00002.

00003.

1.5.1. 为正规式设计NFA  由正规式构造FA——Thompson法

00004.

00005.

将NFA转换为等价的DFA, 这一步称为确定化

00006.

00007.

优化DFA使其状态数最少, 这一步称为最小化

00008.

1.6. 优先递归 替换循环

递归可读性更好。。

1.7. 状态转移表

cur_dbquo_stat

当前状态

当前字符

要即将转换到的下一状态

\

“  dbQuo_start

<none>

Not sQuo start

Not dbQuo_start

sQuo  start

sQuo start

sQuo  end

Dbquo end or <non>

Not Dbquo start

Dbquo start

Dbquo start

Dbquo end

Non sQuo  dbquo start

,

字符串优先使用单引号,方便输入。。

meth(\"select from tab where a='abc'\",'str2',\'s3\')

引号需要单独的状态表示

参考资料

atitit.自己动手开发编译器and解释器(1) ------词法分析--attilax总结 - attilax的专栏 - 博客频道 - CSDN.NET.html

词法分析实战 - booirror的博客 - 博客频道 - CSDN.NET.html

现代编译原理--第一章(词法分析) - BlackWalnut - 博客园.html

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )

汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

--Atiend

Atitit 发帖机系列(7) 词法分析的方法attilax大总结)的更多相关文章

  1. Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明)

    Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明) v5  增加对sql单引号的内部支持.可以作为string 结构调整,使用递归法重构循环发..放弃循环发. V4 java dsl词 ...

  2. Atitit 发帖机系列(6) USRQBN2201 setup spec安装程序的实现规范与标准化解决方案

    Atitit 发帖机系列(6) USRQBN2201 setup spec安装程序的实现规范与标准化解决方案 安装主要解决一个问题,就是resin的内容启动路径以及端口..这里是使用的端口8077 主 ...

  3. Atitit  发帖机实现(1)-----UsrQBm2008 页面上下文规范

    Atitit  发帖机实现(1)-----UsrQBm2008 页面上下文规范 1.1. 网站绝对路径,页面绝对路径1 1.2. Java的javax.servlet.ServletContext1 ...

  4. Atitit 发帖机实现(4 )- usbQBM1601 gui操作标准化规范与解决方案attilax总结

    Atitit 发帖机实现(4 )- usbQBM1601 gui操作标准化规范与解决方案attilax总结 1.1. 根据gui的类型使用不同的gui调用api1 1.2. Script化1 1.3. ...

  5. Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化

    Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化 大段内容务必要替换转义换行符号1 提交务必使用utf编码,否则解码后的可能缺失,是web serv ...

  6. Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范

    Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范 文本内容 ###注释 标题:标题标题标题标题标题1 人数:5 月薪:2000-3000 内容: 内容内容内 容内容内容 ...

  7. Atitit 最近资料文章列表r9 r8 月份 attilax总结

    Atitit 最近资料文章列表r9  r8 月份   attilax总结 atitit tag标签标示规范 attilax总结 v2 r922.docx 2017-09-28 02:04 阅读(27) ...

  8. Atitit  自动化gui 与 发帖机 技术

    Atitit  自动化gui 与 发帖机 技术 1.1. Gui tech1 1.2. 自动化软件测试1 1.3. selenium attilax1 1.4. 图形脚本语言Sikuli1 1.5. ...

  9. Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39

    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39 V8   重构iocutilV4,use def iocFact...jettyUtil V ...

随机推荐

  1. Java学习笔记 05 数据包装类

    一.包装类 综述 >>java.lang包中的Integer类.Long类和Short类,分别将基本数据类型int.long和short封装成一个类.这些类都是Number的子类. Int ...

  2. .Net Web项目安装包制作 (一)

    来源:http://www.cnblogs.com/huxj/archive/2010/09/10/1823637.html

  3. 透明activity来实现悬浮蔗罩

    第一步, activity的代码, 关键代码是进出动画采用淡入淡出方式,让蔗罩出现消失更自然,全屏 public class RobotGuidceV2Activity extends RoboAct ...

  4. Mini projects #6 ---- Blackjack

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  5. Shmget 参数 0600的解释

    Shmget 参数 0600的解释 0660 百位6 -- 本用户有读写权. 十位6 -- 同组用户有读写权,个位0 -- 其它用户无读写执行权.与chmod 设法一样.

  6. JDK和环境配置

    1. JASE : J2SE 这个就是我们现在在学的东西,他是一切Java的核心基础 JAME :J2ME : 他是Java的一个微型版,主要用来做移动开发 JAEE :J2EE Java企业版本,主 ...

  7. NGUI 3.0.7的新锚点系统设置不好就会造成显示错误的错觉

    每次设置NGUI控件的锚点时,都需要刷新一下窗口,不然就会造成显示错误的错觉. 同时,NGUI控件设置锚点的参考对象为一个物体时还需要调整其控件大小,不然也会造成显示错误的错觉.

  8. day14---html基础

    本节内容: 一.HTML 二.CSS 三.JS HTML 1.一套规则,浏览器认识的规则. 2.开发者: 学习Html规则 开发后台程序: - 写Html文件(充当模板的作用) ****** - 数据 ...

  9. DOJO-dojox.grid.EnhancedGrid(带刷新函数,分页工具栏,复选框,行号等功能)

    转自:http://biancheng.dnbcw.info/javascript/395865.html dojo.require("dojox.grid.EnhancedGrid&quo ...

  10. ABP框架详解(七)Caching

    在ABP框架中存在一个缓存机制,使用ICache的继承类来存储最终需要缓存的数据,可以吧ICache看成一个字典对象,使用Key作为真实数据的具有唯一性的表示.使用上与字典对象完全相同,Get方法传递 ...