Вы находитесь на странице: 1из 9

CONTENIDO

NOMBRE DE LA PRÁCTICA ............................................................................................. 0

OBJETIVO ......................................................................................................................... 1

FUNDAMENTO TEÓRICO ................................................................................................ 1

MATERIAL Y EQUIPO:...................................................................................................... 3

DESARROLLO .................................................................................................................. 3

CÓDIGO: ....................................................................................................................... 4

RESULTADO ..................................................................................................................... 6

CONCLUSIÓN ................................................................................................................... 8

PRÁCTICA NO. 1

NOMBRE DE LA PRÁCTICA
Analizador de expresiones
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: SCD-1016


LABORATORIO
LENGUAJES Y AUTOMATAS II REVISIÓN: 1

OBJETIVO
Desarrollar software de base: traductor, intérprete o compilador

FUNDAMENTO TEÓRICO
Java: Java es un lenguaje de programación de propósito general, concurrente, orientado a
objetos, que fue diseñado específicamente para tener tan pocas dependencias de
implementación como fuera posible. Su intención es permitir que los desarrolladores de
aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo (conocido
en inglés como WORA, o "write once, run anywhere"), lo que quiere decir que el código que
es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java es,
a partir de 2012, uno de los lenguajes de programación más populares en uso,
particularmente para aplicaciones de cliente-servidor de web, con unos diez millones de
usuarios reportados.

Errores Sintácticos: un compilador tuviera que procesar sólo programas correctos, su


diseño e implantación se simplificarían mucho. Pero los programadores a menudo escriben
programas incorrectos, y un buen compilador debería ayudar al programador a identificar y
localizar errores. Es sorprendente que aunque los errores sean tan frecuentes, pocos
lenguajes han sido diseñados teniendo en cuenta el manejo de errores.

Esta civilización sería completamente distinta si los lenguajes hablados exigieran tanta
exactitud sintáctica como los lenguajes de programación. La mayoría de las
especificaciones de los lenguajes de programación no describen cómo debe responder un
compilador a los errores; la respuesta se deja al diseñador del compilador. Considerar
desde el principio el manejo de errores puede simplificar la estructura de un compilador y
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: SCD-1016


LABORATORIO
LENGUAJES Y AUTOMATAS II REVISIÓN: 1

mejorar su respuesta a los errores. Se sabe que los programas pueden contener errores de
muy diverso tipo. Por ejemplo, los errores pueden ser:

 Léxicos, como escribir mal un identificador. palabra clave u operador


 Sintácticos, como una expresión aritmética con paréntesis no equilibrados
 Semánticos. como un operador aplicado a un operando incompatible
 Lógicos. como una llamada infinitamente recursiva

A menudo, gran parte de la detección y recuperación de errores en un compilador se centra


en la fase de análisis sintáctico. Una razón es que muchos errores son de naturaleza
sintáctica o se manifiestan cuando la cadena de componentes léxicos que proviene del
analizador léxico desobedece las reglas gramaticales que definen al lenguaje de
programación.

Otra razón es la precisión de los métodos modernos de análisis sintácticos, que pueden
detectar la presencia de errores dentro de los programas de una forma muy eficiente. La
detección exacta de la presencia de errores semánticos y lógicos en el momento de la
compilación es mucho más dificil. En esta sección se presentan algunas técnicas básicas
para recuperarse de errores sintácticos; en este capítulo se estudia su implantación junto
con los métodos de análisis sintáctico.

El manejador de errores en un analizador sintáctico tiene objetivos fáciles de establecer:

Debe informar de la presencia de errores con claridad y exactitud.

Se debe recuperar de cada error con la suficiente rapidez como para detectar errores
posteriores.

No debe retrasar de manera significativa el procesamiento de programas correctos.


INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: SCD-1016


LABORATORIO
LENGUAJES Y AUTOMATAS II REVISIÓN: 1

La realización efectiva de estos objetivos plantea desafíos importantes. Afortunadamente.


los errores más comunes son simples y a menudo basta con un mecanismo sencillo de
manejo de errores. Sin embargo, en algunos casos un error pudo haber ocurrido mucho
antes de la posición en que se detectó su presencia, y puede ser muy difícil deducir la
naturaleza precisa del error. En los casos difíciles, el manejador de errores quizá tenga que
adivinar qué tenía en mente el programador cuando escribió el programa.

MATERIAL Y EQUIPO:
 Laptop
 IDE netbeans, jcreator o eclipse.
 JDK versión actualizada.
 Manual de prácticas de la materia

DESARROLLO
Se realizó un programa en lenguaje java sin interfaz gráfica, dicho programa se encarga de
verificar que una expresión matemática se encuentre escrita correctamente que no le falta
un paréntesis y que no le falte algún identificador.

Para realizar el código que lleva por nombre “ErrorExpresiones” se utilizó la clase principal
MAIN en la cual dentro de ella solo se hace el procedimiento de leer la expresión que se va
a analizar y esta cadena se manda al método llamado ANALIZAR en cual realiza como
primera función leer el tamaño de la expresión, posteriormente entra a un ciclo en el cual
ira verificando la expresión si a esta le hace falta cerrar un paréntesis incrementa un
contador o abrir un paréntesis igual incrementa un contador, posterior mente verifica que
no le haga falta algún identificador esto lo hace comparando si después es diferente de
alguno de los contadores, pero antes de ingresar al siguiente IF primero pasa por el de IF
de los contadores que si son iguales de un operador si es así incrementa otro contador,
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: SCD-1016


LABORATORIO
LENGUAJES Y AUTOMATAS II REVISIÓN: 1

pasa al siguiente IF en el cual se encarga de verificar si es diferente de los IF y pasa eso


de igual forma incrementa un contador, saliendo de los IF de verificar los datos ingresados,
pasa a comparar los IF de comparación con los contadores en primer caso compara que si
los contadores de los paréntesis son iguales y el de los operadores son diferentes esto debe
de mandar un mensaje de que la expresión es correcta, pasando al siguiente es comparar
si son iguales los contadores de los paréntesis manda un mensaje de error que hace falta
uno de los paréntesis, y así mismo compara los contadores de operadores manda de igual
forma un mensaje de error, pero si se cumplen los dos manda mensaje de estos dos.

CÓDIGO:
import java.util.*;
import java.io.*;

public class ErrorExpresion{

static int ap=0,cp=0,aux=0,aux2=0;


static String dm,sr,paren;
static boolean ban;
static String [] registro=new String[100];
static String [] operadores = new String[100];
public static void main(String arg[]){
//String aux="";
Scanner leer = new Scanner(System.in);

System.out.print("Ingrese la expresion: ");


String datos=leer.nextLine();
analizar(datos);

}
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: SCD-1016


LABORATORIO
LENGUAJES Y AUTOMATAS II REVISIÓN: 1

public static void analizar(String dato){


dm="";sr="";paren="";
int x=0,y=0;
int op=0,rp=0;
boolean b = false;
char valor;
String val;
int num = dato.length();
for(int r=0; r<num; r++){
valor=dato.charAt(r);
val = Character.toString(valor);

if(val.equals("(")){ap++;}
if(val.equals(")")){cp++;}

if(val.equals("+")||val.equals("-")||val.equals("*")||val.equals("/")){
y++;
}
if(valor!='('&& valor!=')'&& valor!='+'&& valor!='-' && valor!='*'&&
valor!='/'){
x++;
}

}
if(ap == cp && y !=x){
System.out.println("Expresion correcta");
}
if(y==x){
System.out.println("¡ERROR! Falta un identificador");
}

if(ap!=cp){
System.out.println("¡ERROR! Falta un parentesis");

}
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: SCD-1016


LABORATORIO
LENGUAJES Y AUTOMATAS II REVISIÓN: 1

RESULTADO
En esta imagen se puede comprobar que la expresión es ingresada correctamente

En esta se puede comprobar que se ingresó la expresión incorrecta pues manda un mensaje de
error que hace falta un paréntesis.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: SCD-1016


LABORATORIO
LENGUAJES Y AUTOMATAS II REVISIÓN: 1

Aquí se puede comprobar que la expresión es incorrecta pues falta un identificador.

Aquí es donde se muestra que la expresión es incorrecta pues le hace falta paréntesis e identificador
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: SCD-1016


LABORATORIO
LENGUAJES Y AUTOMATAS II REVISIÓN: 1

CONCLUSIÓN
Como se ve observa esta práctica es muy sencilla pues solo es verificar que la expresión
ingresada este completa si no es así marca un error y manda un diciendo que lo que le
hace falta algo, en este ejemplo se puede ver que si le hace falta un paréntesis o
identificador que es el caso de esta práctica que manda error si es que hace falta los dos o
uno de los dos.