2012-06-15 149 views
-2

是否可以使用正则表达式解析某些Java代码?用Java解析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应用顺便说一句)

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

+10

就像一个评论,有很多[Java解析器](http://www.google.com/?q=java+parser)可用。我不会试图用正则表达式来做到这一点。 –

+0

你该读什么java文件? –

+3

这背后的动机是什么? – Sikorski

回答

4

人们经常试图用正则表达式解析HTML,XML,C或Java。

有了足够的努力和窍门,复杂的正则表达式组合可以带来许多惊人的事情。但是你总是会得到一些非常不完整和效率低下的东西。

正则表达式无法处理复杂的语法,请使用解析器,泛型或specific to java

4

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

+0

你可以*浪费你的时间*尝试一个正则表达式,但你*不会成功*。这在1956年得到证明。使用解析器不仅“简单”,而且至关重要。 – EJP

4

您可能会想要使用比正则表达式更高级的语法分析应用程序。你可以看看ANTLR,它也有各种可用的语法。

1

我建议你看看解析器生成器,例如。 JavaCC的。 JavaCC允许您以类似BNF的风格描述语法并根据它创建Java类。 JavaCC也有语法可用于解析Java代码,我认为它甚至可以作为JavaCC附带的示例或教程。

2

如果你真的必须使用正则表达式然后尝试类似(?<=int)\\w+,但我强烈建议使用一些Java解析器。