DESARROLLO DE ANALIZADOR SINTACTICO
JAZABAZ24Apuntes28 de Enero de 2021
5.305 Palabras (22 Páginas)316 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";
generarLexer(ruta);
}
public static void generarLexer(String ruta) {
File archivo = new File (ruta);
JFlex.Main.generate(archivo);
}
}
OSCAR PEREZ
Una vez terminado corremos nuestra clase, y nos va a crear una clase java de analizador lexico, esa clase es la que utilizara java para analizar todas la cadenas que nosotros ingresemos
[pic 6]
TEORIA
Lenguajes Regulares. Los LR se describen mediante expresiones regulares y se reconocen mediante AFs. Lema de Pumping. Permite demostrar que no todos los lenguajes son regulares. Por ejemplo, la expresión {anbn, n >0 } no denota a un lenguaje regular.
Lenguajes Libres de Contexto. Los LLC se describen mediante las Gramáticas Libres de Contexto (GLC).
Todos los LR son LLC, pero no todos los LLC son LR.
Los LLC (que no sean LR) no pueden denotarse mediante expresiones regulares ni pueden ser reconocidos mediante AF.
Los LLC se utilizan para especificar la mayoría de los lenguajes de programación
Gramáticas Libres de Contexto (GLC). Sus producciones responden al modelo: A → α, donde A ∈ VN y α ∈ (VN ∪ VT)*
Notación BNF (Backus-Naur-Form). Esta noción se utiliza para representar la gramática libre de contexto de un lenguaje de programación.
Símbolos no terminales entre <> Sustitución de → por :==
Desde una perspectiva sintáctica un lenguaje es una colección de construcciones sintácticas bien formadas desde un alfabeto de entrada y correctamente combinadas entre sí de acuerdo a una colección de reglas sintácticas
Especificación de lenguajes libres de contexto Existen 3 diferentes maneras de definir formalmente un lenguaje de contexto libre. A lo largo de esta sección estudiaremos cada una de ellas en detalle y veremos cómo se puede pasar de cada una a las otras 2
...