Avatar billede Daniel.E Praktikant
01. september 2004 - 22:48 Der 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å. ??

function hey() {
  fnc1();
}
Avatar billede bertelbrander Novice
01. september 2004 - 23:08 #1
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.
Avatar billede Daniel.E Praktikant
02. september 2004 - 19:42 #2
ok, det var også sådan lidt jeg havde tænkt mig....
Avatar billede bertelbrander Novice
02. september 2004 - 20:57 #3
Så vidt jeg ved er der nogen der bruger en løsning udelukkende baseret på regexp.
Avatar billede arne_v Ekspert
02. september 2004 - 21:09 #4
et alternativ til regexp var lex/flex og yacc/bison
Avatar billede Daniel.E Praktikant
03. september 2004 - 13:41 #5
hvordan bruger man lex/flex og yacc/bison...eller er det svært ?
Avatar billede bertelbrander Novice
03. september 2004 - 19:50 #6
Selv om jeg ikke kender ret meget til lex/fles/yacc/bison er det efter min mening ikke specielt velegnet:

1 Det er lidt for voldsomt hvis formålet kun er at lave farver. Hvis du derimod vil lave  avancerede features kan det være en god idé.

Det er ikke specielt let at konfigurere, så man ender let med at skulle lave en lang række parsere, hvis man vil under støtte flere sprog.
Avatar billede arne_v Ekspert
03. september 2004 - 19:53 #7
Kan man undgå flere parsere hvis det skal være helt rigtigt i de
forskellige sprog ?
Avatar billede bertelbrander Novice
03. september 2004 - 19:59 #8
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).
Avatar billede arne_v Ekspert
03. september 2004 - 20:07 #9
Er 'test' en kommentar (VB) eller en streng konstant (Fortran & Pascal) ?

Er // en kommentar (C/C++/Java/C#) eller en operator (Fortran)

Er begin et keyword (Pascal) eller et navn (andre) ?
Avatar billede bertelbrander Novice
03. september 2004 - 20:11 #10
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.
Avatar billede arne_v Ekspert
03. september 2004 - 20:19 #11
ok

sprog uafhængig regex + sprog afhængig mapning fra item til token type

så kan du håndtere alt bortset fra tilfælde hvor item kan være forskellige
token typer alt efter kontekst

og jeg formoder at du fanger de 2 special tilfælde kommentar og streng

det kan formentlig klare alle nyere sprog (gamle sprog som
fortran kan nok være lidt grimme)
Avatar billede bertelbrander Novice
03. september 2004 - 20:55 #12
Jeg kender ikke fortran, men det kunne være sjovt at se hvordan den ville klare det.

Jeg har brugt den lidt til html, og der mangler den en del i at være perfekt.
Avatar billede Daniel.E Praktikant
09. september 2004 - 11:47 #13
hmm...dem som vil giv et svar...så finder jeg ud af det...
Avatar billede arne_v Ekspert
10. september 2004 - 22:28 #14
jeg frafalder her p.g.a. manglende bidrag

(og Bertel plejer ikke at ville have point, men det skal du selvfølgelig lige
høre fra ham selv)
Avatar billede bertelbrander Novice
11. september 2004 - 00:55 #15
Jeg vil stadig ikke have point.
Avatar billede arne_v Ekspert
11. september 2004 - 18:05 #16
Avatar billede Daniel.E Praktikant
12. september 2004 - 19:59 #17
hey...sorry vente tiden........
Avatar billede Daniel.E Praktikant
12. september 2004 - 19:59 #18
arne_v du må godt give et svar nu så :)
Avatar billede Daniel.E Praktikant
12. september 2004 - 19:59 #19
arne_V når du læser dette..så tag lige et kig på mit spørgsmål omkring comm port snak... :)
Avatar billede arne_v Ekspert
12. september 2004 - 20:02 #20
Hvis du mener at d elink er point værd ...

(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)
Avatar billede arne_v Ekspert
12. september 2004 - 20:02 #21
.
Avatar billede Daniel.E Praktikant
12. september 2004 - 23:59 #22
arne_v jeg er en gavmild person :)
Avatar billede Daniel.E Praktikant
13. september 2004 - 00:01 #23
Juhuu....
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