正规语言

正例

  • 含特定子串
  • 模运算计数:包含 3 的倍数个 a
  • 有限集
  • 开头结尾约束

反例

  • ,没有内存
  • (长度为平方数)

上下文无关语言

正例

    • 进栈,读 出栈,栈空即接受。
    • 利用非确定性,猜到中间点,然后开始弹栈匹配。
    • CFL 对并集封闭。 是 CFL, 也是 CFL,所以并集也是。

反例

  • (三方相等)
    • 栈是线性的。匹配了 之后,栈就空了(或者 已经被 弹没了),没有东西留下来跟 匹配
  • (交叉依赖)

递归语言与递归可枚举语言

正例(递归语言)

    • 我们可以模拟 DFA,因为 DFA 一定在有限步内结束,所以是可判定的。
    • 虽然 CFG 复杂,但可通过转换为乔姆斯基范式用 CYK 算法判定,一定会停机。

反例(是 RE,但不可判定 / 不是递归的)

    • 通用图灵机问题。我们可以模拟 运行 ,如果 接受,我们就接受。但如果 死循环,模拟器也会死循环。所以它是 RE,但不可判定。
  1. (停机问题):判断图灵机是否停机。

反例(连 RE 都不是 / 完全不可计算)

    • **逻辑:如果一个语言 和它的补集 都是 RE,那么 一定是递归的(可判定)。因为 是 RE 但不可判定,所以它的补集一定不是 RE。
  1. (图灵机等价性)

总结表格

语言描述类型关键特征/判定理由
(无约束)正规不需要计数,只需检查格式
(n 次匹配)CFL (非正规)需要一个栈来计数
(三项匹配)CSL (非 CFL)栈不够用,需要线性有界内存
(回文)CFL栈结构(先进后出)完美匹配
(复制)CSL (非 CFL)需要队列结构(先进先出),栈做不到
(平方数)CSL (非 CFL)增长速度非线性(非泵引理模式)
代码语法检查CFL (通常是 DCFL)括号匹配、if-else 配对
判断 DFA 是否接受 递归 (可判定)模拟一定会结束
判断 TM 是否接受 RE (不可判定)可能会死循环
判断 TM 是否拒绝 非 RE连死循环都检测不到