将以下 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令牌识别
01372478没有任何
247758一种
88a * b +
778没有任何
5868a * b +
688abb
没有任何

已识别的代币

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

回到顶部