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:[email protected]

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

--Atiend

时间: 2024-12-23 01:04:56

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

Atitit 发帖机系列(8) &#160;词法分析器v5 版本新特性说明)

Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明) v5  增加对sql单引号的内部支持.可以作为string 结构调整,使用递归法重构循环发..放弃循环发. V4 java dsl词法分析 使用循环 V3 sql的词法分析 atitit..sql update语法的词法分析,与语法ast构建 - V1版   anno 解析器 基于fsm设计模式 V2 Atitit.antlr实现词法分析?-?attilax /AtiPlatf_ee/src/com/attilax/fsm/Ja

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

安装主要解决一个问题,就是resin的内容启动路径以及端口..这里是使用的端口8077 主要是加载模板配置,然后替换,即可. 遇到的问题主要有主目录路径的提取,截取最后一个反斜杠.. setup安装.bat set javaexec="%java_home%\bin\java.exe" rem a  start explorer z:  WEB-INF\lib rem check url set maindir=%~dp0 set maindirV2=%maindir:~0,-1% %

Atitit &#160;发帖机实现(1)-----UsrQBm2008 页面上下文规范

Atitit  发帖机实现(1)-----UsrQBm2008 页面上下文规范 1.1. 网站绝对路径,页面绝对路径1 1.2. Java的javax.servlet.ServletContext1 1.3. .Net2 1.4. Php解决方案dirname(__FILE__)2 1.1. 网站绝对路径,页面绝对路径 1.2. Java的javax.servlet.ServletContext application是javax.servlet.ServletContext接口的实例,实际上表

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

Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化 大段内容务必要替换转义换行符号1 提交务必使用utf编码,否则解码后的可能缺失,是web server的bug应该.Resin4.0.221 大段内容务必要替换转义换行符号 C:\0workspace\AtiPlatf_cms\WebRoot\poster\gejy_pub.js cmd= cmd.replace(new RegExp("\r\n",'gm'),"\\r\\n

Atitit&#160;发帖机实现(2)---usrQBN2243 文本解析到对象协议规范

Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范 文本内容 ###注释 标题:标题标题标题标题标题1 人数:5 月薪:2000-3000 内容: 内容内容内 容内容内容内容1 var cmd='   '; cmd+='  $("input[name=\'title\']").val("@[email protected]"); $("input[name=\'need_num\']").val("@[em

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

1.1. 根据gui的类型使用不同的gui调用api1 1.2. Script化1 1.3. 同步化1 1.4. webdriver标准化1 1.5. Dom的jq标准化1 1.6. 控件的选取优先使用id,其次name属性css选择器,然后val属性等.2 1.7. 界面的跳转,使用win.localtion即可2 1.8. 参考资料2 1.1. 根据gui的类型使用不同的gui调用api Bs的使用webdriver标准化不错的.Cs的使用win控件体系的.自绘界面的需要使用独占式的基于图片

Atitit &#160;自动化gui 与 发帖机 技术

Atitit  自动化gui 与 发帖机 技术 1.1. Gui tech1 1.2. 自动化软件测试1 1.3. selenium attilax1 1.4. 图形脚本语言Sikuli1 1.5. Dom1 1.6. Jsbridge1 1.7. Browser tech1 1.1. Gui tech 1.2. 自动化软件测试 1.3. selenium attilax 1.4. 图形脚本语言Sikuli Atitit.木马病毒的免杀原理---sikuli 的使用 - attilax的专栏 .

Atitit.Atiposter&#160;发帖机&#160;信息发布器 v7 q516

Atitit.Atiposter 发帖机 信息发布器 v7 q516 V7 jetty 版本 基本访问改为web版. 这样发布调试 V1  初步实现sina csdn cnblogs V2  实现qzone sohu 的发帖功能  顺便重构接口实现分离 V3   多文件循环发帖(初步bbs版本) V4  sina发帖功能fix增加二次贴入内容 发布时的确认关闭提示folat框子 调整分类总的分类dsl 和ide俩优先类 V5默认分类选择ide dsl功能..这样一般就只要取消一个就可以了. V6

Atitit.&#160;Atiposter&#160;发帖机版本历史&#160;编年史

Atitit. Atiposter 发帖机版本历史 编年史 V1  初步实现sina csdn cnblogs V2  实现qzone sohu 的发帖功能  顺便重构接口实现分离 V3多文件循环发帖(初步bbs版本) V4  sina发帖功能fix增加二次贴入内容 发布时的确认关闭提示folat框子 调整分类总的分类dsl 和ide俩优先类 V5默认分类选择ide dsl功能..这样一般就只要取消一个就可以了. 1. 未来版本规划 V6  界面ui 调整高度化 V7标准化api草案 v....