词法分析实践

正则表达式表示语法
正则表达式转化为NFA(比较直观)
NFA转化未DFA(更快)


image.png

下面我们根据视频中的例子来实现下整个过程。
下面的图片依次是正则式转NFA的规则、(1+0)*1转化为NFA的实例、NFA转化DFA的例子、表驱动方式实现DFA、最后是对应的代码。


图片发自简书App

图片发自简书App
StateTable = [[1,2],[1,2],[1,2]]
def recognize(str,table,start,end):
    i = 0
    state = start
    while i < len(str):
        try:
            state = table[state][int(str[i])]
        except:
            return False
        i += 1

    if state == end:
        return True
    else:
        return False

def main():
    str1 = '11101111111'
    ret = recognize(str1,StateTable,0,2)
    print('{str1} is {ret}'.format(str1=str1,ret=ret))

    str2 = '11111111110'
    ret = recognize(str2, StateTable, 0, 2)
    print('{str1} is {ret}'.format(str1=str2, ret=ret))

if __name__ == '__main__':
    main()

输出结果:

11101111111 is True
11111111110 is False
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 写在前面 从源代码到可执行文件要经历几个过程: 词法分析 语法分析 语义分析 中间代码生成 代码优化 词法分析有点...
    wsztrush阅读 2,027评论 0 5
  • 转自: JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路 温馨提示:文章很长...
    前端渣渣阅读 1,830评论 1 32
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,267评论 0 4
  • 仙人掌先生爱上了美人鱼小姐,于是他准备搬家,从沙漠里搬去海边住。仙人掌先生的朋友劝他,“老仙,你去不了那里,你是生...
    薛之谦的胡茬子阅读 984评论 1 0
  • Ps:《那些年我们一起追过的日漫》为大型连载系列影评,主要围绕经典日本动漫(包括动漫连续剧和动漫电影)做出评价,目...
    王终军阅读 2,825评论 28 33