Určitě by měl jít použít AntLR. Gramatika pro Javu už je hotová, netřeba ji vymýšlet znova.
A nedávno jsem narazil ještě na tohle, to by mohlo být ještě jednodušší než AntLR http://code.google.com/p/javaparser/wiki/UsingThisParser Tom > -----Original Message----- > From: konference-boun...@java.cz > [mailto:konference-boun...@java.cz] On Behalf Of Dusan Zatkovsky > Sent: Wednesday, April 14, 2010 1:05 PM > To: konference@java.cz > Subject: Parsovanie .java zdrojakov cestou najmensieho odporu > > Ahoj. > > Maintainujem qtjambi/maven plugin a stojim pred rozhodnutim > ci/a/alebo cim parsovat javovske zdrojaky. V principe mi ide > o extrakciu textov k prekladu ( pokial niekto pouziva > qt/qtjambi, ide mi o nahradu toolu "lupdate" ). > > Priklad: > > public class MainClass extends SomeObject { > > public void someMethod() { > > String s1 = tr("string1"); > String s2 = QApplication.translate("MyContext", > "string2"); > String s3 = > QCoreApplication.translate("MyContext", "string3", 5); > //String s4 = > QApplication.translate("MyContext", "string4", 5); > String s5 = QApplication.translate( > "MyContext", > "string5", > 7); > > /* > String s6 = tr("commented"); > */ > > } > > class InnerClass { > void anotherMethod() { > String s6 = tr("string6"); > } > } > > } > > > Z tohoto zdrojaku potrebujem vyextrahovat parameter pre tr() > a prve dva parametre pre QApplication.translate() a > QCoreApplication.translate(). > > Dalej v pripade tr() potrebujem vediet meno class-y ( > MainClass ), pripadne aj rodicovskej classy (MainClass.InnerClass). > > Samozrejme k tomu spravne handlovat zakomentovane casti kodu > a viacriadkove statementy. > > Vysledkom tohoto extraktu by bolo cosi podobne tomuto: > > MainClass,string1 > MyContext,string2 > MyContext,string3 > MyContext,string5 > MainClass.InnerClass,string6 > > > Mam niekolko moznosti: > - regexp ( primitivne, nezistim meno classy ) > - nejaky vlastny tokenizer ( dlhsi cas vyvoja ) > - zneuzit cosi existujuce ... ? > > > Ako by ste na to sli vy? > > Dik > > -- > Dusan > > > ... tykajte mi >