Avatar billede invisibleman Nybegynder
10. marts 2002 - 18:22 Der er 4 kommentarer og
1 løsning

Ungreedy er for lidt, greedy for meget .. hva' gør man så ?

Jeg har følgende tekst:

procedure main() {
    identd_init("bot", "Win32");
    identd_enable();
    log($irc_software);

    if (irc_connect("irc.de.quakenet.org", 6667, "myirc_bot")) {
        alert("We got in!");
    }

    disconnect();
}

event on_num(331, 332) {

}

(\r\n og \t bliver fjernet inden regexp'en bliver udført)

Jeg skal så, med en regexp (håber jeg), matche hver funktion (dvs. (procedure|event) ..) og få "indholdet" af den.

Alt mellem den første { (efter ) ..) og indtil den sidste } der afslutter funktionen, skal matches som en submatch.

Mit nuværende pattern ser således ud (Microsoft RegExp / VBScript Regular Expressions 5.5)

"(procedure|event)) +([a-z_ ]+)\((.*?)\) +\{(.*?)\}"

Men problemet er, at den stopper med at matche ved den første } den møder. Hvilket f.eks. er afslutningen på en if () { .. } sætning.

Hvis jeg fjerner ? (undgreedy) fra (.*?) så matcher den bare hele teksten, og er den der giver den også problemer.
Ud fra ovenstående patternfår jeg f.eks. flg. som submatch for "procedure main"

procedure main() {identd_init("bot", "Win32");identd_enable();log($irc_software);if (irc_connect("irc.de.quakenet.org", 6667, "myirc_bot")) {alert("We got in!");}

Nogle der har en løsning ? Jeg vil helst undgå at parse for funktioner med Do..Loop / For..Next (VB)

Det gives kun point for en HEL løsning.
Avatar billede alvion Nybegynder
11. marts 2002 - 14:33 #1
Ja RegExp kan meget, men....

Jeg beklager Invisibleman, men ovenstående er et fortolker problem, og derfor har du også brug for en fortolker til at løse det.

Jeg har desværre aldrig skrevet en fortolker i Visual Basic, og kommer nok heller aldrig til det. Jeg har lavet én i Pascal (Delphi), som meget nemt vil kunne tilpasses dit ønske. Hvis du vil have den, må du gerne det.
Avatar billede invisibleman Nybegynder
11. marts 2002 - 19:27 #2
alvion: hmm .. mon jeg kan oversætte det til VB ? Hvis du gider sende mig det, og jeg kan få det oversat til noget brugbart er pointene dine :)
Avatar billede alvion Nybegynder
12. marts 2002 - 05:54 #3
Du kan da kigge på det - her er koden i hvert fald + et Word dokument, der beskriver den syntaks, som parseren kan fortolke pt.

http://www.gehling.dk/newpars.zip
Avatar billede invisibleman Nybegynder
23. marts 2002 - 21:05 #4
Det kunne jeg ikke rigtigt bruge nej :/ Ellers tak :)
Avatar billede alvion Nybegynder
24. marts 2002 - 18:17 #5
Nå det var en skam :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester