|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
[FLEX] Aiuto: Analizzatore lessicale
Ciao a tutti,
vorrei un consiglio su un programma FLEX, che è un analizzatore lessicale, scritto praticamente in C ma si tratta comunque di un file .L Il programma deve fare questo: aggiunge alla fine di ogni parola una 'a' per ogni occorrenza di 'st' mentre aggiunge alla fine di ogni parola una 'e' per ogni occorrenza di 'tr'. Chiaramente deve riconoscere anche più occorrenze a seconda dell'ordine. Per esempio: stelo -> steloa tramonto -> tramontoe triste -> tristeea tristetriste -> tristetristeeaea Il problema è contare le occorrenze di 'st' e 'tr'. Grazie.
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
un idea...
Codice:
char stringa[20]; # # int contast,contatr for (int i=0;i<19) { if (stringa[i]=='s' && stringa[i+1]=='t') contast++; if (stringa[i]=='t' && stringa[i+1]=='r') contatr++; } Codice:
for (int i=0;i<=contast;i++) { stringa[fine della stringa]='e' } //questo per inserire alla fine |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2007
Città: Palestro
Messaggi: 1957
|
Ma vuoi fare tutta da FLEX,oppure ritorni i token ad un programma scritto in c? Nel secondo caso, il metodo riportato da nikel, può andare bene (magari mettere solo un else tra i due if..tanto se è "st" non può essere "tr"..così risparmi un'operazione, in certi casi! Lo so..la mia è semplice pignoleria.. ^^), altrimenti..tutto da flex, non saprei come aiutarti..se non inserendo per ogni occorrenza che trovi questo listato..
Oppure..qualcosa del tipo .*st .*tr .*str (serve perchè se no la prima regola si mangerebbe la t) In questo caso (sempre se flex non ti mangia il resto della frase fino al $), basterebbe avere due contatori da incrementare sparatemente nel primo e secondo caso, e contemporaneamente nel terzo. Se provi..fammi sapere! (devo iniziare a lavorarci sopra anch'io - a Flex - così mi fai da feedback per un test! ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:39.