Documentos de Académico
Documentos de Profesional
Documentos de Cultura
a 27/11/2020
INGENIERIA EN SISTEMAS
COMPUTACIONALES
Analizador Léxico
ANALISIS LÉXICO
Palabras reservadas
Identificador Identificador
Variable Variable
si si
Imprime imprime
Entero 0,1,2,3,…,9
SUMARar +
Restar -
Multiplicar *
Dividir /
Operador <,>,=,<=,>=,==
Matehuala S.L.P. a 27/11/2020
Expresiones regulares
Exprecion regular descricion
!= sirve para diferencia los datos
\B No hay limite de palabras
\d Un digito
\D No es un digito
\n Salto de línea
\r Carácter de retorno
\t tabulador
*p!= Espacio en blanco
*p== Palabra reservada
+== identificador
%s expresión
Autómatas
Matehuala S.L.P. a 27/11/2020
Autómatas.
Palabras "si","entonces","sino","entero","decimal","logico",
reservadas "texto","char","mientras","haga","repita","hasta","
var","como","verdadero","falso","declare","inicie",
"termine","lea","imprima","rompa","nop"
Identificador Identificador
Variable Variable
si si
Imprime imprime
Entero 0,1,2,3,…,9
SUMARar +
Restar -
Multiplicar *
Dividir /
Operador <,>,=,<=,>=,==
Simbolos ‘ ‘, ‘,’, ’;’, ‘”’, ‘(‘, ‘)’, ‘+’, ‘-‘, ‘*’, ‘/’, ‘#’, ‘<’, ‘>’, ‘=’
Matehuala S.L.P. a 27/11/2020
TABLA DE SIMBOLOS
operador Significado
= Igual
[] Corchetes cuadrados
() Paréntesis
“” Comillas dobles
‘’ Comillas simples
+ suma
== Igual igual
!= Diferente o igual
* multiplicación
++ Mas mas
|| or
\ No identificado
{} corchetes
&& and
// Dialogo(comentario)
; Fin de la instrucción
< Menor que
> Mayor que
% token
# evaluador
PROGRAMACIÓN.
El lenguaje que se utilizó para este programa fue C++ ya que es más fácil de
realizar el programa ya que es un lenguaje muy versátil para la resolución de
estos problemas.
Manejo de Errores.
Los errores sintácticos por una expresión son dados aritmética o paréntesis no
equilibrados. El manejo de errores de sintaxis es el más complicado desde el
punto de vista de la creación de compiladores. Nos interesa que cuando el
compilador encuentre un error, se recupere y siga buscando errores. Por lo
tanto, el manejador de errores de un analizador sintáctico tiene como
objetivos:
Matehuala S.L.P. a 27/11/2020
ANALISIS SINTÁCTICO
Gramatica libre de contexto.
En sus reglas aparece a la izquierda un único símbolo no terminal, y a la derecha cualquier
combinación de símbolos terminales y no terminales, o la palabra vacía.
- Derivaciones: árboles que se pueden leer de diferentes formas.
• Derivación por la derecha: siempre se aplican las reglas de reescritura al símbolo no terminal
más a la derecha de la cadena de derivación.
• Derivación por la izquierda: siempre se aplican las reglas de reescritura al símbolo no terminal
más a la derecha de la cadena de derivación.
• Ejemplo:
1. S → AB
2. S → A
3. A → aAa
4. A → λ
5. B → Bb
6. B → b
Derivación por la izquierda: S ⇒ AB ⇒ aAaB ⇒ aaB ⇒ aaBb ⇒ aaBbb ⇒ aabbb Derivación por la
derecha: S ⇒ AB ⇒ ABb ⇒ ABbb ⇒ Abbb ⇒ aAabbb ⇒ aabbb
Matehuala S.L.P. a 27/11/2020
Teorema 2.2 Para cada gramática independiente del contexto G(V,Σ,Ax,R) existe un autómata de pila
M(S,Σ,Γ,T,i,F) tal que L(G) = L(M).
DEMOSTRACIÓN
Dada una gramática G(V,Σ, Ax,R) independiente del contexto, se crea un autómata de pila
M(S,Σ,Γ,T,i,F) de la manera siguiente:
• El conjunto de símbolos de entrada de M coincide con los símbolos terminales de G, mientras que
Γ=Σ∪V∪{#}
• El conjunto de estados de M será S={i,p,q,f}
• F={f}
• Se introduce la transición (i,λ,λ;p,#)
• Se introduce la transición (p,λ,λ;q,Ax), siendo Ax el axioma de la gramática.
• Para cada regla de reescritura N→w de la gramática se introduce una transición de la forma
(q,λ,N;q,w).
• Para cada símbolo terminal de G se introduce una transición (q,x,x;q,λ).
• Introducir la transición (q,λ,#;f,λ).
G={VT,VN,S,R}
• VT= Valores Terminales
• VN= Valores no Terminales
• S= inicio
• R= Reglas
Ejemplo: (5-8/2˄2+3π)
• VT= {(,),+,-,*,/,˄,ᴇ,.,=, num}
• VN={EXP, DIV, B,A,C AP,CP,}
• S= EXP
Reglas S=EXP
• EXP= AP EXP+A π CP CP | DIV
• DIV=DIV-B | DIV-B|num
• B=DIV/C|num
• C=B˄B
Matehuala S.L.P. a 27/11/2020
Tabla de símbolos:
operdaor significado
= Igual
[] Corchetes cuadrados
() Paréntesis
“” Comillas dobles
‘’ Comillas simples
+ suma
== Igual igual
!= Diferente o igual
* multiplicación
++ Mas mas
|| or
\ No identificado
{} corchetes
&& and
// Dialogo(comentario)
; Fin de la instrucción
< Menor que
> Mayor que
% token
# evaluador
main()
{
Matehuala S.L.P. a 27/11/2020
system("COLOR 0A");
unsigned char entrada[MAX];
char *p = entrada;
printf("Ingrese la primera linea del lenguaje: ");
fflush(stdin);
gets(entrada);
fflush(stdin);
clrscr();
system("COLOR 0B");
for(int i=0;i<MAX;i++){
palabra[i] = '\0';
}
Manejo de errores:
El manejo de errores se emplea en la impresión de los tokens o cadenas no
válidas para ser corregidas por el usuario y se implementa en las siguientes
instrucciones del código fuente.
Ciclo para la revision de los tokens identificar los validos y no
validos:
for(int i=0;i<MAX;i++){
palabra[i] = '\0';
}
void imprimirIdentificadoresNoValidos(){
puts(" ");
printf("********************************* MENSAJES
*********************************\n");
if(auxTNV == 0){
printf("\t\t 0 Errores, programa fuente exitoso...");
}else{
for(int i=0;i<auxTNV;i++)
{
printf("\t\tERROR: No es Valido el Token: %s
\n",tokensNoValidos[i]);
}
}
}
Matehuala S.L.P. a 27/11/2020
Resultados
Resultado: