所以,我继续徘徊,并且非常确定我最终需要一些开源汇编程序命令lexem分析器(可能是一些TinyPG实现)。
我想知道的是,我如何理解我的应用程序,给定文本可能是汇编程序代码。 例如
mov ah, 37
应该被接受,而
bad my 42
不应该。
对自我实施的建议也很受欢迎。因为我不确定我是否理解“硬核”实现。
答案 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]*$
它首先用两个参数检查有效指令,然后是参数的存在,然后是单个参数指令的替代,然后是另一个参数的存在 - 包括一个有效作为第二个参数的数字常量。