Está en la página 1de 19

JLex y Cup

Manual de Instalacin
200512108 200512108
Fredy Josue Romero Musul Fredy Josue Romero Musul
USAC Facultad de Ingeniera USAC Facultad de Ingeniera
Organizacin de lenguajes y compiladores 1 Seccin C Organizacin de lenguajes y compiladores 1 Seccin C
Manual de Instalacion !"e# y Cup
$age %
u! es Jlex"

!le# es una &erramienta desarrollada en !a'a (ue usaremos para realizar


el analizador l)#ico de nuestro compilador*

&ttp++,,,*cs*princeton*edu+-appel+modern+ja'a+!"e#+
Manual de Instalacion !"e# y Cup
$age .
Re#uisitos minimos $ Ja%a

"o primero (ue de/emos instalar es el !01 2no /asta con el !3456 (ue es
el entorno necesario para compilar y ejecutar clases !a'a*

4l S01 para !%S4 2!a'a % Standard 4dition5 podr7s descargarse de la


p7gina ,e/ de Sun*

&ttp++ja'a*sun*com+j%se+1*8*9+do,nload*&tml


Manual de Instalacion !"e# y Cup
$age :
Instalando Jlex &1'

$ara empezar se de/e crear un directorio nue'o (lo nombraremos jdir) (ue est)
en tu C"ASS$A;< 2tam/i)n puedes usar un directorio (ue ya e#ista5*

Sino e#iste en el C"ASS$A;<6 se de/e agregar*

Crea un directorio llamado jdir+!"e# 2o jdir=!"e# en >indo,s56 y copia en el ?ic&ero


Main*ja'a (ue podr7s descargar de la p7gina ,e/ de !le#*

&ttp++,,,*cs*princeton*edu+-appel+modern+ja'a+!"e#+
Manual de Instalacion !"e# y Cup
$age @
Manual de Instalacion !"e# y Cup
$age 8
Instalando Jlex &2'

0entro de la carpe A!le#B6 se de/e compilar el ?ic&ero !a'a con el


siguiente comando
javac Main.java
Manual de Instalacion !"e# y Cup
$age C As (ueda el directorio A!le#B6 despu)s de la compilacin* As (ueda el directorio A!le#B6 despu)s de la compilacin*
Manual de Instalacion !"e# y Cup
$age D
Instalando Jlex &('

Se &a/r7n creado las clases !a'a (ue componen la distri/ucin de !le# *

A&ora ya podr7s usar el !le# mediante este comando


java Jlex.Main fichero.jlex java Jlex.Main fichero.jlex

donde fichero.jlex es el nom/re del ?ic&ero con la especi?icacin del
an7lisis sint7ctico para tu lenguaje*
Manual de Instalacion !"e# y Cup
$age 9
u! es Cup"

CU$ es la &erramienta (ue usaremos para generar el analizador


sint7ctico de nuestro lenguaje*
Manual de Instalacion !"e# y Cup
$age 1E
Instalando Cup &1'

0escarga el cdigo ?uente de CU$ desde su p7gina ,e/ a un directorio


de tu sistema (ue est) en el C"ASS$A;<*

A(u se usara la misma carperta AjdirB

0escomprime el pa(uete una 'ez lo &ayas descargado*


Manual de Instalacion !"e# y Cup
$age 11
)escomprimir
Manual de Instalacion !"e# y Cup
$age 1%
Instalando Cup &2'

A&ora compilaremos el cdigo ?uente de CU$*

$ara ello6 desde el directorio donde descargamos la distri/ucin6 ejecutaremos el


siguiente comando
javac java_cup/*.java java_cup/runtime/*.java

A&ora podr7s ejecutar CU$ mediante el siguiente comando


java java_cup.Main fichero.cup
donde fichero.cup es el ?ic&ero con la especi?icacin del analizador sint7ctico de
nuestro lenguaje*

Y ya est hecho!!
Manual de Instalacion !"e# y Cup
$age 1.
*+,-).
Jlex y Cup
Jlex y Cup
por primera %e/$
*na calculadora sencilla
Manual de Instalacion !"e# y Cup
$age 1:
*sando JLex y Cup $ Expresiones Aritmticas &1'

Crearemos un carpeta para nuestro proyecto 2en esta caso la


llamaremos A4!4M$"OB en la cual crearemos los arc&i'os .lex y .cup
Manual de Instalacion !"e# y Cup
$age 1@
*sando JLex y Cup $ Expresiones Aritmticas &1'
import ja'aFcup*runtime*Sym/olG
HH
Hcup
HH
IGI J ++34COKOC4 4" SIMLO"O $UK;O M COMA
return ne, Sym/ol2sym*S4MI5G N
IOI J System*out*print2ISIPKO 04 SUMA I5G++34COKOC4 4"
SIMLO"O MAS
return ne, Sym/ol2sym*$"US5G N
IQI J System*out*print2ISIPKO $O3 I5G++34COKOC4 4"
SIMLO"O $O3
return ne, Sym/ol2sym*;IM4S5G N
IRI J System*out*print2ISIPKO M4KOS I5G++34COKOC4 4"
SIMLO"O M4KOS
return ne, Sym/ol2sym*M4KOS5G N
I+I J System*out*print2ISIPKO 0ISI0I0O I5G++34COKOC4 4"
SIMLO"O 0ISI0I0O
return ne, Sym/ol2sym*0ISI5G N
I2I J return ne, Sym/ol2sym*"$A34K5G N ++34COKOC4 4"
$A34K;4SIS 04 A$43;U3A
I5I J return ne, Sym/ol2sym*3$A34K5G N++34COKOC4 4"
SIMLO"O $A34K;4SIS 04 CI4334
TER9UO J System*out*print2I numero I5G++34COKOC4 "OS
KUM43OS
return ne, Sym/ol2sym*KUML436 ne,
Integer2yyte#t2555G N
T =t=r=n=?U J +Q ignore ,&ite space* Q+ N
* J System*err*println2IIllegal c&aracter IOyyte#t255G N
import ja'aFcup*runtime*QG
action code J
+QCO0IPO 04 !ASAQ+
N
parser code J
pu/lic static 'oid main2String argsTU5 t&ro,s 4#ception J
ne, parser2ne, Myle#2System*in55*parse25G
N
N
terminal S4MI6 $"US6 ;IM4S6 "$A34K6 3$A34KG
terminal Integer KUML43G
non terminal e#prFlist6 e#prFpartG
non terminal Integer e#prG
precedence le?t $"USG
precedence le?t ;IM4SG
e#prFlist V e#prFlist e#prFpart W e#prFpartG
e#prFpart V e#pre J System*out*println2I V IOeOIGI5G N S4MIG
e#pr V KUML43n
J 34SU";VnG N
W e#prl $"US e#prr
J 34SU";Vne, Integer2l*intSalue25 O r*intSalue255G N
W e#prl ;IM4S e#prr
J 34SU";Vne, Integer2l*intSalue25 Q r*intSalue255G N
W "$A34K e#pre 3$A34K
J 34SU";VeG N
G
,rc0i%o 1analex23lex4 ,rc0i%o 1analex23lex4 ,rc0i%o 1parser2cup4 ,rc0i%o 1parser2cup4
Manual de Instalacion !"e# y Cup
$age 18
*sando JLex y Cup $ Expresiones Aritmticas &2'

4l import ja'aFcup*runtime*Sym/ol se utiliza para importar los sm/olos (ue se declarar7n


en CU$6 por tanto6 cuando compilemos este arc&i'o de/emos tener el arc&i'o de CU$ ya
creado tam/i)n* "os signos como punto y coma6 mas6 menos6 por6 di'idido6 par)ntesisGson
los signos (ue la gram7tica reconocer7G el System*out*print lo escri/imos para (uecuando
los encuentre nos muestre en la consola la pala/ra (ue tenemos escrita entrecomillas6
como en el caso de suma nos desplegar7 en pantalla ISIPKO 04 SUMAI6 y el nom/re con
el (ue lo guardar7 es con $"US6 (ue es para lo (ue se utiliza la instruccin return ne5
sym6ol&sym27L*+'8 es decir6 esta instruccin agrega a la ta/la de sm/olos el signo mas
con el nom/re de $"US6 en el caso de los nXmeros podemos o/ser'ar (ue tenemos la
siguiente instruccin return ne5 +ym6ol&sym2-*M9:R; ne5 Inte<er&yytext&'''8 (ue nos
permitir7 utilizar los nXmeros como te#to6 no solo como sm/olos6 por esto podemos utilizar
ciertos atri/utos (ue nos permitir7n manipularlos de cierta manera*

4l cdigo =>t>r>n>?@ A BC i<nore 50ite space2 CB D lo utilizamos para (ue ignore espacios en
/lanco6 cam/ios de lnea6 ta/ulaciones6 etc*

2 A +ystem2err2println&EIlle<al c0aracter$ EFyytext&''8 D este cdigo lo utilizamos en el caso


(ue no encuentre el car7cter (ue le decimos como cadena de entrada nos indi(ue (ue &ay
un error6 y pueda continuar con el an7lisis recuperando errores*
:l arc0i%o 1analex23lex4 :l arc0i%o 1analex23lex4
Manual de Instalacion !"e# y Cup
$age 1C
*sando JLex y Cup $ Expresiones Aritmticas &('

$rimero se importa la li/rera runtime de la carpeta de ja'aFcupG en esta


seccin podemos colocar las li/reras (ue necesitamos para poder
compilar cdigo de ja'aG ya (ue en action code6 podemos escri/ir cdigo
de ja'a (ue necesitemos utilizar en nuestra acciones de la gram7tica*
0onde se encuentran de?inidos los terminales6 podemos 'er (ue son los
(ue de?inimos como sm/olos en el arc&i'o de !le#6 solo el KXmero (ue
est7 declarado de tipo Integer para poder utilizarlo con los atri/utos de un
nXmero* 4n el caso (ue ?uera una cadena6 de/emos declararlo de tipo
String*

"os no terminales son los (ue utilizaremos en la gram7tica* M despu)s


podemos declarar la precedencia si es necesario*
:l arc0i%o 1parser2cup4 :l arc0i%o 1parser2cup4
Manual de Instalacion !"e# y Cup
$age 1D
*sando JLex y Cup $ Expresiones Aritmticas &G'

A&ora compilemos con los comandos


3a%a JLex2Main analex2lex
3a%a 3a%aHcup2Main parser2cup
Manual de Instalacion !"e# y Cup
$age 19
*sando JLex y Cup $ Expresiones Aritmticas &5'

Los arc0i%os <enerados se compilan con el comando


javac -d . parser.java sym.java analex.lex.java

$or medio de un arc&i'o de te#to tenemos (ue escri/ir lo siguiente


java Example.parser 0<D:\\operar.txt

M s en nuestro arc&i'o de entrada 0==operar*t#t tenemos lo siguiente


5+2*3
5+!+3

M la salida es

También podría gustarte