Análisis de predicción del principio del código fuente del lenguaje de compilación c

a ++) printf ("% c", A [a]); printf ("\ t \ t");






















origen = 'G'; g1.array [0] = '^'; 
























C [4] [0] = f1; C [4] [3] = f; 























printf ("Sugerencia: este programa solo puede analizar cadenas que terminan con '#' compuesto de 'i', '+', '*', '(', ')', \ n"); 
printf ( "Ingrese la cadena de caracteres a analizar:"); 
lea / * lea la cadena de análisis * /
{
scanf ("% c", & ch); 
if ((ch! = 'I') && (ch! = '+' ) && (ch! = '*') && (ch! = '(') && (ch! = ')') && (ch! = '#')) 
{
printf ("Hay caracteres ilegales en la cadena de entrada \ n ");
salir (1); 
} B [j] = ch; 
j ++; 
} while (ch! = '#');
l = j; / * Longitud de la cadena de análisis * / 
ch = B [0]; / * Actual Analizar caracteres * / 
A [top] = '#'; 
A [++ top] = 'E'; / * '#', 'E' en la pila * / 
printf ("  Paso \ t \ tAnalizar la pila \ t \ tCaracteres restantes \ t \ tLa producción utilizada \ n ");
do { 
x = A [top-]; / * x es el carácter superior actual de la pila * / 
printf ("% d ", k ++); 
printf (" \ t \ t "); 
for (j = 0; j <= 5; j ++) / * juzga si es un terminador * /
if (x == v1 [j]) 

flag = 1; 
break;} 
if (flag == 1) / * if es un terminador * / 

if (x == '#') 

finish = 1; / * Etiqueta final * / 
printf ("acc! \ N"); / * ¿Aceptar? * / 
Getchar (); 
getchar (); 
exit (1); 
 } / * if * /
if (x == ch) 

print () ; 
print1 (); 
printf ("% c coincide con \ n", ch); 
 ch = B [++ b]; / * Siguiente carácter de entrada * / 
flag = 0; / * Recovery flag * /} / * if * / 
else / * Manejo de errores * /  
{print (); print1 (); 
 printf ("% c error \ n", ch); / * Terminador de error de salida * / 
exit (1);} / * else * /  } / * if * / else / * procesamiento no terminal * / {




for (j = 0; j <= 4; j ++) 
if (x == v2 [j]) 

m = j; / * número de línea * / 
break; 
 } 
 for (j = 0; j <= 5; j ++) 
if (ch == v1 [j])
{n = j; / * número de columna * / break; 

 cha = C [m] [n]; 
 if (cha.origin! = 'N') / * juzga si es Vacío * / 
 {print ();
 print1 (); 
 printf ("% c->", cha.origin); / * producción de salida * / 


for (j = 0; j <cha.length; j ++) 
 printf (" % c ", cha.array [j]);
printf (" \ n ");
for (j = (cha.length-1); j> = 0; j-) / * Invierte la producción en la pila * / 
A [++ top] = cha.array [j];
if (A [top] == '^') / * Si está vacío, no será
empujado a la pila * /  top--; 
} / * if * / 
else / * Procesamiento * / {print (); 
print1 (); 
printf ("% c error \ n", x); / * Error de salida no terminal * /  exit (1);  } / * else * /  } / * else * / 





 } while (terminar == 0); }/*principal*/


Publicado 36 artículos originales · 19 alabanzas · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/GJ_007/article/details/79587673
Recomendado
Clasificación