码迷,mamicode.com
首页 > 其他好文 > 详细

词法分析学习

时间:2015-04-18 11:33:41      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:词法分析   闭包   正则表达式   

任务:

源文件->记号流


方法:

1. 手工构造

2. 自动构造


手工构造:

实现标识符与关键字通过转移图完成.

然后再通过hashtable特判即可.


自动构造:

Thompson算法将正则表达式转化为NFA

五种情况,两种基本的直接构造,三种复合的递归构造

子集构造算法 NFA-DFA

stack = []//遍历的结构
Q = []//所以的DFA状态,判重
D[,] = []//DFA结果
push( ε闭包(n0)) //将起始点做为q0
loop until stack==NULL
   q = pop() //状态弹栈
    loop every char:
        t = ε闭包(delta(q,c)) //1.根据转移函数得到NFA状态,求ε闭包
        D[q,c] = t//q状态通过c到t状态
        if(t not in Q)
            add(Q,t),push(t)
如果新状态有NFA的结束态,它就是结束态
//这里的t not in Q 为什额?
//因为构造的NFA比较特殊,往前的转移符号都是因为ε,而这个符号必然导致新生成的点有可能和之前的重复,所以不用加入
Hopcroft 最小化算法

节省空间,缩点缩边(图特别稀疏)
将所有点分为结束与非结束两个集合
loop until all sets not changes:
    split(S)//对与同一集合内部的所有点,对同一字符转换至不同集合则就可以切分为若干集合

根据DFA生成代码
1. 转移表 与图论中的转移一样
2. 跳转表 根据每个状态对应的字符生成代码,这样省空间(图特别稀疏)


词法分析学习

标签:词法分析   闭包   正则表达式   

原文地址:http://blog.csdn.net/gg_gogoing/article/details/45111671

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!