ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

DESARROLLO DE ANALIZADOR SINTACTICO

JAZABAZ24Apuntes28 de Enero de 2021

5.305 Palabras (22 Páginas)317 Visitas

Página 1 de 22

[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

  1. 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;}

  1. 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

                }

  1. 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

...

Descargar como (para miembros actualizados) txt (28 Kb) pdf (1 Mb) docx (2 Mb)
Leer 21 páginas más »
Disponible sólo en Clubensayos.com