📜  自动机理论|套装9(1)

📅  最后修改于: 2023-12-03 15:41:24.029000             🧑  作者: Mango

自动机理论 | 套装9

简介

自动机理论是计算机科学中的一个重要分支,它研究的是有限状态机(finite state machine)与形式语言之间的关系。自动机理论经常用于编译器、文本编辑器、语言识别等领域。

自动机理论套装9提供了一套完整的自动机理论算法和数据结构,包含了有限自动机(DFA)、非确定有限自动机(NFA)、正则表达式、文法、语言等基础内容,也提供了相关算法的实现,并有丰富的练习题和实例。

算法和数据结构列表
  • 有限自动机
    • DFA(Deterministic Finite Automaton)
    • 最小化DFA
  • 非确定有限自动机
    • NFA(Nondeterministic Finite Automaton)
    • 子集构造算法
  • 正则表达式
    • 正则表达式匹配
    • 正则表达式转换为NFA
  • 文法与语言
    • 产生式
    • 上下文无关文法(CFG)
    • 上下文有关文法(CFL)
  • 常见应用
    • 词法分析器
    • 语法分析器
算法实现

下面是对于正则表达式匹配算法的简单实现,可以支持 '.' 和 '*' 通配符,以及多种正则表达式的组合:

def is_match(s: str, p: str) -> bool:
    if not p:
        return not s
    first_match = bool(s) and p[0] in {s[0], '.'}
    if len(p) >= 2 and p[1] == '*':
        return is_match(s, p[2:]) or (first_match and is_match(s[1:], p))
    else:
        return first_match and is_match(s[1:], p[1:])
练习题和实例
  • 练习题
    1. 用DFA实现一个简单的计算器,支持加、减、乘、除操作,以及小数点操作。
    2. 用NFA实现一个匹配IP地址的正则表达式。
    3. 用CFG实现一个简单的计算器,支持加、减、乘、除操作,以及小括号操作。
  • 实例
    1. 使用正则表达式实现一个简单的字符串搜索功能。
    2. 使用自动机理论实现一个简单的Markdown解析器,支持标题、列表、链接等基本功能。
参考资料
  • Introduction to Automata Theory, Languages, and Computation. Hopcroft, John E.; Motwani, Rajeev; Ullman, Jeffrey D. (2003).
  • Data Structures and Algorithms in Python. Goodrich, Michael T.; Tamassia, Roberto; Goldwasser, Michael H. (2013).
  • Regular Expression Matching Can Be Simple And Fast. Russ Cox. (https://swtch.com/~rsc/regexp/regexp1.html)