01. september 2004 - 22:48Der er
21 kommentarer og 2 løsninger
Syntax farver med aka Borland Builder
Hvis man nu sidder med BOrland Builder og tænker på at lave et lille program som kan vise syntax farver. Der er jo f.eks Ultra Edit, som er en god værktøj, som også tilbyder mange forskellige syntax´er til forskellige sprog.
Hvis man skal kode sådan noget, så f.eks får farver, er der vel en standard metode at gøre det på. ??
Et meget stort spørgsmål, jeg kan kun fortælle hvordan jeg gør, men der er helt sikkert mange måder at gøre det på:
Først deles linien op i "tokens", hvilket i dit eksempel vil sige function, hey, fnc1 og (){}; Jeg bruger en regexp til at finde tal.
Så finder du ud af hvilken type hver token er, f.ex. keyword, tal, streng ...
Derudover skal du finde ud af om der er en "line comment" i linien, // i C++
Derudover skal du tage stilling til elementer der spreder sig over flere linier, f.ex kommentarer.
Når min editor læser en fil parser den linierne en for en for at finde ud af hvordan de ender (dvs om de ender i en multi linie kommentar eller ...), denne info gemmes for hver linie.
Når en linie udskrives på skærmen parses den som beskrevet i starten og info gemmes i et array der f.ex. fortæller at de første 4 karakterer skal være blå, de næste 5 grønne etc. Og de udskrives så i disse farver, idet der tages højde for markeringer.
Det er en ikke helt triviel opgave, men meget interessant og lærerig.
Jeg vil mene at en løsning kun baseret på regexp kan være generel nok til at kunne bruges med alle sprog. Det kræver naturligvis et stort antal regexp's og nogle af dem skal have specielle egenskaber, så som at kunne styre flere linier.
Min egen hjemmestrikkede løsning forestiller at være generel nok til "de fleste sprog" (dvs dem jeg bruger).
I min editor kan man specificere hvad der er en streng, en char, en kommentar, delimiter, hvilke keywords der finds, etc. for alle de typer filer (baseret på extension) som man ønsker.
Så der burde ikke kunne være problemer med dem du nævner.
(iøvrigt mener jeg at enhver C/C++ programmør bør lege lidt med Bison og Flex på et tidspunkt - det kan både være nyttigt at kunne i nogle sammenhænge og det giver en god forståelse af hvordan f.eks. en compiler fungerer)
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.