DESARROLLO DE ANALIZADOR SINTACTICO
Enviado por JAZABAZ24 • 28 de Enero de 2021 • Apuntes • 5.305 Palabras (22 Páginas) • 287 Visitas
[pic 1] [pic 2]
UNIVERSIDAD MEXIQUENSE DEL BICENTENARIO
PLANTEL JIQUIPILCO
INGENIERIA EN SISTEMAS COMPUTACIONALES
PROGRAMACION DE SISTEMAS
DESARROLLO DE ANALIZADOR SINTACTICO
ALUMNO: OSCAR PEREZ FORTINO
JAZAEL BRAYAN LOPEZ SANCHEZ
DOCENTE: ING. DANIELA ROMERO SALINAS
GRUPO: 10SC151
INTRODUCCION
El analizador sintáctico tiene como objetivo encontrar las estructuras presentes en su entrada. Estas estructuras se pueden representar mediante el árbol de análisis sintáctico, que explica cómo se puede derivar la cadena de entrada en la gramática que especifica el lenguaje. Aunque en la práctica es habitual que el árbol de análisis no llegue a construirse, se trata de una abstracción que nos permite entender mejor todo el proceso.
Para construir la especificación sintáctica de los lenguajes de programación, se suelen emplear gramáticas incontextuales, generalmente restringidas para que el análisis se pueda realizar de manera eficiente. Para que sea posible construir el árbol de análisis, es necesario que la entrada no presente errores sintácticos. En caso de que los haya, el analizador debe informar de su presencia adecuadamente y, si es posible, intentar continuar el análisis.
En el código que se mostrara se van a Detectar los errores sintácticos y la recuperación de los mismos, así como Integrar la etapa del léxico dentro del desarrollo del compilador.
La práctica del análisis sintáctico mediante diagramas constituye un procedimiento arraigado en la didáctica de la gramática. No es de extrañar dado que éstos, por una parte, poseen un relativo carácter lúdico y, por otra, obligan a quien los elabora a pensar (debe decidir continuamente cuál es la aplicación más pertinente de la teoría lingüística que conoce). Los hay de muy diversos tipos: de casillas, de bandejas, en estema, arbóreos... Optar por uno u otro método depende, además de la formación de cada cual y de sus gustos personales, de la cantidad de información que se quiera y se pueda transmitir; como afirman Guillermo Rojo y Tomás Jiménez Juliá, “las representaciones (del análisis sintáctico) son adecuadas o no en la medida en que permiten representar lo que la teoría dice”
DOCUMENTACIÓN
Explicación del programa
- Creación de reglas lexicas
[pic 3]
OSCAR PEREZ
Este código incluye las reglas léxicas de nuestro analizador, aquí declaramos todo lo nuestro analizador puede o no puede analizar.
Importamos la paquetería tokens, que es la clase de numeración que incluirá todos los tokens de nuestro analizador léxico.
JAZAEL LOPEZ
También tenemos todas las declaraciones que vamos a ocupar como la clase lexer, los tokens, el lenguaje que es de la a a la z en minúsculas y en mayúsculas, los dígitos del 0 al 9.
Una vez declarados los tokens vamos a declarar las palabras reservadas que utilizaremos en nuestro código (if, while, for, else etc.) también declaramos los signos matemáticos y su regreso que sería su nombre.
Código:
package codigo;
import static codigo.Tokens.*;
%%
%class Lexer
%type Tokens
L=[a-zA-Z_]+
D=[0-9]+
espacio=[ ,\t,\r,\n]+
%{
public String lexeme;
%}
%%
int |
if |
else |
while {lexeme=yytext(); return Reservadas;}
{espacio} {/*Ignore*/}
"//".* {/*Ignore*/}
"=" {return Igual;}
"+" {return Suma;}
"-" {return Resta;}
"*" {return Multiplicacion;}
"/" {return Division;}
{L}({L}|{D})* {lexeme=yytext(); return Identificador;}
("(-"{D}+")")|{D}+ {lexeme=yytext(); return Numero;}
. {return ERROR;}
- Creación de tokens de numeración
[pic 4]
OSCAR PEREZ
Creamos un java Enum con el nombre Tokens, en esta incluiremos todas las palabras o return que utilizamos en la clase lexer.
JAZAEL LOPEZ
Una vez declarados todos los tokens, guardamos la clase y con eso esta lista la clase de enumeración de tokens
Código:
package codigo;
public enum Tokens {
Reservadas,
Igual,
Suma,
Resta,
Multiplicacion,
Division,
Identificador,
Numero,
ERROR
}
- Creación de la clase Java de analizador léxico
[pic 5]
OSCAR PEREZ
En una clase de java vamos a crear el analizador lexico.
En un string vamos a crear una ruta donde se encuentra nuestro primer archivo llamado flexer (donde creamos las reglas lexicas).
JAZAEL LOPEZ
Despues crearemos un metodo que sea publico, estatico y que sea vacio, lo llamamos generarLexer por que ese metodo nos permitira crear el analizador lexico.
Tambien utilizamos el file de java para importar la ruta que le pasamos de parametro, aquí utilizamos la clase Jflex importar el archivo de Jflex.
Codigo:
package codigo;
import java.io.File;
public class Principal {
public static void main (String [] args) {
String ruta = "C:/Users/oskar/OneDrive/Documentos/NetBeansProjects/analizadorLexico/src/codigo/Lexer.flex";
...