/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Flex++ og Bison++ (OT)
Fra : snog


Dato : 17-06-04 13:22

beklager at jeg er lidt ot her

jeg har gaaet og leget lidt med ideen om at lave mit egen sprog (faktisk
mere bare en syntax) jeg har intentioner om at udvikle i c++ og sproget
vil vaere inspireret af c++, .net, python og ruby.
Mit spoergsmaal er foelgende: kan man overhoved lave en indent baseret
syntax some fines i python med flex og bison? jeg ved at python bruger
sin egen lexor

mvh

 
 
Ukendt (17-06-2004)
Kommentar
Fra : Ukendt


Dato : 17-06-04 19:32

"snog" <dont@think.so> wrote in message
news:40d18ce3$0$208$edfadb0f@dread12.news.tele.dk...
> Mit spoergsmaal er foelgende: kan man overhoved lave en indent baseret
> syntax some fines i python med flex og bison? jeg ved at python bruger
> sin egen lexor

Det kan godt lade sig gøre.

Jeg har leget lidt med det - dog kun med bison, da jeg ikke bryder mig meget
om flex.
Min løsning var at definere INDENT_IN, INDENT_OUT og NEWLINE som tokens, og
lade scanneren (i mit tilfælde håndkodet) generere disse tokens på baggrund
af indtenteringen. F.eks. bliver følgende sekvens:

text0...\n
<space><space>text1...\n
<space><space><space><space>text2....\n
test3...\n

omsat til:

text0... NEWLINE
INDENT_IN text1... NEWLINE
INDENT_IN text2... NEWLINE
INDENT_OUT INDENT_OUT text3 NEWLINE

Scanneren er nødt til at have en stak af "indrykninger", så den kan generere
det korrekte antal INDENT_OUTs. Kan den det, er der ingen forskel i
grammatikken om man benytter indrykninger eller fx { og }. Som sagt bruger
jeg ikke flex, men jeg kan ikke se nogen problemer i det. Dog kræver det
noget håndkode fra din side af udover hvad flex selv kan generere idet du er
nødt til måle længden på indrykninger (^[ \t]*), håndtere newline, tabs,
stak mv.

Håber det hjælper.

mvh.
Martin



snog (18-06-2004)
Kommentar
Fra : snog


Dato : 18-06-04 23:58

Martin M. Pedersen wrote:
> "snog" <dont@think.so> wrote in message
> news:40d18ce3$0$208$edfadb0f@dread12.news.tele.dk...
>
>>Mit spoergsmaal er foelgende: kan man overhoved lave en indent baseret
>>syntax some fines i python med flex og bison? jeg ved at python bruger
>>sin egen lexor
>
>
> Det kan godt lade sig gøre.

Findes der bedre vaerktoejer? det lydet ikke som om det kan anbefales

> Jeg har leget lidt med det - dog kun med bison, da jeg ikke bryder mig meget
> om flex.
> Min løsning var at definere INDENT_IN, INDENT_OUT og NEWLINE som tokens, og
> lade scanneren (i mit tilfælde håndkodet) generere disse tokens på baggrund
> af indtenteringen. F.eks. bliver følgende sekvens:
>
> text0...\n
> <space><space>text1...\n
> <space><space><space><space>text2....\n
> test3...\n
>
> omsat til:
>
> text0... NEWLINE
> INDENT_IN text1... NEWLINE
> INDENT_IN text2... NEWLINE
> INDENT_OUT INDENT_OUT text3 NEWLINE
>
> Scanneren er nødt til at have en stak af "indrykninger", så den kan generere
> det korrekte antal INDENT_OUTs. Kan den det, er der ingen forskel i
> grammatikken om man benytter indrykninger eller fx { og }. Som sagt bruger
> jeg ikke flex, men jeg kan ikke se nogen problemer i det. Dog kræver det
> noget håndkode fra din side af udover hvad flex selv kan generere idet du er
> nødt til måle længden på indrykninger (^[ \t]*), håndtere newline, tabs,
> stak mv.
>
> Håber det hjælper.
>

Bestemt, og mange tak for svaret, jeg er ikke kommet saa langt. Jeg har
kigget lidt paa det men ville lige sikre mig at jeg var igang med det
rette vaerktoej.

mvh

Mogens Hansen (20-06-2004)
Kommentar
Fra : Mogens Hansen


Dato : 20-06-04 06:45


"snog" <dont@think.so> wrote:

[8<8<8<]
> Findes der bedre vaerktoejer?

Hvis man skal lave parsere i C++ kan det være en god ide at kigge på
biblioteket Boost.Spirit (http://www.boost.org/libs/spirit/index.html).

Det adskiller sig fra værktøjer (som lex/yacc, flex/bison) ved at man
beskriver sproget der skal parses direkte i C++ på en form der ligger
_meget_ tæt på EBNF.
Spirit involverer således ikke eksterne programmer. Spirit komplicerer
således ikke make processen.
Til gengæld er det nok ikke lige så velegnet (som lex/yacc, flex/bison) til
store sprog. F.eks. kan Spirit ikke fortælle om sproget er veldefineret og
fejlmeldingerne (når man skriver en forkert regel) kan være svære at tolke
(Spirit er lavet med template meta programmering).

> det lydet ikke som om det kan anbefales

Sådan lød det ikke for mig.


Venlig hilsen

Mogens Hansen



snog (22-06-2004)
Kommentar
Fra : snog


Dato : 22-06-04 22:37

Mogens Hansen wrote:
> "snog" <dont@think.so> wrote:
>
> [8<8<8<]
>
>>Findes der bedre vaerktoejer?
>
>
> Hvis man skal lave parsere i C++ kan det være en god ide at kigge på
> biblioteket Boost.Spirit (http://www.boost.org/libs/spirit/index.html).
>
> Det adskiller sig fra værktøjer (som lex/yacc, flex/bison) ved at man
> beskriver sproget der skal parses direkte i C++ på en form der ligger
> _meget_ tæt på EBNF.
> Spirit involverer således ikke eksterne programmer. Spirit komplicerer
> således ikke make processen.
> Til gengæld er det nok ikke lige så velegnet (som lex/yacc, flex/bison) til
> store sprog. F.eks. kan Spirit ikke fortælle om sproget er veldefineret og
> fejlmeldingerne (når man skriver en forkert regel) kan være svære at tolke
> (Spirit er lavet med template meta programmering).
>

Jeg har faktisk arbejded med Boost.Sprite... ret nice, brugte det til at
parse http messages.

>>det lydet ikke som om det kan anbefales
>
>
> Sådan lød det ikke for mig.
>

Sikkert bare mig der over tolker.

tak for svar.

mvh

Ukendt (20-06-2004)
Kommentar
Fra : Ukendt


Dato : 20-06-04 16:55

"snog" <dont@think.so> wrote in message
news:40d3738b$0$217$edfadb0f@dread12.news.tele.dk...
> Findes der bedre vaerktoejer? det lydet ikke som om det kan anbefales

Jeg er vældig glad for Bison, men jeg synes at Flex er for kompliceret et
værktøj til så en enkel opgave. Det er min oplevelse, at den introducerer
lige så mange problemer som den løser. F.eks. er det vanskeligt at flytte en
scanner over på en EBCDIC-platform, eller at få den til at understøtte
Unicode. Bl.a. af disse grunde foretrækker jeg en håndskreven lexer, der
normalt er triviel at skrive. Skulle jeg pege på et alternativt værktøj, så
kunne det være "re2c" (se http://re2c.org/). Den er mere begrænset i sit
funktionsområde, men også mere fleksibel.

mvh.
Martin



snog (22-06-2004)
Kommentar
Fra : snog


Dato : 22-06-04 22:37

Martin M. Pedersen wrote:

> "snog" <dont@think.so> wrote in message
> news:40d3738b$0$217$edfadb0f@dread12.news.tele.dk...
>
>>Findes der bedre vaerktoejer? det lydet ikke som om det kan anbefales
>
>
> Jeg er vældig glad for Bison, men jeg synes at Flex er for kompliceret et
> værktøj til så en enkel opgave. Det er min oplevelse, at den introducerer
> lige så mange problemer som den løser. F.eks. er det vanskeligt at flytte en
> scanner over på en EBCDIC-platform, eller at få den til at understøtte
> Unicode. Bl.a. af disse grunde foretrækker jeg en håndskreven lexer, der
> normalt er triviel at skrive. Skulle jeg pege på et alternativt værktøj, så
> kunne det være "re2c" (se http://re2c.org/). Den er mere begrænset i sit
> funktionsområde, men også mere fleksibel.
>

Den vil jeg naturligvis kigge paa.

mange tak

mvh

Preben (17-06-2004)
Kommentar
Fra : Preben


Dato : 17-06-04 20:48

> jeg har gaaet og leget lidt med ideen om at lave mit egen sprog (faktisk
> mere bare en syntax) jeg har intentioner om at udvikle i c++ og sproget
> vil vaere inspireret af c++, .net, python og ruby.
> Mit spoergsmaal er foelgende: kan man overhoved lave en indent baseret
> syntax some fines i python med flex og bison? jeg ved at python bruger
> sin egen lexor


flex, bison og lexor? fremmedord for mig - nogen der vil forklare hvad i
snakker om?
jeg skal selv hen og skrive parser/compiler om et års tid (uddannelse)
så måske det faktisk har lidt relevans.


Mvh / Preben Holm

Igor V. Rafienko (17-06-2004)
Kommentar
Fra : Igor V. Rafienko


Dato : 17-06-04 23:07

[ 64bitNOnoNOSPAM@mailme.dk ]

[ ... ]

> flex, bison og lexor? fremmedord for mig - nogen der vil forklare hvad i
> snakker om?


Du vil ta en titt i "Compilers: principles, techniques and tools" av
Aho, Sethi og Ullman. Den kommer snart i utgave nummer 2, men det
burde ikke ha noe å si for spørsmålet ditt.

[ ... ]





ivr
--
<html><form><input type crash></form></html>

Ukendt (18-06-2004)
Kommentar
Fra : Ukendt


Dato : 18-06-04 10:09

"Preben" <64bitNOnoNOSPAM@mailme.dk> wrote in message
news:40d1f404$0$23879$14726298@news.sunsite.dk...
> flex, bison og lexor? fremmedord for mig - nogen der vil forklare hvad i
> snakker om?

Normalt betragter man en compiler som kørende i forskellige faser, hvoraf de
to første er:

1. leksikal analyse, som udføres af en "lexer" eller "scanner".
2. syntaktisk analyse, som udføres af en "parser".

1) Dette går ud på at opdele kildeteksten i en sekvens af tokens, dvs.
whitespace, identifiers, konstanter, tegnsætning mv. Det er her programmet
"flex" - eller den originale Unix implmentation "lex" - kommer ind i
billedet. Det er en kodegenerator der som input får en fil med regulære
udtryk, der beskriver de enkelte tokens, og som output genererer en
tilstandsmaskine der implementerer en "scanner".

2) Dette går ud på at omsætte sekvensen af tokens til noget som giver mening
i forhold til grammatikken for sproget. Der er her programmet "bison" -
eller den originale Unix implementation "Yacc" - kommer ind i billedet. Det
er også en kodegenerator. Den får som input en fil med en grammatik, og som
output genererer den en tilstandsmaskine der implementerer der implementerer
en "parser".

Både for flex og bison gælder det, at man i input-filen til programmet
skriver "actions" - C kode der bliver udført når noget input er blevet
genkendt. Så bliver vi lidt on-topic igen. De originale programmer "lex" og
"yacc" blev begge udviklet som en del af Unix til blandt andet at
implementere C compileren med.

Du kan evt. kigge her: http://dinosaur.compilertools.net/

mvh.
Martin



Preben (18-06-2004)
Kommentar
Fra : Preben


Dato : 18-06-04 16:49

> Normalt betragter man en compiler som kørende i forskellige faser, hvoraf de
> to første er:
>
> 1. leksikal analyse, som udføres af en "lexer" eller "scanner".
> 2. syntaktisk analyse, som udføres af en "parser".
>
> 1) Dette går ud på at opdele kildeteksten i en sekvens af tokens, dvs.
> whitespace, identifiers, konstanter, tegnsætning mv. Det er her programmet
> "flex" - eller den originale Unix implmentation "lex" - kommer ind i
> billedet. Det er en kodegenerator der som input får en fil med regulære
> udtryk, der beskriver de enkelte tokens, og som output genererer en
> tilstandsmaskine der implementerer en "scanner".
>
> 2) Dette går ud på at omsætte sekvensen af tokens til noget som giver mening
> i forhold til grammatikken for sproget. Der er her programmet "bison" -
> eller den originale Unix implementation "Yacc" - kommer ind i billedet. Det
> er også en kodegenerator. Den får som input en fil med en grammatik, og som
> output genererer den en tilstandsmaskine der implementerer der implementerer
> en "parser".
>
> Både for flex og bison gælder det, at man i input-filen til programmet
> skriver "actions" - C kode der bliver udført når noget input er blevet
> genkendt. Så bliver vi lidt on-topic igen. De originale programmer "lex" og
> "yacc" blev begge udviklet som en del af Unix til blandt andet at
> implementere C compileren med.
>
> Du kan evt. kigge her: http://dinosaur.compilertools.net/

Takker for oplysningen - det hjalp lidt på ordene

Jesper (21-06-2004)
Kommentar
Fra : Jesper


Dato : 21-06-04 23:22


"Martin M. Pedersen" <noname> skrev i en meddelelse
news:40d2b0f1$0$205$edfadb0f@dread11.news.tele.dk...
> "Preben" <64bitNOnoNOSPAM@mailme.dk> wrote in message
> news:40d1f404$0$23879$14726298@news.sunsite.dk...
> > flex, bison og lexor? fremmedord for mig - nogen der vil forklare hvad i
> > snakker om?
>
> Normalt betragter man en compiler som kørende i forskellige faser, hvoraf
de
> to første er:
>
> 1. leksikal analyse, som udføres af en "lexer" eller "scanner".
> 2. syntaktisk analyse, som udføres af en "parser".
>
> 1) Dette går ud på at opdele kildeteksten i en sekvens af tokens, dvs.
> whitespace, identifiers, konstanter, tegnsætning mv. Det er her programmet
> "flex" - eller den originale Unix implmentation "lex" - kommer ind i
> billedet. Det er en kodegenerator der som input får en fil med regulære
> udtryk, der beskriver de enkelte tokens, og som output genererer en
> tilstandsmaskine der implementerer en "scanner".
>
> 2) Dette går ud på at omsætte sekvensen af tokens til noget som giver
mening
> i forhold til grammatikken for sproget. Der er her programmet "bison" -
> eller den originale Unix implementation "Yacc" - kommer ind i billedet.
Det
> er også en kodegenerator. Den får som input en fil med en grammatik, og
som
> output genererer den en tilstandsmaskine der implementerer der
implementerer
> en "parser".
>
> Både for flex og bison gælder det, at man i input-filen til programmet
> skriver "actions" - C kode der bliver udført når noget input er blevet
> genkendt. Så bliver vi lidt on-topic igen. De originale programmer "lex"
og
> "yacc" blev begge udviklet som en del af Unix til blandt andet at
> implementere C compileren med.
>
> Du kan evt. kigge her: http://dinosaur.compilertools.net/
>
> mvh.
> Martin
>
>

Hej

Jeg har lige haft om Lex og Yacc sidste semester, og syntes nu de var meget
smarte - også Flex, som de fleste herinde åbentbart ikke er så vilde med;
hvorfor ikke? Synes nu den virker okay, og den er da bare med til at speede
processen lidt ved at lave tokens i stedet...

Men måske kan Flex nogle ting, jeg ikke lige har hørt om endnu, det kan
selvfølgelig nemt ske. Hvad er grunden egentlig?

Mvh
Jesper (der bare spørger dumt, på ingen måde ironisk, sarkastisk, osv.)



Ukendt (22-06-2004)
Kommentar
Fra : Ukendt


Dato : 22-06-04 17:06

"Jesper" <No@spam.4.me> wrote in message
news:MbJBc.15660$Vf.897770@news000.worldonline.dk...
> Jeg har lige haft om Lex og Yacc sidste semester, og syntes nu de var
meget
> smarte - også Flex, som de fleste herinde åbentbart ikke er så vilde med;
> hvorfor ikke?

Det er vist bare undertegnede, der har givet udtryk for nogle reservationer.
Andre folk har andre erfaringer, og der er ingen tvivl om at flex er et af
de mest udbredte værktøjer af slagsen, og virker godt i mange sammenhænge.
Men derfor bryder jeg mig alligevel ikke om den

mvh.
Martin



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste