Cuando nosotros queremos programar, nuestro programa el cual cumplirá un objetivo previamente estudiado bajo algoritmos y aplicación de la Ingeniería en Sistemas, está sujeto a las instrucciones que el procesador tenga integradas.
El compilador es un programa que se encarga de leer un archivo de determinado lenguaje de programación y "traducirlo" al lenguaje máquina que es el conjunto de instrucciones (en el caso de las computadoras, el lenguaje binario) que la computadora soporte o "interpreta".
Al leerse nuestro código fuente, el compilador comienza 3 procesos de análisis:
- Léxico
- Sintácico
- Semántico
- Análisis Léxico. Supongamos que mi sistema o programa es para automatizar la ventilación de una habitación; algo sencillo. Las acciones del ducto de ventilación son: abrir y cerrar. No se puede decir sólo abrir o cerrar ya que la ventilación (en éste caso) incluye un aire acondicionado (dejémoslo en ventilador) que debe encenderse o apagarse inependientemente de si nuestra ventilación está abierta o cerrada. Nuestras "palabras reservadas", que son únicamente las palabras que entiende nuestro compilador serán: abrir, cerrar, encender, apagar, ventilador y ventilación. El análisis léxico buscará entonces que esas palabras estén dentro de nuestro "código fuente". Si queremos crear una estructura para el código fuente, como en HTML o cualquier lenguaje, el programa debe determinar si la estructura se cumple. En caso contrario, no compilará.
- Análisis Semántico. Tenemos entonces dos variables a resaltar: una acción y un accionado. El accionado es la parte de la acción sobre la que ésta se encuentra realizando sus operaciones; es el que realiza la operación por así llamarlo. Viendolo desde éste punto, nos encontramos que las acciones son: encender, apagar, abrir, cerrar. Y los accionados serán: ventilador y ventilación. Nuestro análisis semántico deberá determinar si se cumple la condición Acción - Accionado, en caso contrario, el programa no compilará.
- Análisis Sintáctico. Aún cuando la lógica de Acción - Accionado haya sido satisfactoria, no hay como la lógica de lo que se puede y lo que no. Éste análisis revisa que las palabras cumplan con una lógica de si se puede o no. Un ventilador puede encenderse y apagarse pero no abrirse ni cerrarse. Las ventilaciones no pueden apagarse ni prenderse, sólo abrirse y cerrarse. Simplemente, buscamos que haya ésta lógica dentro del programa.
public void extraerPalabras(String archivo){ //Método de extracción de palabrasÉste código sirve para extraer las palabras reservadas de un archivo de texto como nuestro código fuente y guardar cada palabra en un Vector. El Vector actuará como un arreglo, pero de tamaño indefinido excepto por la cantidad de elementos que se introduzcan en él. Para mandar llamar el código fuente el programa se ejecuta en la línea de comandos como java Compilador Sistema.txt o según los nombres que se hayan utilizado:
try{
BufferedReader bfr=new BufferedReader(new FileReader(archivo));
String linea=bfr.readLine();
while(linea!=null){
StringTokenizer cadena=new StringTokenizer(linea);
while(cadena.hasMoreTokens()){
tokens.add(cadena.nextToken());
}
linea=bfr.readLine();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args) throws IOException{Que desde luego es ejecutado por nuestra clase principal. El procedimiento del análisis requiere de comparar las palabras reservadas o alfabeto elemento por elemento:
if(args.length!=0){
new Compilador().extraePalabras(args[0]);
} else{
System.out.println("Uso: Java Compilador [nombre_archivo]");
System.exit(0);
}
}
for (int i = 0; i < j =" 0;" encontrado="true;" encontrado="=" encontrado="false;">0){Con lo cual lograrán que su análisis Léxico sea exitoso.
System.out.println("Errores: "+error);
System.exit(0);
} else{
System.out.println("Analisis lexico exitoso.");
Por el momento, les dejo éso. Esperen pronto el análisis semántico y el sintáctico.
PD. No copien y peguen éste código como está, así no servirá. Sólo tiene propósitos de análisis.