汇编语言解析器实现

时间:2013-06-02 13:58:41

标签: c# parsing

所以,我继续徘徊,并且非常确定我最终需要一些开源汇编程序命令lexem分析器(可能是一些TinyPG实现)。

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

mov ah, 37

应该被接受,而

bad my 42

不应该。

对自我实施的建议也很受欢迎。因为我不确定我是否理解“硬核”实现。

2 个答案:

答案 0 :(得分:3)

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

对于汇编代码尤其如此 - 与其他语言相比,lexing和解析它非常便宜,这样做两次没有太大的危害。

如果你试图自己制作一个奇特的正则表达式模式,你最终还是会复制汇编程序的第一阶段,只有你自己必须调试它 - 最好选择一个完整且经过测试的解决方案。

答案 1 :(得分:1)

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

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

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

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