将以下 LEX 程序转换为词法分析器。辅助定义 − − − 翻译规则 a{ } abb{ } a*b+
解决方案
将模式转换为 NFA
制作组合 NFA
将 NFA 转换为 DFA
A = ε - 闭包 (0) = {0, 1, 3, 7}
符号 a, b 从状态 A 的转换
对于状态 A
ε - 闭包 (T a ) ε - 闭包 (T b )
= ε - 闭包 ({2, 4, 7}) = ε - 闭包 ({8})
= {2, 4, 7} = B = {8} = C
对于状态 B
ε - 闭包 (7) = {7} = D ε - 闭包 ({5, 8}) = {5, 8} = E
对于状态 C
ε − 闭包 (ф) = ф | ε − 闭包 (8) = {8} = C
对于状态 D
ε − 闭包 (7) = {7} = D | ε − 闭包 (8) = {8} = C
对于状态 E
ε − 闭包 (ф) = ф | ε - 闭包 {(6, 8)} = {6, 8} = F
对于状态 F
ε − 闭包 (ф) = ф | ε − 闭包 (8) = {8} = C
结合所有的转换图,我们得到了一个完整的 DFA。由于状态 2、6、8 是 NFA 中的最终状态。
NFA 中的状态有其状态,即 247、8、58、68 是最终状态。
状态 | 一种 | b | 令牌识别 |
---|---|---|---|
0137 | 247 | 8 | 没有任何 |
247 | 7 | 58 | 一种 |
8 | ∅ | 8 | a * b + |
7 | 7 | 8 | 没有任何 |
58 | ∅ | 68 | a * b + |
68 | ∅ | 8 | abb |
∅ | ∅ | ∅ | 没有任何 |
已识别的代币
0137 → {0, 1, 3, 7} 中没有状态是最终状态。因此,该状态不会识别任何令牌。
247 → 此状态下的状态 2 是最终状态。状态 2 接受组合的 NFA。因此,247 会接受一个。
8 → 8 是组合 NFA 中的最终状态。它接受组合 NFA 中的 a * b +。
7 → 7 不是最终状态,因此它不接受任何内容。
58→8 是最终状态,但 5 是非最终状态。状态 8 接受 a∗b+in 组合 NFA。因此 58 将接受 a * b +。
68 → 状态 6 和 8 都是最终状态。但是 6 接受 abb,而 8 接受组合 NFA 中的 a * b +。但是 abb在 Translation 规则中出现在 a * b +之前。因此状态 68 将接受令牌 abb。
以上是 将以下 LEX 程序转换为词法分析器。辅助定义 − − − 翻译规则 a{ } abb{ } a*b+ 的全部内容, 来源链接: utcz.com/z/363468.html