保留版权,转载注明出处:潘军彪的个人博客(http://blog.csdn.net/panjunbiao/article/details/9378933)
将上下文无关文法读入内存之后,可以将它转换成非确定有限状态自动机。当然,不是所有的上下文无关文法都能够转换成自动机的,前提条件是这个上下文无关文法能够与正则定义等价。因此,在进行转换之前,我们需要先挑选出上下文无关文法中符合正则定义的规则。(参考博文http://blog.csdn.net/panjunbiao/article/details/9364837)
如何将正则表达式转换为NFA呢?我们从最简单的CharVal类型开始(有关CharVal请参考http://blog.csdn.net/panjunbiao/article/details/9087665)。CharVal就是一对双引号包含的字符串,因此在转为NFA的时候,只需要将字符串中的字符按顺序生成NFA状态节点即可。
例如一个CharVal为"ABC",假设文法是大小写不敏感的,这意味着abc也是符合这个文法定义的。转换为NFA应该是这样:
在CharVal类中,下面的方法完成从CharVal到NFA的转换:

本文介绍了如何将上下文无关文法中的CharVal转换为非确定有限状态自动机(NFA)。在转换前,需确保文法与正则表达式等价。CharVal是双引号包围的字符串,转为NFA时,按字符顺序生成状态节点。对于大小写不敏感的CharVal,如"ABC",转换后的NFA会包含其小写形式。CharVal类提供方法实现此转换。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



