switch . ( q0=0).
int automat (FILE*fp)
{ int , q=0; //
while((c=fgetch(fp))!=EOF)
{ if (index_litera(c) = = -1) break;
switch(q)
{case 0:
if (c>='1' && c<='9") {q=1; break;}
if (c= =' ' || c= ='\n' || c= ='\t' || c= ='\r') break;
if (c= ='0') { q=6; break;}
//
my_error(); return 0;
case 1:
if (c>='0' && c<='9') break;
//
return 1;
case 6:
if (c= ='' || c= ='x') {q=12; break;}
if (c>='0' && c<='7') {q=7; break;}
//
return 1;
case 12:
if ((c>='0' && c<='9') ||
(c>='A' && c<='F') ||
(c>='a' && c<='f')) {q=13; break;}
//
my_error (); return 0;
// --------------------------------------------------------------------
//
// --------------------------------------------------------------------
}// switch
//
if (is_final (row)) printf (" - %s", text);
else printf ('' -%s", text);
}//
}// automat
automat, , . , . ASCI: . automat , .
:
- , \n, \v, \r, \t, \b , ;
- 1, 2, 3,..7 ( 0);
- 0,...9,A,..F,a,..f ;
- 0
- , ASCI: \, .
, .
, ' 256 , .
# include <stdio.h>
#define DECIMAL 0x01
#define OCTAL 0x02
#define EMPTY 0x80
#define LITERA 0x04
char decimal[]=0123456789;
char hesh_digit[] = 0123456789ABCDEFabcdef;
char octal[] = 01234567;
char empty[] = \n\r\t\v\r\b;
char litera[]=
ABCDEFGHIJKLMNOPQRSTUVUXYZ_abcdefghijklmnopqrstuvuxyz
char vector_upr [256];
//
void set_class (char * str, int code)
{ int i, len = strlen(str);
for (i=0; i<len; i + +) vector_upr [(int)*(str+i)] |= code;
}
int automat (FILE * fp)
{ int c, q =0; //
|
|
while ((c = fgetch(fp))! = EOF)
{ class_litera = vector_upr [(int) (c)];
if (!class_litera) break; // sigma
switch (q)
{ case 0: if (class_litera & DECIMAL) { q=1; break;}
if (c == 0) {q=6; break; }
if (class_litera & EMPTY) break;
return ERROR;
//
. ..
}
} }
main () {
int i;
FILE*fp; char file_name[80];
REPEAT:
printf(" ' :");
if(scant("%s", file_name) == 0) return 0; //
if(fp = fopen (file_name,"rt") == NULL)
{ printf (" %s .\ n"); goto REPEAT;}
for (i = 0; i < 256; i++) *(vector_upr + i) = 0;
set_class(decimal, DECIMAL);
set_class(octal, OCTAL); set class(litera, LITERA);
set class(empty, EMPTY);
while (! eof (fp))
if (automat(fp) == ERROR) printf (" - %s", text);
else printf ('' -%s", text);
}// main