将正则规则转化为自动机后,可在 $ O(n) $ 时间内扫描输入字符串($ n $ 为长度),实现高效词法识别(如识别if关键字、变量名、数字常量等)。
使用 DFA 的优势在于其确定性,避免回溯,适合高速解析。
# 示例:简化版 ε-CLOSURE 实现(基于邻接表表示的 NFA)defepsilon_closure(epsilon_transitions,states):""" epsilon_transitions: dict, 如 {q0: [q1], q1: [q2], q2: []} states: set of initial states returns: set of all states reachable via ε-transitions """closure=set(states)stack=list(states)whilestack:state=stack.pop()fornext_stateinepsilon_transitions.get(state,[]):ifnext_statenotinclosure:closure.add(next_state)stack.append(next_state)returnclosure# 示例调用eps_trans={0:[1],1:[2],2:[]}print(epsilon_closure(eps_trans,{0}))# 输出: {0, 1, 2}