Anda di halaman 1dari 17

UNIVERSIDAD NACIONAL DE TRUJILLO

Diseo e Implementacin de un Analizador Lxico - Sintctico


Valdivieso Castillo, Claudia Zrate Florin, Carlos

22/12/2011

DESCRIPCIN DEL LENGUAJE:


Descripcin Informal del Lenguaje:
1. Sobre el Lexema: NUMERO: Tipo de dato formado por dgitos del 0-9 que puede incluir el carcter . para que indica la parte flotante este tipo de datos incluye tipos numricos como Integer, float, long, shortint, double, etc. CADENA: Tipo de dato formado por caracteres alfanumricos. No obstante se excluyen las tildes de los caracteres. Este tipo de dato Word se comienza y finaliza con comillas simples . IDENT: conjunto de caracteres alfanumricos que representa una porcin de memoria. LIB: Define el nombre de la librera y va despus de la palabra reservada IMPORT. COMMENT: Conjunto de caracteres alfanumricos que comienzan con la cadena '#' que no representan ningn valor en el cdigo ms que el servir de anotacin.

SIMBOLOS y SIGNOS: =: asigna un valor numrico a una variable definida. ;: Indica el final de una sentencia. (, [: Caracteres que representa el inicio de un bloque de cdigo. ), ]: Caracteres que representa el final de un bloque de cdigo. +: carcter especial que representa la operacin aritmtica de la suma de 2 valores numricos que pueden ser reales o enteros. *: carcter especial que representa la operacin aritmtica de la multiplicacin de 2 valores numricos. -: carcter especial que representa la operacin aritmtica de la resta de 2 valores numricos que pueden ser reales o enteros si este valor se encuentra despus de un asignado representa que el valor numrico consecuente es negativo.

/: Carcter especial que representa la operacin aritmtica de la divisin de 2 valores numricos. <: Carcter que represente que el valor numrico antecedente es menor que el valor numrico consecuente. >: Carcter que represente que el valor numrico antecedente es mayor que el valor numrico consecuente. MENIG: Cadena de caracteres que representan que el valor numrico antecedente es de menor o igual que el valor numrico consecuente. MAYIG: Carcter que represente que el valor numrico antecedente es de mayor o igual que el valor numrico consecuente. AND: Cadena formada por 2 caracteres que representan la conjuncin de 2 proposiciones. OR: Cadena formada por 2 caracteres que representan la disyuncin de 2 proposiciones. IGUAL: Carcter que represente que el valor numrico antecedente es igual que el valor numrico consecuente.

TIPOS DE DATOS NUM: Tipado para los datos NUMERO. WORD: Tipado para los datos CADENA.

PALABRAS RESERVADAS RD: Palabra reservada que corresponde al flujo de entrada estndar. En el caso, el flujo de entrada representa al teclado. WR: Palabra reservada que representa el flujo de salida estndar. GLOBAL: Palabra reservada para denominar a una variable como global. IMPORT: Palabra reservada para incluir una librera.

PALABRAS RESERVADAS PARA ESTRUCTURAS DE CONTROL IF: Palabra reservada que indica una sentencia de carcter condicional Sientonces hacer... ENDIF: Indica el fin del bloque de la estructura de control IF

ELSE: Palabra reservada que indica una sentencia que se ejecuta al no cumplir la condicin de la sentencia Si noentonces. WHILE: Palabra reservada que representa un bucle que se ejecutar una cantidad determinada de veces. ENDWHILE: Indica el fin del bloque de la estructura de control WHILE FOR: Palabra reservada para ejecutar un bucle mientras que se cumpla una condicin dada. ENDFOR:Indica el fin del bloque de la estructura de control FOR SELECTCASE: Palabra reservada que permite seleccionar ejecutar una sentencia o serie de sentencias segn el parmetro. CASE: Palabra reservada que representa la opcin a ejecutar segn el parmetro de entrada de SWITCH. DEFAULT: Palabra reservada que representa una opcin por defecto que ejecuta las sentencias definidas dentro de esta. ENDSELECTCASE:Indica el fin del bloque de la estructura de control SELECTCASE FUNCTION: Palabra reservada que indica que una funcin va a ser definida. ENDFUNCTION: Palabra reservada que indica el fin de una funcin.

2. Sobre la Sintaxis: Resumen de la Sintaxis: Esta sintaxis se inicia con el no terminal Fuente que estructura el contenido del cdigo fuente, se permiten declaraciones, como asignaciones o simplemente identificadores, fuera de las funciones o funcin principal MAIN como globales, es decir que se utilizarn en ms de una funcin , no se permiten estructuras de datos. Fuente: El cdigo fuente est estructurado por una Cabecera que debe estar estrictamente incluida, luego se define "Globalgramatica" que puede o no estar presente, a continuacin se define Funcion, que puede o no estar presente y por ltimo la funcin principal MAIN, en la que se ejecutan las sentencias y llamadas. Cabecera: Es la primera parte del cdigo fuente y representa la inclusin de libreras, est formada por 2 partes, la primera la palabra reservada import y a continuacin el nombre de la librera con su extensin libreria.lib.

Globalgramatica: Es la segunda parte del cdigo fuente, este elemento es opcional, y es la declaracin/asignacin de variables fuera de las funciones, comienza con la palabra reservada "GLOBAL" y termina con un punto y coma (;).

Funcion: Es la tercera parte del cdigo fuente, este elemento puede como no estar presente en el cdigo fuente, comienza con la palabra reservada "FUNCTION", est definida por un identificador y a continuacin la entrada de parmetros, el contenido de la funcin termina con ENDFUNCTION. El contenido son sentencias definidas en la gramtica.

Principal: Es la parte fundamental del cdigo fuente y su presencia es de carcter estricto, su definicin comienza con la palabra reservada FUNCTION. Esta funcin principal tiene un nico identificador (MAIN), a continuacin se describe los parmetros de entrada que se encuentran entre parntesis. El contenido de la funcin principal se encuentra delimitado por la palabra reservada ENDFUNCTION, ste es una secuencia de sentencias definidas en la gramtica.

Listasentencia: Representa las acciones de una funcin, incluye tambin las sentecias return y break definidas por Returngramatica y Breakgramatica. Returngramatica: Define la gramtica de un retorno de valores, comienza con la palabra reservada "return" (RET), luego el factor que se va a devolver y por ltimo el punto y coma.

Breakgramatica: Define la gramtica de ruptura o corte de una funcin, comienza con la palabra reservada "break" (BREAK) seguida del punto y coma. Sentencia: Representa las acciones de la funcin y slo se permite una sentencia por lnea. Los bloques que representan bucles como el for, while y las sentencias condicionales if y selectcase incluyen sentencias definidas en la gramtica. Las sentencias incluidas son COMMENT, Ifgramatica, Forgramatica, Whilegramatica, Selectcasegramatica, Asignacion, ID PI Parametroentrada PD, Escribir, Leer y Declaracion, sern descritas a continuacin. o Declaracion: Es la declaracin de una variable y su definicin comienza con el tipado y a continuacin un identificador que puede o no estar acompaado de una asignacin. Se puede declarar varios identificadores de un mismo tipo separado por comas, si estos no presentan asignaciones en la misma sentencia. o COMMENT: Representa un comentario.

Ifgramatica: Sentencia condicional, comienza con la palabra if seguida por su condicin lgica encerrada entre parntesis. Las instrucciones que ejecuta al cumplirse la condicin estn limitadas por ENDIF, seguida o no de la sentencia Elsegramatica.

Elsegramatica: Esta sentencia es parte de Ifgramatica y puede ser vaca o incluir sentencias para ejecutar.

Forgramatica: Una sentencia que representa un bucle, se identifica por la palabra for y a continuacin parmetros encerrados entre parntesis. Los parmetros son una asignacin, una condicin y una suma o resta. Sus sentencias a ejecutar estn limitadas al "endif" (ENDIF).

Whilegramatica: Una sentencia que representa un bucle condicional identificado con la palabra while seguida de su condicin encerrada entre parnesis. Sus sentencias a ejecutar estan limitadas por el "endwhile" (ENDWHILE).

Selectcasegramatica: Sentencia que ejecuta sentencias segn el caso. Se identifica por la palabra selectcase acompaada por un parmetro encerrado entre parntesis.

o o

Listacase: Contiene la lista de casos (Casegramatica). Casegramatica: Se identifica con la palabra case seguida por un factor que representa el caso, a continuacin : y la Listasentencia o Sentencia a ejecutar segn el caso. Sus sentencias a ejecutar finalizan con break;.

Defaultcase: Se identifica con la palabra default seguida por : y la Listasentencia o Sentencia a ejecutar. Sus sentencias a ejecutar pueden estar o no encerradas entre llaves y finaliza con break;.

Asignacion: Comienza con un identificador seguida del token de asignacin = y una expresin.

Llamada a una funcin (ID '(' Parametroentrada ')'): Sentencia que hace llamado a una funcin definida por un identificador. En esta llamada se utiliza Parametroentrada que est encerrado entre parntesis.

Escribir: Sentencia que define un mensaje en pantalla, identificado con la palabra print seguida de un factor, una asignacin o una cadena.

Leer: Sentencia que define una captura de datos que sern almacenados en un identificador. Se caracteriza por la palabra input seguida por el identificador encerrado entre parntesis.

Retorno (RET Factor ;): Representa el retorno de datos.

Parametros: Este representa un parmetro o una secuencia de parmetros. Parametro: Este representa la declaracin de un parmetro que est formado por el tipado y un identificador. Parametroentrada: Representado por un factor, es la entrada que corresponde al parmetro de la llamada de una funcin. Condicin: Puede ser lgica, AND u OR. Condicionlogica: Compara expresiones segn sea MAYOR, MENOR, MAYIG, MENIG, IGUAL, DIF. CondicionAND: Une dos Condicionlogica a travs de un AND. CondicionOR: Une dos Condicionlogica a travs de un OR. Expresion: Representa una expresin matemtica, que puede ser una suma, una resta o un Termino. Termino: Representa una expresin matemtica, que puede ser una multiplicacin, una divisin o un Factor. Factor: Es un terminal, puede ser NUMERO, CaDENA o ID. Tipo: Representa los tipos NUM Y WORD.

Descripcin Formal del Lenguaje:


1. Sobre el Lexema: Lexema NUMERO CADENA IDENT NUM WORD SUMA RESTA Significado
{digito}+ {digito}+"."{digito}+ ""({letra}|{digito})+"" "'"{letra}"'" {letra}({letra}|{digito})* num word

+ -

MULT DIV MENOR MAYOR MENIG MAYIG AND OR IGUAL IF ELSE ENDIF WHILE ENDWHILE FOR ENDFOR SELECTCASE CASE DEFAULT ENDSELECTCASE RD WR ASIG PC PD CD PI CI COMMENT IMPORT LIB GLOBAL FUNCTION ENDFUNCTION MAIN RET BREAK DIF COMA DP

* / < >
<= >= && || ==

if else endif while endwhile for endfor selectcase case default endselectcase input print = ; ) ] ( [ "#"({letra}|{digito})* import {letra}+.lib global function endfunction "main" "return" "break" "!=" , :

2. Sobre la Sintaxis: Fuente ::= Cabecera Funcion Principal {: :} | Cabecera Globalgramatica Funcion Principal {: :} | Cabecera Principal {: :} ; Globalgramatica ::= GLOBAL:g Declaracion PC:pc {: :} ; Cabecera ::= IMPORT:i LIB:l PC:pc Cabecera {: :} | IMPORT:i LIB:l PC:pc{: :} ; Funcion ::= FUNCTION:function ID:id PI:pi Parametros PD:pd DP:dp Listasentencia ENDFUNCTION:endfunction {: :} | FUNCTION:function ID:id PI:pi Parametros PD:pd DP:dp Listasentencia RET:ret Factor PC:pc ENDFUNCTION:endfunction {: :} ; Principal ::= FUNCTION:function MAIN:main PI:pi Parametros PD:pd DP:dp Listasentencia RET:ret Factor PC:pc ENDFUNCTION:endfunction {: :} | FUNCTION:function MAIN:main PI:pi Parametros PD:pd DP:dp Listasentencia ENDFUNCTION:endfunction {: :} ; Listasentencia ::= Sentencia {: :} | Listasentencia Sentencia {: :} | Returngramatica {: :} | Breakgramatica {: :} ; Sentencia ::= COMMENT:comment {: :} | Ifgramatica {: :} | Forgramatica {: :} | Whilegramatica {: :} | Selectcasegramatica {: :} | Asignacion PC:pc {: :} | ID:id PI:pi Parametroentrada PD:pd PC:pc {: :} | Escribir PC:pc {: :} | Leer PC:pc {: :} | Declaracion PC:pc {: :} ; Returngramatica ::= RET:ret Factor PC:pc {: :} ; Breakgramatica ::= BREAK:breakg PC:pc {: :} ; Declaracion ::= Tipo Identificadores {: :} | Tipo Asignacion {: :}

; Identificadores ::= ID:id {: :} | Identificadores COMA:coma ID:id {: :} ; Parametros ::= /* vacio */ | Parametro {: :} ; Parametro ::= Tipo ID:id {: :} | Parametro COMA:coma Tipo ID:id {: :} ; Parametroentrada ::= /* vacio */ | Factor {: :} | Parametroentrada COMA:coma Factor {: :} ; Ifgramatica ::= IF:ifg PI:pi Condicion PD:pd DP:dp Listasentencia ENDIF:endif {: :} | IF:ifg PI:pi Condicion PD:pd DP:dp Listasentencia Elsegramatica ENDIF:endif {: :} ; Elsegramatica ::= ELSE:elseg DP:dp Listasentencia {: :} ; Whilegramatica ::= WHILE:whileg PI:pi Condicion PD:pd DP:dp Listasentencia ENDWHILE:endwhile {: :} ; Forgramatica ::= FOR:forg PI:pi ID:id ASIG:asig Factor PC:pc Condicion PC:pc1 ID:id1 SUMA:suma Factor PD:pd DP:dp Listasentencia ENDFOR:endfor {: :} | FOR:forg PI:pi ID:id ASIG:asig Factor PC:pc Condicion PC:pc1 ID:id1 RESTA:resta Factor PD:pd DP:dp Listasentencia ENDFOR:endfor {: :} ; Selectcasegramatica ::= SELECTCASE:selectcase PI:pi Factor PD:pd DP:dp Listacase ENDSELECTCASE:endselectcase {: :} | SELECTCASE:selectcase PI:pi Factor PD:pd DP:dp Listacase Defaultcase ENDSELECTCASE:endselectcase {: :} ; Listacase ::= Casegramatica {: :} | Listacase Casegramatica {: :} ; Casegramatica ::= CASE:caseg Factor DP:dp Listasentencia BREAK:breakg PC:pc {: :} ; Defaultcase ::= DEFAULT:defaultg DP:dp Listasentencia BREAK:breakg PC:pc {: :} ; Asignacion ::= ID:id ASIG:asig Expresion {: :} | ID:id ASIG:asig RESTA:resta NUMERO:numero {: :}

| ID:id CI:ci NUM:num CD:cd ASIG:asig CADENA:cadena {: :} ; Condicion ::= Condicionlogica {: :} | CondicionAND {: :} | CondicionOR {: :} ; Condicionlogica ::= Expresion MAYOR:mayor Expresion {: :} | Expresion MENOR:menor Expresion {: :} | Expresion MAYIG:mayig Expresion {: :} | Expresion MENIG:menig Expresion {: :} | Expresion IGUAL:igual Expresion {: :} | Expresion DIF:dif Expresion {: :} ; CondicionAND ::= Condicionlogica AND:and Condicionlogica {: :} ; CondicionOR ::= Condicionlogica OR:or Condicionlogica {: :} ; Escribir ::= WR:wr PI:pi Factor PD:pd {: :} | WR:wr PI:pi Asignacion PD:pd {: :} | WR:wr PI:pi CADENA:cadena PD:pd {: :} ; Leer ::= RD:rd PI:pi ID:id PD:pd {: :} ; Expresion ::= PI:pi Expresion PD:pd {: :} | Expresion SUMA:suma Termino {: :} | Expresion RESTA:resta Termino {: :} | Termino {: :} ; Termino ::= Termino MULT:mult Factor {: :} | Termino DIV:div Factor {: :} | Factor {: :} ; Factor ::= NUMERO:num {: :} | ID:id ; Tipo ::= NUM:num {: :} | WORD:word {: :} ;

Declaraciones Java implementadas:


1. En Lexer.flex:

package analizador; import java_cup.runtime.Symbol; 2. En Paser.cup: package analizador; import java_cup.runtime.*;

Cdigo Java implementado:


1. En Parser.cup: parser code{: public void syntax_error( Symbol s ) { interfaz.resultado = interfaz.resultado + "Error de Sintaxis -> Lnea: " + s.left + ", Columna: " + s.right + "\n"; } public void unrecovered_syntax_error( Symbol s ) throws java.lang.Exception { } :}

Autmata:

digito

letra

# + * / < > = & | !

; , ( )

[ ] : b c d

f f

i i m n p r s w w

EOF

CASOS DE PRUEBA:
Caso 1: import hola.lib; function main (): endfunction

Caso 2: import hola.lib; import iostream.lib; function dos(num i): print(''hola''); endfunction function main (): dos(j); endfunction

Caso 3: import hola.lib; import iostream.lib; function uno(num i): int b=0; if(b>i) print(''hola''); else print(b); endfunction function main (): word c[1]=''a''; selectcase(c): case ''a'': print('a'); break; case ''b'' print('b'); break; default: break; endselectcase funcion(j); endfunction

Caso 4 import hola.lib; function main (): #hola este es un comentario endfunction

Caso 5 import hola; import iostream.lib; function tres(num i){ print(''hola''); endfunction else function main (): tres(j); endfunction

Caso 6: import hola.lib import iostream.lib function cuatro(num i): &num b=0; if(b>i) print('hola''); else print(b); endfunction function main (): word c[1]=''a''; selectcase(c): case ''a'': print(''a''); case ''b'': print(''b''); break; default: break; endselectcase funcion(j); endfunction

Anda mungkin juga menyukai