Red de conocimiento informático - Conocimiento informático - ¡Ayúdame a modificar mi analizador léxico escrito en C!

¡Ayúdame a modificar mi analizador léxico escrito en C!

#includelt; stdio.hgt;

#includelt; string.hgt;

void Retract(FILE *fp, char ch)

{/* Regresar cursor una posición y dejar ch vacío**

fseek( fp, -1, 1

ch = ' ';

int Isletter(char ch)

{

if(chlt;='z'amp;amp;chgt;='a'||chlt; ='Z'amp;amp;chgt;='A') gt;='A') /* ------ Agregue el signo igual aquí*/

return

p>

return 0;

}

int IsDigit(char ch)

{/* Determina si es un número, si es así, devuelve 1, de lo contrario, devuelve 0 */

if(ch gt;='0'amp;amp;chlt;='9') devuelve 1 /* ------ Agregue el signo igual aquí*; /

return 0;

}

clave nula (char strToken[])

{

si (strcmp (strToken, "break")==0)

printf("(break, 1)/n");

else if(strcmp(strToken, "char"); )==0)

printf("(char, 2)\n");

else if(strcmp(strToken, "continue")==0)

printf("(continuar, 3)/n");

else if(strcmp(strToken, "do")==0)

printf("( hacer, 4) \n");

else if(strcmp(strToken, "double")==0)

printf("(double, 5)\n")

else if(strcmp(strToken, "else")==0)

printf("(else, 6)/n"); else if(strcmp(strToken, "extern")==0)

printf("(extern, 7)/n"); else if(strcmp(strToken, " float ")==0)

printf("(float, 8)\n");

else if(strcmp(strToken, "for")==0)

printf("(for, 9)\n");

else if(strcmp( strToken, "int")==0)

printf( "(int, 10)\n");

else if(strcmp( strToken, "if")==0)

printf("(if, 11)/n ");

else if( strcmp(strToken, "long")==0)

printf("(long, 12)\n");

else if( strcmp(strToken, "short")==0)

printf("(short, 13)/n"); , "estático"

)==0)

printf("(static, 14)\n");

else if(strcmp(strToken, "switch")==0)

printf(" (cambiar, 15)/n");

else if(strcmp(strToken, "void")==0)

printf(" ( void, 16)/n");

else if(strcmp(strToken, "mientras")==0)

printf("(mientras, 17)/n")

else if(strcmp("main", strToken)==0)

printf("(main, 18)\n"); else if(strcmp(strToken, "printf")==0)

printf("(printf, 19)/n");

else printf("(identificar, 70) )/n");

}

void My(FILE *fp, char ch)

{

int i=1;

char strToken[120];

do{

i = 0; /*------ inicializado aquí */

ch =fgetc(fp);

if(Isletter(ch)||ch=='_')

{

//strToken[0]= ch; /*------ No puedes usarlo*

//ch=fgetc(fp);

while(Isletter(ch)||IsDigit(ch) )|ch=='_')

{

strToken[i]=ch

i ; fgetc( fp);

}

if (ch != EOF) /*------ Elimina los caracteres innecesarios y devuélvelos*/

Retract(fp, ch);

strToken[i] = 0; /*------ Agregue '\0' por cierto */

key(strToken) ; /*------ El identificador de impresión debe agregarse aquí*/<

}

else

{

/ /key(strToken); /*------No imprima aquí, encontrará datos no válidos*/

i=0

if(IsDigit( ch) )) /*------ ¿No es necesario hacer un bucle aquí para obtener los datos? */

printf("(dígito, 80)\n");

else if(ch=='lt;')

{

p>

ch=fgetc(fp);

if(ch=='=')

printf("(lt;=,31) \n ");

else if(ch=='gt;')

printf("(lt;gt;,32)\n");

else / * ------ Esto es después del juicio

Ejecutar, en lugar de ejecutar directamente */

{

Retract(fp, ch

printf("(lt;, 30)\n") ;

}

}

}

si no (ch=='gt;')

{

ch=fgetc(fp);

if(ch=='=')

printf("( gt;=, 34)\n ");

else /*------ ejecutar después del juicio en lugar de ejecutar directamente*/

{

Retract(fp, ch );

printf("(gt;, 33)\n");

}

}

}

else if(ch=='=')

printf("(=,35)\n");

else if(ch=='(' )

printf("(((gt;, 36)\n"));

else if(ch==')\n");

else if(ch==')\n");

printf("(( ),37)\n");

else if(ch==' *' )

{

ch=fgetc(fp);

if(ch=='*')

printf( "( **, 38)\n");

else /*------ Este es un juicio después de la ejecución, no directamente*/

{

Retraer(fp, ch);

printf("(*, 39)\n");

}

}

}

else if(ch==' ')

printf("( ,41)\n"

else if (ch=); ='-')

printf("(-,42)\n");

else if(ch=='?')

printf ("(?, 43)\n");

else if(ch==',')

printf("(,, 44)\n" ); /p>

else if(ch==';')

printf("(;,45)\n");

else if(ch ==' {')

printf("({, 46)\n");

else if(ch=='}')

printf(" (}, 47)\n");

}

}} while(ch!=EOF); ​​​​/*------ No leer casualmente Carácter */

}

void main()

{

char ch

ARCHIVO *fp1 ;

fp1=fopen("mi.txt", "r");

if(((fp1=fopen("mi.txt", "r"))= = NULL)

{

printf("error de apertura de archivo.\n");

((ch=fgetc(fp1))! =EOF)

putchar(ch);

fseek(fp1, 0, SEEK_SET /* Podría ser ----); -- ¿No debería al menos volver al encabezado del archivo? */

printf("\n");

ch = 0;

Mi(fp1, ch

fclose); (fp1);

}