BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar. JLEX y JC ! Breve "escripci#n "el las $erramientas para generar el parser o anali%a"or sint&ctico. '"o (bligatorio )amos a ver la letra, el entorno "e trabajo, y un ejemplo "e entra"a y sali"a.
BNF
(BackusNaur Form)
Notaci#n formal para "efinir la sinta*is "e un lenguaje + sa"a por la mayor,a "e los lenguajes "e programaci#n ../ 0 12 34 se "efine como or repetici#n opcional + -etas,mbolos.
Ejemplo BNF
7ram&tica para representar n8meros con "ecimales numero entPos digito ::= entPos | entPos '.' entPos ::= digito | digito entPos ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
E-BNF
(Extended BNF)
9e agrega. : ; = (pcional < a n veces > a n veces
digito ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
JLEX y J !P
JLEX
"enerador de anali#adores lexico$r%&icos para Ja'a( !sa expresiones re$ulares para reconocer los terminales del len$uaje) por ejemplo* pala+ras cla'es) identi&icadores) n,meros) strin$s) etc( -e entre$a .ec.o en el arc.i'o* Principal(ja'a
JCUP
"enerador de anali#adores sint%cticos (parsers) para Ja'a( /anual de J !P ('ers0n 1(21j)
Terminales JLE X Gramtica archivo: Sintactico.si n JCU P Principal.jav a java c Principal.class parser.java sym.java otros !.class
"rchivo #e entra#a
"rchivo #e sali#a
Si reconoce$ #ev%elve & error$ e imprime las estr%ct%ras reconoci#as. Sino$ imprime: 'Error sintactico( #on#e se tranc).
-cripts ,tiles
seteos.bat
configura el !?@A y el CL?99!?@A, $ay que personali%arlo para ca"a !C, y ejecutarlo antes "e los otros scripts
comparar.bat
import java_cup.runtime.*; import java.io.*; terminal non terminal D ! D"! D#! D$! D%;D&! D'! D(! D)! D*! P+,-.; numero! enteroPos! digito;
digito enteroPos;
+ Es "ecir reconoce "e i%quier"a a "erec$a, primero las $ojas y luego el no"o pa"re.
5+li$atorio
El tra+ajo consiste en escri+ir la $ram%tica para J !P 4ue $enere el anali#ador sint%ctico (parser)( 6 este recono#ca pro$ramas (o c0di$o &uentes) del len$uaje especi&icado en la E-BNF presentada en la letra del o+li$atorio( 7dem%s de+e imprimir determinados textos a medida 4ue se 'an reconociendo ciertas estructuras(
5+li$atorio
El lenguaje presenta"o en la letra es pareci"o a C, pero mo"ifica"o y m&s sencillo. Ca"a tira Do c#"igo fuenteF "el lenguaje, es una secuencia "e "eclaraciones "e variables y funciones. G a su ve% Ca"a funci#n tiene un bloque con "eclaraciones "e variables locales Dal bloqueF, y una secuencia "e sentencias.
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !
int cuadrado(int l) return l*l !" int lado" main() read(lado)" #rite(cuadrado(lado)) !