1

所以,我继续四处游荡,很确定我最终需要一些开源汇编命令词法分析器(也许是一些 TinyPG 实现)。

我只想知道,我如何让我的应用程序理解给定的文本可能是汇编代码。例如

mov ah, 37

应该被接受,而

bad my 42

不应该。

也欢迎有关自我实施的建议,ofc。因为我不确定我是否会理解“核心”实现。

4

2 回答 2

3

检查某些文本是否使用某种语言的最佳方法是尝试解析它 - 将汇编程序嵌入到您的应用程序中并调用它。我强烈推荐这种方法——即使对于汇编代码,输入也可能包含一些你没有想到的特殊语法或结构,你最终会发出假阴性。

对于汇编代码尤其如此 - 与其他语言相比,对其进行词法分析和解析非常便宜,两次执行并没有太大危害。

如果您尝试自己制作一个花哨的正则表达式模式,无论如何您最终都会复制汇编程序的第一阶段,只有您必须自己调试它 - 最好使用完整且经过测试的解决方案。

于 2013-06-02T16:00:55.043 回答
1

为了获得相当准确的识别,检查这些行是否与正则表达式匹配是可以的。这实际上与编译器的第一步——扫描阶段——读取文件内容并识别标记非常相似。下一步 - 实际的解析更加复杂(尽管对于汇编程序来说并不复杂)。

一个正则表达式的例子是这样的:

^[ \t]*((mov|xor|add|mul)[ \t]*([abcde][xhl]|[cd]s)[ \t]*,)|jmp[ \t]*([abcde][xhl]|[cd]s|[0-9A-F]*)[ \t]*$

它首先检查带有两个参数的有效指令,然后检查一个参数的存在,然后是单个参数指令的替代,然后是另一个参数的存在 - 包括一个作为第二个参数有效的数字常量。

于 2013-06-02T14:33:40.550 回答