正则表达式引擎的实现

本文介绍了如何按照《Engineering a Compiler》一书中的方法实现一个正则表达式引擎,包括使用Thompson构造法将正则表达式转化为ε-NFA,再通过子集构造法转换为DFA,并应用Brzozowski算法进行DFA最小化。详细阐述了每个步骤的过程和原理,并提供了GitHub源码链接。
摘要由CSDN通过智能技术生成

我照着《engineering a compiler》中词法分析部分的内容做了一个正则表达式引擎,仅支持实现基本的连接,并联,闭包操作,和单字母字符集。

按照书中的内容,我选择的做法是先把正则表达式用Thompson构造法解析成ε-NFA,然后再用子集构造法转换为DFA,再用Brzozowski 算法最小化DFA。

1.Thompson构造法

 

 

这一步骤是用于将正则表达式解析成ε-NFA,具体实现上我用了两个栈,字符栈和符号栈,然后优先级设置为括号>闭包>连接>并联。然后根据thompson构造法的构造方法去连接状态节点。就能得到初步的带ε的非确定性有限自动机。

2.子集构造法

子集构造法的作用是将我们刚刚得到的ε-NFA转换为确定性的DFA。

这个过程要怎么实现呢?

这个转换过程的目的是去掉状态图中不确定状态转移边ε,要怎么去掉呢?这个问题有一点复杂,我们慢慢分析。

首先先看非确定性有限自动

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值