Lenguajes y autmatas II
Asignatura
Actividades de aprendizaje
Unidad 1. Anlisis semntico
1
ndice
Introduccin.3
Actividad 1...4
Actividad 2...6
Actividad 3..9
Actividad 4..10
Actividad 5..15
Actividad 6..17
Conclusin..19
Bibliografa.....20
2
Introduccin
3
ACTIVIDAD 1
Error semntico.
Identificadores no definidos.
4
Operadores y operandos no compatibles.
Se declar X antes de usarlo?
Se declar X pero no se usa?
La referencia a una posicin en un array est dentro de sus lmites?
Estrategias para la recuperacin de errores.
Modo pnico.
Nivel de frase.
Producciones de error.
Correccin global.
Conclusin.
Ejemplo:
A continuacin se muestra un fragmento de cdigo de un mtodo de la clase
Errores escrito en C++, para el tratamiento de errores sintcticos. En el caso que
se presenta cada vez que se encuentra un error el compilador se detiene, y
finaliza el proceso
5
Figura 1.2 Ejemplo de los errores semnticos que podemos encontrar
6
ACTIVIDAD 2
Operadores y expresiones
Una expresin es cualquier sentencia del programa que puede ser evaluada y
devuelve un valor.
Un operador es un carcter o una secuencia de caracteres. Definen las
operaciones que van a realizarse con los datos u operandos.
Lista de operadores segn su tipo:
Operadores aritmticos:
+ Suma
- Resta
* Producto
/ Divisin: entera para escalares, real para reales
% Mdulo: retorna el resto de una divisin entre enteros
-(unario) Cambio de signo
+(unario) No hace nada
Operadores de incremento y decremento:
++ Incremento en uno.
-- decremento en uno.
Estos operadores pueden ser prefijos o postfijos. Si son prefijos el operando se
incrementa (decremento) antes de ser evaluado en una expresin, si son postfijos
el operando se incrementa (decremento) despus de la evaluacin.
Operadores relacionales:
> Mayor
< Menor
>= Mayor o igual
<= Menor o igual
== Igual
!= Distinto
Operadores lgicos:
Operadores de bit:
& Producto binario de bits (AND).
| Suma binaria de bits (OR).
7
^ Suma binaria exclusiva de bits (XOR).
<< Desplazamiento hacia la izquierda del primer operando tantos bits como
indique el segundo operando.
<< Desplazamiento hacia la derecha del primer operando tantos bits como indique
el segundo operando.
~ (unario) Complemento a uno (cambia unos por ceros).
- (unario) Complemento a dos (cambio de signo).
Estos operadores tratan los operandos como palabras de tantos bits como tenga
su tipo, su tipo slo puede ser entero (char, short, int, long).
Operadores de asignacin:
= Asignacin de la expresin de la derecha al operando de la izquierda.
Si delante del operador de asignacin colocamos cualquiera de los siguientes
operadores asignaremos al lado izquierdo el resultado de aplicar el operador al
lado izquierdo como primer operando y el lado derecho como segundo operando:
+ - * / % << >> & ^ |
Operador de evaluacin:
Sirve para evaluar distintas expresiones seguidas, pero slo se queda con el
resultado de la ltima.
Ejemplo:
int i = (1, 2, 3); // i toma el valor 3
Operador de campo:
:: Visto en el punto de las variables, tambin se usa en las clases
Operadores de indireccin:
* Indireccin
& Direccin (referencia)
-> Puntero selector de miembro o campo
. Selector de miembro o campo
[] Subndice
->* Puntero selector de puntero a miembro
.* Selector de puntero a miembro
Operador condicional:
?: Expresin condicional
Este operador es equivalente a una expresin condicional, lo que hacemos es
evaluar el primer operando y si es cierto retornamos el segundo operando, en
caso contrario retornamos el tercer operando.
Ejemplo:
max = (a>b) ? a : b; // si a es mayor que b max vale a, sino max vale b
Operadores sizeof:
sizeof var Nos da el tamao de una variable
sizeof (tipo) Nos da el tamao de un tipo de datos
Estos operadores nos devuelven el tamao en bytes.
8
Ejemplo de expresiones:
- c=a+b
Una expresin es
cualquier sentencia - if(valor>mayor){
mayor=valor}
del programa que
puede ser evaluada - u=r*t+d(e-1)
y devuelve un valor.
EXPRESIONES Y OPERANDOS
Operadores aritmticos
Operadores relacionales
Operadores lgicos
Operadores de bit
Operadores de asignacin
Un operador es un
carcter o una
Operador de evaluacin
secuencia de
caracteres. Definen
Operador de campo
las operaciones que
van a realizarse con
Operadores de indireccin
los datos u operandos.
Operador condicional
Operadores sizeof
9
Las expresiones se evalan de acuerdo con la precedencia de los operadores.
Ante una secuencia de operadores de igual precedencia, la evaluacin se realiza
segn el orden de escritura, de izquierda a derecha. El orden de evaluacin puede
modificarse usando parntesis.
10
ACTIVIDAD 3
Un claro ejemplo es este programa en java que realiza una divisin si se puede
observar nos marca error si ponemos que una variable sea flotante y otra sea
entera como no los dice la actividad anteriormente.
11
ACTIVIDAD 4
12
En nuestro ejemplo, quedara:
#include <stdio.h>
#include <conio.h>
#include "analex.h"
#include "anasint.h"
extern int yylex(); /* Esta es la funcin que desarrolla el
anlisis lxico */
extern void yyerror(const char* s); /* Esta es la funcin de error
sintctico */
int nextToken; /* Token de preanlisis */
int yyparse()
{
nextToken = yylex();
//if( parseLista() != 0){ yyerror("Fichero INCORRECTO"); return 1;
}
if( nextToken != EOF){ yyerror("Fichero INCORRECTO"); return 1; }
return 0;
}
int Reconocer(int tk)
{
char msg[100];
if( tk != nextToken )
{
sprintf(msg,Encontrado %d; se esperaba %d \n, nextToken, tk);
yyerror(msg);
return 1;
}
nextToken = yylex();
return 0;
}
13
Figura 5 Cdigo fuente Analizador sintctico con estructura semntica
ACTIVIDAD 5
Analizador Sintctico
Sintaxis: El orden correcto de las palabras
Ejemplo:
byte b;
int v[3];
String s;//Error semntico
14
b = 4000; //out of range
s = 6000; //incompatible type's o "Type mismatch"
v[8]= 12; // out of range
15
ACTIVIDAD 6
Capturista de informacin:
Debe de tener en claro todo lo que tenga que utilizar para la realizacin del
analizador.
Programador
Debe ser capaz de programar con todo lo que capturista de informacin
analizo previamente. Para llegar a dicho resultado (El analizador).
16
Figura 7 ejemplo de los componentes de un analizador
Analista en sistemas:
Debe corroborar que el analizador funcione correctamente, haciendo las
pruebas e interacciones necesarias con el programa.
17
Conclusin:
18
Bibliografa
19