哪个是使用Java解析包含汇编语言的文件的最佳方法。

时间:2011-03-05 00:31:42

标签: java microcontroller

我已阅读StringTokenizer包中的StreamTokenizerScannerPatternMatcherjava.util.regex。我也读过有关他们的意见,我真的很困惑:哪一个最好用?

我需要做的是创建一个Assambler,即从该文件解析包含汇编语言的文件,我需要将其转换为机器码。

例如,如果我有汇编代码:

MOV R15,R12

这应该转换为与每条指令和寄存器相对应的六进制数。

我们只想说翻译如下:

  • MOV变为10 F3
  • R15变为11 F2
  • R12变为20 1E

因此,我的输出文件应为:

10 F3 11 F2 20 1E

现在我需要解析Assembly文件以识别每条指令及其后面的内容。

对于那些了解微控制器的人来说,有很多方法可以显示指令。我的问题是:

使用Java,这是将我的文件中的每个单词转换为标记(使用任何上述类)的最佳方法,这样我就可以找到匹配的单词并将其写入文件。

ldi R13,0x31

我需要在一个令牌中ldi,在另一个令牌中r13,在另一个令牌中31

2 个答案:

答案 0 :(得分:2)

好吧,你提到的一切都非常适合简单地标记字符串或文件。在最新的JDK中,不推荐使用StringTokenizer,并且存在更高效的标记器,如Scanner甚至String.split()。 但是,我不认为这是你想要的。你似乎需要一个词法分析器,或者至少是一个词法分析器。因为你想要理解令牌,而不仅仅是根据某些分隔符拆分它们。所以要么你自己 - 如果你是毒品 - 或者只是使用其中一个非常好的和现有的工具。像ANTLR http://www.antlr.org/ 它也是免费的,但可能有点难以使用。还有JavaCC。祝你好运!

答案 1 :(得分:0)

如果你的目标是做好解析,你需要开发一个合适的BNF并使用真正的解析器/词法分析器对。只是乱用StringTokenizer或String.split或正则表达式不会破解它。

正如@trigooner所说,你需要一个适当的词法分析器/解析来对上下文敏感,尽管大多数汇编代码没有太多的上下文。但是如果你说“汇编程序代码”作为一个简写,你可能真的在阅读一个合适的宏汇编程序,那么它们确实有上下文。如果有上下文,则需要正确实现。

大多数x86汇编语言非常简单。如果您正在阅读旧系统的代码,比如PDP-10,那么您必须处理复杂性。