CENTRO DE INVESTIGACION Y ESTUDIOS AVANZADOS DEL IN S TITU TO POLITECNICO NACIONAL
DEPARTAMENTO DE IN G E N IE R IA E L E C ÍR IA SECCION DE COMPUTACION
" PRECOMPILADOR DE C++ A C ”
T E S I S
QUE PRESENTA EL INGENIERO L U IS RUBEN RUSILES ZAMORA PARA OBTENER EL GRADO DE MAESTRO EN C IE N C IAS EN LA ESPECIALIDAD DE IN G E N IE R IA ELECTRICA CON OPCION DE COMPUTACION
T RABAJO
DR.
BECARIO DE COSNEI
DIR IG ID O
POR:
JOSEF KOLAR SABOR
M g X lifc ,
D. F-
A 3 DE ABRIL DE 1Q39
a niis p a d r e s : A n gel
y M arth a
AGRADECIMIENTOS.
la g ra t it u d e es i
Q u ie r o e x t e r n a r por e l
por
Dr..
al
ser
s in o d a le s
de
In v e s t ig a c ió n
a g r a d e c id o ,
p a r te in t e g r a n t e
C o n s e jo
CCOSNETD
mi a d m ir a c ió n
en mi exam en.
S e c c ió n d e C o m p u ta c ió n ,
C e n tre
p ro fu n d a m e n te
Al
a q u í adem ás d e mi a g r a d e c im ie n t o ,
JOSEF KOLAR.
a c e p ta r
A la y
l a m&rríO1 r e du c o e r .
le
por
al
D e p to .
y
E s t u d io s
de In g e n ie r ía
haberm e
dado
N a c io n a l
de
A van zados, la
E lé c tr ic a ; le s
o p o r t u n id a d
e s to y de
ser
en e l l o s .
del
doy
S is te m a
la s
g r a c ia s ,p o r
a p o ya rm e
E d u c a c ió n
T e c n o ló g ic a
e c o n ó m ic a m e n te
p ara
I N D I C E :
FASES:
I.
FASE DE E S T U D IO .......................................
1
II.
FASE DE D IS E fJ O ..........................................
13
III.
FASE DE DESARROLLO.................................
47
V.
FASE DE IM rLE M E N TA C IO N .......................
82
V I.
CONCLUSIONES...............................................
83
APENDICES: A.
METODOLOGIA DE DESARROLLO ..................
84
B.
MODULOS DE D E S C R IP C IO N .........................
90
C.
MODULOS DE D E S C R IP C IO N .........................
D.
A N A L IS IS SINTACTICO
DE
C + + .......
i 1.8
E.
A N A L IS IS SIN TAC TIC O
DE
C+ + .......
125
F.
B IB LIO G R AFIA Y REFERENCIAS ................
139
95
P R E F A C I
En e l
p re s e n te
d e s a r r o llo
C++
del
es
a
c o m p a t ib le
p or
le n g u a je o b je t o s .
ccn
so b reca rg a
de
é l.
y en l a
a c titu d
pues
en lu g a r
s a lid a s ?
de
r e p re s e n ta ,
fa s e s
el
s e g u id a s
se
o r ig in ó
Labs.
de
en
el
es
a
C
de
y
c o m p ila r
C.
en e s t a
te s is
s o lo
se
y
de
1980
New J e r s e y .
en
gran d es
de S o f t w a r e " .
p r o g r a m a c ió n
e s tru c tu ra d a ;
e n tra d a s
o b je t o s
Y
y c u a le s
p reg u n ta :
m is
¿C u á l e s
hagan?.
C+ +
tu v ie r a
S is t e m a O p e r a t i v o UNI X:
y
a lr e d e d o r
d ad o un p ro g ra m a en C + + - . Que
C
f u n c io n e s
r e c o m e n d a b le
son m is
y ¿Q ué q u i e r o qu e e s o s
C++
de
In te g r a d o s
unas en o t r a s 7 ;
P r e c o m p i la d o r
p r o g r a m a c ió n le n g u a je
M u rra y H i1 1 ,
la
¿C u ál e s
t r a n s fo r m a n
del
p ara del
sob reca rga
" C ir c u it o s
e n fo q u e
c o r r e s p o n d ie n te .
del
gen era l
a o b je t o s
de
de p r e g u n t a r :
La meta i n i c i a l
h e r r a m ie n ta s
Su d is e ñ o
en AT&T B e l l
S is te m a P ro g ra m a d o q u e ,
t r a d u c ir
la s
s u p e r c o n ju n t o
c la s e s ,
o r ie n ta d a
y ¿Como s e
o b je to
p r o p o s ito un
c r e a c ió n
ca m b ia
se n m is o b j e t o s ?
c ó d ig o
d e s c r ib e n
M an eja
op erad ores.
La p r o g r a m a c ió n
E s ta
de Es
B ja r n e S t r o u s t r u p
p ro y e c to s
se
F r e-com pi L a d cr d& C + + a C.
un
o r ie n ta d a
e s c r ito
O
dos
a. C>f u e
la
p r o d u je r a
el
pasos
que u sa ra
H
d e s e r un el
in te r n o s : de
la s
YACC y' LEX.
i n c lu y e n :
La
d e s c r ip c ió n
g lo b a l
del
P r e c o m p i IcicLor
r u tin a s
de-
C+ +
A d ic io n a lm e n t e en e i en
fo r m a
in tr ín s ic ^ ,
in v e s t ig a c ió n .
C
y
el
desar r o l l o
DESARROLLO,
se
in c a p ié
c o n s is te n c ia
en
p re s e n te t r a b a jo
una
E s ta
DISEHO, h ace
a
de
a lg u n a s
de
la s
más im p o r t a n t e s .
m e t o d o lo g ía
m e t o d o lo g ía
a
c o n s ta
s e s u g ie r e , s e g u ir de
PRUEBA E IMPLEÍÍENTACI6N. el
u so d e
e s t á ndar e s
y m a n t e n ib i1 i dad a l
de
en 5
y e je m p lific a p ro y e c to s
fa s e s :-
En 1 a f a s e p r o q r am aci ón
S is t e m a en su e t a p a
de
ESTUDIO* de
DI SEfíO
p ara
fin a l.
dar
FA5ÌF: DE EST UDT O
I .
1. 1
F A S E
DE
!
E S T U D I O .
INTRODUCCION.
En
e s ta
o b je tiv o s del
fa s e
se
d e lim it ó
y a lc a n c e s d e l
u s u a r ic
que
s e r ía n
m aneras de h a c e r lo .
el
p ro y e c to .
problem a.
s a tis fe c h a s ,
Se e l i g i ó
e s p e c ific a n d o
S e d e te r m in a r o n l a s así
como
de
lo s
n e c e s id a d e s
la s
p o s ib le s
una de e s a s fo rm a s y s e j u s t i f i c ó
su
e l e c c i ón.
1 . 2 OBJETIVOS.
1 . 2 .1
P roveer
1 .2 .2
B o s q u e ja r l o s
1 .2 .3
de una h e r r a m ie n t a p a ra c o m p ila r C+-K'
H a b lar
r e q u e r im ie n t o s
de
la s
p o s ib le s
del
u s u a r io .
s o lu c io n e s ,
e le g ir
una,
y
ju s tific a r la .
1. 3
PRODUCTOS ENTREGADOS.
Una
s e c c ió n
p la n t e a d o s .
p a ra
cada
uno
de
lo s
o b je tiv o s
a n t e r io r m e n t e
FASE DE ESTUDIO
P r e c o m p ila d o r d e C ++ a. C
I .3 .1
El
2
OBJETIVOS Y ALCANCE DEL PROYECTO.
o b je t iv o
p r in c ip a l
del
p r e s e n te
p ro y e c to
fu e
el
de
p roveer
una h e r r a ir ie n t a p a r a c o m p ila r C++.
I - X. ¿
El
P-EÜÚEIP.Í iii ¿ jiros
u s u a r io
in v e s t ig a r
QeL usuario.
n e c e s ita
la s
un
C o m p ila d o r
p o s ib ilid a d e s
que
de
C++,
p r o p o r c io n a
con la
el
fin
de
p r o g r a m a c ió n
o r ie n ta d a a o b je t o s .
I .3 .3
SOLUCIONES POTENCIALES,
A lg u n a s
de la s
r e q u e r im ie n t o s
s o lu c io n e s
SOLUCIQN ELECTA Y JU STIFIC A IO N .
qu e pueden s a t i s f a c e r
lo s
son :
aD La a d q u i s i c i ó n
bD El d e s a r r o l l o
d e un c o m p ila d o r c o m e r c ia l
c o m p le t o d e un c o m p ila d o r
cD A lg u n a s o l u c i ó n
in t e r m e d ia .
d e C++.
d e C++.
a n te r io r e s
F recom a ila O or de C++ a C
Al
com prar
fu e n te .
Es
e s ta tu to s .
FASE DE ESTUDIO
un c o m p ila d o r
c o m e r c ia l,
p r á c t ic a m e n t e Además,
no s e
in c o s t e a b le
un c o m p ila d o r
d is p o n e d e
r e a liz a r
c o m e r c ia l,
3
su c ó d i g o
ca m b ios
en
su s
no e s t r a n s p o r t a b l e d e
una c om p u ta d ora a o t r a .
El no e s cu al
La
d e s a r r o llo a lg o
de un C o m p ila d o r R e q u ie r e
de
qu e s e a
un t o d o
de buena c a l i d a d ,
un e q u ip o d e g e n t e s ,
lo
e s muy c o s t o s o .
s o lu c ió n
a n te r io r .
qu e
C o n s is t e
in t e r m e d io . el
to ta l
s e n c illo .
E s te
se
e lig ió
e s tá
en c o m p ila r
el
c ó d ig o
el
es
r e la c io n a d a
le n g u a je
C++,
le n g u a je
C.
con
el
p u n to
u sando De
3
un c ó d i g o
aquí
s u r g ió
P r e c o m p ila d o r d e C++ I .
H oy,
se
p r in c ip a le s
hay v a r io s gran d es de
la s
s o ftw a r e
b ases
Ha
de
s id o
la
banca,
de
d a to s ,
d e m ú s ic a ,
s im u la c ió n ,
m ile s
p ro y e c to s
Sun.
in c lu y e n d o
s ín te s is
a
de d a to s .
AT&T y
de
p or
o r ig in ó
A d ic io n a
d e s a r r o llo
A p o lo ,
e x c e p to
la s
a b s tra c to s
u sado en
p a ra
c o m p ila d o r e s ,
y
A l g o l 68.
1983.
como A p p le ,
ram as de l a
p r o c e s a m ie n t o d e im á g e n e s , a m b ie n te s
t ip o s
Ha s i d o
in v e s tig a c ió n
de
y
qu e,
Su d is e ñ o
S tro u s tru p
so p o rta r
com p a ñ ía s
c o n s t r u c c ió n
gen eral d e C.
S im u la 6 7
in ic ia lm e n te
que l o
de
p r o p o s ito
un s u p e r c o n ju n t o
de
d e C,
de i n s t a l a c i o n e s
g ra n
es
red es,
c o m p u ta c ió n
FASE DE ESTUDIO
P r e c c m p ila d o r de C++ a C
C++
preserva
d isp o n ib ilid a d obvios
la y
p r o b le m a s .
fo rta leza
p o r t a b i 1i d a d D , Por
ejem p lo:
de
C y
C f 1e x i b i 1 i d a d ,
rem edia
algu n os
6
e fic ie n c ia , de
su s
mas
CHEQUEA EL T IP O DE LOS ARGUMENTOS DE UNA FUNCION
e x te rn
d o u b le s q r t C d o u b l e ) ;
d e c la r a
1 a. f u n e i 6n r a i z
c u a d ra d a x
d o u b le d l= sq rtC 2 2 > ; b ie n »
2 e s c o n v e r t i d o a d o u b le *
d o u b le d 2 = s q r t C " d o s " D ; error
d e c o m p ila c iö n ,
sq rt
no a c e p t a un s t , r in g
PROVEE T IP O S ABSTRACTOS DE DATOS.
E s ta e s una t é c n i c a de* p r o p ó s i t o
gen era l
a p lic a c io n e s . c o n v e n ie n t e s r e fe r e n c ia
E s to s p ara
lo c a l
d e p r o g r a m a c ió n en i a
y tip o s t ip o s
>
d e fin id o s
p r o g ra m a d o re s
de
d o u b lé iO
cual
s e d e fin e n
e s p e c ia l por
a p lic a c io n e s
y o c u lt a m ie n t o de- d a t o s .
c l a s s com pì e x < d o u b lé r e . i m ; p u b lic : com pì e x Cd o u b lé r ,
oid * . el
C u a lq u ie r
u so d e
’ c a s t’
FASE DE DISEHO
P re c o m p ila d o r de C++ a C
D e c la r a c ió n c o n v a lo r
Un
id e n tifle a d e r
d e c la r a d o .
Si
el
v a lo r
in ic ia l
p u ede
y u san do
r e c ib ir
in ic ia l
es
c o n v e r s ió n e x p líc it a m e n t e a tr a v é s
26
’ c a s i’ .
un
de o t r o
v a lo r t i pe,
d e un ’ c a s t ’ .
in ic ia l se
al
p u ed e h a c e r
ser la
Fr s c a l p i Is d c r d& C++ s C
FASE. DE DISESO
- 27
Uso c¿e C l a s e s .
T ip o Ci a s e .
2
Un t i p o
p u ed e s e r
p a rte s :
p r iv a d a
d e c la r a d o s una
ta n to
c la s e ,
p r iv a d a
y
son
de 1.a c l a s e
en
son
d e c la r a d o como c l a s s C e l a s e ) . y la
p ú b lic a . p a rte
lla m a d o s
a c c e s ib le s
s o lo
D a to s
p r iv a d a m ie m b ro s . p ara
la s
y
como en Los
Una c l a s e
f u n c io n e s la
p a rte
m iem bros
t ie n e
p u eden
de
ser
p ú b lic a la
fu n c io n e s .d e c la r a d a s
de
p a rte d e n tro
Cm iem bros f u n c i ó n }.
Una c l a s e
es
un t i p o .
Un o b j e t o
de c l a s e ,
es
un o b j e t o
de ese
d e c l a r a d o e s t á t i c o . Cs t a t i c }
d e n tro
t i po.
M ie m b r o s D a t o s ,
s ta tic Un m iem bro d a t o p u ede s e r d e una c l a s e .
Un m iem bro s t a t i c
e s común a t o d o s
lo s
e le m e n t o s
de
c a r a c te r ís tic a s
de
una c l a s e .
M i e m b r o s Fun ci or x& s.
L a s f u n c io n e s
m iem bros
ta m b ié n
p e r m it e n
la s
Fr ecotipi I ador de C++ a C
“S o b reca rga
de
O p e ra d o re s ",
FASE DE DISEfìQ
N o m b re s ",
"S u s titu c ió n
en
L ín e a "
y
25
"S o b re c a rg a
de
m e n c io n a d a s a n t e r io r m e n t e .
C o n s tru c to re s .
Un c o n s t r u c t o r c la s e .
nom bre d e .la el
en una fu n c ió n
Son \ c o n s t r u c t o r e s
t ie m p o
de
c la s e .
Si
c o r r id a
h a cen 1e
c la s e C si
e s t a fu n c ió n
Una c l a s e
s e .d e c la r a se
al
2
un o b j e t o
f u n c io n e s
d e una c i e r t a qu e
tie n e n
un o b j e t o
d e una c l a s e
cosas:
le
a p lic a
se
la
a s ig n a
fu n c ió n
el
dada,
la
en
m em oria
c o n s tru c to r
de
su
nom bres
de
e x is te ).
p u ed e t e n e r
c o n s tru c to re s
que c r e a
m iem bros
y se
n e c e s a r ia
lo s
o b je t o ,
lo s
cero
o más c o n s t r u c t o r e s .
ta m b ié n p u ed en s e r
so b reca rga d o s
Los
C v e r 2. 2. 1 .3 .
D estr u c to r e s .
Un c la s ¿ .
d e s tru c to r
nom bre d e l á de
una c l a s e
lo
s ig u ie n t e :
a p lic a
es
una
Son d e s t r u c t o r e s
al
e x is te ).
c la s e en al
o b je to
fu n c ió n
lo s
que
p e r o p r e c e d id o p o r
un c i e r t o s a lir el
el
d e s tru y e
m iem bros fu n c io n e s
b lo q u e , flu jo
d e s tru c to r
en del
de
la
*—*. el
Si
un
s e d e c la r a
tie m p o
p ro gra m a c la s e
o b je t o
que t ie n e n e l
c o r r id a
del
b lo q u e , e s te
una
mismo
un o b j e t o
de
C si
de
o cu rre se
le
d e s tru c to r
F rsco x ip ila d zr da C++ a C
Una c l a s e
tie n e
FASE DE DISEÍ10 .
29
s o la m e n te un d e s t r u c t o r .
A m ig o C* f r i e n d ' J>.
Un m iem bro f u n c ió n c la s e s .
Una- f u n c ió n
p a r t e p r iv a d a
de lo s
C o n v e r tid o r e s
de
Un
m iem bro
c o n v e r tid o r c la s e se
es
p u ed e una
como
un
Un o b j e t o
un a p u n ta d o r th is .
E s te
de
una o
tie n e
v a r ia s
acceso a
la
lo s a esa
c o n v e r tid o r qu e
t ip o .
Un
de
c o n v ie r te
e t c .}.
un
o b je to
Un c o n v e r t i d o r
sob reca rga d o,
donde
el
de
de
tip o
o p era d o r
es
s im p le .
d e una c l a s e
e n c u e n tr a n
flo a t,
op era d or
tip o
ser
f u n c ió n
s im p ie C i n t ,
A x it o r e f e r e n c ia . e n / -u n c io n e s :
se
fr ie n d c la s e ,
tip o .
t ip o
p r e c is a m e n t e e l
d e c la r a d a
d e una c i e r t a
o b je t o s d e e s a c la s e .
f u n c ió n
de
a un t i p o
d e c la r a
pu ede s e r
fr ie n d
tie n e
m iem bros m em oria
a p u n ta d o r
* th is ’ .
p u ed e
m em oria a s ig n a d a .
d a to s
p a r t ic u la r e s
id e n tific a d o ser
u sa d o
con
por
la
del
En e s t a o b je t o .
p a la b r a
c u a lq u ie r
m em oria E x is te
reserva d a
fu n c ió n
que
FASE DE DISEHO
Precom pi tactor de C++ o C
te n g a a c c e s o a l
o b je t o .
T ip o s :
’ s tru c i ’ ,
El
*c l a s s ' ,
nom bre
e n u m e ra c ió n c u a lq u ie r
s tru c t lo s
de
una
’ u n ió n *
c la s e
Cerru/iO s e n
y *enum * .
Cc l a s s ,
tip o s .
30
E s to s
s tru c t, t ip o s
u n ió n )
pu eden
o
ser
el
de
u sa d os
una como
i ypede f .
es
un c a s o p a r t i c u l a r
m iem b ro s,
u n ió n e s
de c la s e .
t a n t o d a t o s como f u n c i o n e s ,
un c a s o e s p e c i a l
de c la s e .
En l a
c la s e
s tru e l
to d o s
son p ú b lic o s .
En l a
c la s e
u n ió n s o l o
hay
m iem bros f u n c io n e s q u e son c o n s t r u c t o r e s .
Una u n ió n
p u ed e s e r
a n ón i ma C s in
u n ió n anónim a no s e c a l i f i c a n
n o m b re ).
Los
cu an d o son u sa d o s.
m iem bros
de
una
C la s e s Deri.-oad.as.
D e s c r i pe i en..
Se p u ed e d e r i v a r b a s e ).
Les
p ara l a
c la s e
p r iv a d o s
una c l a s e
m iem bros
de
d e r iv a d a . la
c la s e
C lla m a d a d e r i v a d a )
p r iv a d o s
de
la
c la s e
base
de
L o s m iem bros p ú b l i c o s d e l a d e r iv a d a ,
a
menos
qu e
se
o trá
NO s o n
C1 i amada
a c c e s ib le s
c la s e base sen
e s p e c ifiq u e
o tra
cosa .
Las
c la s e s
p a ra la s
c la s e s
d e r iv a d a s Cv e r
tie n e n
2 .3 .5 .),
la s
con la s
c a r a c te r ís tic a s s ig u ie n t e s
m en cion a d a s
c o n s id e r a c io n e s :
C ons t r u c l o r e s
E l o r d e n d e c o n s t r u c c ió n p a r a un o b j e t o d e un c l a s e d e r i v a d a el
s ig u ie n t e :
e n s e g u id a , se
a p lic a
a p lic a r
a p lic a r
el
el
c o n s tru c to r
c o n s tru c to r
r e c u r s iv a m e n t e a l o s
de la
o b je to s
de c la s e
la
c la s e
d e r iv a d a .
de c la s e
base
es y,
E s te o rd en
d e r iv a d a
de
c la s e
d e r iv a d a .
Des t rxic t o r e s .
El
ord en de d e s tr u c c ió n
p a r a un o b j e t o
d e una c l a s e d e r i v a d a e s
el
s ig u ie n t e :
y . e n s e g u id a ,
a p lic a r
a p lic a r
ord en
c o n t r a r io
a p lic a
ta m b ié n
al
el
de
el
d e s tru c to r
d e s tru c to r c o n s t r u c c ió n .
r e c a r s i v a c íe n te
a
le s
de
de la
la
c la s e
E s te
ord en
o b je to s
de
c la s =
base. de
'-’e r i - 'a '- '-
Es d e c i r ,
ún
d e s tr u c c ió n
se
c la s e
d e r iv a d a
de
c i a s e d e r iv a d a .
Funciones y ir t u a le s .
Un m iem bro Una
fu n c ió n
f u n c ió n v ir tu a l
p o s te r io r m e n te d e fin id a
de
una
es en l a
c ia s e
p u ede
d e c la r a d a
ser
en
c l a s e d e r iv a d a .
la
d e c la r a d o c la s e
u i r £1 7 base
y
Frecostpi lod a r ds C++ a C
FASE DE DISEHO
32
E x p r é s i o r íe s .
new y d e l e t e .
Hay 2 d in á m ic a : d a to ,
op erad ores
in c lu id o s
neu> y d e l e t e .
y de l e t e l a
en
C+ +
new p id e l a
p
p ara
el
m a n ejo
de
m em oria p a r a un c i e r t o
m em oria tip o
de
d e v u e lv e .
A c c e s o a 1d e n t i / ic a d o r e s G lo b a le s .
S e p u ed e t e n e r y una l o c a l . id e n tific a d o r a ñ a d ir la
el
el
D e n tr o s im p le
p r e fijo
v a r ia b le g lo b a l.
mismo i d e n t i f i c a d o r del
e n to rn o
de
h ace r e f e r e n c ia
*::*
al
la
p ara
una v a r i a b l e
v a r ia b le
a la
id e n t ific a d o r ,
lo c a l,
v a r ia b le p ara
el
lo c a l.
hacer
g lo b a l u so
del
Se debe
r e fe r e n c ia
a
Pr&cempi I ador de C++ a C
I I .3 .2
FASE DE DISEfîO
cì4
BOSQUEJO DE LA ARQUITECTURA INTERNA DEL SISTEMA.
I I . 3 . 2 . 1 INTRCDUCCION.
A lg u n a s
de
d e s c r ip c ió n
a)
la s
del
D is e ñ o d e F l u j o d e D a to s . C H IP O **,
fcD ' D is e ñ o
con
Hi e r a r c h i c a !
la s
que
son l a s
d is p o n e m o s
p ara
la
s ig u ie n t e s .
O r ie n t a d o a E n tr a d a s y S a l i d a s .
Ir s p u t-P r c c e s s - O u t p u t )
de F l u j o d e
D a to s .
O r ie n t a d o a T r a n s a c c io n e s .
cD
D is e ñ o O r ie n t a d o a
O b je t o s .
d)
D is e ñ o O r ie n t a d o a
E s t r u c t u r a s d e D a to s .
e)
D is e ñ o d e S is te m a s
en T iem p o R e a l.
f)
D is e ñ o O r ie n t a d o p or G ra m á tic a .
Es
d ifíc il
le n g u a je
le s
como
in e x is t e n c ia p a rte ;
y la
C
de
es to s
fu n c ió n ,
C+ + .
e n te s
si
de E s to
d a te s
p a rte ,
c o n ten g a
una
un
c o m p ila d o r ■■.dos.
p u es
y
una
de
un
; ;.s .? s :----
in d e p e n d ie n te s ,
le n g u a je por
" d e fin ic ió n "
i n d e p e n d ie n t e s ,
e s ta tu to s
de
e s — d e b id o - —
s u fic ie n te m e n te
c o n s id e r a m o s
no s o n
t ie n e
Por o t r a
p roceses e
n a tu r a le z a r e c u r s iv a d e l
P o r e je m p lo , e n te s ,
que
h e r r a m ie n t a s
p ro c e s o de d a to s ,
por
una
o tra .
" e s t a t u t o " com o d o s "d e fin ic ió n "
de
una
en su i n t e r i o r .
en C++, f u n c ió n
una f u n c ió n que
p u ed e t e n e r
co n te n g a
una
una d e c l a r a c i ó n
d e c la r a c ió n ,
y
asi
F r e z c x .p ila d c - äs C++ a C
FASE DE DISECO
35
r e c u r s iv a m e n t e .
El
D is e ñ o
c o m p ila d o r ; s u p e r io r
En
el
O r ie n t a d o p ero
es
por
G r a m á tic a
ta m b ié n * e l
es
el
menos
más
adecu ado
e n te n d ib le
en
p ara un
un
n iv e l
d e a b s tr a c c ió n .
P r e c o m p i la d o r
de
C++
a.
C
se
usan
la s
s ig u ie n t e s
h e r r ami e n t a s :
a ) - D i s e ñ o p o r F l u j o d e D a to s C n iv e l
s u p e r io r
D is e ñ o O r ie n t a d o a E s t r u c t u r a s
c)
D is e ñ o O r ie n t a d o por G ra m á tic a C o t r o s n i v e l e s ) .
Es
im p o r t a n t e
ser tip o
u sa d o e l
n o ta r
D is e ñ o
r e c u r s iv o .
qu e en
O r ie n t a d o
la
d e D a to s
de a b s tr a c c ió n ).
b)
c r e a c ió n
a O b je t o s ,
de
C e tro s n iv e le s ) -
un C o m p ila d o r
s ie n d o
e s to s
puede,
o b je to s
de
3
FASE DE DISECO
Pre¡com pilador de C++ a C
36
I I . 3 .2 . 2 DIAGRAMA DE FLUJO DE DATOS%
En e s t e
D ia g ra m a
in d e p e n d e n c ia
de
la
n a tu r a le z a
e n te s ,
S I MEOLOS CTBL_SY>D , y d e l
se
r e c u r s iv a
-manejan
a
d e l le n g u a je
tr a v é s de
STACK SEMANTICO CSTKJSEM).
I I . 3 . 2. 3 DESCRIPCION DEL DIAGRAMA DE FLUJO DE DATOS.'.
PROCESOS d e l
P r e c o m p ila d o r de C++ a C :
aJ> A n á l i s i s
L é x ic o .
6J> >lná.££s£s S i n t á c t i c o
y S e m á n tic o .
cJ> E m is ió n d e C ó d ig o . dS> C o m p ila c ió n d e C ó d ig o .'
ESTRUCTURAS DE
DATOS d e l
P r e c o m p i la d o r de C + ^ a
aS> T a b la de
S ím b o lo s .
CTBL_SYM5
6J> T a b la de E t iq u e t a s .
CTBL_LBL2
c2 A r b o l d e D e s t r u c c i ó n . * e>
S ta c k *
’ S ta c h ’
ARCHIVOS d e l
S e m á n tic o .
CTREE_DEST2 CSTK_SEM2
p a ra I n i c i a l i z a c i ó n .
P r e c o m p ila d o r
C STK _IN 1T2
d e C++ a C .
a!> A r c h i v o d e C ó d ig o L ig a d o .
C F I _COD2
y
l a TAELA
C.jl.
la
no de
F r ecotipi Iz d s r de C++ a C
b } A r c h iv a de C ó d ig o e n C.
FASE DE DISESO
CF1 _CCÙ_C:
37
FASE DE DrSErtO
P re c c m p ila d c r de C++ a C
PROCESOS d e l
aJ> A n Á l i s i s
C o n s ta
** ’ ,
P r e c c m p ila d o r d e C++ a C . .
L é x ic o .
del
c a ra c te re s es
P roceso:
y
s a le n
* a * ,* C ’ ,
“ to k e n "s
A n á lis is
S in tá c tic o
es
A
e s te
p roceso
s in tá c tic a s !).
* w h ile * *
p a la b r a s
’ in t * ,
reserva d a s,
e n tra n
Un c a r a c t e r
*%* ,
e tc .
L os
id e n t ific a d o r e s ,
y S e m á n tic o .
s ig u ié n te s
p ro ceso s:
C h equ ear E s t a t u t o ,
"to k e n "s
s in t á c t ic a s .
Un t o k e n
ser:
L é x ic o .
C e n t id a d e s
o p era d o res o c a r a c te r e s .
L o fo rm a n l o s D e c la r a c ió n ,
A n a liz a r
"to k e n '* s
e tc .
p u eden
c o n s ta n te s ,
Los
23
del
E s ta s
A n á lis is
e n t id a d e s
A n a liz a r
S in t á x is ,
C h equ ear
C hequ ear E x p r e s ió n .
L é x ic o pu eden
son ser:
en
e n t id a d e s
d e c la r a c io n e s ,
a g ru p a d o s
e s ta tu to s
o e x p r e s io n e s .
Las
e n t id a d e s
d e t e r m in a r
s in tá c tic a s
errores
id e n t ific a d o r ,
error
t a le s de
son
ch equ eadas
como:
d e fin ic ió n
s in tá x is
i n v á l i d a Csuma d e 2 e s t r u c t u r a s ) ,
e tc .
en
un
s e m á n tic a m e n te d o b le e s ta tu to ,
del
p ara
mismo
e x p r e s ió n
cJ> E m is ió n , de C ó d ig o .
Una e n t id a d despu és d e é l ,
s in t á c t ic a ,
al
pasar
per
el
a n á lis is
p rod u ce de a cu erd o a s u - c a lid a d
s e m á n t ic o ,
y
...
M e n s a je s d e E r r o r . C ó d ig o C.
CQue s im u la a l
d e C++D.
cO C o m p ila c ió n d e C ó d ig o .
El tra v é s
c ó d ig o del
p r o d u c id o p o r
el
P r e c o m p ila d o r
de C++ a C ,
Com pi1a d o r C, y s e o b t i e n e c ó d i g o o b j e t o .
se
pasa a
Fr scornai I ador de C++ a C
FASE DE DISERÒ
40
ESTRUCTURAS DE DATOS D e l P r e c c n .p ilc .d c r de C + + a C .
I n t r odxic c io n . A
c o n t in u a c ió n
se
d e s c r ib e n
PrecGrn.pila.cLor d e C++ a C. la s
podem os c l a s i f i c a r
Las
la s
e s tru c tu ra s
fu n c io n e s
u sa d a s
qu e a c c e s a n
esta s
en
el
estru c tu ra s
en:
Fune i e n e s B á s ic a s . F u n c io n e s C o n c e p t u a le s .
Las p e d ir
F u n c io n e s y
e s c r ib ir
dar
v a lo r
e s ta s
B á s ic a s a
lo s
r u tin a s
r e a liz a n cam pos
a c c io n e s
de
"t r iv ia le s "
la s
d ir e c ta s ,
estru c tu ra s .
t a le s El
t r a e c o n s ig o c i e r t a s
como
hecho
de.
v e n ta ja s y
d e s v e n ta j a s .
V e n t a ja s d e l P e r m it e n
u s o de F u n c io n e s B á s ic a s . a la s
o tra s
r u tin a s
im p le m e n t a d ó n r e a l F a c ilita n
la
de l a
lla m a n te s ,
p r o g r a m a c ió n d e r u t i n a s
R e a liz a n chequ eos s o b re e r r o r e s E lim in a n e l
T ra b a j-e.
El
de
la
s u p e r io r e s .
d e p r o g r a m a c ió n C "b u g s "2 .
u so t e d i o s o d e a p u n ta d o r e s .
D e s v e n ta ja s d e l T iem p o.
a b s tra e rs e
e s tru c tu ra .
u s o de F u n c io n e s B á s ic a s . c ó d i g o r e s u l t a n t e e s más l e n t o .
Hay
qu e
in v e r t ir
r e c u p e r a en l a
tr a b a jo
en
e lla s ,
p r o g r a m a c ió n d e n i v e l
p ero
s u p e r io r .
se
P r e c o c i l a í o r ¡is C++ a C
La s que
la
c o rre c ta
F u n c io n e s n u eva
FASE DE DISEflO
C o n c e p t u a ie s
i n fo r m a c ió n
co n r e l a c i ó n
a la
sea
a grega n c o rre c ta
in fo r m a c ió n . por
si
V e r ific a n
m ism a,
in f o r m a c ió n qu e ha l l e g a d o
41
y
qu e
sea
p r e v ia m e n t e .
FASE DE DI SESO
F re e c o p ila d o r C’¡? C++ Oí- C
42
ESTRUCTURAS £>£ D.4TOS d e l P r e c ó m p i l e d e r d e C++ a C .
aJ> Tabla, de S ím b o lo s .
In tr o d u c c ió n . La
ta b la
C++ a C. c la s e s ,
El
lo s
un
a lc a n c e s
p ara
es
la
se r e g is tr a
p a rte
la
m ed u lar
i n fo r m a c ió n
del
P r e c o m p ila d o r
n e c e s a r ia
de
p a ra m a n eja r
s o b r e c a r g a d e f u n c io n e s y s o b r e c a r g a d e o p e r a d o r e s .
En C++ lo s
d e S ím b o lo s
En e l l a
S ím b o lo lé x ic o
a lc a n c e l é x i c o d e t e r m in a r
cam pos .de
si
d e fin e
a tr ib u to s
g lo b a l
s tru c t r_A < in t i ; > r l; s t r u c t r_B < s t r u c t r _ C -C in t i ; > r 2; > r 3; m a in O
t r a b a jo .
y
la s
Precorrici la d zr de C++ a C
Una
c la s e
d e s tru c to r. le
la
c o n s tru c to r. cu an d o s a l e
En
p u ed e 't e n e r
A un o b j e t o
a s ig n a
FASE DE DISEHO
m em oria Se
le
v a r io s
c o n s tru c to re s ,
se el
a p lic a
su
y
se
le
d e s tru c to r
a p lic a
a
un
o b je to
ta b la
se
a lm a c e n a
la
i n fo r m a c ió n
se
s a lir
b lo q u e ,
al
’ g o t o ’ s y en
del
S e m á n tic o .
de o tr o s
a lc a n c e
a C a tra v é s
el
c ie r to
pr e v i o .
’ b rea k ’ s
le n g u a je s ,
s in tá c tic o
del
’ S ta c k *
t ie m p o
de
al
S ím b o lo
a m b ie n te
s in tá c tic o ,
en
,
p ara
la
E s ta d e s t r u c c i ó n
en
’ c o n tin u e ’ s ,
en
CSTK__SEM2
c o r r e s p o n d e n c ia e n t r e e l l o s
En
c la s e ,
’ r e t u r n ’ s.
A d ife r e n c ia
CCURRENTD
de
n e c e s a r ia
d e c l a s e Ccon d e s t r u c t o r ! ) .
En C++ e l
e n s e g u id a
d e su e n t o r n o .
e s ta
' S la c f c '
un
n e c e s a r ia ,
de o b je t o s
cD
s o lo
d e c l a s e qu e e s d e c la r a d o en un b lo q u e ,
d e s tr u c c ió n hace
p ero
5C
y
el
t a le s
PASCAL o MODULA.
e s tá n
s e p a r a d o s . “ La
e s 11 evadar^por" c i
■ere •C r
S e m á n tic o .
" P r e c o m p ila c ió n " qu e
d e fin e
s in tá c tic o .
se e s tra e d el
como C,
s e m á n t ic o
el
Cuando
*S ta c k ’
se
se
t ie n e
a lc a n c e e n tra
S e m á n tic o ,
un
s e m á n t ic o a
el
un
n u evo
a p u n ta d o r p ara
un
a m b ie n te
a lc a n c e s i n t á c t i c o
eJ> * S ta c h .’ p a r a
Es
u sad o
d e s c r ip c ió n
p a ra
I n i c i a l is a c ió n .
la
i n i c i a l i z a c i ón
d e ta lla d a
e n c u e n tr a n i n c l u i d a s
CSTK_1 N IT 2
de
cam pos
en e s t e
de y
t r a b a jo .
a r r e g lo s f u n c io n e s
y
e s tru c tu ra s .
a s o c ia d a s
NO
La se
Preccm pi i ador de C++ a C
FASE DE DISEHO
52
ARCHIVOS d e l F r e c o p i l a d o r d e C++ a C
aJ A r c h i v o d e C ó d ig o L ig a d o .
La
t r a d u c c ió n
d e c ir ,
no
se
d e C++ a C no p u ed e
p u ed e
s im u ltá n e a m e n te .
E x is te n c ia
CFI_COD2
le e r
c ó d ig o
Las ra zo n e s
en
ser
h ech a
C++
p r in c ip a le s
y
p a r a le la m e n t e .
e s c r ib ir
son l a s
c ó d ig o
Es
en
C
s ig u ie n te s :
d e F u n c io n e s A n id a d a s .
A- d i f e r e n c i a
de
C,
s in tá c tic a m e n te
en
o tra
en
C++
una
C s ie m p re
f u n c ió n y
p u ed e
cu an d o
haya
e s ta r una
c o n t e n id a
d e c la r a c ió n
i n te r m e d i a d e e l a s e D .
En su
C++
vez
una
c la s e
e s ta
r e c u r s iv a m e n t e . r e q u ie r e
p u ed e
fu n c ió n
te n e r p u ed e
La t r a d u c c ió n
e x tra e r
la s
en
su
a C de e s t e
f u n c io n e s
in t e r io r
c o n te n e r
in te r n a s
una
una tip o y
fu n c ió n .
c la s e ,
y
A asi
de c o n s tr u c c io n e s ,
r e d e fin ir la s
a
n iv e l
g lo b a i.
Por c la s e
o tra
p a rte ,
p a ra , t r a d u c i r
una d e c l a r a c i ó n
con i n i c i a l i z a d o r , es n e c e s a r io
y gu a rd a r e s ta tu to s .
la
i n ic ia liz a c ió n
tr a d u c ir
p ara e m i t i r l a
al
de
s o lo
in ic io
un o b j e t o la
de
d e c la r a c ió n
de la
p a rte de
Un e je m p l o d e t r a d u c c ió n
s e m uestra, a c o n t in u a c ió n :
C 6 d ig o en C++.
C ó d ig o e q u i v a l e n t e en C. / * g lo b a l in t g; in t
in t
_ lg O
< in t
i ;
se e x tra
la
f u n c ió n
’ s tru c t*
P re c c m p ii ador de C++ a C
te m p o r a l lig a d a . en e l
de El
E s te
c ó d ig o f i n a l
o rd en dado por
Se tie n e n
Al
c ó d ig o .
la s
FASE DE DlgErrO
a r c h iv o
la s
s ig u ie n t e s
c ó d ig o
de
a r c h iv o
m anera lig a d o
lig a s .
g lo b a l
lig a
g lo b a l
lig a
lo c a l
de d e c la r a c io n e s ,
lig a
lo c a l
de e s ta tu to s .
de
"e l
lig a s .
lig a
h a b la r
g u a rd a
se o b tie n e r e e s c r ib ie n d o e l
54
de d e c la r a c io n e s , de i n ic ia liz a c ie n e s .
a r c h iv o
lig a d o ,
n os
es ta m o s
r e fir ie n d o
a
a r c h i vo.
¿O A r c h i v o d e C ó d ig o e n C.
E s te a r c h iv o r e s u lt a
CF1_COD_C2
d e la . r e e s c r i t u r a
del
A r c h iv o L ig a d o .
e s te
Pr&compi La.dar de C++
III.
F A S E
1 1 1 .1
D E S A R R O L L O .
55
.
INTRODUCCION.
En e s t a la
DE
FASE DE DESARROLLO
FASE
fa s e
DE
E s tru c tu ra s fu n c io n e s
s e d e s a r r o lla r o n
DI SEFJO.
Se
en C l o s
e s c r ib ie r o n
d e D a to s y d e A r c h iv o s .
p ro d u cto s
la s
Se c o d ific a r o n
qu e m an ejan e s a s E s t r u c t u r a s
a r r o ja d o s
d e c la r a c io n e s y
de
p rob a ron
por i as la s
y A r c h iv o s .
1 1 1 .2 OBJETIVOS.
E s p e c ific a r , D is e ñ o d e l
C o d ific a r
y
P rob a r
lo s
M ódu los
d e fin id o s
en
el
S is te m a .
I I I . 3 PRODUCTOS ENTREGADOS. 1 1 1 . 3 .1
ESPECIFICACION DETALLADA DE MODULOS Y FUNCIONES.
111.3 .2
MODULOS Y FUNCIONES PROBADOS.
I I I . 3. 3 C_ MODULOS IN TE GRADOS PROBADOS ) . I I I . 3. 4 - C PRUEBA CON DATOS. C )
NO FUERON ALCANZADOS.
COMPROBACION DE RESULTADOS ESPERADOS
I l i .3 .1
E SPE C IFI CACION DETALLADA DE MODULOS Y FUNGIOHES.
PROCESOS d e l P r e c o m p ila d o r de C++ a C :
ol> /4n.ál¿sis L é x i c o C Ver M ódu lo CPP. L2>
E s te
es
p ro g ra m a e n tra d a ,
Los
M ód u lo
t c k e n 's son
es e l
que
p rod u ce
b á s ic a m e n t e ,
a c c io n e s ’ LEX*
el
qu e
se
d e s c r ib e n
a n a liz a d o r
le
a lim e n t a
a
’ LEX * .
lé x ic o s .
*LEX*
una d e s c r i p c i ó n d e
e s ta tu to s
u fa n d o
s im p le s lé x ic o
E l M ódu lo CPP. L t i e n e
de clara cio n e s
se
a n a liz a d o r e s
o
*LEX*
es
r e c ib e
un
como
’ t o k e n ’ s y d e a c c io n e s .
e x p r e s io n e s
co m p u e s to s
de
r e g u la r e s , C.
La
y
la s
s a lid a
de
d e s c r ip c ió n
de
LEXYY.C .
4 p a rte s :
g lo bales
d e fin ic io n e s
r e g la s sxLbrxi t i ñ a s
En lo
la s
de
xlsxlclt
declaracion es
q u e im p o r t a y e x p o r t a
En
la s
d e f in ic io n e s
io
g lo b ales
el
se
se
e n c u e n tra
la
M ódu lo.
a s ig n a
un
nom bre
a
una
e x p r e s ió n
PreccRp;
tie C ++
Icdsr
r e g u la r .
Una
FASE DE DESARROLLO
d e fin ic ió n
tie n e
2
57
p a rte s :
nom bre e x p r e s ió n
Las r e a la s
r e g u la r .
c o n s ta n
e x p r e s ió n a c c ió n
ta m b ié n d e 2 p a r t e s :
r e g u la r
C e s t a t u t o en O
Las s u b r u iin a s
de u s u a r io q u e s e
tie n e n
son:
s e re e n C D yyvrapC D
s c re e n C D Es una r u t i n a
qu e,
su t o k e n , s i
es
dada una p a l a b r a ,
regresa
p a la b r a r e s e r v a d a ,
t o k e n d e ID E N T IF IE R ,
en o t r o
caso.
yyw rapC 3 E s ta lé x ic o
r u tin a C
es
y y le x O
lla m a d a D,
al
por1- l a
fu n c ió n
t e r m in a r
yyw r apC D d e v u o l v e 0,
y y le x O
c o n t in u a
1.
v y le x O
t e r m in a d e l e e r .
le y e n d o .
la
p r in c ip a l le c tu r a
de
del
a n a liz a d o r
’ to k e n ’ s.
Si
Precosipi I actor de C++
tO ,4ná. I i s i s
E s te
es
p ro g ra m a
S in tá c tic o
el
qu e
b á s ic a m e n te a s o c ia d a s ;
FASE DE DESARROLLO
M ódu lo
y S e rrín t i c o
qu e
p rod u ce como
y
se
le
CV er
en tra d a
prod u ce
como
una
Aper.di c e Ej
a lim e n t a
a n a liz a d o r e s
a
’ YACC’ .
s in tá c tic o s .
g r a m á t ic a
s a lid a
53
un
y
’ YACC* ’ YACC’
a c c io n e s
a n a liz a d o r
es
un
r e c ib e
s e m á n tic a s
s in t á c t ic o
y
s e m á n t ic o lla m a d o YTAB. C .
’ YACC* E sto s el
d e te c ta
M ódu lo
c o n flic to s
pueden
C P P .Y ,
d e t e c t a d o s en l a
El
lo s
c o n flic to s
se
ser
de la
com en tan
al
o
p r in c ip io
C ó d ig o pctra. e i
e s c e n c i a l m ente 3 p a r t e s :
P r e p r o c e s a d o r d e C.
D e / in ic io n e s R e g la s .
P r e p r o c e s c id o r d e C.
h ace sa b er.
’ rs d u c e -r edu ce ’ .
g r a m á t ic a d e C++ y su ca u s a .
M ódu lo C P P .Y t i e n e
C ó d ig o p a ra e l
g r a m á t ic a y i o s
’ s'ni f t - - r e d u c e ’
lo s
En
c o n flic to s
Fr&dozici l ador d s C++
En e s t a ex p o rta e l
p a rte
se
FASE DE DESARROLLO
e n c u e n tr a n
la
d e s c r ic io n
de l o
que
53
im p o r t a
y
M ódu lo.
D e / in ic io n e s
D e n tr o d e e s t a
— La
p a r t e s e e n c u e n tr a n .
d e fin ic ió n
a n a liz a d o r
— La d e f i n i c i ó n y o p erad ores. u n ió n
usan l o s
en e l
’ S ta c k ’ .
— La
de
la
s in tá c tic o
de Aqu í
‘ t o k e n 's ,
en e l
’ t o k e n *s
del
no t e r m i n a l e s ,
* S ta c k * .
R e g la s .
En l a s
que
u sa rá
R e g la s s e e s p e c i f i c a :
el
”S ta c k T
de i .
’ YACC*.
i n c lu y e n d o
p a la b r a s
ta m b ié n s e e s p e c i f i c a
e s p e c ific a c ió n
s ím b o lo s
u n ió n
p r o d u c id o p o r
qu e n e c e s i t a n
gu a rd a r
m iem b r^ —d e —i-a—tirrru!T qu e n e c e s i t a n
reserva d a s
q u e m iem bro d e l a
gu a rd a r
in f o r m a c ió n
le s i n f o r m a c ió n
FASE DE DESARROLLO
- La r e g l a -
La
s in tá c tic a .
a c c ió n
s e m á n tic a
a s o c ia d a .
en
la s
r e g la s
que
lo
n e c e s i ta n .
La g r a m á t ic a e m p le a d a p a r a e l e x te n s ió n
d e una g r a m á t ic a
s e m a n eja l a
Al
p r io r id a d
a gregar
la s
a n á lis is
LALRC1D
de C
s in tá c tic o í HARES-iI .
de. C++ e s una En su
s in tá x is
de o p era d o res.
e s tru c tu ra s s in t á c t ic a s
de C++ a e s t a g r a m á t ic a ,
s e o b tu v ie r o n c o n f l i c t o s .
Los
c o n flic to s
e lim in a d o s . re d u c id o , a s i,
e s to s
Los e lig e
de
En e s t o s el
no
t e r m in a l
c o n flic to s
c o n flic to s la
tip o
de
a c c ió n
tip o
’ s h ift’
s e p e r m itía e l
Un
de
e je m p lo
c o n s tr u c c ió n
de
la
YACC e l i g e p r im e r o
fu e ro n
r e g la
*s h i f t - r e d u c e ’ en
e llo s .
c o n flic t o .
c o n flic t o
s in tá c tic a
E l m e n s a je d e YACC f u e e l
Si
En o t r o
’ c la s e
C s h ift
130,
ser Aún
le n g u a j e .
a n a liz a d o s .
caso,
s u r g ió
d e r iv a d a *
r e d ’ n 50!)
de
YA CC
YACC
era
s e e lim in a b a .
qu e
s ig u ie n t e :
62 s h i f t / r e d u c e c o n f i i c t
p a ra
c o n flic t o .
e le c c ió n
’ s h ift - r e d u c e ’ de
er.
fu e ro n la
c o m p le ta m e n te
como s ím b o lo
i n d i c a n a m b igü ed a d en e l
adecuada,
la
’ r e d u c e —r e d u c e *
c o n flic to s ,
en
al
agrega r
p e r m it e
C-*-+.
FASE DE DESARROLLO
ci
S ta te c la s s _ s p e c ifie r
: aggr c la s s _ ta g _ d c ltr
_
c la s s _ s p e c ifie r
: aggr
_
e l a ss_sp eei f i er
: aggr e la s s _ ta g _ d c ltr
e la s s _ ta g _ d c ltr
_
C50D
e la s s _ b a s e _ n a m e
y su c a u s a s e d e t a l l a
D e b id o a l a
r e g la
a c o n t in u a c ió n .
:
member _ d a t a _ d e c l a r a t i'o n : o p t_ d e c l_ s p e c ifie r
m e m b e r _ d c ltr
* ;*
d on d e m e m b e r_ d c ltr :
el
s ím b o lo
*: * c o n s t _ e x p
’ : * e s ta
en é l
e s t o que s e q u ie r e h acer l a
D e b id o a l a
r e g la
o p t_ d e c l_ s p e c i f i er : c la s s _ s p e c ifie r donde: e l a s s _ s p e c i f 'i e r
’ fo llo w ’ a c c ió n
de
o p t_d e c l _sp eci f i er
’ red u ce’
Es
s o b r e e s t e s ím b o lo .
por
P reco m p ila d o r d e C +■+
FASE DE DESARROLLO
•
62
: a ggr e la s s _ t a g _ d c lt r : aggr y
e la s s _ ta g _ d c ltr
e la s s _ b a s e _ n a ñ ie
’ < * a0C03
c la s s _ b a 3 e _ n a r a e :
es i g u a l
* :*
el
TYPEDEF_NAME
’ fo llo w ’
de lo s
s ig u ie n t e s
s ím b o lo s no t e r m in a le s :
c p t _ c la s s _ s p e c i f i e r e la s s _ s p e e ifi er e la s s _ ta g _ d c ltr
y
por
ta n to ,
’ : *
e s ta
en
e la s s _ t a g _ d c lt r , y se tie n e
La e l e c c i ó n
el
’ fir s t*
un c o n f l i c t o
y
en
el
d e YACC en e s t e c a s o f u e a c e r t a d a .
un nom bre d e c l a s e ,
c o n s id e r a r á .
’ fo llo w ’
de
’ s h i f t - r e d u c e *.
Pu es,
’ : * como m iem bro d e l a
despu és de c la s e
base,
y NO como campo d e b i t s .
C o n flic t o s
de
e s te
G ra m á tic a
Cde C+-O
r e d u c ir
9.
del
a
m ód u lo,
En e l
E s to s
tip o
p ara
el
no
son
fá c ile s
P re co m p H a d a r
c o n flic to s ,
se
com en tan
c o n una b r e v e e x p l i c a c i ó n
P r e c o m p ila d o r d e C++ a C ,
de
v is u a liz a r .
de C++ a C, en
la
En
la
se
lo g r a r o n
p a rte
s u p e r io r
d e su c a u s a .
s o lo
se
tie n e n
la s
r u tin a s
que
F r e c c i a le d e r ds C++
r e a liz a n in c lu y e
p a rte el
del
FASE DE DESARROLLO
a n á lis is
t r a ta m ie n to
s e m á n t ic o d e l a s
de e r r o r e s
d e c la r a c io n e s .
s in tá c tic o s ,
tam p oco
la
S3
No s e e m is ió n
d e c ó d ig o .
Una d e c l a r a c i ó n
c o n s ta de 4 p a rte s .
Alm acenam i e n t o
CSTGE)
E j.
s t a t ic
T i po
CTYPED
Ej-
i nt
Oper a d o r e s d e D e c ia r a c i ón
CDCLTR)
E j.
x, O
Nombre
CNAME)
E j.
s t a t ic
En
el
a n á lis is
s in t e t iz a d o s
El
d e un i d e n t i f i c a d o r
de
y v a r ia b le s
a n a liz a d o r
lé x ic o
la s
d e c la r a c io n e s ,
se
i nt * a O
u s a ra n
a t r ib u t o s
g lo b a le s .
cu an do l e e
un i d e n t i f i c a d o r
regresara
una
e s t r u c t u r a q u e c o n t ie n e :
el
nom bre d e l
el
S ím b o lo p r e v i o con e l
En e l lo s
S ím b o lo
O p erad ores
r e fe r e n c ia , t r a n s m itir á n
id e n tific a d o r .
’ l o c a l ’ , s e gu a rd a ra e l
d e D e c la r a c ió n
que
mismo nom bre,
fu e ro n
de
si
e x is te .
A lm a c e n a m ie n to ,
un I d e n t i f i c a d o r .
regresad os
por
el
a s c e n d e n te m e n te en a t r i b u t o s
El
a n a liz a d o r s in t e t iz a d o s .
el
T ip o y
nom bre y
la
lé x ic o ,
se
Pre c o m p ila d o r de C++
e l E m is ió n d e C ó d ig o . NO INCLU ID A EN EL TRABAJO.
cO C o m p ila c ió n d e C ó d ig o . NO INCLUID A EN EL TRABAJO.
FASE DE DESARROLLO
64
ESTRUCTURAS DE DATOS d e l Precom pi l ador de C++ a C
a^ T a b la de S ím b o lo s .
CV&r M ódu lo TBLSYMO. O
En e s t e M ódu lo s e d e s c r ib e n :
Im p le m e n t a c io n d e l T ip o s d e
lo s
Campos d e
t ip o
S ím b o lo .
cam pos de l o s
S ím b o lo s Cy s u s v a l o r e s
n u lo s y .
l o s S ím b o lo s .
S í m b o lo s . F u n c io n e s B á s ic a s . F u n c io n e s C o n c e p t u a le s .
1m p le m e n ta c io n d e l
Como f u e e s ta r
m e n c io n a d o
lig a d o
S ím b o lo s .
tip o
Por
a o tro . e s ta
S ím b o lo .
en
la
ETAPA
En g e n e r a l , cau sa
el
t ip o
se
DE DISEFIO, tie n e n
S ím b o lo
un
lis ta s se
S ím b o lo en l a
i mpl em en tó
e s t r u c tu r a que c o n tie n e : - Una b a n d e ra i n d i c a d o r a d e l - Un a p u n ta d o r y q u e s e p u ed e v e r
Ca l a
tip o
d e S ím b o lo .
m em oria d e d ic a d a a l
como un a p u n ta d o r
La m em oria d e d ic a d a a l
S ím b o lo D .
con t ip o .
S ím b o lo e s a l o j a d a
pued
T % bla
d in á m ic a m e n te .
con
d un
FASE DE DESARROLLO
Preccn.pilc.dor de C++
T ip o s de
l o s cam pos d e
Con e l
fin
A cada n u lo .e s
tip o
o b je to
de
y al
la
se
v a lo r
r e p r e s e n ta c ió n de c i e r t o
n e c e s id a d
de
l e ^ a s o c ia
de r e g r e s o
el
rru le s ? .
medi f ’i c a r
tip o s
un
i as
de lo s
v a lo r
campo
f u n c io n e s
cam pos.
n u lo .
d e una f u n c ió n
E s te
v a lo r
C p o s ib le m e n t e
camp$.
S lm J b clcs.
fu n c ió n
tie n e n
in f o r m a c ió n
CFUNCTION) ,
COBJECTD
una l i s t a
la
Cy s u s v a l o r e s
c o n MACROS l e s
campo
lim p ia r
S ím b o lo s
S ím b o lo
creo
te n e r
s e d e fin ie r o n
Campos de l o s
Los
s in
u sa d o en e l
con e r r o r )
S í rrJbo l e s
de p od er m o d ific a r
d e un S ím b o lo , a s o c ia d a s ,
lo s
ss
tie n e n de to d o s
el lo s
s e m e ja n t e .
un S ím b o lo
campo
Nombre
p o s ib le s
Por
c ia s e C C L A S S ) CN'AME).
e je m p lo y
D e b id o
un
un S ím b o lo a
cam pos q u e c u a l q u i e r
es to
se
S ím b o lo
p u ed e t e n e r .
S í m b o lo s . Al qu e
d e fin ir
e s te
la
S ím b o lo
e s tru c tu ra p u ed e
p ara
ocu p ar.
un S ím b o lo , Por
se e lig e n
e je m p lo ,
la
lo s
cam pos
e s tru c tu ra
del
F reccizpi lodar d s C++
FASE DE DESARROLLO
S ím b o lo o b j e t o COBJECTD, ocupa, l o s
obj e to
OBJECT
Nombre
FLD_NAME
A l macenami e n t e
FLD_STGE
T i po
FLD_TYPE
D e c la r a d o r
FLD_DCLTR
Ni v e l
FLDJLÉVEL
R e f e r e n c ia
FLD_REF
Hermano
FLD_NEXT
V al or
FLD _VALr
cam pos:
E s ta e s t r u c t u r a e s u sad a ta m b ié n en e l •tip o
S im b o lo ,
S í m b o lo .
-cuando
se
p id e
el
S-
v a lo r
’ c a s t’ de
un
del
a p u n ta d o r d e l
campo
de
d ic h o
FASE DE DESARROLLO
P re c o m p ila d o r de C++
F u n c io n e s B á s ic a s de
Las
F u n c io n e s
6S
la T a b la de S ím b o lo s CVer M ódu lo TBLSYM1 . O
B á s ic a s
de
la
T a b la de S ím b o lo s
se
d iv id e n
en
2
gr upos:
F u n c io n e s q u e m a n eja n cam pos. F u n c i e n e s q u e m a n eja n S ím b o lo s .
F u n c io n e s q u e m a n e ja n cam pos.
E n tre e s ta s
f u n c io n e s
-
P e d ir
-
Dar e l
el
v a lo r
-
Im p r im ir e l
v a lo r
se
e n c u e n tr a n :
d e un
campo C
a un campo v a lo r de
G e t F ld O D
C P u t F ld O
2)
un campo C P r i n t F l d O }
F u n c io n e s q u e m a n e ja n S ím b o lo s .
E n tre -e s ta s
- P e d ir
f u n c io n e s s e e n c u e n tr a n :
el
- P re g u n ta r
tip o si
d e un S ím b o lo un S ím b o lo e s
n u lo
C G etS ym O
D
C N u llS y m O
D
P r e c a r i Ix d z r de C++
FASE DE DESARROLLO
S3
•C A l 1 o c G lo b a lC D , A l 1c c C la s s C D , A l lo c F u n c t i o n O , e t c . - Im p r im ir - B o rra r
un S ím b o lo
un S ím b o lo
D
C C le a r S y m O
}
- Rem over un S ím b o lo
(L Rem O
- L ib e r a r
C F reeO
la
m em oria d e un S ím b o lo
D
C PrintSym CD
D D
FASE DE DESARROLLO
Fre'compi l ador de C++
F u n c io n e s C o n c e p t u a le s de
70
la T a b la de S ím b o lo s .
C V er M ódu lo TBLSYM2. C D
L a s Fu n c io n e s
C o n c e p tu a le s
de
la
T a b la d e S ím b o lo s ,
s e d iv id e n
en 2 g ru p o s :
Fune i o n e s p a r a ca m p os. F u n c io n e s p a r a S ím b o lo s .
F u n c io n e s p a ra cam pos
C V er M ódu lo T3LSYM2. O
En e s t a M ódu lo s e d e s c r i b e n . :
B a n d era s AddT ypeC 2 ; A d d S tgeC 2 ;
1
AddDc 1 rC S>;
C h k S tg e C 3 ; AddDc 11 r F u n c C2 ;
AddDc 11 r A r r C 2 ;
B a n d era s
A lg u n o s cam pos m an ejan b a n d e r a s . en
mapas
de
b its .
P a ra
el
m a n ejo
E s ta s de
b a n d e ra s
b an d eras,
se
se
im p le m e n ta n
d e fin ie r o n
la s
MACRCS s i g u i e n t e s :
F la g C d ,fD
L e v a n ta l a
F la g P C d .fD
P r e g u n ta p o r l a
b a n d e ra
b a n d e ra
Tf *
R em FlagC d, f D
B a ja l a
’f ’
d e s c r ip to r
b a n d e ra
* f*
del
del
d e s c r ip t o r de
’d’ .
*d *. ’ d *.
AddT ypeCy
A g r e g a una n u e v a b a n d e ra de T i p o , C hequea qu e l a s n u eva.
Si
lo
b a n d e ra s
son,
m arca
e x c lu y e r it e s y l e v a n t a NOTA:
la
a un S ím b o lo .
a n te r io r e s error,
no s e a n
e lim in a
e x c lu y e n t e s
la s
b a n d e ra s
con
la
p r e v ia s
n u eva.
Una b a n d e ra e s e x c l u y e n t e c o n s ig o misma.
Los t ip o s
p e r m itid o s
t y p e d e f _name con st ----------- j | '----
son:
u n s ig n e d —j— i n t —i— '— s h o r t flo a t '— ch a r d o u b le
lo n g
c l ass s tru c t en'um voi d En l a
fig u r a
a n te r io r
d e b a n d e ra s p r e v i a s
se
v e q u e c a d a b a n d e ra t i e n e
no e x c lu y e n t e s .
p a ra
’ ch a r*,
p a ra
* in t’ , lo
s o n no e x c l u y e n t e s son
’ const
un c o n ju n t o
P o r e je m p lo : ’ c o n s t*
urtsi gn ed
y
’ u n s ig n e d * ,
1cn g ’
y
’ s h o rt*-.
72
FASE DE DESARROLLO
Precorraci I ador de C++
A d d S tgeC J
A g r e g a una n u e v a b a n d e ra d e A lm a c e n a m ie n to , Chequea qu e l a s nu eva.
Si
no
e x c lu y e n t e s NOTA:
lo
b a n d e ra s a n t e r i o r e s
son,
m arca
y le v a n ta l a
error,
a un S ím b o lo .
no s e a n
e lim in a
e x c lu y e n t-e s
la s
b a n d e ra s
con
la
p r e v ia s
nu eva .
Una b a n d e ra e s e x c l u y e n t e c o n s ig o misma.
L o s A 1 m acen am ien tos p e r m it id o s
son:
— a u to ------------s t a t i c — --------- o v e r l o a d — — e x te rn — — r e g is te r -
i n l i n e — ■' v i r t u a l —
fr ie n d
ty p e d e f
En l a de
fig u r a
b a n d e ra s
p ara
a n t e r io r
p r e v ia s
no
se ve
qu e c a d a b a n d e ra t i e n e
e x c lu y e n t e s
’ a u t o ’ , so n no e x c lu y e n t e s :
no
e x c lu y e n te s .
’ o v e r lo a d ’ ,
un c o n ju n t o Por
’ in lin e ’ ,
e je m p lo ,
’ v ir tu a l’
y
’ fr ie n d ’
C h J iS lg e C }
C hequea S ím b o lo ,
la s en
b a n d e ra s
c ie r to
de
e n to rn o .
A lm a c e n a m ie n to E sta
r u tin a
p e r m it id a s es
lla m a d a
p ara per
un la s
Func i o n e s p a r a. S í mJbo le s .
L a s b a n d e ra s d e A lm a c e n a m ie n to p e r m it id a s * e n to rn o ,
s e m u estra n en l a
Con l a s i g u i e n t e b a n d e ra C b a n d e ra } [b a n d e r a ]
1
AddDc l rC J>;
s ig u ie n t e
d a d o un S ím b o lo y un
t a b la .
c o n v e n c ió n : p e r m it id a p o r C. p e r m it id a p o r C++. p e r m it id a p o r C++ C d e fa u lt D .
Adid.Dc l1 r F u n c C5 ;
A n te s d e d e s c r i b i r
e s ta s
r u t in a s ,
AddDc l t r A r r C
se
;
dará, una e x p l i c a c i ó n
de
la
FASE DE DESARROLLO
Preccm pi laclar de C++
manera como s e a lm a c e n a un d e c l a r a d o r .
Un d e c la r a d o r
d e un S ím b o lo t i e n e 2 p a r t e s
D e s c r ip to r A p u n ta d o r a. l a
T a b la d e D im e n s io n e s .
D e s c r ip to r .
En
el
D e s c r ip to r
d e c la r a d o r .
se
g u a rd a
E s to s o p e ra d o re s
A p u n ta d or
ARR
F u n c ió n
FUNC
A p u n ta d o r C o n s t a n t e
CPTR
R e fe r e n c ia
REF
En
la
TABLA
DE
p a ra :
DIMENSIONES
E s ta t a b la
S e usa un r e n g ló n A r r e g lo
s e c u e n c ia
de
o p era d o res
del
PTR
Ar r e g l o
d e c la r a d o r .
la
p u eden s e r
CARRD
ó
se
es d e s c r ita
de la
F u n c ió n
g u a rd a
i n f o r m a c ió n
e x tra
del
p o s t e r io r m e n t e .
TABLA DE DIMENSIONES p a r a c a d a o p e r a d o r CFUNO.
En
ese
r e n g ló n
se
a lm a c e n a
F re c o x ip ila d c r ds L++
Al
FASE DE DESARROLLO
A r r e g l o CÁRRD
d im e n s ió n C e x p r e s ió n }
F u n c ió n CFUNCD
P r im e r s ím b o lo d e l a
lle g a r
a n te r io r .
Si
un n u evo
d e c la r a d o r ,
se
no h a y c o m p a t i b i l i d a d
e s p e c ific a d a . lis ta
chequ ea
e n tre
75
d e a rg u m e n te s .
c o n tra
lo s
dos
el
in m e d ia t o
d e c la r a d o r e s ,
se
m arca un e r r o r .
Cada- o p e r a d o r p r e v io s
de
p e r m it id o s .
d e c la r a c ió n E s ta
tie n e
r e la c ió n
un
se
c o n ju n t o
m u e s tra * en
de
o p era d o res
la
s ig u ie n te
ta b la :
DCLTR
DCLTR’ s p r e v i o s PTR x x x x CxD
PTR ARR FUNC CPTR REF C D
ARR
FUNC x
x x
p e r m it id o s CPTR x
REF CxD x
, x x
x C x)
Cx!) x
b a n d e ra s q u e s e a n u la n m utuam ente.
P o f e je m p lo ,
el
a n á lis is
s in tá c tic o
de la
d e c la r a c ió n
g lo b a l in t
a r r o ja ,
* C* f
3 C flo a t D
d e b id o a l a
C103
p r io r id a d ,
lo s
s ig u ie n t e s
op erad ores
FASE' DE DESARROLLO
Precom.pi i ador de C++
76
PTR FUNCC f 1 c a O ARRC103 PTR
en e s e o rd e n .
E sta d e c la r a c ió n
"a p u n ta d o r
s ig n ific a
a una fu n c ió n Cde a rg u m e n to f l o a O
a r r e g l o Cde 10 e le m e n te s !)
y s e g u a rd a en e l
d e c la r a d o r ,
mapa d e b i t s ,
543 PTR «—
10
Por
o tra
lo c a lid a d
o tra
p a rte que
que c o n tie n e
A d d D c lt r C l
un
como
b its
PTR
flo a t
y a qu e c a d a o p e r a d o r
la
210
ARR
de
FASE DE DESARROLLO
P re c e m p ila d o r de C++
ARCHIVOS d e l P r e c o m p i i a d o r d e C++ a C
aS> A r c h iv o d e C ó d ig o L ig a d o .
CFI_CODO
Hay 6 M ódu los d e d ic a d o s a l m a n ejo
de e s t e a r c h iv o :
P e d id o y
L ib e r a d o de M e m o ria D in á m ic a
C Móds.
F IP T R 0 -1 .C
T a b la de
C ó d ig o
C M óds,
TBLCCD O -i. C D
L is t a de
C ó d ig o
C Móds.
LSTCODC-1. C
P e d id o y L ib e r a d o d e Mem or i a. D in á m ic a
C M ódu los F IP T R 0 -1 .C D
En e s t e M ódu lo s e d e s c r ib e n :
T ip o A p u n ta d o r a A r c h iv o . A l o j a r M e m o ria e n A r c h i v o
C A llo c F iC D
L i b e r a r M e m o ria de A r c h i v o
CF r e e F i O
P e d i r V a l o r de
la L i g a
C P u t L in k O
D
D ar V a l o r a
lig a
C G e t L in k O
D
la
D D
T ip o A p u n ta d o r a A r c h iv o .
E s ta im p la m e n ta d o c o n una e s t r u c t u r a qu e c o n t i e n e :
D
2
r e n g ló n
ROW
colu m na
COL
P a ra m an eja
que
e s ta
como
un
A c tu a lm e n te ,
r e p r e s e n ta c ió n
a r r e g lo
n *
YO.
de
te n g a
c a ra c te re s ,
Donde n e s
el
A lo ja r - y L i b e r a r M eritoria de A r c h iv o
El. a r c h i v o
-
el
se
p u ede
ver
como
I n i c i a l m en te,
la
el
r e n g ló n . e llo s la
En o t r o Si
El
v a lo r
C A llo c F iO .
a r r e g lo
al
F r e e F iO
que
se
le
D
p u ed e
una c e l d a
Cuando s e
caso,
mayor q u e e l se
s i n r e n g lo n e s . C u a lq u ie r
p r o v o c a r á qu e s e a g r e g u e un r e n g ló n .
d e v u e lv e
q u e d a n 's u f i c i e n t e s
m em oria l i b r e
lio ta
un
se
m em oria máxima en un a r c h i v o .
a r c h i v o e s un a r r e g l o
m em oria p e d id a e s
un e r r o r -
a r c h iv o
d im e n s io n e s .
núm ero d e r e n g lo n e s q u e s e n e c e s i t e .
núm ero d e b y t e s q u e s e p id a n , Si
el
c ie r t a s
número d e r e n g lo n e s .
máximo d e n qu ed a d e te r m in a d o p o r l a
a grega r
s e n tid o , de
b y te s
d e .m e m o ria l i b r e ,
tam año d e l un
r e n g ló n ,
a p u n ta d o r
al
d e m em oria l i b r e ,
y en e s e momento,
el
se
m arca
in ic io
del
se crea
con
a p u n ta d o r
a
a p u n ta a e s a c e l d a .
lib e r a
una c e l d a d e m em oria, s e
do c o i d a s d-s> m em oria lih>r
c e ld a s
con
de
m em oria
u n -a p u n ta d o r
a
en
a r c h iv o
C TBL_COD D ,
una e s t r u c t u r a
y
qu e c o n t i e n e
Preccx.pt lador de C++
FASE DE DESARROLLO
S7
dos p a r te s :
A p u n ta d o r a l
in ic io
A p u n ta d o r a l
fin a l
Fxirxc io n e s
de l a de l a
lis t a lis t a
C In s S trB & g L C C 2 .
CTBL_CODD CTBL_CODD
In sS trE n cLLC C J>
1n sS trB & gLC C 2 Con
e s ta
fu n c ió n
hacem os
crecer
una
lis t a
de
c ó d ig o
por
su
de
una
p a rte f i n a l.
I rtsS t rEndLCC J> Con e s t a
fu n c ió n
podem os
a grega r
un e le m e n t o
al
fin a l
lis ta .
¿>J> A r c h i v o cle C ó d ig o &n C.
Es
el
fin a liz a r
I I I .3 .2
a r c h iv o el
CFI_COD_C!>
s e c u e n c ia l»
A n á lis is
c o m p ila b le
S in tá c tic o
en
y S e m á n tic o .
MODULOS Y FUNCIONES PROBADOS.
C,
qu e
se . crea
al
Precoxipi iadcz
Em
el
de C++
A p é n d ic e
m e n c io n a d o s ,
asi
FASE DE DESARROLLO
C,
como
se la
in c lu y e p a rte
una
de
lis t a
p r e s e n t a c ió n
de de
le s ca d a
M odulos uno
de
e l 1o s .
E l A r c h iv o de D e s c r ip c ió n d e l E l A rc.\
i xjo d e
I m p l e m e n t clc i ó n
M ó d u lo C **inc lu d e**} de
l as
Ru t iñas
Sks i c as
I I I . 3. 3 C_ MODUI-OS IN TE GRADOS PROBADOS 3 .
NO ALCANZADO.
I I I . 3. 4 C PR'.'EBA CON DATOS.
NO ALCANZADO.
COMPROBACION DE RESULTADOS ESPEPADQS —
FASE DE PRUEBA
Precdm pi laclar d e C++ a C
V. .
1 .1
F A S E
DE
89
P R U E B A .
INTRODUCCION.
En eta p a
e s ta
fa s e
fin a l.
r e q u e r im ie n t o s DISEfíO. la s
s e d e b ió
p ro b a r
el
A a b ia q u e v e r i f i c a r del
Adem ás,
u s u a r io
ta m b ié n
c a r a c te r ís tic a s
d e te r m in a n d o
la s
r e e m p la z á n d o la s
en
que e s ta
se fa s e ,
o p e r a c io n a le s
r u tin a s
por o tr a s
Pr& c cmp i l a d o r
qu e fu e r a n
más
p la n t e a r o n se del
c r ític a s
de
C++
s a tis fe c h o s en
d e b e r ía n
la h a b er
P r e c o m p ila d o r y
en
su
to d o s
le s
ETAPA
DE
m e jo r a d o de
C ++,
o p tim iz á n d o la s ,
o
m ejo rfes.
1 . 2 OBJETIVOS.
1 .2 .1
V e r ific a r
qu e
lo s
r e q u e r im ie n t o s d e l
u s u a r io
sean
s a ti s f echos. 1 .2 .2
L o gra r
1 .2 .3
F in a liz a r
c a r a c te r ís tic a s la
o p e r a c i o n a l e s ó p tim a s .
p ru e b a c o m p le t a d e l
S is te m a .
1. 3 PRODUCTOS ENTREGADOS.
El
P recom .p t la d o r
de
C + + no
fu e
p r o b a r s e c o m p le ta m e n te .
89
te r m in a d o ,
por
ta n to ,
no
pudo
FASE DE IMPLEMENTAd ON
Precom pi la d or de C++ a C
V I .
F A S E
V I .1
INTRODUCCION.
En e s t a C por do
fa s e
c ie r to
fu e r a
qu e
qu e
es tá n d a re s
la
p ara
fá c il
se
I
d e b ía
c o n tro l
v a r ific a r
r e v is a r ía
DE
M P L E N T A C I
hacer
se
cu m p lie ra .
p r o g r a m a c ió n la
pasar
de c a lid a d .
y
P r o g r a m a c ió n
su p o s t e r i o r
E s te con
al
O N .
P r e c em pi la d o r
co n tro l to d o
90
s e r ía
lo
de
el
p r o m e t id o .
d o c u m e n ta c ió n
c u m p lie r a
de
de
S is t e m a s ,
ta l
C+ +
a.
en ca rga d o Además con
lo s
fo rm a
qu e
m a n te n im ie n to .
V I. 2 OBJETIVOS.
V I . 2. 1
C om plem en tar
la
im p le m e n t a d ó n
de
to d o s
lo s
p r o c e d im ie n t o s y f u n c io n e s .
V I.2 .2
V e r ific a r y s e r v ic io
qu e s e cu m pla co n l o s
c r ite r io s
de a c e p ta c ió n
de p ro ceso .
R e a lm e n te la m e n to no h a b er p o d id o e n t r e g a r
e s to s
p ro d u c to s .
Predom.pt la d o r de C++ o. C
CONCLUSIONES
91
CONCLUSIONES
El
P re co m .p t had ar
Fue un i n t e n t o y
la
p r o g r a m a c ió n .
r e q u ie r e , la
C + + a. C
S in
NO f u e
c o n d ic io n e s .
e m b a rg o ,
p r£ p G S l& 0 dv
em b a rg o ,
mÁ5 a l c a n c e ,
p e r m it a
M e to d o lo g ía
d e C om pi1a d o r e s .
S in
crea r
lo g r a r
se ' desea s e m b ra r
es to
en
un
t e r m in a d o . el
d is e ñ o
c o rto
t ie m p o
ó d e una g r a n e x p e r i e n c i a
Y no s e
h e r r a m ie n t a s
de D e s a r r o llo
c o m p le ta m e n te
una h e r r a m ie n t a q u e f a c i l i t a r a
ó d e un e q u ip o d e p e r s o n a s ,
c o n s tr u c c ió n
q u e n os
de
de p ro veer
la
in q u i e t u d hechas.
en
n in g u n a d e e s a s
a n h e lo s a m e n te
b ie n
de P ro y e c to s .
t e n ía n
d* E se
lo g r a r
¿ a n a ir-u ir"a lg o "
2
o tro
es
«itera una
Precom.pt lodar- d e C++
A P ENDICE A»
cl
C.
METODOLOGIA DE DESARROLLO
M E T O D O L O G I A DE DESARROLLO.
A corit inu.ac ió.~. se describen brevemente los pasos seguir en este
cada una de
les fases de
la
.Petóle logia
trabajo.
I. FASE DE ESTUDIO.
LlL
i t *Taop jccip v.m
LúL 0?¿ETiycs;. OBJETIVOS DEL PROYECTOREQUERIMIENTOS DEL USUARIOSOLUCIONES pOTENCIALES• SOLUCIONES FÜTENCIAL ES. COSTOS Y BENEFICIOS SOLUCION ESPECIFICA RECOMENDADAPLAN r~L PROYECTO•
Lzl PRODUCTOS I EVTREO.V; ■„ DOCUMENTO DE OBJETIVOS DEL PROYECTO• DOCUMENTO DE REQUERIMIENTOS DEL USUARIODISEWO CONCEOTUAL DE LA SOLUCION °ECOMENDADA -
ue
se
ds¿en
pr opuesta
en
METODOLOGÍA DE DESARROLLO
Pracc.upi la d or da C++ a C.
II.
FASE DE DISEfJO.
V IS T A DE LA ARQUITECTURA DEL SISTEMA. FA C ILID A D E S PARA EL USUARIO. D ESCRIPCIO N DE DATOS: D i.c c iG n a .r io de D a to s . D is e ñ o
ló g ic o
de
la s B ases d e D a to s .
V IS T A DEL PROCESO DE DATOS. CD ia g ra m a q u e m u e s tr a p r i n c i p a l e s
fu n c io n e s ,
in te rfa c e s
y
d e p e n d e n c i asS>. DISEÑO DE LAS ESTRUCTURAS DE DATOS Y ARCHIVOS. DESCRIPCIO N DE LAS TRANSACCIONES DEL SISTEMA. C O r g a n is a c íó n
de
M ó d u lo s
y
P ro g ra m a s ,
D ia g ra m a
E s t r u c t u r a , E s tá n d a r e s d e P r o g r a m a c ió n y O r g a n is a c ió r O '
de
METODOLOGIA DE DESARROLLO
PROCEDI Ml E l'll OS ESPEC1ALES'. CExc&pc io n
Los e s tá.nd
! F_LONG! F_SHORT D
>
CF_UNSI GNED! F_FLCAT I F_DOU3LÉ 1F _ I N T! f_ char: f _sh ort: f
Y * b a n d e ra s d e d e c la r a d o r
_longd;
C’ d c l t r ’ D
/ x 4 b y t e s , 3 b i ts -'b a n d => 9 band + F_NCDCL
¿ d e fin e
N_FLG_DCLTR
111
3
b its
¿ d e fin e
F_NODCL
CDCLTRD
0x0000
¿ d e fin e
F_ARR
CDCLTRD
0x0001
¿ d e fin e
F_PTR
CDCLTRD
0x0002
¿ d e fin e
F_FUNC
CDCLTRD
0x0003
q u e ocu pa
*/
Frezorr.pilc.dor de C++ c C.
CODIGO DE LOS MODULOS
¿ d e f i ne
F_REF
CDCLTRD 0x0004
¿ d e f i ne
F_CPTR
CDCLTRD 0x0005
¿ d e fin e
F_CREF
CDCLTRD 0x0006
¿ d e fin e
F_ANYDCL
CDCLTRD 0x0007
b a n d e ra s d e a n c e s t r o C ’ p a r e n t ’ D ¿ • d e fin e
F _P R I V
1
¿ ■ d e fin e
F_PUB
2
funciones para C AMPOS
/ x T b lS ym x/
ex te rn
in t
G etS ym O ;
ex te rn
i nt
Nul 1 SymC D ;
/ x PUT
S
XX
e x te rn
NAME
PutNameC D;
e x te rn
STGE
P u tS tg e C D ;
e x te rn
TYPE
P u tT y p e O ;
e x te rn
DCLTR
P u tD e ltr C 3 ;
e x te rn
LEVEL
P u tL e v e lC D;
e x te rn
TOKEN
PutOperCD ;
e x te rn
TOKEN
PutC onyC D ;•
e x t e r n TOKEN
Pu tS tm tC D ;
e x te rn
TBL_SYM
PutRefC D ;
e x te rn
PARENT
P u tP aren tC D
112
P r ec omp i l ador de C++ o, C,
e x t e r n FLG PA R
P u tF lg P a r C D ;
e x te rn
ATTR
P u t-W ex t O :
e x te r r * t '* l U
FuiTwir.Cl :
f t v t - e r r> ATTP.
P u tM e m b l r\i t-C D ;
ATTŒ
FutAlira:
e x te rn
ATTR
P u tP u b A ttrC D ;
e x te rn
A TTR
P u tP r iv A ttr C D ;
e x te rn
FLG PA R
P u tF la g M e m b C D ;
e x te rn
HEAD
P u tC u rrH e a d C D ;
e x te rn
HEAD
P u tE n c H e a d C D ;
e x te rn
A TTR
P u t D t o r CD ;
e x te rn
T R E E _D E S T
P u tT r e e D e s tC D ;
e x te rn
T B L_LB L
P u tL b lO ;
e x te rn
T R E E _E X P
P u tV a l'C D ;
»r n
/ X GET s
e x te rn
NAME
e x te rn
STGE
G etN am eC D ; G e tS tg e O ;
e x te rn
TYPE
G e tT y p e C D ;
e x te rn
DCLTR
G e tD c l tr C D ;
e x te rn
LE V E L
G e t L ë ' v e l CD ;
e x te rn
TOKEN
G e t O perC D ;
e x te rn
TOKEN
G e t C o n vC D ;
e x t e r n TOKEN
G e tS tm tC D ;
e x te rn
TBLJSY-M
G e tR e fC D ;
e x te rn
P AR E N T
G e t P a r e n tC D ;
e x te rn
FLG PA R
G e tF lg P a r C D ;
e x te rn
A TTR
G e t N e x t CD ;
e x t e r n T W IN
G e t T w i nC D ;
e x te rn
ATTR
G e tM e m b ln i tC D
e x te rn
ATTR
G e t A ttrC D ;
e x te rn
ATTR
G e tP u b A ttrC D;
e x te rn
ATTR
G e t P r i v A t t r CD
CODIGO DE LOS MODULOS
F re 'Z Z -p i ladzr de O-*- c: C.
e x t e r n FLGPAR
G e tF l gMembC D ;
e x t e r n HEAD
G etC ur rHea.dCD ;
e x t e r n HEAD
G etE n cH ea d O ;
e x t e r n ATTR
G e tD to r CD;
e x t e r n TR EE_DE ST G e tT re e D e s tC D ; ex te rn
TBL_LBL
G etL b lC D ;
e x t e r n TREE_EXP
G e tValCD ;
P R IN T ’ S
e x t e r n NAME
P r i ntNameC D;
e x t e r n STGE
P r in t S t g e C D ;
e x t e r n TYPE
P r in tT y p e O ;
e x t e r n DCLTR
P r in tD c ltr C D ; t
e x t e r n LEVEL
P r in tL e v e lC D ;
extern
TOKEN
Pri n t Û p ô r C D ;
e x t e r n TOKEN e x t e r n TOKEN
P r in tC o n v O ; -
P r i ntSLm tCD;
e x t e r n TBL_SYM
P r in tR e fO ;
e x te rn
PARENT
P r in t P a r e n t C D ;
• e x t e r n FLGPAR
P r in t F lg P a r C D ;
e x te rn
ATTR
P r in tN e x tO ;
e x te rn
TWIN
P r in tT v in O ;
e x t e r n ATTR
P rin tM e m b In itC D ;
e x t e r n ATTR
P r in tA ttr O ;
e x t e r n ATTR
P r in t P u b A t t r O ;
e x t e r n ATTR
P r in tP r iv A ttr C D ;
e x t e r n FLGPAR
P rin tF lg M e m b C D ;
ex te rn
HEAD
P r in tC u r r H e a d C D ;
ex te rn
HEAD
P rin tE n c H e a d C D ;
e x te rn
ATTR
P r in t D t o r O ;
e x te rn
TREE_DEST
P r i r.tT r e eD estC D ;
e x t e r n T3L_LB L
P r in t L b lC D ;
ex te rn
P r in tV a lC D ;
TREE_EXP
CODIGO DE LOS MODULOS
114
/x fu n c io n e s p a r a SIMBOLOS
ALLOC’ s x/
e x te rn
TBL_SYM
A l 1 o cG l c b a l CD ;
e x t e r n TBL_SYM
A l 1 o c C i assCD ;
e x te rn
T5L_SYM
A l lo c F u n c t i o n O
e x te rn
TBL_SYM
A l 1 o cH ea d er CD ;
e x te rn
TBL_SYM
A l 1 ocO bj e c tC D ;
/ * PR IN T e x te rn
TBL_SYM
P r in tO ;
CLEAR e x te rn
TBL_SYM
C learC D ;
REMOVE’ S x/ e x t e r n TBL_SYM
RemoveCD;
/ x FREE x/ e x t e r n TBL_SYM
F reed ) ;
*
Pre*compi Ictcl&r cL& C++
AN A LISIS LEXICO DE C + -f
116
/*lí)(*í(Jf)ÉKJéJ C v - l + s i z e o f
¿ d e f i n e tokenCxD
x
v x s iz e o f
vCOlD
xx
Pr.a-n r .-1> ?cid o r d s C++
ANALI S IS LEXICO DE C++
ÌI7
/ X iH tX X it X X X X X X X X X X X X X X X X X X X X X X iiX X X X ÎO fX X ifX iiX X X X X X X X X X X itX K X X X X X K X X X X /
/ * EXPORTA
*/
/ x * M o o e x x x x x x x x x x x x x x x x x x x * o o o e x x ífr x x x x x x x x x x x x : x x x x x x x x x x x x x x x x x x x x x /
in t
yyn errs= 0 ;
/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxx/ /X LO C A L E S
x/
/X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X '
s t a t ic
in t
screen O ;
mai nC D ; s ta tic
s t r u c t r w ta b ie
/ x o rd e n a d a d a s x/
rw ta b le C 1 = -C AUTO
a u to "
,
b reak "
,
BREAK
case"
,
CASE CHAR
ch a r"
,
c la s s "
,
CLASS
co n s t"
,
CONST
c o n tin u e "
,
CONTINUE
d e fa u lt"
,
DEFAULT
d e le te "
,
DELETE
do"
,
DO
d o u b le "
,
DOUBLE
e ls e "
,
ELSE
enum"
,
ENUM
extern"
,
EXTERN
flo a t"
,
FLOAT .
'f o r "
,
FOR
‘ friend"
,
FRIEND
•g o to "
,
GOTO
x/
*/
AN ALISIS LEXICO DE C++
" i f
'
" i n i i ne"
IN L IN E
"in t"
I NT
* 'io n g "
LONG
"n e w "
NEW
"o p e ra to r'
o perator
" o v e r lo a d '
OVERLOAD
" p u b lic "
PUBLIC
"re g i s te r '
REGISTER
"re tu rn "
RETURN
"s h o rt”
‘
SHORT
"s i z e o f"
SIZEOF
"s ta tic "
STATIC
".s tr u c t"
STRUCT
"s w itc h "
SWITCH
"th is "
T H IS
"ty p e d e f"
TYPEDEF
" u n io n "
UNI ON
" u n s ig n e d 1
UNSIGNED
"v ir tu a l "
VIRTUAL
"v o id "
VOID
" w h i1e "
WHILE :
•/* d e f i n i c i ó n
de tok en s
le t
C a -z A -Z ]
spc
C 3
d ig
CO-9]
n o n z e r o _ d ig
C l- 9 ]
IIS
CO-73
o c t_ d i g h ex_di g
C 0 -9 a -fA -F 3
1ong_m ark
Cl !L3
hex_ma.r k
C ,‘ 0 ,,CxX3D
di g_seq
C< d ig > +3
d o t _ d i gs
C < d lg _ s e q > " . " < d i g _ s e q > ? !
exp
C CeE3 C+ -3 ? < d ig _ s e q > D
dec_con st
C< n o n z e r o _ d i g> < d i g>
o c t_c o n s t
C " 0 " < o c t _ d i g> x < lo n g _m a rk > ? 3
hex_con st
C{h e x _ m a rk > -Chex_di g> +< lon g_ra a ,rk > ?)
flo a t
C< d i g_seq>-C exp> I -Cdot_di g s X e x p ) ? )
con st
"-Cd-i g_seq>D
1ong_m ar k> 70
ch ar_esc_cod e
Cn t b r f v n 3
num __esc_code
C < o c t _ d i^ > G < o c t _ d i g X o c ^ d i g}"?D 7D
esc_code
C < c h a r _ e s c _ c o d e > ! < n u ra _e s c _c o d a > )
e sc char
•
C " \ " < e s c code>D
p r in t _ c h a r
C : -Cdi g>D
ch a r
C -C p rin t_ c h a r> ! < e s c _ c h a r> D
ch a r_co n st
C ""< c h a r> ""5
s t r in g _ c o n s t
C " H< c h a r > x " " )
f i rs t_ c h a r
c< ie t> :
fo llo w _ c h a r
C < le t > :
i d i g>D
i den t
C {fir s t
c h a r X fo llo w
o th e r
ch ar>*5
AN A LISIS LEXICO DE C++
Precom pi leído r de C++
r e t ur n t ofcenCMGD r e t u r n tokenCPPD re tu rn
tokenCMMD
re tu rn
tokenCLLD
r e t u r n - tckenCGGD r e t u r n tokenCLED re tu rn
tckenCGED
re tu rn
tokenCEED
r e t u r n tckenCNED re tu rn
tokenCAAD
r e t u r n tok en C OOD re tu rn
tokenCPED
r e t ur n t ck enC MED re tu rn
tokenCTED
r e t u r n tokenCDED re tu rn r e t u r r. re tu rn
tokenCMDED sr;C tokenCLLED
r e t u r n tokenCAED re tu rn
tokenCXED
r e t ur n t ok enC OED
< d e c _ c o n s t>
re tu rn
token C D E C _IN TD ;
120
FrezcK cH cLd zr de C++
A N A LISIS LEXICO DE C++
< h e x _ c o n s t>
re tu rn
< o c t_c o n s t>
r e t ur n to k enC OCT__I NTD ;
tokenCHEX_INTD ;
< flo a t_ c o n s t>
r e t u r n to k en C F L O A T L IT D :
< c h a r _ c o n s t>
r e t u r n tckenC C H A R LITD ;
< s t r in g _ c o n s t >
r e t u r n tokenC STR IN G D ;
< id e n t >
re tu rn
< S p c>+
scre e n C D ;
;
RUTINA
121
r e t u r n tc jk e n C y y te x t[O ID ;
:
screen C )
:
Dado un i d e n t i f i c a d o r , d e v u e lv e
s *t
/ * FUNCION /* /*
to k e n c o r r e s p o n d i e n t e , t o k e n d e ID E N T IF IE R ,
si
*/
e s p a la b r a r e s e r v a d a * /
en o t r o
caso
m e d ia n te una b u sq u ed a b i n a r i a .
/ x x x x xx x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x /
P reccm p ila d o r de C++
s ta tic
in t
AN A LISIS LEXICO DE C++
122
i n t screen C I
t ;
s t r u c t r w ta b le
a p u n ts .
x p lo w = r w t a b l e , * p h ig h
= E N D C rw tab leD ,
a ia
t a b l a d e p a l¿ b r a s f e s e v .
in fe r io r /x s u p e r io r
x pm id;
a/
a/
*/
/ x m ed io x/
whi .1e Cp i ow< =p h i ghO < pm id=plow+C p h i g h -p lo w D / 2 ; if
C C t= s tr c m p C p m id - > r w _ n a m e ,y y te x O }
== 0 D
r 'e tu r n pmi d —> r w y y l e x : e ls e i f
Ct
devu el ve
xx t e r m in a .
c o n t in u a le y e n d o
x/
A N A LISIS SINTACTICO DE C++
Précomp¿ leedor de C++ a. C
MODULO
: C P P .Y
V e r s io n :
DESCPRICION:
A n á lis is
S in tá c tic o
NOTAS
9 C o n flic t o s
1 .0
124
F eb 1 9 /8 9 » » *
d e C++
*
:
s h ift_ r e d u c e
> ?
1.
m e r a b e r _ d a t a _ d e c la r a t ic n : o p t _ d e c l _ s p e c i f i e r / : c o n s *t_ e x p C b i t _ f i e l d D e la s s _ s p e c ifie r C s h ift D a g g r c l a s s _ t a g _ d c l t r / : TYPEDEF_NAME
* » * 5 >
2.
3.
4.
5 ,6 .
7.
8.
9.
p 2 _ d c ltr : OPERATOR o p e r a t o r assgn _exp
/ = in it_ e x p
l o c a l _ d a t a _ d e c l a r a t i on * : type_s^ecifier / deltr ; 3 c p p _exp CshiftD * : sim p l e _ t y p e _ n a m e / C l i s t _ e x p D 3 s i mpl a _ ty p e _ n a m e : TYPÉDEF_NAME / * id _n a m e C s h ift D : TYPEDEF_NAME / CC -ID E N T IF IE R i id _n a m e C s h 'iftD * : TYPEDEF_NAME / CC o p e r a t o r _ f une t i o n jiam eJ p 2 _ d c ltr 5 : OPERATOR o p e r a t o r / C l i s t _ e x p D 3í OPERATOR o p e r a t o r / O i • OPERATOR o p e r a t o r / C l i s t _ e x p D exp i : NEW TY PEDEF_NAME / i e x p C s h ift D ■ : NEW TYPEDEF_NAME / C l i s t _ e x p D ¡ d_name : ID E N T IF IE R / m em ber_dc 11r* C s h ift D ; : ID E N T IF IE R / : c o n s t _ e x p ifjs t m t : I F C 1i s t _ e x p D s tm t / i f e ls e _ s tm t : I F C l i s t _ e x p D s tm t ELSE stm t
En 2 , 3 , 4 , 5 y 6 , s e e l i g e l a e x p r e s i ó n en lu g a r 1& d e c l a r a c i o n , d e n t r o d e una f u n c ió n . . PROGRAMADOR:
5 * *
Ruben R u s i i e s
d
F t s c o T .p t I adO T
•¿token % token Jitoken %t ok en *«t ok en % token •/.token % token %t ok en J itoken Jitoken /■«token ?itok en Jitoken U oken % token U oken •/.token / i token /¿token J itoken % token 5-Stoken •/.token Jitok.en Jitoken Jitoken >;token •/Stoken Jit ok en • J itoken Jitoken s to k e n J itoken •/.token •/.token J itoken Jitoken s to k e n iito k e n J itoken Jitoken % token Jitoken %tok en %tok en % token s to k e n J itoken % tok en
efe c++ a C
AUTO BREAK CASE CHAR CLASS CONST CONTINUE DEFAULT DELETE DO DOUBLE ELSE ENUM EXTERN FLOAT FOR FRIEND GOTO IF IN L IN E I NT LONG NEW OPERATOR OVERLOAD PUBLIC REGISTER RETURN SHORT S I ZEOF S TATIC STRUCT SWITCH TH IS TYPEDEF UNI ON UNSIGNED VIRTUAL VOID WHILE ID E N T IF IE R TYPEDEF_NAME DEC_I NT HEX_INT OCT_I NT F LO ATLIT STRING CHARLIT
>
A N A LISIS SINTACTICO DE C++
125
P reco m p ila d o r de C++ a C
U oken '• to k e n •'»token U oken Jítoken Jítoken ííto k e n / ‘ ítoken U oken U oken U oken U ok en ít o k e n X to k e n Jítoken U oken Jítoken % token %tok'en ít o k e n Jítoken U oken U oken. '/ítoken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken
*, * *