2012-06-15 202 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解析器。