我了解到C被转换为汇编,然后汇编被转换为机器代码。我学会了如何将基本的C结构(如指针和循环)转换为32位MIPS汇编。但我没有学习如何将例如C中的正则表达式转换为汇编,是否有配方?
答案 0 :(得分:5)
C不支持正则表达式。装配也没有。你必须为模式匹配编写一些算法代码,然后,如果它还没有在汇编/机器代码中,则翻译/编译成它。没有魔力。
答案 1 :(得分:4)
几十年前,将正则表达式翻译成汇编语言似乎已经过时了。相反,这些天他们通常被编译成确定性有限自动机(DFA),通常作为非确定性有限自动机(NFA)的中间步骤。如果您不熟悉这些条款,请参阅:
与正则表达式相对应的NFA非常容易构建;只考虑正则表达式中的每个点作为一个状态,以及可以匹配的字符集,并将你移动到正则表达式中的下一个点,作为从该状态到下一个状态的转换。
其他流行的正则表达式引擎,包括PCRE,根本不编译正则表达式,而是使用回溯匹配器,编写起来很简单,但内存使用情况很糟糕(许多递归调用帧,导致堆栈溢出,如果实现的话)作为实际函数调用)和病态上不好的大O性能(可以是指数时间)。
答案 2 :(得分:3)
通常,它取决于您如何实现正则表达式。例如,您可以:
flex
之类的工具。在这种情况下,该工具将生成大量的C代码,通常采用表格和状态机的形式,并且将使用编译器翻译此代码。如果您实现某种特殊的正则表达式解析方案,它将只是编译器为您的代码生成的任何内容。