正则表达式如何转换为汇编?

时间:2012-09-13 01:14:42

标签: c assembly mips

我了解到C被转换为汇编,然后汇编被转换为机器代码。我学会了如何将基本的C结构(如指针和循环)转换为32位MIPS汇编。但我没有学习如何将例如C中的正则表达式转换为汇编,是否有配方?

3 个答案:

答案 0 :(得分:5)

C不支持正则表达式。装配也没有。你必须为模式匹配编写一些算法代码,然后,如果它还没有在汇编/机器代码中,则翻译/编译成它。没有魔力。

答案 1 :(得分:4)

几十年前,将正则表达式翻译成汇编语言似乎已经过时了。相反,这些天他们通常被编译成确定性有限自动机(DFA),通常作为非确定性有限自动机(NFA)的中间步骤。如果您不熟悉这些条款,请参阅:

与正则表达式相对应的NFA非常容易构建;只考虑正则表达式中的每个点作为一个状态,以及可以匹配的字符集,并将你移动到正则表达式中的下一个点,作为从该状态到下一个状态的转换。

其他流行的正则表达式引擎,包括PCRE,根本不编译正则表达式,而是使用回溯匹配器,编写起来很简单,但内存使用情况很糟糕(许多递归调用帧,导致堆栈溢出,如果实现的话)作为实际函数调用)和病态上不好的大O性能(可以是指数时间)。

答案 2 :(得分:3)

通常,它取决于您如何实现正则表达式。例如,您可以:

  • 使用PCRE或POSIX正则表达式之类的东西。在这种情况下,通过使用特定于您的体系结构/ ABI的调用约定进行适当的调用,将对该API的函数调用简单地转换为机器(汇编)代码。
  • 使用flex之类的工具。在这种情况下,该工具将生成大量的C代码,通常采用表格和状态机的形式,并且将使用编译器翻译此代码。

如果您实现某种特殊的正则表达式解析方案,它将只是编译器为您的代码生成的任何内容。

相关问题