我正在阅读一篇关于编程语言工程和编译器的论文(6.035 2005秋季麻省理工学院课程)。以下页面应该解释Kleene Star运算符的工作原理,但我无法理解它的含义。
可以找到完整的.pdf here。
答案 0 :(得分:1)
它显示了如何为r建立NFA,给出r的NFA(这是中间的椭圆)。您将引入新的开始状态和新的接受状态。
Kleene星允许零长度的单词,因此您包括从新的开始状态到新的接受状态的epsilon过渡。
此外,您希望允许r的任何单词的任何串联。因此,包括从新启动状态到旧启动状态的epsilon转换,以及从旧接受状态到新接收状态的转换。这基本上允许你使用epsilon从新的开始状态转到旧的状态,然后使用从r到旧接受状态的任何单词,然后使用epsilon到新的接受状态(因此,来自新的接受状态的任何单词)开始状态到新的接受状态。)
此外,您希望允许连接。这就是为什么你包括从旧接受状态到旧启动状态的epsilon转换的原因。因此,当你到达旧的接受状态时,你总是可以回到旧的开始状态来附加来自r的另一个单词。