【问题标题】:Parsing Java code with Java用 Java 解析 Java 代码
【发布时间】:2012-06-15 10:58:21
【问题描述】:

是否可以使用正则表达式解析一些 Java 代码?

假设我想要一个 int 变量列表:

int abc1 = 1;
int abc2 = abc1 + 1;
int abd3 = abc1 + abc2;

我想将这些放入ArrayList

所以是这样的:

private void parse(String s){

    List<List<String>> variables = new ArrayList<List<String>>();

    list.add(new ArrayList<String>);//var type
    list.add(new ArrayList<String>);//var name
    list.add(new ArrayList<String>);//var data

    Pattern p = Pattern.compile();//This is what I want
    Matcher m = p.matcher(s);

    while(m.find()){
        String match = m.group();
        Pattern p2 = Pattern.compile();//Here as well
        Matcher m2 = p.matcher(s);
        while(m2.find()){
            for(int i = 0; i < m.groupCount()){
                //add the variables to the lists
            }
        }
    }
}

我要问的是什么正则表达式可以处理这个任务?


所有这一切的原因是用户可以使用一些代码对应用程序进行一些控制(顺便说一句,Android 应用程序)

如果不建议使用正则表达式,那么我应该使用什么解析器?

【问题讨论】:

  • 就像评论一样,有很多java parsers 可用。我不会尝试使用正则表达式来做到这一点。
  • 这背后的动机是什么??
  • 不能用正则表达式解析递归文法。使用解析器。
  • @SmartLemon:不,这在理论上是不可能的。正则表达式无法处理递归语法。
  • 嗯,我明白了,我猜它会是一个解析器

标签: java regex parsing


【解决方案1】:

人们经常尝试使用正则表达式解析 HTML、XML、C 或 java。

只要付出足够的努力和技巧,就可以通过正则表达式的复杂组合实现许多令人惊奇的事情。但你总是会得到一些非常不完整且效率不高的东西。

Regex 无法处理复杂的语法,请使用解析器,无论是通用的还是 specific to java

【讨论】:

    【解决方案2】:

    您可能希望使用比正则表达式更高级的语法解析应用程序。例如,您可以查看ANTLR,它也有各种可用的语法。

    【讨论】:

      【解决方案3】:

      您可以尝试使用正则表达式,但使用 Java Parser 可能更容易。你可以试试JavaCC

      【讨论】:

      • 您可以浪费时间尝试使用正则表达式,但您不会成功。这在 1956 年得到了证明。使用解析器不仅“更容易”,而且非常重要。
      【解决方案4】:

      我建议您研究一下解析器生成器,例如。 JavaCC。 JavaCC 允许您以类似 BNF 的样式描述语法并根据它创建 Java 类。 JavaCC 也已经有语法可用于解析 Java 代码,我认为即使作为 JavaCC 附带的示例或教程。

      【讨论】:

        【解决方案5】:

        如果您真的必须使用正则表达式,请尝试(?&lt;=int )\\w+ 之类的方法,但我强烈建议您使用一些 Java 解析器。

        【讨论】:

          猜你喜欢
          • 2011-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多