26. december 2003 - 02:05Der er
21 kommentarer og 1 løsning
Program logik
Jeg sidder og prøver at lave en lille javadoc, men mangler nogle råd. Jeg har lavet et klassehierarki som består af klasserne: pagkage, class, method, field. (interface hører pt. under class - ved ikke om det er smart) fx. består Class af en liste som kan indeholde fields og en liste til metoder.
Jeg skal nu lave en metode som læser en kildefil og kan 'forstå' hvad der er hvad. Således at når den støder på en metode så skal den adderes i den aktuelle klases metodeliste. Min grundidé er at benytte reg.ex. og har også allerede lavet en skabelon, men jeg ville meget gerne have input til hvordan jeg laver denne readSource-metode.
På jævnt dansk: du skal lave en parser som forstår Java syntax ?
Jeg ville finde det meget fristende at finde en parse generator med en java grammatik, hvor der bare skulle sættes udførsels kode ind, i.s.f. ar skrive en parse fra bunden af.
Det er ikke helt simpelt at håndtere alle mulige sære special tilfælde (inner anonymous classes og den slags).
Jeps jeg skal lave en parser som forstår Javasyntaks... ...og jeg er instillet på at prøve kræfter med at skrive den fra bunden af. Såå svært tror jeg nu heller ikke det er. Det gør heller ikke noget hvis den ikke kan forstå ALT, men den skal kunne finde metoder, fields, classes og packages. Har du evt. nogle idéer til min read? :-)
* class X * => klasse * interface X * => interface antal('{')-antal('}')==1 og * X ( * => metode antal('{')-antal('}')==1 og * X ikke('(') * => attribut
hmm kan ikke lige følge din "antal('{')-antal('}')==1 og * X ( * => metode " teori... Kan man ikke bare indlæse sourcen én gang til en string(buffer) og så med reg.ex matche hhv. metode, field, class mm.?
giver dette mening? (jeg spørger da det ikke er testet, men kun er på teoretisk plan endnu)
1) Regular Experssion til at finde fx en metode 2) Finde indexet på match 3) BracketLevel(int index) til finde ud af om der er tale om b eller d (ref dit eksampel)
og er det smart at søge efter denne for med reg.Ex istedet for? : \s*.*\(.*\){.*} (altså søge efter en metode MED indhold)
Nice - det ser skam godt ud. Jeg er opmærksom på dine problemstillinger - hvilke jeg har forsøgt at løse i min egen lille programdemo. Jeg skal ud af døren nu så jeg vender tilbage imorgen :-)
men ellers har jeg lige testet din demo. Den var ikke så glad for private final static int MASK_A = 0x01; men det kan jeg sagtens selv løse. Jeg siger tusinde tak for inspirationen+eksemplet
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.