PHP Parser

Tags:    delphi

<< < 12 > >>
Jeg er lidt på skideren. Jeg vil gerne lave en php parser som finder alle variabler, includes og funktioner.
Dog bruger min kode en del ram, hvilket jeg gerne vil have at den ikke gør.

Her er hele min kode:

Fold kodeboks ind/udKode 


Koden bliver udført hvert sekundt og "lakker" en del.

Er der en som kan gør så den bruger mindre ram eller har en anden metode hvorpå jeg kan parse disse ting?



Indlæg senest redigeret d. 10.05.2007 16:39 af Bruger #8254
14 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 7 karma
Sorter efter stemmer Sorter efter dato
Hvad med istedet kun at opdatere når der kommer et '=',' ','$' osv. Så eliminerer du sikkert noget af det arbejde som den laver samtidig med at du kun får en ny liste når der er brug for det



Nu kender jeg ikke Delphi så godt, men hvis dine Delete- og Copy-kald hver gang flytter strengen rundt i memory (det er normalt at dette gøres ved strengtyper - i C# kan dette eksempelvis undgåes ved at benytte typen StringBuilder, der kan manipulere en streng uden at flytte rundt med den i hukommelsen - dog skal det nævnes, at den gør det af og til, når der ikke er mere plads tilbage af det allokerede, men det vil du næppe komme ud for, da du nedbryder en streng frem for at opbygge den).

Jeg beklager den lange sætning :-)



Nogen ide om hvordan man kan gøre i Delphi? Eller kan du give et eksempel i C#, så kan jeg måske omskrive den til Delphi sporg ;)

Forresten så fandt jeg noget andet kode:

Fold kodeboks ind/udKode 


Dog giver den fejl i linjen med denne kode:
while p^ in [' ',#9] do Inc(p); // skip white space


Kan du hjælpe mig med den måske???



Jeps, det er en såkaldt lexer - se http://en.wikipedia.org/wiki/Lexical_analysis

Nej, jeg det er .NET-specifik ting med StringBuilders. Jeg fandt dog hurtigt følgende på Google:
http://bdn1.borland.com/borcon2004/article/paper/0,1963,32120,00.html




Jeg er måske lidt "dum", men hvad hjælper det mig?



Der stod lidt om optimering af streng og lister. Jeg har kun hurtigt skimmet det, så jeg ved ikke om du kan bruge det.

Dog virker det meget "overkill" at skulle parse hvert sekund. Hvad er det, du vil opnå med det? Altså hvad er grunden til, du skal parse så tit?



fordi listen over variabler, funktioner, inkluderet filer skal være up-to-date. Det er også meningen at den kun skal parse når der ændre i SynEdit, men det lakker stadig ;)



Ja, det kunne jeg godt regne ud :-) Men mente nu mere formålet - laver du en editor, hvor du gerne vil vise disse informationer ude i siden, eller?



Du kunne jo flytte din parser til en seperat tråd istedet. Det ville betyde at du skal arbejde med trådsynkronisering, men tilgengæld kommer der ikke noget "lag", som du beskriver det.



Det er helt rigtigt, men det bør i mine øjne stadig overvejes kraftigt, om der er valgt det rigtige design/datastruktur. Men uanset hvad, bør du, som The-Freak siger, flytte det til en seperat tråd.

Flertrådede programmer kan godt være svære at kode, og det bliver ikke nemmere af at få events ind i billedet. Jeg vil derfor anbefale dig at starte i det små, når du skal lære multi-threaded programmering. Rent teknisk er det nemt - og der skal faktisk ikke så mange linier til, men hvis man ikke tænker sig grundigt om, får man den ene dead-, live-, ..., lock efter hinanden. Så man skal virkelig holde tungen lige i munden - vi mennesker er bygget til at tænke sekventielt.



<< < 12 > >>
t