用Java标记源代码

时间:2010-10-05 19:20:46

标签: java tokenize

对于系统软件开发课程,我正在为讲师发明的汇编语言开发一个完整的汇编程序。目前我正在研究tokenizer。在进行一些搜索时,我遇到了Java StringTokenizer类......但是我发现它基本上已被弃用了。但是,使用正则表达式的String.split方法似乎更容易使用。

有什么理由我应该避免使用它吗?在典型的Java库中是否还有其他东西可以很好地适应这项任务,我不知道?

编辑:提供更多细节。

我认为String.split复杂的原因是我对正则表达式的了解大致是我所知道的。虽然作为软件开发人员的一般知识有助于了解它们,但我不确定我是否想立即投入时间,特别是如果有更容易的替代礼物。

就我对tokenizer的使用而言:它将通过包含汇编代码的文本文件并将其分解为标记,将文本和标记类型传递给解析器。分隔符包括空格(空格,制表符,换行符),注释开始字符“|” (可以在自己的行上,或在其他文本之后)和逗号分隔指令中的操作数。

我会用数学方式写出来,但我对形式语言的了解有点生疏。

编辑2:更清楚地提出问题

我已经看过StringTokenizer类的文档。它本来很适合我的目的,但不鼓励使用它。除String.split之外,标准java库中是否有一些有用的东西?

5 个答案:

答案 0 :(得分:3)

我相信java.util.Scanner类已经替换了StringTokenizer。 Scanner让你一次处理一个令牌,而String.split()将拆分整个字符串(如果你正在解析源代码文件,它可能很大)。使用扫描程序,您可以检查每个令牌,确定要采取的操作,然后丢弃该令牌。

答案 1 :(得分:2)

来自文档:

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人都使用String的split方法或java.util.regex包。

以下示例说明了如何使用String.split方法将字符串分解为其基本标记:

     String[] result = "this is a test".split("\\s");
     for (int x=0; x<result.length; x++)
         System.out.println(result[x]);

打印以下输出:

     this
     is
     a
     test

答案 2 :(得分:2)

如果您正在构建的是汇编程序,我将使用JavaCC来构建解析器/编译器。

答案 3 :(得分:1)

不要害怕正则表达式,让自己成为一个正则表达式编辑器,如下面的eclipse插件,
http://brosinski.com/regex/update并且您可以在不编译的情况下甚至在编写程序之前测试表达式。

如果您需要更多参考,以下是一些非常有用的网站:

虽然我认为上面使用JavaCC声音的建议是正确的方法 另一种选择是ANTLR

这是一篇比较ANTLR vs JavaCC经验的帖子。

答案 4 :(得分:0)

当有更好的替代品时,某些东西被弃用,或者这些方法在某些情况下是危险的。所以答案是 - 是的,你可以使用它,但有更好的方法来实现你所需要的。

顺便说一句,分裂的复杂程度是多少?