[C] Automi a stati finiti
Inviato: domenica 10 gennaio 2016, 20:12
La discussione della notazione polacca inversa ( QUI) è sfociata
negli automi a stati finiti.
Ritengo opportuno proseguire qui.
Posto un esempio significativo di @Claudio_f
e relativo grafico
Ora:il grafico è chiaro, ma vorrei capire anche carta e penna come si genera questo:
la prima riga( 3, 2, 1, 8, 8 ) è intuitiva, ma poi mica tanto.
negli automi a stati finiti.
Ritengo opportuno proseguire qui.
Posto un esempio significativo di @Claudio_f
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
//--------------------------------------------------------------------
int isvalue(char* s)
{
char ttable[9][5] = { {3, 2, 1, 8, 8},
{3, 2, 8, 8, 8},
{4, 8, 8, 8, 8},
{3, 4, 8, 5, 8},
{4, 8, 8, 5, 8},
{7, 8, 6, 8, 8},
{7, 8, 8, 8, 8},
{7, 8, 8, 8, 8},
{8, 8, 8, 8, 8} };
int event;
int stat = 0;
while(*s)
{
char c = *s++;
if (c>='0' && c<='9') event = 0;
else if (c=='.') event = 1;
else if (c=='+' || c=='-') event = 2;
else if (c=='e' || c=='E') event = 3;
else event = 4;
stat = ttable[stat][event];
}
return stat==3 || stat==4 || stat==7;
}
//--------------------------------------------------------------------
void main(void)
{
char st[128] = "-2.e-70";
printf("%d\n", isvalue(st));
}Ora:il grafico è chiaro, ma vorrei capire anche carta e penna come si genera questo:
Codice: Seleziona tutto
char ttable[9][5] = { {3, 2, 1, 8, 8},
{3, 2, 8, 8, 8},
{4, 8, 8, 8, 8},
{3, 4, 8, 5, 8},
{4, 8, 8, 5, 8},
{7, 8, 6, 8, 8},
{7, 8, 8, 8, 8},
{7, 8, 8, 8, 8},
{8, 8, 8, 8, 8} };

