我试图创建一个方法,它将采用一个字符串(一个有效的正则表达式)并输出一个相应的非确定性有限自动机。从我所做的研究来看,Thompson's algorithm看起来最适用于此,因为我只处理kleene星,联合和括号符号,语言只有{a,b,e} e表示空转换。
此外,我遇到的一个大问题是如何处理正则表达式中的嵌套括号。在这里输入将不胜感激。
我的问题是关于在代码中表示这一点的最佳/最直接的方法。我需要将每个节点彼此区分开来,并跟踪节点出来的转换以及这些转换导致的转换。我已经研究过使用Digraph,但是看起来好像你只能表示一个节点以及节点可以导致的位置,而忽略了转移到那个新节点。对此建筑的任何建议都将不胜感激。感谢。
答案 0 :(得分:0)
不知道这是否有帮助,但我在Python中为my monograph实现了这一点。遗憾的是,该文本是葡萄牙语,但实现非常简单。
实际上,它将表达式编译为假设机器的一系列非确定性指令。例如,表达式a(b | c)+ d将编译为:
0000: CONSUME a
0001: JUMP (1, 3)
0002: CONSUME b
0003: JUMP (2,)
0004: CONSUME c
0005: JUMP (1, -4)
0006: CONSUME d
0007: MATCH!
只有三种类型的指令(而MATCH
仅出现在最后)。
CONSUME x
,则x
会使用输入的下一个字符
JUMP (a, [b])
相对于非确定性定义的所有标签跳转MATCH!
自我描述