You are on page 1of 9

ANALISIS LEXICO Y SINTACTICO DE UN NUEVO LENGUAJE DE PROGRAMACION

DOCUMENTACION Vamos a desarrollar de manera legible dos de las etapas de traduccin de nuestro nuevo Lenguaje (El Anlisis Lxico & Anlisis Sintctico), para ello tendremos que hacer uso de algunas reglas para nuestro lenguaje. A continuacin se presentara una funcin conocida la de factorial el cual crearemos en nuestro nuevo lenguaje junto con la directiva de bibliotecas.

CODIGO DEL NUEVO LENGUAJE @agregar -funio.h @agregar -cadena.h @agregar -estadio.h entero factorial$entero n$ inicia entero total<-1: para inicia $entero h<-1:h<<-20$ total<-total*h: h<-h+1: devuelve total: termina termina

ANALISIS LEXICO
La primera fase del anlisis es el Anlisis Lxico, El principal objetivo del analizador lxico es leer el flujo de caracteres de entrada y transformarlo en una secuencia de componentes lxicos que utilizara el analizador sintctico. Para empezar a crear el analizador lxico necesitamos de las categoras lxicas los cuales son: Palabras reservadas, identificadores, operadores, constantes, smbolos especiales. RECONOCIENDO A. PALABRAS RESERVADAS agregar: Es el equivalente al include. funio: Es el equivalente al conio. cadena: Es el equivalente al string. estadio: Es el equivalente al stdio.

entero: Es el equivalente al int. inicia: significa que inicializa las instrucciones. para: Es para inicializar subprogramas. devuelve: Es para retornar algo que hace las instrucciones. termina: significa que hasta ahy se finaliza las instrucciones o un ciclo.

B. IDENTIFICADORES
Total: Es el nombre de una variable. factorial: Es el nombre de la funcin. C. OPERADORES RELACIONALES <- : para asignacin <<- : menor igual ><- : mayor igual D. OPERADORES ARITMETICOS + : operador suma - : operador menos * : operador multiplicacin / : operador divisin \ : operador modulo E. SIMBOLOS ESPECIALES $ - Es para comparacin, expresin booleana, etc : - Es para finalizar instrucciones lineales @ - debe estar al inicio para reconocer bibliotecas para reconocer operaciones, funciones, etc.

Cdigo en programa Zinjai ANALISIS LEXICO

Resultado:

ANALISIS SINTACTICO
GRAMATICA BNF Si queremos que nuestro analizador reconozca el lenguaje necesitamos los lenguajes formales y la base es la gramtica BNF el cual se interesa por la forma como estn estructuradas las distintas oraciones basndose en diversas reglas, as como se ve en la siguiente lnea. entero total<-1: Tendramos que definir nuestro tipo de gramtica de la siguiente manera: <oracin>::=<tipovariable><palabra><asignacin><palabra|numero><delimi_final> Caso contrario a cualquier otro tipo de gramtica, nos habr de devolver un resultado errneo, antes de todo debemos definir toda nuestra gramtica (incluyendo para todos los tipos de variable en general y tambin para las condiciones de los bucles).

GRAMATICA BNF Gramtica para un numero <numero>::=<1|2|3|4|5|6|7|8|9|0><{1|2|3|4|5|6|7|8|9|0}><[,]><[numero]> Gramtica para los operadores de comparacin <operadoresComparacion>::=< <<- | ><- | == > Gramtica para los operadores de Asignacin <operadorAsignacion>::=< <- > Gramtica para los operadores Aritmticos <operadoresArit>::= <+ | - | * | / > Gramtica para termino de lnea <termina_linea>::= < : > Gramtica para delimitadores de expresion <delimita_expresion>::= < $ | @> Gramtica para los comentarios <comentarios>::= < { | } >

Gramtica para operador de direccion <operador_direc>::= < - > Gramtica para operador de direccin final <operador_direc_finali>::= < .h > Gramtica para una letra <letra>::=<a|b|c|..|x|y|z><{A|B|C|..|X|Y|Z}> Gramtica para las variables <variable>::=<{letra}> Gramtica para las palabras reservadas <palabraReservada>::=<agregar|funio|cadena|estadio|inicia|entero|para|devuelve|termi na> Gramtica para bibliotecas de cabecera <bibliotecas_cabecera>::=<delimita_expresion><palabraReservada><operador_direc> <palabraReservada><operador_direc_finali> Gramtica para la funcin factorial <funcin_factorial>::=<tipovariable><palabraReservada><delimita_expresion><palabr aReservada><letra><delimita_expresion> Gramtica para declaracin de inicializador <declaracin_inicializador>::=<tipovariable><variable><operadorAsignacion><numer o><termina_linea> Gramtica para el ciclo del para <ciclo>::=<delimita_expresion><palabraReservada><variable><operadorAsignacion>< numero><delimita_expresion><letra><operadorAsignacion><numero><delimita_expre sion> Gramtica para la operacion <operacion>::=<palabra><operadorAsignacion><palabra><operadoresArit><variable> <delimita_expresion> Gramtica para retornar un valor o algo <retorna>::=<palabraReservada><variable><delimita_expresion>

Gramtica para el delimitador de la funcion <expresiones_funcion_delimitador>::=< inicia | termina >

TABLA DE SIMBOLOS Una tabla de smbolos es una estructura de datos que usa el proceso de traduccin de un lenguaje de programacin, por un compilador o un intrprete, donde cada smbolo en el cdigo fuente de un programa est asociado con informacin tal como la ubicacin, el tipo de datos y el mbito de cada variable, constante o procedimiento.

Simbolo
@ .h $ <<<><== | : + * / \

Descripcion
reconocimiento de cabeceras y sus librerias reconocimiento de direcciones de las librerias reconocimiento de las librerias delimitador para argumento de funcin operador de asignacin simbolo menor igual simbolo mayor igual simbolo comparacin smbolo para comentario delimitador de lnea y expresiones de ciclo smbolo aritmtico suma smbolo aritmtico resta smbolo aritmtico multiplicacin smbolo aritmtico divisin smbolo aritmtico modulo

entero total<-1: segn su gramatica <declaracin_inicializador>::=<tipovariable><variable><operadorAsignacion><numer o><termina_linea> palabra reservada = entero nombre de variable = total tamao_variable=5 operador igualdad = <valor = 1 delimitador = : $entero h<-1:h<<-20$ segn su gramatica

<ciclo>::=<delimita_expresion><palabraReservada><variable><operadorAsignacion>< numero><delimita_expresion><variable><operadorAsignacion><numero><delimita_e xpresion> delimitador de expresin = $ palabra reservada = entero variable = h operador igualdad = <valor = 1 delimitador de expresin = : variable = h operador = <<valor = 20 delimitador de expresin = $ total<-total*h: segn su gramatica <operacion>::=<palabra><operadorAsignacion><palabra><operadoresArit><variable> <delimita_expresion> variable = total operador asignacion= <variable = total operador aritmtico = * variable = h delimitador = : h<-h+1: segn su gramatica <operacion>::=<palabra><operadorAsignacion><palabra><operadoresArit><variable> <delimita_expresion> variable = h operador asignacion= <variable = h operador aritmtico = + valor = 1 delimitador = : devuelve total: segn su gramatica <retorna>::=<palabraReservada><variable><delimita_expresion> Palabra reservada = devuelve

Variable = total delimitador = :

ARBOLES
Para hacer operaciones en nuestro lenguaje de programacin utilizaremos arboles binarios y pilas para que la computadora reconozca la operacion matemtica daremos un ejemplo de una operacin explicita: (a+b)*(c-d)

Prefija:*+ab-cd Postfija: ab+cd-*

Aqu un ejemplo de una rbol binario con una operacin implcita: a*b-d+c/e

Prefija:+/ab-*ced Postfija: ab/ce*d-+

Analisis de Lineas
int sintactico::Analiza() Utilizaremos el lxico.txt para determinar la posicin en que debe estar en la lnea para eso previamente tendremos el vector sintctico

Char vectorSintactico[]={, @, agregar, -, funio, .h, cadena, estadio, entero, factorial, $, n, inicia, total, <-, :, para, inicia, h, <<-, *, +, devuelve, termina, valor} El cual cada dato del vector su posicin se ara comparar con el vector correcto Char vectorCorrec[][]={1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 1, 2, 3, 6, 5, 0, 0, 0, 0, 0, 0, 1, 2, 3, 7, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 10, 8, 11, 10, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 13, 14, 24, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 8, 18, 14, 24, 15, 18, 19, 24, 10, 13, 14, 13, 20, 18, 0, 0, 0, 0, 0, 0, 18, 14, 18, 21, 24, 15, 0, 0, 0, 0, 0, 22, 13, 15, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }

En la comparacin debe salir correcto todo sin contar los ceros si falla en una fila votara el error en dicha fila error sintctico, saldr la fila en que esta el error y la posicin en la columna de la fila q se tiene el error.

You might also like