有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

标记化Java中的标记化源代码

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

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

编辑:提供更多细节

我之所以认为String.split很复杂,是因为我对正则表达式的了解大致相当于我对它们的了解。虽然了解他们对我作为软件开发人员的一般知识很有帮助,但我不确定我现在是否想投入时间,特别是如果有更简单的替代方案的话

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

我会用更数学的方法来写,但我对形式语言的知识有点生疏

编辑2:更清晰地提问

我看过StringTokenizer类的文档。它本来很适合我的目的,但不鼓励使用它。除了String.split之外,标准java库中还有什么有用的东西吗


共 (5) 个答案

  1. # 1 楼答案

    不要害怕正则表达式,给自己找一个正则表达式编辑器,比如下面的eclipse插件,
    http://brosinski.com/regex/update您将能够在不编译甚至在编写程序之前测试表达式

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

    尽管我认为上面使用JavaCC的建议听起来是正确的方法
    另一个选择是ANTLR

    下面是一篇比较ANTLR vs JavaCC经历的帖子

  2. # 2 楼答案

    我相信爪哇。util。Scanner类已取代StringTokenizer。Scanner允许您一次处理一个令牌,而不是字符串。split()将拆分整个字符串(如果您正在分析源代码文件,那么这个字符串可能会很大)。使用Scanner,您可以检查每个令牌,决定要采取的操作,然后丢弃该令牌

  3. # 3 楼答案

    如果有更好的选择,或者这些方法在某些情况下是危险的,那么就不推荐使用某些方法。所以答案是——是的,你可以使用它,但有更好的方法来实现你的需求

    顺便说一句,分裂有什么复杂之处

  4. # 4 楼答案

    如果你正在构建一个汇编程序,我会使用JavaCC来构建解析器/编译器

  5. # 5 楼答案

    从文件中:

    StringTokenizer是一个遗留类,出于兼容性原因保留了它,尽管新代码中不鼓励使用它。建议任何寻求此功能的人使用String或java的split方法。util。改为正则表达式包

    下面的示例说明了字符串是如何生成的。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