Precompilador de C++ a C - Departamento de Computación

Anuncio
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++ <2 C.
El
P re c o m p i la d o r
como p r o d u c to
fin a l
un S is te m a q u e ,
In te r n a m e n te
de
del
C+ + ct C f u e
p ro y e c to .
la
El
h e r r a m ie n t a
P r e c o m p ila d o r
dado un p ro g ra m a en C++,
tie n e
dos
p asos:
la
que
se
e lig ió
de C + + a C e s
p ro d u c e su c ó d i g o o b j e t o .
t r a d u c c ió n
de
C++
a
C
y
la
c o m p ila c ió n de C.
Las c a u s a p o r l a
c o m p a t ib ilid a d
qu e
qu e s e e l i g i ó
e s to s
C como c ó d i g o in t e r m e d io ,
le n g u a je s
m encionan a n t e c e d e n t e s de e l l o s .
t ie n e n .
A
fu e l a
c o n t in u a c ió n
se
I .3 .1 .1
C
es
un
le n g u a je
a ir r e d e d o r
la b o r a t o r io s
B e ll.
O p e r a t iv o
UNIX
O p e r a t iv a
e s c r ito s
d on d e
como l a
le n g u a je
tero. o.
p r o p o s ito
1972
por
Su
c r e c im ie n to
fu e
d e s a r r o lla d o ,
m a y o r ia
C fu e
e s to
es,
P ero
de lo s
gen era l
D erm is
e s tá .
d is e ñ a d o
R itc h ie
a s o c ia d o
ya
qu e
p ro g ra m a s
e tc .
v e r s io n e s
tie n e
su
de
d e m áquina.
BCPL p a ra
ser
o r ig e n
En 1 9 7 0 ,
ser
H oy.
C es
p ara c a s i
1967.
ta n to
en
e
lo s
al
S is t e m a
e s te
S is t e m a
que c o r r e n
fu e
le n g u a je
C fu e
lla m a d o
en
muy
en é l
e s tá n
p r o g r a m a c ió n
le n g u a je s
p rim e r
agrega n d o e s ta
un t i p o
s is t e m a
t e n ia
un i n t e n t o
n o c ió n a l
A p era d ores
p a ra
de
de
o tra s
p ro g ra m a s
mas u sa d o s
y
co m p u ta d o ra .
d is e ñ a d o
ta m b ié n
en
te le fó n ic o s ,
lo s
por
M a r t in
de d a to s ,
Ken Thompson d is e ñ o una v e r s i ó n
B y
y e d it o r e s
s a ti s f act or i o
de
tie n e
p ara
o p e r a tiv o s
s is t e m a s
uno
ECPL,
o r ig in a lm e n te
C p osee pocos
d is e ñ a d o
c u a lq u ie r
ECPL’ s o l o
u sa d a con e l
le n g u a je
de d a to s ,
p ro b a d o
como b a s e s d e d a t o s ,
de in g e n ie r ía ,
a lr r e d e d o r
o r ig in a lm e n te
c o m p i1 a d o r e s , s is t e m a s
ha
a p lic a c io n e s ,
C
de
de
en C.
S is te m a s ,
e x is te n
4
LENGUAJE DE PROGRAMACION C.
im p le m e n ta d o
El
FASE DE ESTUDIO
d e C++ a C
P re c o m p ilo d a r
R ic h a r d s
la
p a la b r a
m o d ific a d a d e
UNIX en una PD P -7 ,
s o lo
un t i p o
de tr a b a ja r
e s te
de d a t o s .
con
El
mas t i p o s
l e n g u a j e B.
m a n e ja r
o b je to s
c o m p lic a d o s
como
FASE DE ESTUDIO
P reco m p ila d o r de C++ a C
una
u n id a d
e n tr a d a
y
m em oria,
Ca r r e g l o s ,
e s tr u c tu r a s !).
s a l i d a como
como l a
p a rte
fu n c ió n
m anera e l
in s tr u c c io n e s
No
como e l
gra d o
tie n e
le n g u a je .
NEW de P a s c a l ,
p r o g r a m a c ió n c o n c u r r e n t e ,
c u a lq u ie r
del
5
o p e r a c io n e s
No
tie n e
no t i e n e
de
m a n e jo
fa c ilid a d e s
m ecan ism o r e n d e z - v o u s d e Ada.
en
el
que
son
o m it id a s
d e C e s una de su s c a r a c t e r í s t i c a s
de
p ara
De
a lg u n a s
d is tin t iv a s .
1 .3 . 3 .2 LENGUAJE DE PROGRAMACION C+ + .
C++
es
p equ eñ os
un
le n g u a je
d e ta lle s ,
a lr r e d e d o r
in flu e n c ia s
de
1980
a p a rte
c a r a c te r ís tic a s
C+ + f u e
in s t a la d o
u n iv e r s it a r io s
e s c a la
a p lic a d o
CAD,
en
de
p or
B ja r n e
C son
el
usan.
en v a r i a s
c ie n tífic a ,
de
en
y
p r o g r a m a c ió n ,
m a n ejo
g r a fic a c ió n ,
p r o g r a m a c ió n ,
r o b ó t ic a ,
c o n m u ta c ió n y VL£>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 ,
<
de p r o p ó s ito
como b a s e
el
u s u a r io
ya
qu e
tip o s
p ara
son
p e r m it e n
C++ a C
re= r ;
i = 0;
FASE DE ESTUDIO
3
de C+ + a C
fr ie n d
c o m p le x o p e r a t o r
+ Ccom pl e x , c o m p le x } ;
fr ie n d
fr ie n d
fr ie n d
fr ie n d
c o m p le x
c o m p le x
c o m p le x
c o m p le x
*
/
—
La p r im e r a p a r t e
es
FASE DE E2TUDI0
por
o m is ió n
es a c c e s ib le
o p e ra to r
o p e ra to r
o p e ra to r
o p e ra to r
e s p e c ific a
p r iv a d a .
s o lo
E s tá
2
C co ra p lex ,co m p lex O ;
C com ple x . c o m p le x D ; "
Cc o m p le x ,c o m p le :0 ;
C com p lexD ;
/ x - u n a r io
la
r e p r e s e n ta c ió n
r e p r e s e n ta c ió n ,
p o r fu n c io n e s d e f i n i d a s
de
dos
un c o m p le jo
núm eros
d e n tro de l a
y
d o -u b le ,
d e c la r a c ió n
d e c o m p le x .
La
s eg u n d a
m a n eja r
p a rte
e s p e c ific a
núm eros c o m p le jo s .
E s ta
p ara e l
p ú b l i c o en g e n e r a l .
co n
mismo
el
c o n s tru c to r
El
p r im e r
nom bre
qu e
como
p a rte
un
es
u s u a r io
p ú b lic a
c la s e ),
y
la
a r it m é t ic a
co n s tru c to r
y el
c o n s tru y e
un núm ero
se g u n d o c o n s t r u c t o r
crea r
la
C o n s i s t e en 2 c o n s t r u c t o r e s ,
la
e s una fu n c ió n q u e c o n s t r u y e un v a l o r
coord en a d a s,
pu ede
y es
f u n c io n e s
n o rm a l.
d e un t i p o
c o m p le jo
dad as
I
y
in t e r fa z
Un
d a d o.
su s 'd o s
— ¿r-sr—p-^r r e ­
rea l .
Las
f u n c io n e s
f u n c io n e s
son
p e r m itid o e l
E s ta
a r it m é t ic a s
acceso a la
r e p r e s e n ta c ió n
f u n c io n e s
p u ed en s e r
c o m p le x o p e r a t o r
son
c o m p le ta m e n te
d e fin id a s
o r d in a r ia s ,
r e p r e s e n t a c ió n
s e r ía
de
d e fin id a s
+ Cco m p ìe x a l ,
o tra
de la
de
como
/ r ie n d .
ex c e p to
lo s
m anera
núm eros
E s ta s
tie n e n
c o m p le jo s .
in a c c e s ib le .
s i g u i e n t e m anera
c o m p le x a2D
qu e
E s ta s
re c o n p i LacLcr ae C++ a C
re tu rn
c o m p le x C a l . re + a 2 . r e ,
FASE DE ESTUDIO
a l . i m+a2. i zO ;
10
FASE DE ESTUDIO
11
y u sa d a s a s i
m a in O
<
c o m p le x a = 2 . 3 ;
c o m p ie x b = C l/ a ,7 D ;
c o m p le x c = a + b + c o m p le x C l,4 . 5 ) ;
>
El
o c u lt a m ie n t o
P r o g r a m a c ió n
al
d is e ñ o
o b je t o
de
con c la s e s
de
c la s e s
d a to s
es
la
mueve e l
C t ip o s
lla v e
é n fa s is
d e fin id o s
p a ra
del
por
la
m o d u la r id a d .
d is e ñ o
el
de
en un p ro g ra m a e s d e a lg u n a c l a s e qu e d e f i n e e l
o p e r a c io n e s
p ro g ra m a r
le g a le s
en
.un
la
p a ra
ese
le n g u a je
con
a p r o p ia d o s
a
c o m p le jo s ,
m a tr ic e s ;
a p lic a c ió n .
m ie n t r a s
g r a fic a c ió n
p r e fe r ir la
t ip o s
o b je t o .
un
Un
E s to
c o n ju n t o
in g e n ie r o
un
C u a lq u ie r
c o n ju n t o d e
p e r m it e
de
al
t ip o s
p o d r ía
d is e ñ a d o r
como l í n e a ,
a lg o r itm o s
u s u a r io ).
de
o
u s u a r io
c o n c e p to s
usar
núm eros
s o ftw a r e
p o líg o n o ,
c ir c u lo ,
p ara
e tc .
PERM ITE PROGRAMACION ORIENTADA A OBJETOS.
C++
e s ta
p e r m it e
es
o r ie n ta d a
p ara
y
ha
la
e s p e c ific a r
c a r a c te r ís tic a
a o b je to s .
tra ta r
con
La o r g a n i z a c i ó n
to p ic o s
d e m o s tra d o
c la s e s
p r in c ip a l
ser
c o m p le jo s
ta m b ié n
o r g a n iz a d a s
p ara
j e r á r q u ic a m e n t e ,
s o p o rta r
je r á r q u ic a
es
p r o g r a m a c ió n
muy i m p o r t a n t e
en muchos cam pos d e
una
buena
m anera
de
la
c ie n c ia ,
o r g a n iz a r
Pr^com oi I ador d& C++ a C
p ro g ra m a s p a ra una g r a n v a r ie d a d
FASE DE ESTUDIO
de á re a s de a p lic a c ió n .
12
FASE DE ESTUDIO
En
C++,
n u eva s
d e r iv a d a s
de
la
h a b ilid a d
v a r ia c io n e s
dad a
la s
de
una c l a s e
p r in c ip a le s
tr a d ic io n a le s ,
e s ta s
del
s is t e m a
qu e s e
lo s
d e ta lle s
de la
erro res
en e l
ADA p r o v e e
t ie n e
un
o r ie n ta d a
e s ta
a
e x te n d e r
b ase)
s in
to ca r
v e n ta ja s .
a d ic io n e s
q u ie r e
p ro g ra m a
C e s to
el
r e q u ie r e n
es,
se
c ó d ig o ,
usan
acceso ' al
r e q u ie r e
y lle v a
el
el
c la s e s
es
c ó d ig o
fu e n te
e n t e n d im ie n t o
r ie s g o
de
una
té c n ic a s
de
in t r o d u c ir
fa c ilid a d e s
m ecanism o
de
o b je t o s ,
así
p ara t ip o s
a b s tra c to s
de
h e r e n c ia
p a ra
s o p o rta r
C+ +
mayor
p o te n c ia
tie n e
d a to s ,
p ero
no
p r o g r a m a c ió n
e x p r e s i va
en
á rea .
S m a llt a lk
- El
s o p o rta
é n fa s is
p r o g r a m a c ió n o r i e n t a d a
a o b je t o s ,
p o r una v a r ie d a d
de fa c to r e s :
en l a
del
La f l e x i b i l i d a d
e s tru c tu ra
de lo s
p ro gra m a .
m ecan ism os d e e n c a p s u la d o .
- La p o r t a b i 1id a d .
- La e f i c i e n c i a
-
a d ic io n a n d o
n u eva s
v ie jo
Cuando
e x te n d e r,
im p le m e n ta c ió n
un
b á s ic o
c ó d i g o y a p ro b a d o .
d is t in g u e de é l
-
p ara
un c o n c e p t o
13
La h a b i l i d a d
en l a
c o r r id a .
p ara c o r r e r
en un s is t e m a p eq u eñ o .
p e r o C++ s e
FASE DE ESTUDIO
14
PERM ITE LA SOBRECARGA DE FUNCIONES Y OPERADORES.
S o b re c a rg a , de f u n c i o n e s .
S e p u ed e u s a r
a c c ió n
a n á lo g a
el
misase nom bre p a r a
a d ife r e n te
tip o
fu n c io n e s
d e a rg u m e n to s .
qu e
Por
e je c u t a n
e je m p lo ,
una
s i .s e
d e f i nen:
r o t a C c i rc u lo D ;
r o ta C p o i í g e n o ) ;
ro ta C s h a p e D ;
e n to n ces
ro ta C x ) ;
escoge
la
in s ta n c ia
p e rte n e zc a e l
de la
o b je t o
fu n c ió n
de a cu erd o
a
la
c la s e
a la
qu e
x.
S o b re ca rg a de o p e ra d o re s .
P e r m it e
E s ta
n o t a c ió n
Una e x p r e s i ó n
ca m b ia r
u sa
la
s e m á n tic a
o p era d o res
p u ed e t e n e r
de
la
p equ eñ os,
y
d ife r e n te s
n o ta c ió n
por
ta n to
s ig n ific a d o s
...
c o n v e n c io n a l.
es
.
com p a c ta .
FASE DE!. ESTUDIO
s
i-
= C+p ;
p u ed e s i g n i f i c a r :
a 2.
Sumar c y p ,
fcO.
E l c o n ju n t o s ,
cD . Form ar l a
d e p e n d ie n d o d e l
y a lm a c e n a r e l
es la
fig u r a
tip o
s,
de l o s
r e s u l t a d o en c.
u n ió n d e l
m e d ia n te l a
o p e ra r.d o s .
c o n ju n t o c co n e l
u n ió n d e l a s
c o n ju n t o p.
fig u r a s
c y p»
FASE DE ESTUDIO
P re c c m p ila d c r de C++ a C
16
1 . 3 . 3 . 3 PRECOMPILADCR DE C++ A C.
E s ta h e r r a m ie n t a t e n d r í a l a s
d e C,
que
ademáis s e r i a
se
d is p o n d r ía
c a m b io s
reserva d a
c la s e
El
de
s in tá c tic o s
c o n s id e r e n
la
o
p r ív a te
en
Por
la
d e fin ic ió n
n e c e s a r ia
de
e je m p lo ,
d e C++ y p e r
Lo. a n t e r i o r
C++
se
p ara
qu e
e fe c tu a r
p o s te r io r m e n te
p o d r ía
de c la s e s ;
ta n to
s ig n ific a
agrega r
o
la
lo s
se
p a la b r a
p e r m itir
qu e
una
d e v a r i a s C h e r e n c ia m ú l t i p l e ) .
P r e c o m p i la d o r
h e r r a m ie n t a s
a iie r ia .
in f o r m a c ió n
s e m á n t ic o s
p e r tin e n te s .
se d e r iv e
c a r a c te r ís tic a s
una h e r r m ie n t a
del
u tile r ía
p a ra
p a rs e rs ,
es d e c ir ,
de
C++ a
S is te m a
gen erar
C fu e
O p e r a t iv o
a n a liz a d o r e s
a n a liz a d o r e s
d e s a r r o lla d o
UNIX:
LEX
lé x ic o s .
s in t á c t ic o s .
y
u san do
YACC.
YACC
2
de
la s
LEX
es
una
p e r m it e
gen era r
FASE DE DI SEflO
Prec3K.pi Ia d cr de C++ a C
II.
F A S E
11.1
DE
17
D I S E R Ò .
INTRODUCCION.
A qu í
se
v e r ific a r o n
E s t u d io .
Se
h iz o
d iv id id o
en
2
d e s c r ib e n
D is e ñ o
la s
el
la s
d is e ñ o
t ip o s :
e x te rn o
fa c ilid a d e s
In te rn o ,
la
d e c is io n e s
d e t a lla d o
e
con
manera
tom adas
del
in te r n o .
qu e * e l
en
la
En e l
e s ta s
la
El
D is e ñ o
u s u a r io
qu e
en
S is te m a .
F ase
de
D iseño,
fu e
E x te rn o
co n ta rá ;
fa c ilid a d e s
i mpl ement ¿.das.
1 1 . 2 OBJETIVOS.
V e r ific a r
la s
C o m p lem en ta r,
d e c is io n e s de l a
d e ta lla r
F a s e d e E s t u d io .
y d ocu m en tar e l
D is e ñ o .
1 1 . 3 PRODUCTOS ENTREGADOS.
I I . 3. 1 DI SENO EXTERNO.
1 1 . 3 .1 .1
BOSQUEJO DE LA ARQUITECTURA EXTERNA DEL SISTEMA.
I I . 3. 1 . 2 FACILIDADES PARA EL USUARIO.
I I . 3. 2 DI SENO INTERNO:
1 1 .3 .2 .1
y
BOSQUEJO DE LA ARQUITECTURA INTERNA DEL SISTEMA.
en
se
el
será n
FASE DE DISERO
P re c o m p ii ador de C++ a C
18
I I . 3. 2. 2 DESCRIPCION
DELOS PROCESOS.
I I . 3 .2 .3
DELAS ESTRUCTURAS DE DATOS Y FUNCIONES
DESCRIPCIQN
I I . 3. 2. 4 DESCRIPCION
DELOS ARCHIVOS Y FUNCIONES.
I I . 3. 1 DISEÑO EXTERNO.
I I . 3 .1 .1
BOSQUEJO DE LA ARQUITECTURA EXTERNA DEL SISTEMA.
E x te rn a m e n te e l
el
u s u a r io
de l ín e a ,
al
P r e c c m p ila d o r
te c le a r ía
ed\
su p ro g ra m a en C+ + ,
ó d e b lo q u e ,
v i.
P r e c o m p iL a d o r d e C++ a C.
a la
de la
11 amada a l
d e C++ s e v e r i a como
E s te
La s in t á x is
Com pi1a d o r
u san d o c u a l q u i e r
te x to
se
de la
e d ito r :
c o m p ila r ía
lla m a n d o
lla m a d a s e r i a
ig u a l
de C
S c c c m yprog m yobj
lo s
errores
e n c o n tra d o s
m o s tra d o s en l a
Cuando
errores,
la
se
en
c o m p ila c ió n
p r o d u c ir ía
c ó d i g o s e p o d r ía
el
tie m p o
de
s a lid a esta n d a rd de e r r o r
e je c u ta r
fu e r a
el
e x ito s a ,
c ó d ig o
o b je to
como c u a l q u i e r
c o m p ila c ió n
s e r ía n
C s td e r r D .
en
a u s e n c ia
to ta l
c o r r e s p o n d ie n te .
p ro g ra m a C c o m p ila d o .
de
E s te
F'rgczxipi '
S m yobj
de C++ -
C
FASE DE DI SEf'O
13
Precom pi I ador de C++ a C
I I .3 .1 .2
La s
in s tr u c c io n e s
b á s ic a m e n t e ,
C++ y C.
20
FACILIDADES PARA EL USUARIC.
P r e c o m p ila d o r
a lg u n a s
FASE DE DISEHO
de
la s
p eq u eñ a s
C++
del
a
de
qu e
C
p ara
le n g u a j e
d ife r e n c ia s .
d is p o n d r ía
e s c r ib ir
C++- d is e ñ a d o
E x is t e n
su s
por
el
u s u a r io
p ro g ra m a s
S tro u s tru p ,
d ife r e n c ia s
del
s e r ía n ,
n o t a b le s
s a lv o
e n tre
rrecozpilaüsr
de C++ s C
FASE DE DISEÎlO
21
cO D IFEREN C IAS DE C + + Y C.
UxL&'oas P a la b r a s R e s e r v a d a s .
Las
p a la b r a s
reserva d a s
son
a q u e lla s
qu e
no_ pu eden
ser
u sa d a s
como i d e n t i f i c a d o r e s .
En C 1 a s p a la b r a s r e s e r v a d a s so n :
a u to
char
s tru c t
if
b rea k
s ta ti c
flo a t
u n ion
e l se
c o n t i nue
e x te rn
d o u b le
enum
whi 1 è
return
r e g is te r
in t
do
g o to
typ ed ef
sh ort
fo r
case
lo n g
sw i tch
d e f a u lt
si zeof
En C++
u n s i gn ed
se
in c lu y e n
como
p a l a b r a s — c e s a r v a r ia ¿^-.-1a.^». d a —CL—
s i gu i e n te s :
const
p u b lic
fr ie n d
new
i n l i ne
d e le te
o v e r lo a d
v ir tu a l
o p e ra to r
c la s s t h is
— Las
FASE DE DISECO
Precom pi l ador de C++ c. C
22
D e c l a r a c i ó n d e F u n c ió n s i n A rg u m e n te s .
La d e c l a r a c i ó n
d e una fu n c ió n f
fCD ;
tie n e di fe r e n te
c u a lq u ie r
s i g n i f i c a d o en C qu e en C++.
núm ero
y
tip o
de
a rg u m e n to s .
En
En C,
fCD p u ed e tom ar
C + + fC )
no
tie n e
a rg u m e n to s .
ld e n t i . f i c a . d c r
En C,
veces.
*e x t e r n * .
un
En C ++,
i d e n t ific a d o r
s e debe d e f in ir
’e x te rn ’
s o lo
p u ed e
ser
d e fin id o
v a r ia s
una v e z .
M ism os n om b res d e I d e n t i f i c a d o r e s .
En C++ un i d e n t i f i c a d o r
mismo nom bre.
En C++,
s im p le y una e s t r u c t u r a . p u e d e n
e s t o no s e p e r m it e .
te n e r
el
F re c o m p ila d o r de C++ a C
FASE DE DISECO
23
b> CARACTERISTICAS DE C++-
C o m e n ta r to s
E s to s
lín e a .
tip o
A lg o l.
c o m e n t a r io s
c o m ie n za n
con
//,
y
te r m in a n
al
fin a l
de
la
Fr&Z&fíípi tactor d& C++
cl
C
FASE DE DISECO
24
Declaración y Uso de Funciones.
Sobrecarga de nombres de función.
Se
*■' 1 f** JS
P * * 4
puede
#“r .*"* ~
dar el
^ ^
mismo
1 1 W #-*
-a- -i- « l a w a i
• •#-*
u i »€ X
nombre a
j
x
u í i u a
•*,** /-•
O i t »
funciones
- í c
V •—
%.iV
c z í v _ c r
con
1
j . *a.
¿
^
diferentes
¿
- f-- ••• ¿
w á u C x
A
-
*J
acuerdo al numero y/o tipo de parámetros.
Sus ti íución Inline.
Una función
puede ser declarada inline. Ai llamar
inline. sesustituye
auna función
su código per la llamada.
Sobrecarga de operadores.
Los
operadores
significados.
tipo
de
C+,
*,
El significado
los
operandos.
<<,&,
etc.2)
pueden
tener
varios
deun operador depende del número y
Los- operadores
corchetes también pueden sen sobrecargados.
paréntesis
y
F r e ï O K p i l z ï c r ds C++ s C
1d e n t i f i c a d o r e s
FASE DE DISERÒ
E5
y T ip o s .
1d e n t i f ic a d o r e s c o n x>alor c o n s t a n t e .
Un
id e n tific a d o r
fu n c ió n
p u ed e
c o n s ta n te s .
El
pu ede
te n e r
v a lo r
ser
d e c la r a d o
p a r á m e tr o s
de
un
c o n s ta n te
qu e
sean
id e n tific a d o r
Cc o n s t é .
Una
id e n tific a d o r e s
c o n s ta n te
NO p u ed e
ser
modi f i ca d o .
Id e n tific a d o r e s
Un
tip o
id e n tific a d o r
id e n t ific a d o r e s
a
de
f u n c io n e s
r e fe r e n c ia
p u ed e
de t ip o
p ara
h ace
r e f e r e n c ia . .
el
d e c la r a r s e
r e fe r e n c ia
paso
p o s ib le
de
de
a rg u m e n to s
te n e r
tip o
p u eden s e r
v a r io s
por
r e fe r e n c ia .
Los
u sa d o s en l a
lla m a d a
r e fe r e n c ia .
El
nom bres
p a ra
una
tip o
misma
1o c a l i dad d e memori a .
Id e n tific a d o r e s
de
Un i d e n t i f i c a d o r
a p u n ta d o r
tip o
v o id
p u ed e s e r
p u ed e s e r
C c o n v e r s ió n e x p l i c i t a
a s ig n a d o
*.
d e c la r a d o d e t i p o
al
d e un t i p o
tip o
\>oid *
a o tro ) -
s in
x>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
<
<
r l.i ;
r 3 . r 2. i ;
a m b ie n te
e s e l . q u e u sa l a ' l i g a
un S ím b o lo
"p e rte n e c e "
C a tr ib u tc s ,
*P u b A t t r ’ ; a t r i b u to s p r i v a d o s ,
n iv e l
un
de
c i e r t o - a lc a n c e .
Ahí
y s e m á n tic o e s t á n s e p a r a d o s .
s in t á c t ic a
a
’ A t t r *;
o tro .
C a t r ib u t c s p
E s ta
a t r ib u t o s
* P r i v A t t r *D . En e l
e j e m p lo
lig a
u sa
p ú b lic o s ,
se
u sa l a
lig a
s e m á n tic a
se
u sa l a
lig a
s in tá c tic a
con
p a ra e n c o n t r a r
* r l* .
p ara e n c o n tra r
Ti * .
Una v e z
en c o n tra d o ,
S im ila r m e n t e
su ced e
’ r3 . r2 . i ’ .
El
p a ra
a lc a n c e s e m á n t ic o e s e l
d e te r m in a r
d e te r m in a d o
por
C’ P a r e n t * }.
En e l
si
un
o tro .
q u e usa l a
S ím b o lo
E s ta
lig a
lig a
"s e
usa
s e m á n tic a C a n c e s t r o }
ve"
desde
el
cam pos
el
a m b ie n te
de
a n c e s tro
s i g u i e n t e e je m p lo
g l obal
ín t
i ;
c la s s c_A <
in t i ;
p u b lic :
i n t p r in t C D ;
c_ A : : f O
<
p r in t fC " % d " ), i ) ;
m a in O
<
c_A e l ;
e l . pr i n t O ;
se
im p rim e
el
v a lo r
de
la
’i ’
de
e l.
Lo
a n t e r io r
su ced e
porqu e
P r e c empi le d e r de C++
cu a n d o
s in o
en
la
fO
E x is t e
de
se
c la s e
cl
busca
’i ’ ,
el
a n c e s tro
de
fO
no
es
4-4
’ g lo b a l ’ ,
c_A.
una t e r c e r a
acceso
FASE DE DI SE HO
C
a m ig o
C 'f r i e n d ’ D de
fo rm a
de
C ' f r i e n d ’ D.
una c l a s e .
Una
a c c e s a r *un S ím b o lo .
Una
f u n c ió n
fu n c ió n
t e ñ e a c c e s o a su p a r t e p r iv a d a .
qu e
es
Es
p u ed e
a m ig a
de
el
p e r m is o
ser
am iga
una
c la s e ,
P o r e je m p lo :
g lo b a l
c la s s c _ g <
in t i , j ;
p u b li c :
f r i end gC D;
> el ;
fO
<
g l . i _ g = 3;
g l.p r in tO ;
e r r o r , no a c c e s o a p a r t e p r iv a d a
c o rre c to
.
gO
<
g l . i _ g = 5;
g l . pr i n t O ;
su cede l o
co rre c to
c o rre c to
!
s ig u ie n t e :
como f O
tie n e
*g l * S I
’ i_ g ’
se
de a n c e s tro a
’ g lo b a l’ .
s e e n c u e n tr a .
b u sca
en
lo s
a tr ib u to s
PUBLICOS d e
’ gl ’ ,
e n c u e n tr a .
como gC.) t i e n e
de a n c e s tro a
’ g lo b a l*
y d e a m ig o a
'e l * .
y
NO s e
P re c c e p ì tactor de C++ a C
* g l * SI
*i_ g *
FASE EE DISERÒ
45
s e e n c u e n tr a .
se
busca
en
lo s
bu sca
en l o s
a tr ib u to s
PUBLICOS d e
’ gl ’ ,
y
NO s e
h a lla .
*i
q’
se
qu e g O
a tr ib u to s
e s a m ig o d e l a
c la s e ,
PRIVADOS d e
y SI
’ e l* ,
s e e n c u e n tr a .
d e b id o
a
FASE DE DISECO
P r e c c n p i l ador de C++ a. C
D e s c r ip c ió n de
la
L o s S ím b o lo s
CGLOBAL)
e l ase
CCLASS)
f u n c ió n
CFUNCTION3
b lo q u e d e f u n c ió n
CHEADER)
o b je to
COBJECT)
Cada
S ím b o lo
e s tru c tu ra
’ c la s s ’ ,
t ie n e
se
’ stru c t’ ,
a s o c ia d a
a lm a cen a
CVer M ódu lo TBLSYM O.O
P r e c o m p ila d o r de C++ a C son:
g lc b a l
* s e in c l-u y e n :
e s ta
T a b la de S ím b o lo s
qu e m aneja e l
46
una
la
’ u n ió n ’
y
*enum’
es tru c tu ra .
i n fo r m a c ió n
En l o s
cam pos
r e la c io n a d a
con
de
el
S í m b o lo .
La in f o r m a c ió n a c e r c a d e un s ím b o lo pu ede s e r
p r o p ia ó
lig a
En l a
t a le s
c o n o t r o S ím b o lo .
i n f o r m a c ió n
p r o p ia
d e un S ím b o lo ,
como:
Nombre d e l S ím b o lo
CÑAME)
T ip o
CTYPE)
N iv e l
S in tá c tic o
D e c la r a d o r
CLEVEL)
CDCLTR)
se
a lm a cen a n su s
d a to s
Una l i g a
de un S ím bo lo con o t r o puede s e r
R eferen ci a
C R e f)
A n c e s tro
C P a ren t,
A tr ib u to
C A ttr,
Ami g o
C FriendD
G em elo
CTwinD
Hermano
CN exO
con lo s
s ig u ie n t e s
s ig n ific a d o s :
R e fe r e n d a
*a *
es
CRefD
R e fe r e n d a
de t i po
Si
*b *,
C P a r e n t,
El a n c e s tr o d e
Si
de
si
’ b*
es
TYPEDEF o CLASS,
y
’ a*
es
*b * .
A n c e s tro
Si
F lg P a r )
P u b A ttr , P r iv A ttr D
* a ’e s
*a * e s
*a ’
es
’ a*
se f i j a
F lg P a rD
de la
s ig u ie n t e
fo rm a :
GLOBAL» su a n c e s t r o e s NULO.
’ c la s s * b a se,
’ c la s s ’
su a n c e s t r o e s
d e r iv a d a ,
’ g lo b a l’ .
su A n c e s t r o e s
su
’ c la s s ’
base.
Si
’ a ’e s
f u n c ió n no m iem b ro,
su A n c e s t r o
es
’ g l o b a l '.
Si
’ a ’e s
fu n c ió n m iem bro d e una ’ c l a s s ’ ,
su
a n c e s tro es esa
’ c l a s s *.
F rsc o x ip ila ä o r ds C++ s C
A t r ib u t o
*a*
FASE DE DISERÒ
C A ttr,
es A tr ib u te de
43
P u b A ttr, P r iv A t t r )
’b’ , si
’a’
e s t a d e c la r a d o en e l
in te r io r
de
*b” .
Ami g o
CF r i e n d )
’a’
es
una f u n c ió n
p r iv a d o s o b r e lo s
G em elo
Am iga d e l a
m iem bros d e
c la s e
’ b *,
si
’a’
tie n e
p e r m is o
* b *.
CTwi n )
*aO *
p ero
es
f u n c ió n
d ife r e n te
g e m e la
de
número
o
’ apO ’ ,
t ip o
de
si
t ie n e n
a rg u m e n to s
el
mismo
nom bre
< sob reca rga
de
nom bres d e f u n c i ó n ) .
Hermano
’ a*
C N e x t)
es
herm ano
de
’ b *,
si
ambos
son
a t r ib u t o s
del
mismo
s í m bolo.
En
el
campo D e c la r a d o r
o p era d o res
CDCLTR)
d ed e c la r a c ió n .
a r r e g lo
CARR)
a p u n ta d o r
fu n c ió n
r e fe r e n c ia
CPTR)
CFUÑO
CREF)
a p u n ta d o r c o n s t a n t e
de
Loso p e ra d o re s
CCPTR)
unS ím b o lo
s e a lm acen an
d ed e c la r a c ió n
so n :
F r e c c n p ilo d a r ds C++ a C
r e fe r e n c ia
Los
c o n s ta n te
op erad ores
FASE DE DISERÒ
CCREF3
a r r e g lo
CARRD
g u a r d a r i n f o r m a c ió n a d i c i o n a l .
gu ard ar
un
v a lo r ;
p a r á m e tr o s .
E s ta
e s tru c tu ra
de
y
el
o p era d o r
lla m a d a
Las
e t iq u e t a s
S ím b o lo s .
e s tá
En
El
DE
a r r e g lo
CFUNC) ,
se
n e c e s ita n
CARR3, n e c e s i t a
una
lis ta
a lm a c e n a
DIMENSIONES
en
de
o tra
CTBL_DIND .
La
más a d e la n t e .
CTBLJLBL1
de
una
una t a b la - s e p a r a d a
e tiq u e ta
es
toda,
la
d e .la
ta b la
f u n c ió n
de
d on d e
d e c la r a d a .
e s ta
d e s tr u c c ió n
la
f u n c ió n
TABLA
s e ' m anejan en
a lc a n c e
fu n ció n C F U N C 3 .
a d ic io n a l
T a b la d e D im e n s io n e s e s d e s c r i t a
63 T a b la , d e E t i q u e t a s .
y
El op era d or
in f o r m a c ió n
d a to s
49
ta b la
ta m b ié n
de o b je to s
se ~ tie n e
de c la s e
in f o r m a c ió n
CDEW87],
E s te á rb o l
d e l— á r b o l
de
d e d e s c r i b e en
s i g u i e n t e s e c c ió n .
La
e s tru c tu ra
fu n c io n e s q u e l a
c3 A r b o l
d e ta lla d a
m a n eja n ,
de D e s tr u c c ió n .
de
la
ta b la
de
e tiq u e ta s
NO s e e n c u e n tr a n en e s t e
CTREE_DEST2>
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
<
fO
s tru c t c <
in t i ;
’ c la s s *
s e im p le m e n ta c o n
>
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
_ <a0003>
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
<a0003>
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 <— FUNC <—
que r e g r e s a
d e a p u n ta d o r e s a e n t e r o s "
el
ocu pa 3 b i t s .
A p u n ta d o r
c o n tie n e
a
'f lo a t * .
*1 0 *.
C V e r TELSYM2. C D
CVer M ódu lo TBLSYM2. O
la
TABLA
E s ta
DE DIMENSIONES
lo c a lid a d
e s ta
s e r ía la
lig a d a
a
p^ar-.f-rr-
C++
i o.rA~'~
A d ic io n a
c o n tra
el
FASE DE DESARROLLO
un n u e v o o p e r a d o r
op era d or
m arca e r r o r ,
de d e c la r a c ió n
in m e d ia t o
y a grega e l
a n te r io r .
n u evo .
a
Si
un S im b o lo .
hay
En o t r o c a s o ,
TT
Cheque
in c o m p a t ib ilid a d ,
s o lo agrega e l
n u evo
oper a d o r.
1
Add.Dc 1 rF u n cC
T ie n e como e n t r a d a s
p r im e r -S ím b o lo .
D IM ENSIONESt y l e
deb erá, s e r
el
d o s S ím b o lo s .
A lo ja
un r e n g ló n
a s ig n a
p r im e r
el
A d ic io n a
p ara
s e g u n d o S ím b o lo .
a rg u m en to d e l
un o p e r a d o r
a rg u m e n to s
op era d or
E s te
en
la
FUNC a l
TABLA
DE
se g u n d o S ím b o lo
f u n c ió n .
A d d D c lL r A r r C l
T ie n e como e n t r a d a s un S ím b o lo y un V a lo r ARR
al
S ím b o lo .
DIMENSIONES
ser
la
A lo ja
y g u a rd a
d im e n s ió n d e l
TABLA DE DIMENSIONES
en
un
r e n g ló n
ese
r e n g ló n
p ara
el
A d ic io n a un o p e r a d o r
v a lo r
V a lo r .
a r r e g lo ..
CV er M ód u lo TBLDIMO. O
en
E s te
la
TABLA
V a lo r
DE
d eb erá ,
FASE DE DESARROLLO
P re c o m p ila d o r de C++
78
En e s t e m ódu lo s e d e s c r ib e n
Im p le m e n ta c i ó n d e l
tip o
" D im e n s ió n ” .
Fune io n e s B á s ic a s .
2m p le m e n ta c i ó n d e l
El
tip o
tip o
" D im e n s ió n ” .
" D im e n s ió n " fo rm a d o p o r
B a n d era d e t i p o
d e V a lo r .
V a lo r .
A p u n ta d o r .
L a B a n d e ra i n d i c a
El
El
si
el
V a lo r es
S ím b o lo
CF_SYND
E x p r e s ió n
CF_EXPD
V a lo r d e b e s e r
por
S i m b olo
CTBL_SYMD
E x p r e s ió n
CTREE_EXPD
A p u n ta d o r s i r v e
ta n to
p ara
A p u n ta d o r p u ed e u s a r s e en l a
lig a
de r e fe r e n c ia s
de
lig a r
lig a
op erad ores
lo s
r e n g lo n e s
de lu g a r e s
A r r e g lo
de
lib r e s ,
CARRD
o
la
ta b la .
ó b ie n ,
F u n c ió n
E s te
en l a
CFUNCD
FASE DE DESARROLLO
F r e,coxipi lo d a r de C++
79
F u n c io n e s B á s ic a s .
E x is t e n
2
gru p os
de
F u n c io n e s
B á s ic a s
p a ra
la
TABLA
DIMENSIONES:
Fune io n e s p a r a ca m p o s .
F u n c io n e s p a r a r e n g lo n e s C " D i m e n s i o n e s .
F u n c io n e s p a r a cam pos.
P id e e l
Da e l
V a l o r d e un r e n g ló n
V a l o r a un r e n g ló n
Im pr i me e l
P id e e l
Da e l
V a l o r de un r e n g ló n
C ’G e tV a lD im O
2)
C P u t V a l Di m O
3
C P r i n t V a l Di mCD D
A p u n ta d o r d e un re n g l"ó n
A p u n ta d o s a un r e n g ló n
Im p rim e e l
A p u n ta d o r d e un r e n g ló n
F u n c io n e s p a ra r e n g lo n e s C "D im e n s i o n e s '* } .
A lo ja
r e n g l ó n p a r a S ím b o lo
A lo ja
r e n g ló n
p a r a E x p r e s ió n
C Pr i n tN e x tD i mCD !>
DE
FASE DE DESARROLLO
Im p r im ir r e n g ló n
C P r in t D im O
B o rra r
C C1 e a r Di mC3> D
r e n g ló n
L i b e r a r r e n g ló n
D
C F reeD i mO 3
P a r a mayor in f o r m a c ió n v e r
TBLDIMO. C y TBLDIM1.C
F u n c io n e s para. S írrJbolos.
Las s ig u ie n t e s
fu n c io n e s aún NO han s i d o im p le m e n ta d a s .
Ch.h.C L a ssC xirrS pcC 2
AcLdC lassC urrSpcC 2>
A d d ln itia lis e r C 2
A d d C u rrF u n cD e / O
A d d C u rrD c l trCS>
A d d C u r r F ie ld D c l £ r O
A d d C u rrE n u m D cl£ r O
A d d C u rrF orm D c l trC
AddMember2n i t
b> T a b la d e E t i q u e t a s .
V er FASE DE DISEFIO.
CTBL_LBL5
NO f u e d e s a r r o l l a d a .
F r e c o K p ila d z r de C++
FASE DE DESARROLLO
c2 A r b o l de D e s t r u c c i ó n .
81
CTREE_DEST2
V er FASE DE DISEFtO: NO f u e d e s a r r o l l a d a .
cD
*S t a c h * S e m á n tic o
C V er M ód u lg STKSEMO.C D.
Esta,
un s im p le
e s tru c tu ra ,
es
*S ta c k ’
que
a lm a c e n a
o b je to s
t i p o S í m b o lo .
L a s fu n c io n e s
A grega r
qu e t i e n e so n :
un S ím b o lo a l
S a c a r un S ím b o lo d e l
eJ> 'S t o c k *
*S t a c k *
’ S ta c k *
para. I n i c i a l i -zac ió n .
V er FASE DE DISEFÍO.
C Ver M ódu lo STKSEM1 . C D
C PushStkSemCD D
C P o p S tk S em O
C S T K _ IN IT 3
NO f u e d e s a r r o l l a d a .
>
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<s».
lig a
a li n i c i o
de
la
FASE DE DESARROLLO
Precom pi lo d o r de C + +
Al
e x is te
p e d ir
m em o ria ,
a lg u n a
con
se
reco rre
s u fic ie n te
la
lig a
de
se
u sa.
m em oria,
c e ld a s
Si
S4
lib r e s ,
no,
se
si
u sa
un
lig a
de
n u evo r e n g ló n .
P e d i r y D ar V a l o r a l a
E s ta s
c e ld a s
f u n c io n e s
v a c ia s .
so n
La
lig a
de
fu n c i o n e s ,
!.
se
núm ero d e b y t e s
una
a la
c e ld a
Por
d eb erá
C G e tL in k O ,
u sad as
S in em b a rg o ,
P id e n y Dan v a l o r
in f o r m a c ió n
lig a
lo
l o c a lm e n t e
P u t L in k O
p ara
D
m a n eja r
la
ta m b ié n s e e x p o rta n .*
lig a
se
d e una c e l d a d e m em oria en A r c h iv o .
en c u e n tra
a n te r io r ,
p e d ir
q u e o cu p a l a
m em oria
lig a
en
se
lo s
ú lt im o s
q u ie r e n
a d ic io n a l
p ara
ta m b ié n s e e x p o r t a ,
T a b la de C ó d ig o
C MÓds.
En e s t e M ódu lo s e d e s c r ib e n
Im p le m e n L o c ió n d e l T i p o
si
TBLJZOD.
b yt.e s
u sar
la
de
e s ta s
lig a .
El
y e s NLINK.
TBLCODO-1. C 3
P re c c “ p i 1
- de C++ FASEDEDE
F u n c io n e s pctra. cam pos.
F u n c io n e s
p a ra r e n g lo n e s .
lm .p le m e n ta c ió n d e l
Es
una
c e ld a
T ip o TBL_COD.
de
m em oria
en
a r c h iv o
de
tam año
v a r ia b le
y
que
c o s n ta de 2 p a rte s :
I n fo r m a c ió n
C STRING 3
A p u n ta d or
C NEXT 3
E s t a im p le m e n ta d o con un a p u n ta d o r
a a r c h i v o C F I_ P T R 3
F u n c io n e s p a r a cam pos.
P id e e l
Da e l
v a lo r
v a lo r
P id e e l
v a lo r
Da v a l o r
*
con
a rc h i vo.
esta s
de la
de la
a la
I n fo r m a c ió n
I n fo r m a c ió n
de la
1ig a
lig a
fu n c io n e s »
se
p u ed en
c o n s tr u ir
lis ta s
lig a d a s
en
A lo ja r
L ib e r a r
un r e n g ló n
P re g u n ta r- s i
Al
a lo ja r
in f o r m a c ió n ,
L is ta
C A llo c T C O
un r e n g ló n
un r e n g ló n e s
un
la
r e n g ló n ,
n u lo
s o lo
c e ld a c o n tie n e
T ip o L i s t a
D
se
una
lis ta
im p le m e n ta d a
p id e
la
m em oria
“ in t e r n a m e n t e ’* l a
p ara
la
lig a .
LSTCCDO-1. C }
s e d e s c r ib e n :
de C ó d ig o
C LST_COD
C 1 n s S trB e g L C C 2 , In s S trE n d L C C }
T i p o L is t a , d e C ó d ig o
Es
C N u llT C O
C Móds.
F u n c io n e s
e s ta
3
de C ó d ig o
En e s t e M ó d u lo ,
3
C F reeT C O
de
C LST_COD S>
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<zr&s2.
Freccmpilsdar
III-
de
C++
a C.
METODOLOGIA DE DESARROLLO
FASE DE DESARROLLO.
Iil.il
J.NTg c w r c i c v -
i; 1
ESPECIFICAR, CODIFICAR, PROBAR E
INTEGRAR
TODOS
LOS
MCEU LOE
,
DEFINIDOS EN EL DISEFfO DEL =:=TEMA.
PREPARAR LA “RUEBA Y LA DOGU*1EN'TACI0*v
f^ U C yOS i ENTREGAR.
ESPECIFICACION DE“ALLADA DE PROGRAMAS Y MODULOS■
PROGRAMAS Y' MODULOS PROBADOS PROGRAMAS IN~E GRADOS' ?®CB ADOSPRUEBA CON DATOS- COMPROBACION DE RESULTADOS ESPERADOS•
BOSQUEJO‘DE LA DOCUMENTACION DEL MANEJO DEL- SISTEMA»
BOSQUEJO DE LA DOCUMENTACION DE LOS SERV,. DE PROCESAMIENTO.
BOSQUEJO DE LA DOCUMENTACION PAPA EL USUARIO-
F re z o z ìp ilz d c z de C++ a C.
IV .
METODOLOGIA DE DESARROLLO
FASE DE PRUEBA.
IV-1 INTP.ÇOUÇÇ !?>,■.
VJj_2 OBJETIVOS,
QUE LOS RECUDIMIENTOS DEL USUARIO SEAN SATISFECHOS •
C A-ACTE"' IS~ ICAS 0=ERAC ION AL _S OPT ir IZP DAS.
PRUEBA DEL SISTEMA COMPLETO FINALIZADA-
Ih l.
FRQDL^igg. -i
PRUEBA COMPLETA DEL SISTEMA «
F r e c c e p i i ador de C++ a C.
METODOLOGIA DE DESARROLLO
Y. FASE DE IMPLEMENTACI ON.
y, I INTCQDUCC 10K‘-
V «2 OBJETIVOSCOMPLEMENTAR LA IMPLEMENTACION DE TODOS
LOS
PROCEDIMIENTOS
V
FUNCIONES DEL SISTEMAACEPTAR QUE EL SISTEMA CUMPLA CON LOS CRITERIOS DE ACEPTACION Y
SERVICIC DE PROCESAMIENTO.
V *3 PRODUCTOS ENTREGADOS«.
SISTEMA FUNCIONANDO•
DOCUMENTACION PARA EL USUARIODOCUMENTACION DEL MANEJO DEL SISTEMA.
DOCUMENTACION DE LOS SERVICIOS DE PROCESO.
CODIGO DE LOS MODULOS-
V I.
CONCLUSIONES.
P r e c om .pt l a d o r
APENDICE B.
d& C + +
ESTANDARES DE PROGRAMACION
a C
ESTANDARES DE PROGRAMACION.
A corít in ua c i6r¡ se de s cr ib &n los si gu ief.te s p un t o s ¡
P ropos i to
de ios Es íánoares.
M ó d u lo d e
C ó d ig o .
E s t á.ndar&s para, d&c l a r a c i o r íe s .
E s t íá n d a r e s
P r o p ó s ito
de
lo s
para, c ó d i'g o .
E stá n d a res.
Dar consistencia y manten ib i 1idad a un Sistema»
M ò d u lo d& Cóc. i go •
Es ur¡ a r c h iv o
•tì ód u !
o
, r e a I i z ari
c o mp i 1a b 1 e s ri C
f un c i j r . e s
Los r u t i ri a s
u. e
p e l a c i o n a da s 1óg i c amer¡ t e
Un módulo de código «sta formado de 2 partes:
c s n s t i t uy e ri
ur»
,ó
uri
f o r mars
ESTANDARES DE PROGRAMACION
Precom pi i ador de C++ a C
M ó d u lo de D e s c r i p c i ó n .
M ódul o de- 1m p lementa c i ó n .
Er: e l
los
En e l
con
M ó d u lo d e D e s c r i p c i ó n ,
t ip e s f variab les
se
y fun cion es
M ó d u lo d e 1 mp l emen ta c i ó n ,
l a ayuda de
Aquí .se pueden
ciertos
tener
tip os,
tamb ién
Ambos M ó d u lo s , t i e n e n
in clu yen
la s
que e x p o r t a
se
c o n s tr u y e n
variab les
tip os,
declaracion es
y
da
e l Módulo-
estas.
fu nciones
variables
en su pa rt e , s u p e r i o r
funciones,
importadas»
y fu nciones
un
loca les ■
e n ca be za do
;u e
in c 1 uye's
Nom bre d e l
P ro y e c to .
Nom bre d e l
M ó d u lo y Fecha..
D e s c r i p c i ó n d e l M ó d u lo .
P ro g ra m a d o r.
Las
rutinas
del
M ó d u lo d e
1mp l eme n t clc ¿ón,
tarbién
tien en
un
ESTANDARES DE PROGRAMACION
Una d e c l a r a c i ó n
por
r e n g ló n ,
com en tan d o e n s e g u id a e l
ICO
u so d e
la
v a r i a b l e.
Los
nom bres
de
la s
i d e n tific a d o r e s
e s tá n
fo rm a d o s
por
2
p a rte s :
p r e fijo ,
s x if i j o .
El
p re f i jo
depende d e l
tip o
e s un n em ó n ico p a r a d i f e r e n c i a r
Los t ip o s
de p r e fijo s
p r e fijo
Las
le tr a s
i d e n ti f i c a d o r. El
un i d e n t i f i c a d o ! '
s u fijo
de o tro .
son:
s i g n i 'f i c a d o
1o n g i tu d
in d i c e
b a n d e ra
c a ra c te r
*s t r i n g ’
e s tru c tu ra
a p u n ta d o r
a r r e g lo
o tra s
n
i , j ,k
f
c
s
r
P
a
x, y, z
*TYPEDEF* s .
d e u so d e l
MAYUSCULAS
se
usan
p a ra * * D EFINE’ s ,
* MACEOS’ y
ESTANDARES DE PROGRAMACION
P re c o m p ila d o r de C++ a C
Las
v a r ia b le s
lo c a le s
se
a g ru p a n
ló g ic a m e n t e
de
101
acu erd o
a
su
ta re a .
Es t à r i d a . ? p a r a . C ó d ig o .
e n c u e n tr a
d iv id id o
un c o m e n t a r io en su p a r t e
El
C ó d ig o
se
s u p e r io r
una i d e n t a c i ó n
el
fo r m a t o
e s ta tu to s »
d e 3 e s p a c io s
" t r a d ic io n a l w de
en
C.
en
b lo q u e s .
qu e d e s c r i b e
e s ta tu to s
E s te
Cada
c o m p u esto s
fo r m a t o ,
b lo q u e
su a c c ió n .
en
y
tie n e
Se
a lg u n o s
de- l o s
s e m u e s tra a c o n t in u a c ió n :
do <
>
e ls e - <
> w h i¿e C . . .3 ;
>
y
f o r C. . .
case
. .
>
d e f a u lt
>
y p ara l a
if C
/ **/
>
c o n t in u a c ió n
de lin e a :
usa
s ig u ie n d o '
r r e c c ~ p i la d cr ¿ s C++ a C
ESTANDARES DE PROGRAMACION
L o s c o m e n t a r io s t i e n e n e l
En
la s
c o n d ic io n e s
p r o g r a m a c ió n C ’ b u g ’ sD.
no
a lc a n c e d ad o p or l a
esp era d a s
se
102
id e n ta c ió n .
m e n s a je s
de
erro res
de
Freecopilador de C++ a C.
/ * PROYECTO
:
CODIGO DE LOS MODULOS
103
P r e c o m p ila d o r C++ —> C
/X
:: TBLSYMO. C
/ * MODULO
/ * DESCRIPCION ::
Mar 22/89 * /
* I n c l ude * p a r a
E n tr a d a y S a l i d a d e TABLA DE SIMEOLOS
C v.
*/
T B L S Y M l.O
/X
*/
PROGRAMADOR :
Rubén R u s i l e s
*ks
/* IMPCRTA
*/
/ in c lu d e
" m e s s a g e O .c "
/ in c lu d e
"tre e x p O . c "
/ X X X X X X X X ? H H (X X X X X X X X X X )(X X X K X X X X X X X X X X X X X X X X X X X ? H tX X X X X X X jfí(X X X X X X » X /
/ * EXPORTA
*/
tipos de campos
ty p e d e f
TBL_SYM
s tru ct <
in t
i_ _ ty p e ;
char- *
p tr-;
tip o :
> TBL SYM •
#defi ne
N AME
T_GLOBAL - T_CLASS
a p u n ta d o r
char x
'
P r e c o m p ile r
de C++ a C.
CODIGO DE LOS MODULOS
¿ d e f i ne
STGE
u n s ig n e d i n t
¿ d e f i ne
TYPE
u n s ig n e d i n t
¿ d e f i ne
DCLTR
u n s ig n e d l o n g i n t
¿ d e f i ne
LEVEL
i nt
¿ d e f i ne
TOKEN
in t
¿ d e f i ne
PARENT
TBL_SYM
¿ d e f i ne
FLGPAR
in t
¿ d e f i ne
TWIN
TBL_SYM
¿ d e f i ne
ATTR
TBL_SYM
¿ d e fin e
HEAD
TBL_SYM
¿ d e f i ne
TREE_DEST
in t
¿ d e fin e
TBL_LBL
in t
v a lo r e s
e x te rn
n u lo s
TBL_SYM
¿ d e f i n e NULL_NAME
NULL_TBL_SYM;
CNAMED
¿ d e f i n e NULL_STGE
CSTGED
O
¿ d e f i n e NULL_TYPE
CTYPED
O
¿ d e f i n e NULL_DCLTR
CDCLTRD
O
¿ d e f i n e NULL_LEVEL
CLEVELD
O
¿ d e f i n e NULL_TOKEN
CTOKEND
O
¿ d e f i n e NULL__PARENT
NULL_TBL_SYM
¿ d e f i n e NULL_FLGPAR
CFLGPARD
¿ d e f i n e NULL_TWIN
NULL_TBL_SYM
¿ d e f i n e NULL_ATTR
NULL_TBL_SYM
¿ d e f i n e NULL_HEAD
NULL_TBL_SYM
¿ d e f i n e NULL_TREE_DEST
¿ d e f i n e NULL TBL LBL
/x nom bres d e cam pos
O
CTREE_DESTD O
CTBL LBLD
d e fin id o
"NULL_NAME"
O
en TBLSYM1 . C
104
P r e c o n p ila d o r de C++ a C.
CODIGO DE LOS MODULOS
¿ d e f i n e FLD_NAME
ÑAME
s_nám e;
¿ d e f i n e FLD_STGE
STGE
d _s tg e ;
105
/x Mi nom bre
/ x Mi d e s c r i p t o r
/x
¿ d e f i n e FLD_TYPE
TYPE
d _ ty p e ;
¿ d e f i n e FLD_DCLTR
DCLTR
d _ d c ltr ;
d e a lm a c e n a m ie n to
/ x Mi d e s c r i p t o r
de tip o
*/
/ x Mi d e s c r i p t o r
/x
¿ d e f i n e FLD_LEVEL
LEVEL
i_ lv l;
¿ d e f i n e FLD_OPER
TOKEN
i_ _ o p e r ;
¿ d e f i n e FLD_CONV.
TOKEN
i_ c o n v ;
d e d e c la r a d o r e s
Mi n i v e l
s in tá c tic o
/ x O p e ra d o r s o b r e c a r g a d o
/x El
tip o
al
una c o n v .
¿ d e f i n e FLD_STMT
TOKEN
¿ d e f i n e FLD_REF
TBL_SYM
p _ r e f;
¿ d e f i ne FLD_PARENT
PARENT
p_pair ;
a s o c ia d a
/x
una *CLASS’ ,
Mi a n c e s t r o
x/
’ TYPEDEF’
C lig a
se m a n tic a D
Mi t i p o
ATTP
x/
x/
*/
. f_ p a r ;
■ '*
¿ d e f i n e FLD_NEXT
qu e t e n g o
/x
/x
FLGPAR
x/
im p lic it a
i_ s tm t;
In s t r u c c ió n
¿ d e f i n e FLD_FLGPAR
qu e r e a l i z o
de a n c e s tro
Cp r i v a d o o p u b l i coD
p _ n e x t;
A tr ib u to s ig u ie n t e de
-x
¿ d e f i n e FLDJTWIN
TWIN
p _ t w in ;
irJ. er.tcr no
«/
Frecax.pi i actor de C++ a C.
CODIGO DE LOS MODULOS
/ x Mi o t r a
in s t a n c ia con
d ife r e n te s
¿ d e f i n e FLD_MEMB_INIT ATTR
IOS
* '
a rg u m e n to s *■''
p _ m in it ;
/x M is m iem bros qu e s e
/x
¿ d e fin e
FLD_ATTR
ATTR
¿ d e fin e
FLD_PUB_ATTR ATTR
/ x Mi p r im e r
a tr ib u to
/ x Mi p r im e r
a tr ib u to
p _p u b ;
ya
¿ d e fin e
FLD _PRIV_ATTR ATTR
in ic ia liz a n
p _ a .ttr ;
p u b lic o
p _ p r iv ;
/ x Mi p r im e r
/je
¿ d e fin e
FLD_FLG_MEMB FLGPAR
a tr ib u to
pr i v a d o
f_m em b;
y a Mi b a n d e ra de a t r i b .
ya
¿ d e fin e
FLD_CURR_HEAD
HEAD
qu e e s t á n
ay
d e c la r a n d o
p_ch ead;
ya Mi b lo q u e a c t u a l
¿ d e fin e
FLD_ENC_HEAD HEAD
p_eh ead;
¿ d e fin e
FLD_DTOR
p _ d e s to r;
y a B lo q u e q u e me e n c i e r r a
ATTR
/x D e s tru c to r
ya
o b je to s
de lo s
ay
*/
d e mi c l a s e
ay
d e d e s tr u c c ió n
ay
¿ d e f i n e FLD_TREE_DEST TREE_DEST p _ t d e s t ;
A rb ol
ya
¿ d e fin e
FLD_LBL
TBL_LBL
p _ Ib l;
¿ d e fin e
FLD_VAL
TREE_EXP
p _ v a l;
de o b je to s
d e mi c l a s e * /
Mi p r im e r a e t i q u e t a
y a V a lo r o I n i c i a l i z a d o r
e s tru c tu ra s ds lo s
s ím b o lo s
ay
ay
Free crjip i i ador de C++ a C.
t y p e d e l'
s x GLOBAL xx
s tru ct <
FLD_LEVEL
FLD_PARENT
FLD_ATTR
FLD_TREE_DEST
> GLOBAL;
ty p e d e f
/ x CLASS x /
s t r u c t <\
FLD_NAME
FLD_LEVEL
FLD_PARENT
FLD_FLGPAR
FLD_NEXT
FLD_PUB_ATTR
FLD _PRIV_ATTR
FLD_FLG_MEMB
FLD_DTOR
> CLASS;
ty p e d e f
s tru ct <
FLD_NAME
FLD_STGE
FLD_TYPE
FLD_DCLTR
FLD_LEVEL
FLD_OPER
FLD_CONV
FLD_REF
FLD__PAREN'T
FLD_NEXT
/ x FUNCTI ON xx
CODIGO DE LOS MODULOS
CODIGO DE LOS MODULOS
IOS
FLD_TWIN
FLD_MEMB_INIT
FLD_ATTR
FLD_CURR_HEAD
FLD_TREE_DEST
FLD_LBL
> FUNCTION;
ty p e d e f
/ * HEADER
s t r u c i -C.
FLD_LEVEL
FLD_STMT
FLD_ATTR
FLD_ENC_HEAD
FLD_TREE_DEST
> HEADER;
ty p e d e f
OBJECT
s tru ct <
FLD_NAME
-
FLD_STGE
FLD_TYPE
FLD_DCLTR
FLD_LEVEL
FLD_REF
FLD_NEXT
FLD_VAL
> OBJECT;
ya m a n ejo de b a n d e ra s
/ d e f i n e F la g P C d ,fD
/ d e fine F l agCd,f3
ay
C CdScfD ? 1 :O}
C CdD
!= Cf3> 3
P r e c o n p ila d c r de C++ c C.
¿ d e f i n e K em F lagC d , fD
CODIGO DE LOS MODULOS
C CdD £<= ~CfD D
x x b a n d e ra s d e t i p o
d e s ím b o lo
¿ d e fin e
F_NONE
¿ d e fin e
F_GLOBAL
1
xx t ip o s
¿ d e fin e
F__CLASST
2
x x Td ife r e n c ia ,
¿ d e fin e
F_FUNCTIOM
3
¿ d e fin e
F_HEADER
4
¿ d e fin e
F_CBJECT
5
O
/x b a n d e ra s d e c l a s e
/x
109
d e s ím b o lo s
xx
d e DCLTR x x
d e a lm a c e n a m ie n to C ’ s t g e ’ D
d e fin ic ió n
b a n d er a
¿ d e fin e
F_AUTO
CSTGED 0x0001
¿ d e fin e
F_S T A T I C
CSTGED 0x0002
2 b y te s
= 16 b a n d e ra s
CSTGED 0x0004
¿ d e f i ne
¿ d e fin e
F_REGISTER
CSTGED 0x0008
¿ d e f i ne
F_TYPEDEF
CSTGED 0x0010
¿ d e f i ne
F_OVERLOAD
CSTGED 0x0020
¿ d e f i ne
F _ I NLI NE
CSTGED 0 x0040
¿ d e fin e
F_VIRTU AL
CSTGED 0x0080
¿ d e fin e
F _ F R IEND
CSTGED 0 x0100
¿ d e fin e
F_ANYSTGE
CSTGED O x f f f f
b an d era
' i n e FY_AT
JTGf"
b a n d e ra s NO e x c l u y e n t e s
C F OVERLOAD! F IN L IN E ! F V I RTUAL ! F FRIEND D
x/
Freccsipi
ísder
/ d e fin e
FYJSTATIC
C F_OVERLOAD! F _ I NLI NE! F _ Y I RTUAL !T _ F R I END
/d e f i n e
FY_EXTERN
C F_OYERLOAD: F_1 NLI NE! F _V I RTUAL! F _F R I END D
de
C++ - C.
CODIGO DE LOS MODULOS
¿10
:
/ d o f i n e FY_REGISTER C ~F_ANYSTGE D
W e f i n e FY _TYPEDEF
C -F_ANYSTGE D
^ d e f m e FY _OVERLOAD C F_ANYSTGE & —CF_OVERLOAD! F_TYPEDEF
: F_REGI STER3 D
^ d e fin e
F Y _ I N LI NE
C F_ANYSTGE & ~C F _I NLI NE
/ d e fin e
FY_VIRTU AL
C F_ANYSTGE Sc
! F_TYPEDEF
F_VIRTU AL : F_TYPEDEF
: F_REGI s t e r :
¿ ■ d e fin e FY_FRIEND
C F_ANYSTGE & MIF_FRIEND
d
! F_TYFEDEF
! F REGISTERDD
/ * b a n d e ra s d e t i p o
C 't y p e ’ D
b a n d e ra
/ d e f i ne
F_TY PEDEF_NAME
/ d e fin e
F_CHAR
d e fin ic io n
CTYPED
2 b y te s
OxOCOl
CTYPED GxGOOS-
/ d e f i ne
F_FLOAT
CTYPED
/ d e f i ne
F_DOUBLE
CTYPED
0x0004
0x0008
/ d e f i ne
F _ IN T
CTYPED
0x0010
/ d e f i ne
F_SHCRT
CTYPED
0x0030
/ d e f i ne
FJLONG
CTYPED
0x0040
/ d e fin e
F_UNSI GNED
CTYPED
0x0080
/ d e f i ne
F_VO ID
CTYPED
0 x 0 1 OO
/ d e f i ne
F_CLASS
CTYPED
0x0200
/ d e fin e
FjSTRUCT
CTYPED
0x0400
/ d e f i r.e
FJUNICN
CTYPED
0x0800
/ d e f i ne
F ENUM
CTYPED
OxlCCO
=16
b an d era s*/
Precom pi la d or de C++ a C.
CODIGO DE LOS MODULOS
¿ d e fin e
F_CONST
CTYPED 0x2000
¿ d e fin e
F_ANYTYPE
CTYPED O x f f f f
/x
b a n d e ra
b a n d e ra s NO e x c lu y e r .t e s
¿ d e fin e
FY_TYPEDEF_NAME
¿ d e fin e
FY_CHAR
¿ d e fin e
FY_FLOAT
C F_CONST 2
¿ d e fin e
FY_DOUBLE
C F_CCNST D
C ~F_ANYTYPE
3
C F_CONST ! F_UNSIGNED D
¿ d e fin e
F Y _ I NT
¿ d e fin e
FY_SHORT
C F JCONST\F _ T
JNSIGNED\F _ IN T
D
¿ d e fin e
FY_LONG
C F__CONST¡ F_UNSIGNED! F _ IN T
D
¿ d e fin e
FY_UNSIGNED
C F_CONSTI F _ IN T
¿ d e fin e
FY_VO ID
C ~F_ANYTYPE
D
¿ d e fin e
FY_CLASS
C -F_ANYTYPE
D
¿ d e fin e
FY_STR'JCT
C ~F_ANYTYPE
¿ d e fin e
FY_UNION
C -F_ANYTYPE
¿ d e fin e
FY_ENUM
C ^F_ANYTYPE
¿ d e f i ne
FY JCONST
C F_CONST{ F_UNSI GNED! F_LONG! FjSHORT 2>
! 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<XJÍ**X)(9(J<)í*J(***XKXX)í)(5<KXX5<X3(íí3(3(X)(í(X5(J(X3(5(í(í(í(*XXJ«*KX9()HÍJ(/
Xx MODULO
: CPP. L
X * CAMBIOS
:
x x DESCRIPCION
'*
V e r s ió n :
1 .0
F eb 18^89 x/
*/
: A n á lis is L é x ic o
LEXYY.C e s e l
a n a liz a d o r
d e C++ C e n tr a d a p a r a LEX.EXED
lé x ic o
C s a l i d a d e LEX. EXEDxx
XX
XX
XX IMPORTA
: xxx
x/
XX EXPORTA
: yyw rap O
x/
xx
yyn err s
XX
x/
.
XX LOCALES
XX
: screen C )
x/
mai nC D .
xx
xx
xx
x/
x x NOTAS
: V e r s ió n d e p ru e b a .
NO HACE BIEN LA
xx
xx
BUSQUEDABINARTA
x/
XX
XX
x x PROGRAMADOR
: Rubén R u s ile s
x/
XX
x^-
/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/
/ 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 ,'
XX I
MPORTA
x/
/XX XX XXX XXX XX 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 Í
¿ in c lu d e
¿ d e fin e
"y ta b . h "
x x t a b l a d e to k e n s c r e a d a p o r YACC. EXE x/
ENDC v2> 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 <
ch a r
/ x t a b i a d e p a la b r a s r e s e r v a d a s
/ x r e p r e s e n t a c i o n x/
x rw _nam e;
/x v a i or de y y ie x O
i n t r w _ y y le x ;
>
/ 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<1 e t > : -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 ;
;
<o t h e r >
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<OD
p lo w = pmid+1 ;
e l se
p h ig h
= pm id-1 ;
r e t u r n to k en C ID E N T IF IE R D ;
s*k
RUTINA
: yywrapO
/X
/ * FUNCION:
X/
Lla :m aLla
d am p
a or
d a yp yorl e xy O
y l e ax lO t earlm in
t e ram
r in
l aa r l el ca t uler a
c t, u r a
/x
si
/x
1 - y y le x O
/x
in t
0 - y y le x O
yyw ra p O
<
r e t u r nC ID-.;
>
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
*, *
*<*
*: ’
*= ’
*C *
*} *
* C*
* x*
*] *
*. ’
’ &*
’- ’
* !*
*"’
V*
*%*
’ +•
*< *
’>*
,A ’
•! *
*? *
MG / x -> x /
PP
++ x ,'
MM x
x,>
LL / x << x/
GG / x >> x/
LE / x < = xx
GE x x >= x/
EE / x == x /
NE / x ! = x/
AA / x && x/
OO//x : : x x
PE / x += x/
ME / x -= x/
TE /x x= x/
DE /x /= x/
MDE / x ?;= x /
GGE / x >>= x/
LLE / x <<= x/
AE / x &= x /
XE / x ~ = xx
OE / x J= x/
U o k e n CC / x ; :
%%
goal
x/
A N A LISIS SINTACTICO DE C++
126
¿1=. C++ c: C
A N A LISIS SINTACTICO DE C++
I £7
: p rogram
aOOOl
! aOOOl
t o p _ l e v e l _ d e c l a r a t i on
p ro g ra m
: aOOOl
t o p _ l e v e l _ d e c l a r a t i on
: d a t a _ d e c i a r a t i on
! f u n c t i o n _ d e c l a r a t i on
d a t a _ d e c l a r a t i on
: op t__d e c l _ s p e c i f i e r
'
o p t _ d e c l_ s p e c if i e r
* ;*
lis t_ d c ltr
f u n c t i o n _ d e c l a r a t i on
: o p t _ d e c l_ s p e c if i er
d c ltr
*; *
o p t _ b a s e _ in it
o p t_ b a s e _ ini t
!
*: *
base_i ni t
b a s e _i ni t
member _ i n i t
!. b a s e _ i n i t
**'
member __i n i t
: ’ C’
*5*
! - ’ C*
lis t_ e x p
1 I DENTI FIE R
’ C’
i I DENTI F I ER
*C *
ty p e n a m e _ d e c la r a t i on
: d e c i_ s p e c iT ie r
m e m b e r _ in it
*
1i s t _ e x p
a b s _ d c lt r
o p t _ d e c l_ s p e c if i er
'
d e c l'^ s pièci f i e r
d eci _ s p e c ifi er
: aOOOS
a0005
: t c _ s p e c ifie r
« a0005
tc _ s p e c ifie r
t c _ s p e c i f i er
: s td _c L a s s .
! t y p e _ s p e c ‘i f i e r
i f c t_ s p e c i f i er
* D*
* I> *
com pound_stm t
P r & c e tn p i l a d o r d& C + + a C
A N A L I S I S S IN T A C T IC O DE C ++
128
std_class
:
5
:
!
!
AUTO
STATIC
EXTERN
REGISTER
TYPEDEF
type_specif i er
: si mple_t ype_name
J ciass_specifier
! enum_specifier
: CONST
si mpl e_type_na:r.e
:
TY PEDEF_N AME
I std_type
std_type
!
!
i
!
!
!
:
CHAR
FLOAT
DOUBLE
IN T
SHORT
LONG
UNSIGNED
v o id
fct_speci f ier
:
!
S
i
OVERLOAD
IN L IN E
VIRTUAL
FRIEND
c la s s _ s p e c ifie r
c la s s _ s p e c i f i er
: aggr
c l a s s _ _ ta g _ d c l t r
i aggr
5 aggr
c la s s _ t a g _ d c lt r
i aggr
c l a s s _ ta g _ _ d c i t r
aggr
: CLASS
i STRUCT
S UNI ON
c la s s _ t a g _ d c lt r
: IDENTIFIER
c la s s _ b a s e _ n a m e
c l ass_base_nam e
*< *
’ <*
*<*
a00Q3
a0003
a0003
*> ’
’>’
’ >’
p
~
ß
Z
: *: ’
! *: *
aOOOS
i a0003
g
a
r + + £*
ANALI S I 5 SINTACTICO DE C++
1£S
TYPEDEF_NAME
PUBLIC
TYPEDEF_NAME
meir.ber _ d e c l a r a t i on
member _ d e c l a r a t i on
: member _ d a t a _ d e c l a r a t i on
* f u n c t i o n _ d e c l a r a t i on
! f u n c t i o n _ d e c l a r a t i on
’ ;*
: PUBLIC
’ : ’
member _ d a t a _ d e c l a r a t i on
: o p t_ d e c l_ s p e c ifie r
m e m b e r_ d c ltr
: d c ltr
! *: *
c o n s t_ e x p
ID E N T IF IE R
’
m em ber_dc11r
c o n s t_e x p
/ x erium_s p ec i f i e r
e n u m _sp eci f i e r
: en u m _cty p e
! enum _ct,ype
! en u m _c ty p e
enum_name
. aCQQ7
e n _ t a g _ d c lt r
enum_c t y p e
: ENUM
enurn_name
: I DENTIFIE R
e n _ ta g _ d c ltr
: ID E N T IF IE R
a0C07
: ’ <*
a0006
a0006
: e n u m _ d c ltr
! aOOG6
e n u m _ d c ltr
: n a m e _ d c itr
! n a m e _ d c ltr
n a m e _ d c ltr
: I DENTIFIER
e n u m _ d c ltr
’ =’
c o n s t_ e x p
a0007
* ;* in i t _ d c l t r
Pr ecotipi I ador de C++ a C
A N A LIS IS SINTACTICO DE C++
130
/x d e l t r
dname
: s i mpl e_dnam e
i s x TYPEDEF_NAME x / CC s im p le _d n a m e
s i m ple_dnam e
: I DENTI F I ER
! *^ *
TYPEDEF_NAME
• o p e r a t o r _ fu n c t io n _ n a m e
! c o n v e r s io n _ fu n c t io n _ n a m e
o p e r a t o r _ fu n c t io n _ n a m e
: OPERATOR
o p e ra to r
o p e ra to r
:
• u n a ry _ o p
J •mul t _ p p
! sh i f t_ o p
• r e l _op
« equ _op
/x add_op e n tr a aqu i
x/
: aà
: co
i assgn _op
i ' C*
*> *
. ,c
,
i NEW J DELETE
c o n v e r s i o n _ f u n c t i on_nam e
: OPERATOR
TYPEDEF_NAME
• OPERATOR
std _ty p e
p i __dcl t r
: dname
S *C ’
d e lt r
p 2 _ d c ltr
: pi _dcl tr
! p 2 _ d c ltr
! p 2 _ d c ltr
i p 2 _ d c ltr
! p 2 _ d c ltr
! p 2 _ d c ltr
*C*
* C*
’ C*
’ C*
*= ’
*5*
f o r m a i s _ d e c l a r a t i on
* 1*
lis t_ e x p
*3*
lis t_ e x p
’0*
in it_ e .x p
a0004
: f orm ai _ d e c l a r a t i on
S aQ004
*♦’
fo r m a l_ d e c la r a t ic n
f o r m a i s _ d e c l a r a t i on
*3*
/'x i n i t i a l i z e r x/
i n i t i a l i z e r xx
Fr eccz.pi I zd c r ds C++ a C
:
131
*0 00 4
f o r m a l_ d e c l a r a t i o n
: d e c l_ s p e c ifie r
! d e c l_ s p e c ifie r
p3_d
:
!
:
!
•
A N A L IS IS SINTÁCTICO DE C++
d c ltr
a b s _ d c lt r
c ltr
p 2 _ d c ltr
*x*
p 3 _ d c itr
CONST
p 3 _ d c ltr
-& *
p 3 _ d c ltr
*& ’
CO NST
p 3 _ d c ltr
d c ltr
: p 3 _ d c ltr
a O O lO
: d e ltr
¡ a O O lO
* ,*
d c ltr
1i s t _ d c lt r
: a O O lO
pi _abs_dcl tr
: ’C*
p3_abs_dcltr
p2_abs_dcl tr
: pl_abs_dcltr
! p2_abs_dcltr
!
*C *
* C ’í
O ’
! p2_abs_dcltr
! p2_abs_dcltr
« e_abs__dci tr
! e _abs_dcltr
*D *
'
*i*
*C *
*Í *
*C*
*]*
list_exp
*3 *
list _ e x p
*]’
*]’
p3_abs_dcltr
: p2_abs_dcltr
!
p3__abs_dcl tr
! * x*
e _ a b s_dcltr
e_abs_.de 1 tr
abs_dcltr
: p3_abs_dcltr
! e_abs_dcltr
/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 .
AN A LISIS SINTACTICO DE C++
F ree am pliador de C++ a C
/ x s tm t
aOOl 3
I
a 0013
d e c 1 _ c r _ s t mt
ccm pou nd_stm t
:
»< *
a O O l3
*>*
d e c l_ o r _ s tm t
: s tm t
1o c a l _ d a t a _ d e c l ¿ r a t i o n
:
d e c l_ s p e c ifie r
• d e c l_ s p e c i f i e r
* ;*
lis t _ d c it r
* ;*
b a s ic _ s t m t
: lo c a l_ d a ta _ d e c la r a tio n
!' e _ s t mt
' com pou nd_stm t
S d o _ s tm t
! b re a k _ s tm t
! ’ c o n t in u e _ s t m t
• r ,e tu r n _ s tm t
! g o to _ js tm t
J n u ll_ s t m t _
s tm t
:
!_
•
!
J
■
!
b a s ic _ s t m t
whi le _ s t m t
fo r _ s tm t
lfe ls e _ s tm t
if_ s tm t
s w itc h _ s tm t,
la b e l
s tm t
ife ls e _ s tm t
: IF
’ C*
lis t_ e x p
*5*
s tm t ELSE
if_ s t m t
: IF
lis t_ e x p
*3 *
s tm t
*C *
e_stm t
: lis t_ e x p
w h ile _ s .tm t
: WHILE
s tm t
*; *
*C*
1i s t _ e x p
O ’
s tm t
d o js t m t
:
aOOl 4
DO
s tm t
WHILE
’ C’
1i s t _ e x p
*D’
132
~
: *; *
5 * ;*
r>£s C++
* 3>*
lis t _ e x p
a 0 0 l5
: * ;*
! ’ ;*
aO O l4
lis t _ e x p
f o r_ s tm t
: FOR
1 FOR
’ C*
*C*
sw i t c h _ s t m t
: SWITCH
Ci C
stm t
* D*
133
s tm t
a0014
a.OOl 5
lis t_ e x p
* C*
ANALISIS SINTACTICO DE C++
lis t _ e x p
aO O l5
’} *
stm t
br e a k _ s tm t
: BREAK * ; *
c o n t i n u e _s tm t
: CONTI NUE * ; *
re tu rn _s tm t
: RETURN * ; ’
! RETURN l i s t _ e x p
g o to _ s tm t
: GOTO l a b e l _name
*; *
* ;’
1a b e l_ n a m e
: I DENTIFIER
n u l1_ s tm t
la b e l
: n a m e _ la b e l
! ca se_l abel
I d e f a u lt_ l abel
n a m e _ la b e l
: ID E N T IF IE R
c a s e _l abel
: CASE e x p
*: *
*: *
d e f a u lt _ la b e l
: DEFAULT * : *
/x exp
x/
/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/
lit e r a l
D E C JN T
A N A L I S I 5 S I NT ACT I C.O DC Q+ +
P r e c o n x p iL a - d o r d& C + + a. C
:
:
:
:
:
;
O CT_I N'T
HEX _ I N'T
F L C A T L IT
CHARLIT
S T R IN 3
i d_na.Tie
: I DENTI F I ER
J o p e r ¿ t o r _ f u n c t i on_na.T.e
: TYPEDEF_N a ME
CC
I DENTI F I ER
! TYPELEF_NAME
CC
o p e r a t o r _ f u n c t i cn_r.a;ne
;
f i e l d_narr.e
: I DENTI F I ER
;
p a r en_e:-:p
: *C ’
1i s t_ e x p
;
pr 1 mar y _ p l _ e x p
:• i d _n ar.e
! lit e r a l
I p a ro r._ e x p
: T H IS
.. .
I CC
ID E N T IF IE R
pr i mar y _ ? 2 _ e : :?
: pr i mar y _ p l _ e x p
! p r im a r y _ p 2 _ e x p
! p r im a r y _ p 2 _ e x p
J p r im a r y _ p 2 _ e x p
! p r i mar y _ p 2 _ e x p
• p r im a r y _ p 2 _ e x p
’ D*
*t*
*C ’
’ C*
*. ’
MG
lis t _ e x p
* 1*
’ D’
lis t_ e x p
*} *
f i e l d_r.ame
fie ld _ n a m e
p rim a r y _ e x p
: p r i mar y _ p 2 _ e x p
;
p o s tf i x_exp
: p r i ma r y _ e xp
I p o s tfix _ e x p
p o s t fix _ o p
;
p o s t f i x_op
: PP
! MM
;
p r e fi x_exp
: p o s t fix _ e x p
! SIHEOF
pr e f i x _ex p
! p r e : i x _ o p . cast_e:-yD
! ’*'
c a s t_e x p
J *2c’
c a s t '_ e x p
J u n ary_cp
c a s t_e x p
.
124-
~ zls C++ a C
A N A L IS IS SINTACTICO DE C++
pr e f i x _o p
: PP
S MM
uñar y _ o p
: *+*
c a s t_ e x p
: p r e fix _ e x p
! * C*
t y p e n a m e _ d e c la r a t io n
* D’
c a s t_ e x p
c p p .e x p
: c a s t_ e x p
¡ SIZEOF
*C*
t y p e n a m e _ d e c la r a t i on
*D*
! s im p le _ ty p e _ n a m e
*C*
lis t_ e x p
’ D’
uñar y _ o p e r _ e x p
: cpp_exp
m u ít _ o p e r _ e x p
: u n a ry_cp er_exp
!• m u ít _ o p e r _ e x p
m u ít_ o p
uñar y _ c p e r _ a x p
m u ít_ o p
í
a d d _op er _exp
: m u ít _ o p e r _ e x p
¡ a d d _o p er_sx p
a d d _o p
m u lt _ o p e r _ e x p
add_op
:
’
s h ift _op er_exp
: a d d _op er_exp
! sn i f t_ o p e r _ex p
s h i f t '_ o p
a d d _op er_exp
s h ift_ o p
: LL
! GG
r e í_ o p e r _ e x p
: s h ift _ o p e r _ e x p
! r e l _oper _exp
r e l_ o p
r e l_ o £
sh i f t_ o p e r _exp
c fa st f u n c io n a l
132
Precom pi la d or de C++ a C
:
:
:
A N A LISIS SINTACTICO DE C+ +
*< *
le
ge
: ?> ’
eq u _o p er_ex p
: r e l_ o p e r _ e x p .
! eq u _op er_exp
e q u _p p
r e l_ o p e r _ e x p
equ _op
: EE
ï NE
b i ta n d _o p er_ex p
: eq u _op er_exp
! b it a n d _ o p e r _ e x p
eq u _op er_exp
b i t x o r _o p 'er _ e x p
: b i ta n d _o p er_ex p
. 2 b i tx o r _oper _exp
’ A’
b i t o r _o p er _exp
: b i t x o r _p p er _ex p
' b it o r _op er_exp
an d _op er_exp
: b ito r _ o p e r _ e x p
• a n d _ o p e r _e x p
*•*
AA
o r __oper _ e x p
: and _ o p e r _ e x p
i o r _o p e r _e x p
OO
con d_exp
: or_o p er_ex p
ï o r _op er _ex p
*? *
a s s i gn _exp
: con d_exp
S con d_exp
a ssgn _op
!
:
:
:
S
ï
i
!
!
PE
me
te
de
MDE
GGE
LLE
AE
XE
assgn_op
b it a n d _ o p e r _ e x p
b i tx o r _op er _exp
b i to r _op er _exp
an d _o p e r _e x p
lis t_ e x p
exp
*: *
con d_exp
136
Frs-zzz.'-iladzr cíe
C++ c: C
ANALISIS SINTACTICO DE C++
:
oe
:
!
!
;
\
:
a s s ig n _ e x p
NEW
*C *
ty p e n a m e _ d e c l a r a t i o n
NEW
TYPEDEF_NAME
HEW
TYPEDEF_NAME
’ C*
lis t_ e x p
*3*
DELETE
pr e l i x _ e x c
DELETE
c o n s t_e x p
’ 3’
p r e fix _ e x p
137
ex p
lis t _ e x p
: exp
: 1i s t _ e x p
ex p
c o n s t_ e x p
: ex p
i n i t_ e x p
: - ex p
! ’ <»
¡ •< •
a0009
aOOOQ
a0009
: in i t_ e x p
! a00©9
’ **
*>•
*, *
*> *
in it _ e x p
*
'*
TYPEDEF_NAME
¿e v - voi
* '
d e v . v o i d * *-
BIBLIOGRAFIA
P r^ c o m p ilador de C++
APENDICE B.
BIB LIO G RAFIA.
CYOUR86]
Y o u rd o n ,
"What e v e r
E.
hap p en ed t o S t r u c t u r e d A n a ly s is '*
D a ta m a tio n ,
CKAY85]
pp 1 3 3 -1 3 8 ,
K a y la n ,
ju n e -1986.
D.
"M o d u la r P ro gra m m in g i n
S ig P la n N o t i c e s ,
CBERG883
"W hat
B e r g in ,
does
G:
An A p p ro a ch and an e x a m p le "
Vol 20,
No 3 ,
Joseph.
G r e e n fie ld ,
M o d u la -2
need
to
pp 9 - 1 5 ,
fu lly
M a rzo 1985.
S tu a rt
su p p ort
O b je c t
Pr o g r amming"
S ig P la n N o t ic e s ,
[ T 0 R 087]
T o r o C,
V o l 2 3 , 'N o 3 ,
V ic to r
pp 7 7 -8 2 ,
M arzo 1988
Manuel
In te r a c tiv o s "
P u b lic a c ió n
[ KER78]
C e n t r o d e D o c u m e n ta c ió n C I F I , O c t.
K e r n ig h a n ,
B.
W.
R itc h ie ,
D.
M.
"T h e C P ro gra m m in g L a n g u a g e "
P r e n t ic e
CKER843
i 38
H a ll
I n c . , E n g le w o o d C l i f f s ,
K e r n ig h a n ,
B.
W.
P ik e ,
Rob
1978.
1987.
O r ie n t e d
PrécoR-i lcdsr cte C++
BIBLIOGRAFIA
"T h e UNIX P rogra m m in g E n v ir o n m e n t"
P r e n t i c e H a il
[ HARB84]
I n c . , E n g le w o o d C l i f f s ,
H a r b is o n ,
"C a r e f e r e n c e
P r e n t i c e H a ll
CSHRE87]
Samuel
P.
S te e le ,
Guy L.
m an u al"
I n c . , E n g le w o o d C l i f f s ,
S h r e in e r ,
A xel
T.'
F rie d m a n ,
"In tr o d u c c ió n
t o C o m p ile r C o n s t r u c t io n
P r e n t i c e H a ll
I n c . , E n g le w o o d C l i f f s ,
CSTRO]
1984.
S tro u s tro u p ,
1984
G e o r g e H.
c o n U N IX "
1987.
B .jarn e.
“ T h e C++ P ro gra m m in g L a n g u a g e "
A d d is o n W e s le y P u b l i s h i n g Co.
CRITCH3
R itc h ie ,
"A t o u r
B e ll
CJCHN3
Labs,
B e ll
CDEV/87]
M u rra y H i l l s ,
Joh n so n ,
"A t o u r
D.M.
th r o u g h t h e UNIX C_.Compj.Ler."
S. C.
th r o u g h
Labs,
t h e P o r t a b l e C C o m p ile r "
M u rra y H i l l s ,
D e w h u rs t,
"F le x ib le
New J e r s e y .
New J e r s e y .
S te p h e n C.
Sym bol T a b le f o r
c o m p ilin g C + + .
133
S o ftw a r e ,
P r a c t i c e & E x p e r ie n c e ,
“ I n f o r m a t i o n S y s te m s :
IBM C anada,
CTREM91]
"P r o je c t
Vol
17,
pp 5 0 3 -5 1 2 ,
M a n a g e m e n t.3 u id e "
A u g u st 1981.
T r e m b la y ,
J e a n -P a u l
S oren son ,
" T h e '.t h e o r y and P r a c t i c e o f C o m p ile r
Me. Gr aw H i'l 1 I n c . ,.1 9 8 1 .
Paul
W r itin g "
G.
Aug 37
El
J u ra d o
d e s ig n a d o
D ep a rta m e n to d e I n g e n i e r i a
E s t u d io s A v a n za d o s d e l
t e s is
el
di a 3 de a b r il
JAN JANECEK HYAN
la
E lé c tr ic a
In s titu to
S e c c ió n
del
de
C om p u ta ció n
P q lité c n ic o
N a c io n a l,
y
ap rob ó e s t a
JOSEF KOLAR SAVCR
M. en C.
dei
C e n tro de I n v e s t ig a c ió n
d e 19SQ.
Dr.
D r.
por
JOSE OSCAR OLMEDO AGUI ERE.
Descargar