我知道8086汇编和学习MIPS汇编。另外,我正在学习正则表达式,然后我想知道:
答案 0 :(得分:9)
从头开始组装这是一个具有挑战性的问题。没有汇编语言会支持正则表达式作为第一类构造,因为抽象级别有太大差异使其成为有用的包含。这意味着你需要自己构建它。
支持正则表达式本质上就像在程序中使用编译器将表达式转换为一系列匹配指令。您将不得不构建所有组成部分:翻译引擎,一系列转换规则,DFA汇编程序和匹配引擎。
那说,这不是不可能的!从小处开始,支持您想要支持的真实语言的微小子集,然后继续前进。查看 chapter 16 of Assembly Language Programming ,详细了解如何构建自己的正则表达式引擎。你需要很好地理解它们是如何工作的(本章将给你的)以及对装配的深刻理解(参见前面的章节)。
答案 1 :(得分:3)
试试这个: AsmRegEx - regular expression engine
它是用FASM编写的。不幸的是,似乎该项目将不再进展......
答案 2 :(得分:1)
汇编中不存在正则表达式,这似乎有点奇怪的问题,因为正则表达式具有更高级别的语言性质,它不存在于螺栓和螺栓级别......
编辑: Nathan,here是您可能感兴趣的链接。向下滚动到页面底部;)
希望这有帮助, 最好的祝福, 汤姆。
答案 3 :(得分:1)
articles here集描述了如何从头开始构建一个非常简单但功能强大的正则表达式引擎。它使用C ++,但详细解释了理论,代码可以翻译成ASM,而不需要经验丰富的程序员付出太多努力。
尽管如此,我认为这不是一个特别有趣的练习,既不是学习ASM也不是学习正则表达式。你会因为细节而陷入困境。
答案 4 :(得分:0)
从非常简单的正则表达式开始。例如,识别字母字符和数字字符的序列并从那里开始工作。您需要仔细考虑代码将如何提供结果。
首先创建一个正则表达式解析器是一个好主意,因为此论坛中的更多人将能够帮助您。一旦你使它工作,可以将其转换为汇编代码。同样,这里有更多人熟悉8086汇编语言编程而不是MIPS,所以尽管CPU架构不是很好,但使用8086可能是个好主意。
答案 5 :(得分:0)
不确定您是否想知道如何在汇编语言中实现正则表达式引擎,或者只是如何在汇编语言的空结束字符串上轻松使用正则表达式。如果是第一个,你会得到一些指示。如果是后者,则取决于您的平台,但最简单的方法是从程序集中调用C编码库。 Unix变体在libc中已经可以使用POSIX正则表达式了,你可以按照适当的调用约定从程序集中调用它们。