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

e l u su ario son convenientes para programadores de aplicaciones ya que permiten referencia local y ocultamiento de- datos. c la s s compì ex < doublé re.im ;.
2MB Größe 8 Downloads 16 vistas
CENTRO DE INVESTIGACION Y ESTUDIOS AVANZADOS DEL IN S TITU TO POLITECNICO NACIONAL

DEPARTAMENTO DE IN G E N IE R IA E L E C ÍR IA SECCION DE COMPUTACION

" PRECOMPILADOR DE C++ A C ”

T E S I S

QUE PRESENTA EL INGENIERO L U IS RUBEN RUSILES ZAMORA PARA OBTENER EL GRADO DE MAESTRO EN C IE N C IAS EN LA ESPECIALIDAD DE IN G E N IE R IA ELECTRICA CON OPCION DE COMPUTACION

T RABAJO

DR.

BECARIO DE COSNEI

DIR IG ID O

POR:

JOSEF KOLAR SABOR

M g X lifc ,

D. F-

A 3 DE ABRIL DE 1Q39

a niis p a d r e s : A n gel

y M arth a

AGRADECIMIENTOS.

la g ra t it u d e es i

Q u ie r o e x t e r n a r por e l

por

Dr..

al

ser

s in o d a le s

de

In v e s t ig a c ió n

a g r a d e c id o ,

p a r te in t e g r a n t e

C o n s e jo

CCOSNETD

mi a d m ir a c ió n

en mi exam en.

S e c c ió n d e C o m p u ta c ió n ,

C e n tre

p ro fu n d a m e n te

Al

a q u í adem ás d e mi a g r a d e c im ie n t o ,

JOSEF KOLAR.

a c e p ta r

A la y

l a m&rríO1 r e du c o e r .

le

por

al

D e p to .

y

E s t u d io s

de In g e n ie r ía

haberm e

dado

N a c io n a l

de

A van zados, la

E lé c tr ic a ; le s

o p o r t u n id a d

e s to y de

ser

en e l l o s .

del

doy

S is te m a

la s

g r a c ia s ,p o r

a p o ya rm e

E d u c a c ió n

T e c n o ló g ic a

e c o n ó m ic a m e n te

p ara

I N D I C E :

FASES:

I.

FASE DE E S T U D IO .......................................

1

II.

FASE DE D IS E fJ O ..........................................

13

III.

FASE DE DESARROLLO.................................

47

V.

FASE DE IM rLE M E N TA C IO N .......................

82

V I.

CONCLUSIONES...............................................

83

APENDICES: A.

METODOLOGIA DE DESARROLLO ..................

84

B.

MODULOS DE D E S C R IP C IO N .........................

90

C.

MODULOS DE D E S C R IP C IO N .........................

D.

A N A L IS IS SINTACTICO

DE

C + + .......

i 1.8

E.

A N A L IS IS SIN TAC TIC O

DE

C+ + .......

125

F.

B IB LIO G R AFIA Y REFERENCIAS ................

139

95

P R E F A C I

En e l

p re s e n te

d e s a r r o llo

C++

del

es

a

c o m p a t ib le

p or

le n g u a je o b je t o s .

ccn

so b reca rg a

de

é l.

y en l a

a c titu d

pues

en lu g a r

s a lid a s ?

de

r e p re s e n ta ,

fa s e s

el

s e g u id a s

se

o r ig in ó

Labs.

de

en

el

es

a

C

de

y

c o m p ila r

C.

en e s t a

te s is

s o lo

se

y

de

1980

New J e r s e y .

en

gran d es

de S o f t w a r e " .

p r o g r a m a c ió n

e s tru c tu ra d a ;

e n tra d a s

o b je t o s

Y

y c u a le s

p reg u n ta :

m is

¿C u á l e s

hagan?.

C+ +

tu v ie r a

S is t e m a O p e r a t i v o UNI X:

y

a lr e d e d o r

d ad o un p ro g ra m a en C + + - . Que

C

f u n c io n e s

r e c o m e n d a b le

son m is

y ¿Q ué q u i e r o qu e e s o s

C++

de

In te g r a d o s

unas en o t r a s 7 ;

P r e c o m p i la d o r

p r o g r a m a c ió n le n g u a je

M u rra y H i1 1 ,

la

¿C u ál e s

t r a n s fo r m a n

del

p ara del

sob reca rga

" C ir c u it o s

e n fo q u e

c o r r e s p o n d ie n te .

del

gen era l

a o b je t o s

de

de p r e g u n t a r :

La meta i n i c i a l

h e r r a m ie n ta s

Su d is e ñ o

en AT&T B e l l

S is te m a P ro g ra m a d o q u e ,

t r a d u c ir

la s

s u p e r c o n ju n t o

c la s e s ,

o r ie n ta d a

y ¿Como s e

o b je to

p r o p o s ito un

c r e a c ió n

ca m b ia

se n m is o b j e t o s ?

c ó d ig o

d e s c r ib e n

M an eja

op erad ores.

La p r o g r a m a c ió n

E s ta

de Es

B ja r n e S t r o u s t r u p

p ro y e c to s

se

F r e-com pi L a d cr d& C + + a C.

un

o r ie n ta d a

e s c r ito

O

dos

a. C>f u e

la

p r o d u je r a

el

pasos

que u sa ra

H

d e s e r un el

in te r n o s : de

la s

YACC y' LEX.

i n c lu y e n :

La

d e s c r ip c ió n

g lo b a l

del

P r e c o m p i IcicLor

r u tin a s

de-

C+ +

A d ic io n a lm e n t e en e i en

fo r m a

in tr ín s ic ^ ,

in v e s t ig a c ió n .

C

y

el

desar r o l l o

DESARROLLO,

se

in c a p ié

c o n s is te n c ia

en

p re s e n te t r a b a jo

una

E s ta

DISEHO, h ace

a

de

a lg u n a s

de

la s

más im p o r t a n t e s .

m e t o d o lo g ía

m e t o d o lo g ía

a

c o n s ta

s e s u g ie r e , s e g u ir de

PRUEBA E IMPLEÍÍENTACI6N. el

u so d e

e s t á ndar e s

y m a n t e n ib i1 i dad a l

de

en 5

y e je m p lific a p ro y e c to s

fa s e s :-

En 1 a f a s e p r o q r am aci ón

S is t e m a en su e t a p a

de

ESTUDIO* de

DI SEfíO

p ara

fin a l.

dar

FA5ÌF: DE EST UDT O

I .

1. 1

F A S E

DE

!

E S T U D I O .

INTRODUCCION.

En

e s ta

o b je tiv o s del

fa s e

se

d e lim it ó

y a lc a n c e s d e l

u s u a r ic

que

s e r ía n

m aneras de h a c e r lo .

el

p ro y e c to .

problem a.

s a tis fe c h a s ,

Se e l i g i ó

e s p e c ific a n d o

S e d e te r m in a r o n l a s así

como

de

lo s

n e c e s id a d e s

la s

p o s ib le s

una de e s a s fo rm a s y s e j u s t i f i c ó

su

e l e c c i ón.

1 . 2 OBJETIVOS.

1 . 2 .1

P roveer

1 .2 .2

B o s q u e ja r l o s

1 .2 .3

de una h e r r a m ie n t a p a ra c o m p ila r C+-K'

H a b lar

r e q u e r im ie n t o s

de

la s

p o s ib le s

del

u s u a r io .

s o lu c io n e s ,

e le g ir

una,

y

ju s tific a r la .

1. 3

PRODUCTOS ENTREGADOS.

Una

s e c c ió n

p la n t e a d o s .

p a ra

cada

uno

de

lo s

o b je tiv o s

a n t e r io r m e n t e

FASE DE ESTUDIO

P r e c o m p ila d o r d e C ++ a. C

I .3 .1

El

2

OBJETIVOS Y ALCANCE DEL PROYECTO.

o b je t iv o

p r in c ip a l

del

p r e s e n te

p ro y e c to

fu e

el

de

p roveer

una h e r r a ir ie n t a p a r a c o m p ila r C++.

I - X. ¿

El

P-EÜÚEIP.Í iii ¿ jiros

u s u a r io

in v e s t ig a r

QeL usuario.

n e c e s ita

la s

un

C o m p ila d o r

p o s ib ilid a d e s

que

de

C++,

p r o p o r c io n a

con la

el

fin

de

p r o g r a m a c ió n

o r ie n ta d a a o b je t o s .

I .3 .3

SOLUCIONES POTENCIALES,

A lg u n a s

de la s

r e q u e r im ie n t o s

s o lu c io n e s

SOLUCIQN ELECTA Y JU STIFIC A IO N .

qu e pueden s a t i s f a c e r

lo s

son :

aD La a d q u i s i c i ó n

bD El d e s a r r o l l o

d e un c o m p ila d o r c o m e r c ia l

c o m p le t o d e un c o m p ila d o r

cD A lg u n a s o l u c i ó n

in t e r m e d ia .

d e C++.

d e C++.

a n te r io r e s

F recom a ila O or de C++ a C

Al

com prar

fu e n te .

Es

e s ta tu to s .

FASE DE ESTUDIO

un c o m p ila d o r

c o m e r c ia l,

p r á c t ic a m e n t e Además,

no s e

in c o s t e a b le

un c o m p ila d o r

d is p o n e d e

r e a liz a r

c o m e r c ia l,

3

su c ó d i g o

ca m b ios

en

su s

no e s t r a n s p o r t a b l e d e

una c om p u ta d ora a o t r a .

El no e s cu al

La

d e s a r r o llo a lg o

de un C o m p ila d o r R e q u ie r e

de

qu e s e a

un t o d o

de buena c a l i d a d ,

un e q u ip o d e g e n t e s ,

lo

e s muy c o s t o s o .

s o lu c ió n

a n te r io r .

qu e

C o n s is t e

in t e r m e d io . el

to ta l

s e n c illo .

E s te

se

e lig ió

e s tá

en c o m p ila r

el

c ó d ig o

el

es

r e la c io n a d a

le n g u a je

C++,

le n g u a je

C.

con

el

p u n to

u sando De

3

un c ó d i g o

aquí

s u r g ió

P r e c o m p ila d o r d e C++ I .

H oy,

se

p r in c ip a le s

hay v a r io s gran d es de

la s

s o ftw a r e

b ases

Ha

de

s id o

la

banca,

de

d a to s ,

d e m ú s ic a ,

s im u la c ió n ,

m ile s

p ro y e c to s

Sun.

in c lu y e n d o

s ín te s is

a

de d a to s .

AT&T y

de

p or

o r ig in ó

A d ic io n a

d e s a r r o llo

A p o lo ,

e x c e p to

la s

a b s tra c to s

u sado en

p a ra

c o m p ila d o r e s ,

y

A l g o l 68.

1983.

como A p p le ,

ram as de l a

p r o c e s a m ie n t o d e im á g e n e s , a m b ie n te s

t ip o s

Ha s i d o

in v e s tig a c ió n

de

y

qu e,

Su d is e ñ o

S tro u s tru p

so p o rta r

com p a ñ ía s

c o n s t r u c c ió n

gen eral d e C.

S im u la 6 7

in ic ia lm e n te

que l o

de

p r o p o s ito

un s u p e r c o n ju n t o

de

d e C,

de i n s t a l a c i o n e s

g ra n

es

red es,

c o m p u ta c ió n

FASE DE ESTUDIO

P r e c c m p ila d o r de C++ a C

C++

preserva

d isp o n ib ilid a d obvios

la y

p r o b le m a s .

fo rta leza

p o r t a b i 1i d a d D , Por

ejem p lo:

de

C y

C f 1e x i b i 1 i d a d ,

rem edia

algu n os

6

e fic ie n c ia , de

su s

mas

CHEQUEA EL T IP O DE LOS ARGUMENTOS DE UNA FUNCION

e x te rn

d o u b le s q r t C d o u b l e ) ;

d e c la r a

1 a. f u n e i 6n r a i z

c u a d ra d a x

d o u b le d l= sq rtC 2 2 > ; b ie n »

2 e s c o n v e r t i d o a d o u b le *

d o u b le d 2 = s q r t C " d o s " D ; error

d e c o m p ila c iö n ,

sq rt

no a c e p t a un s t , r in g

PROVEE T IP O S ABSTRACTOS DE DATOS.

E s ta e s una t é c n i c a de* p r o p ó s i t o

gen era l

a p lic a c io n e s . c o n v e n ie n t e s r e fe r e n c ia

E s to s p ara

lo c a l

d e p r o g r a m a c ió n en i a

y tip o s t ip o s

>

d e fin id o s

p r o g ra m a d o re s

de

d o u b lé iO

cual

s e d e fin e n

e s p e c ia l por

a p lic a c io n e s

y o c u lt a m ie n t o de- d a t o s .

c l a s s com pì e x < d o u b lé r e . i m ; p u b lic : com pì e x Cd o u b lé r ,
oid * . el

C u a lq u ie r

u so d e

’ c a s t’

FASE DE DISEHO

P re c o m p ila d o r de C++ a C

D e c la r a c ió n c o n v a lo r

Un

id e n tifle a d e r

d e c la r a d o .

Si

el

v a lo r

in ic ia l

p u ede

y u san do

r e c ib ir

in ic ia l

es

c o n v e r s ió n e x p líc it a m e n t e a tr a v é s

26

’ c a s i’ .

un

de o t r o

v a lo r t i pe,

d e un ’ c a s t ’ .

in ic ia l se

al

p u ed e h a c e r

ser la

Fr s c a l p i Is d c r d& C++ s C

FASE. DE DISESO

- 27

Uso c¿e C l a s e s .

T ip o Ci a s e .

2

Un t i p o

p u ed e s e r

p a rte s :

p r iv a d a

d e c la r a d o s una

ta n to

c la s e ,

p r iv a d a

y

son

de 1.a c l a s e

en

son

d e c la r a d o como c l a s s C e l a s e ) . y la

p ú b lic a . p a rte

lla m a d o s

a c c e s ib le s

s o lo

D a to s

p r iv a d a m ie m b ro s . p ara

la s

y

como en Los

Una c l a s e

f u n c io n e s la

p a rte

m iem bros

t ie n e

p u eden

de

ser

p ú b lic a la

fu n c io n e s .d e c la r a d a s

de

p a rte d e n tro

Cm iem bros f u n c i ó n }.

Una c l a s e

es

un t i p o .

Un o b j e t o

de c l a s e ,

es

un o b j e t o

de ese

d e c l a r a d o e s t á t i c o . Cs t a t i c }

d e n tro

t i po.

M ie m b r o s D a t o s ,

s ta tic Un m iem bro d a t o p u ede s e r d e una c l a s e .

Un m iem bro s t a t i c

e s común a t o d o s

lo s

e le m e n t o s

de

c a r a c te r ís tic a s

de

una c l a s e .

M i e m b r o s Fun ci or x& s.

L a s f u n c io n e s

m iem bros

ta m b ié n

p e r m it e n

la s

Fr ecotipi I ador de C++ a C

“S o b reca rga

de

O p e ra d o re s ",

FASE DE DISEfìQ

N o m b re s ",

"S u s titu c ió n

en

L ín e a "

y

25

"S o b re c a rg a

de

m e n c io n a d a s a n t e r io r m e n t e .

C o n s tru c to re s .

Un c o n s t r u c t o r c la s e .

nom bre d e .la el

en una fu n c ió n

Son \ c o n s t r u c t o r e s

t ie m p o

de

c la s e .

Si

c o r r id a

h a cen 1e

c la s e C si

e s t a fu n c ió n

Una c l a s e

s e .d e c la r a se

al

2

un o b j e t o

f u n c io n e s

d e una c i e r t a qu e

tie n e n

un o b j e t o

d e una c l a s e

cosas:

le

a p lic a

se

la

a s ig n a

fu n c ió n

el

dada,

la

en

m em oria

c o n s tru c to r

de

su

nom bres

de

e x is te ).

p u ed e t e n e r

c o n s tru c to re s

que c r e a

m iem bros

y se

n e c e s a r ia

lo s

o b je t o ,

lo s

cero

o más c o n s t r u c t o r e s .

ta m b ié n p u ed en s e r

so b reca rga d o s

Los

C v e r 2. 2. 1 .3 .

D estr u c to r e s .

Un c la s ¿ .

d e s tru c to r

nom bre d e l á de

una c l a s e

lo

s ig u ie n t e :

a p lic a

es

una

Son d e s t r u c t o r e s

al

e x is te ).

c la s e en al

o b je to

fu n c ió n

lo s

que

p e r o p r e c e d id o p o r

un c i e r t o s a lir el

el

d e s tru y e

m iem bros fu n c io n e s

b lo q u e , flu jo

d e s tru c to r

en del

de

la

*—*. el

Si

un

s e d e c la r a

tie m p o

p ro gra m a c la s e

o b je t o

que t ie n e n e l

c o r r id a

del

b lo q u e , e s te

una

mismo

un o b j e t o

de

C si

de

o cu rre se

le

d e s tru c to r

F rsco x ip ila d zr da C++ a C

Una c l a s e

tie n e

FASE DE DISEÍ10 .

29

s o la m e n te un d e s t r u c t o r .

A m ig o C* f r i e n d ' J>.

Un m iem bro f u n c ió n c la s e s .

Una- f u n c ió n

p a r t e p r iv a d a

de lo s

C o n v e r tid o r e s

de

Un

m iem bro

c o n v e r tid o r c la s e se

es

p u ed e una

como

un

Un o b j e t o

un a p u n ta d o r th is .

E s te

de

una o

tie n e

v a r ia s

acceso a

la

lo s a esa

c o n v e r tid o r qu e

t ip o .

Un

de

c o n v ie r te

e t c .}.

un

o b je to

Un c o n v e r t i d o r

sob reca rga d o,

donde

el

de

de

tip o

o p era d o r

es

s im p le .

d e una c l a s e

e n c u e n tr a n

flo a t,

op era d or

tip o

ser

f u n c ió n

s im p ie C i n t ,

A x it o r e f e r e n c ia . e n / -u n c io n e s :

se

fr ie n d c la s e ,

tip o .

t ip o

p r e c is a m e n t e e l

d e c la r a d a

d e una c i e r t a

o b je t o s d e e s a c la s e .

f u n c ió n

de

a un t i p o

d e c la r a

pu ede s e r

fr ie n d

tie n e

m iem bros m em oria

a p u n ta d o r

* th is ’ .

p u ed e

m em oria a s ig n a d a .

d a to s

p a r t ic u la r e s

id e n tific a d o ser

u sa d o

con

por

la

del

En e s t a o b je t o .

p a la b r a

c u a lq u ie r

m em oria E x is te

reserva d a

fu n c ió n

que

FASE DE DISEHO

Precom pi tactor de C++ o C

te n g a a c c e s o a l

o b je t o .

T ip o s :

’ s tru c i ’ ,

El

*c l a s s ' ,

nom bre

e n u m e ra c ió n c u a lq u ie r

s tru c t lo s

de

una

’ u n ió n *

c la s e

Cerru/iO s e n

y *enum * .

Cc l a s s ,

tip o s .

30

E s to s

s tru c t, t ip o s

u n ió n )

pu eden

o

ser

el

de

u sa d os

una como

i ypede f .

es

un c a s o p a r t i c u l a r

m iem b ro s,

u n ió n e s

de c la s e .

t a n t o d a t o s como f u n c i o n e s ,

un c a s o e s p e c i a l

de c la s e .

En l a

c la s e

s tru e l

to d o s

son p ú b lic o s .

En l a

c la s e

u n ió n s o l o

hay

m iem bros f u n c io n e s q u e son c o n s t r u c t o r e s .

Una u n ió n

p u ed e s e r

a n ón i ma C s in

u n ió n anónim a no s e c a l i f i c a n

n o m b re ).

Los

cu an d o son u sa d o s.

m iem bros

de

una

C la s e s Deri.-oad.as.

D e s c r i pe i en..

Se p u ed e d e r i v a r b a s e ).

Les

p ara l a

c la s e

p r iv a d o s

una c l a s e

m iem bros

de

d e r iv a d a . la

c la s e

C lla m a d a d e r i v a d a )

p r iv a d o s

de

la

c la s e

base

de

L o s m iem bros p ú b l i c o s d e l a d e r iv a d a ,

a

menos

qu e

se

o trá

NO s o n

C1 i amada

a c c e s ib le s

c la s e base sen

e s p e c ifiq u e

o tra

cosa .

Las

c la s e s

p a ra la s

c la s e s

d e r iv a d a s Cv e r

tie n e n

2 .3 .5 .),

la s

con la s

c a r a c te r ís tic a s s ig u ie n t e s

m en cion a d a s

c o n s id e r a c io n e s :

C ons t r u c l o r e s

E l o r d e n d e c o n s t r u c c ió n p a r a un o b j e t o d e un c l a s e d e r i v a d a el

s ig u ie n t e :

e n s e g u id a , se

a p lic a

a p lic a r

a p lic a r

el

el

c o n s tru c to r

c o n s tru c to r

r e c u r s iv a m e n t e a l o s

de la

o b je to s

de c la s e

la

c la s e

d e r iv a d a .

de c la s e

base

es y,

E s te o rd en

d e r iv a d a

de

c la s e

d e r iv a d a .

Des t rxic t o r e s .

El

ord en de d e s tr u c c ió n

p a r a un o b j e t o

d e una c l a s e d e r i v a d a e s

el

s ig u ie n t e :

y . e n s e g u id a ,

a p lic a r

a p lic a r

ord en

c o n t r a r io

a p lic a

ta m b ié n

al

el

de

el

d e s tru c to r

d e s tru c to r c o n s t r u c c ió n .

r e c a r s i v a c íe n te

a

le s

de

de la

la

c la s e

E s te

ord en

o b je to s

de

c la s =

base. de

'-’e r i - 'a '- '-

Es d e c i r ,

ún

d e s tr u c c ió n

se

c la s e

d e r iv a d a

de

c i a s e d e r iv a d a .

Funciones y ir t u a le s .

Un m iem bro Una

fu n c ió n

f u n c ió n v ir tu a l

p o s te r io r m e n te d e fin id a

de

una

es en l a

c ia s e

p u ede

d e c la r a d a

ser

en

c l a s e d e r iv a d a .

la

d e c la r a d o c la s e

u i r £1 7 base

y

Frecostpi lod a r ds C++ a C

FASE DE DISEHO

32

E x p r é s i o r íe s .

new y d e l e t e .

Hay 2 d in á m ic a : d a to ,

op erad ores

in c lu id o s

neu> y d e l e t e .

y de l e t e l a

en

C+ +

new p id e l a

p

p ara

el

m a n ejo

de

m em oria p a r a un c i e r t o

m em oria tip o

de

d e v u e lv e .

A c c e s o a 1d e n t i / ic a d o r e s G lo b a le s .

S e p u ed e t e n e r y una l o c a l . id e n tific a d o r a ñ a d ir la

el

el

D e n tr o s im p le

p r e fijo

v a r ia b le g lo b a l.

mismo i d e n t i f i c a d o r del

e n to rn o

de

h ace r e f e r e n c ia

*::*

al

la

p ara

una v a r i a b l e

v a r ia b le

a la

id e n t ific a d o r ,

lo c a l,

v a r ia b le p ara

el

lo c a l.

hacer

g lo b a l u so

del

Se debe

r e fe r e n c ia

a

Pr&cempi I ador de C++ a C

I I .3 .2

FASE DE DISEfîO

cì4

BOSQUEJO DE LA ARQUITECTURA INTERNA DEL SISTEMA.

I I . 3 . 2 . 1 INTRCDUCCION.

A lg u n a s

de

d e s c r ip c ió n

a)

la s

del

D is e ñ o d e F l u j o d e D a to s . C H IP O **,

fcD ' D is e ñ o

con

Hi e r a r c h i c a !

la s

que

son l a s

d is p o n e m o s

p ara

la

s ig u ie n t e s .

O r ie n t a d o a E n tr a d a s y S a l i d a s .

Ir s p u t-P r c c e s s - O u t p u t )

de F l u j o d e

D a to s .

O r ie n t a d o a T r a n s a c c io n e s .

cD

D is e ñ o O r ie n t a d o a

O b je t o s .

d)

D is e ñ o O r ie n t a d o a

E s t r u c t u r a s d e D a to s .

e)

D is e ñ o d e S is te m a s

en T iem p o R e a l.

f)

D is e ñ o O r ie n t a d o p or G ra m á tic a .

Es

d ifíc il

le n g u a je

le s

como

in e x is t e n c ia p a rte ;

y la

C

de

es to s

fu n c ió n ,

C+ + .

e n te s

si

de E s to

d a te s

p a rte ,

c o n ten g a

una

un

c o m p ila d o r ■■.dos.

p u es

y

una

de

un

; ;.s .? s :----

in d e p e n d ie n te s ,

le n g u a je por

" d e fin ic ió n "

i n d e p e n d ie n t e s ,

e s ta tu to s

de

e s — d e b id o - —

s u fic ie n te m e n te

c o n s id e r a m o s

no s o n

t ie n e

Por o t r a

p roceses e

n a tu r a le z a r e c u r s iv a d e l

P o r e je m p lo , e n te s ,

que

h e r r a m ie n t a s

p ro c e s o de d a to s ,

por

una

o tra .

" e s t a t u t o " com o d o s "d e fin ic ió n "

de

una

en su i n t e r i o r .

en C++, f u n c ió n

una f u n c ió n que

p u ed e t e n e r

co n te n g a

una

una d e c l a r a c i ó n

d e c la r a c ió n ,

y

asi

F r e z c x .p ila d c - äs C++ a C

FASE DE DISECO

35

r e c u r s iv a m e n t e .

El

D is e ñ o

c o m p ila d o r ; s u p e r io r

En

el

O r ie n t a d o p ero

es

por

G r a m á tic a

ta m b ié n * e l

es

el

menos

más

adecu ado

e n te n d ib le

en

p ara un

un

n iv e l

d e a b s tr a c c ió n .

P r e c o m p i la d o r

de

C++

a.

C

se

usan

la s

s ig u ie n t e s

h e r r ami e n t a s :

a ) - D i s e ñ o p o r F l u j o d e D a to s C n iv e l

s u p e r io r

D is e ñ o O r ie n t a d o a E s t r u c t u r a s

c)

D is e ñ o O r ie n t a d o por G ra m á tic a C o t r o s n i v e l e s ) .

Es

im p o r t a n t e

ser tip o

u sa d o e l

n o ta r

D is e ñ o

r e c u r s iv o .

qu e en

O r ie n t a d o

la

d e D a to s

de a b s tr a c c ió n ).

b)

c r e a c ió n

a O b je t o s ,

de

C e tro s n iv e le s ) -

un C o m p ila d o r

s ie n d o

e s to s

puede,

o b je to s

de

3

FASE DE DISECO

Pre¡com pilador de C++ a C

36

I I . 3 .2 . 2 DIAGRAMA DE FLUJO DE DATOS%

En e s t e

D ia g ra m a

in d e p e n d e n c ia

de

la

n a tu r a le z a

e n te s ,

S I MEOLOS CTBL_SY>D , y d e l

se

r e c u r s iv a

-manejan

a

d e l le n g u a je

tr a v é s de

STACK SEMANTICO CSTKJSEM).

I I . 3 . 2. 3 DESCRIPCION DEL DIAGRAMA DE FLUJO DE DATOS.'.

PROCESOS d e l

P r e c o m p ila d o r de C++ a C :

aJ> A n á l i s i s

L é x ic o .

6J> >lná.££s£s S i n t á c t i c o

y S e m á n tic o .

cJ> E m is ió n d e C ó d ig o . dS> C o m p ila c ió n d e C ó d ig o .'

ESTRUCTURAS DE

DATOS d e l

P r e c o m p i la d o r de C + ^ a

aS> T a b la de

S ím b o lo s .

CTBL_SYM5

6J> T a b la de E t iq u e t a s .

CTBL_LBL2

c2 A r b o l d e D e s t r u c c i ó n . * e>

S ta c k *

’ S ta c h ’

ARCHIVOS d e l

S e m á n tic o .

CTREE_DEST2 CSTK_SEM2

p a ra I n i c i a l i z a c i ó n .

P r e c o m p ila d o r

C STK _IN 1T2

d e C++ a C .

a!> A r c h i v o d e C ó d ig o L ig a d o .

C F I _COD2

y

l a TAELA

C.jl.

la

no de

F r ecotipi Iz d s r de C++ a C

b } A r c h iv a de C ó d ig o e n C.

FASE DE DISESO

CF1 _CCÙ_C:

37

FASE DE DrSErtO

P re c c m p ila d c r de C++ a C

PROCESOS d e l

aJ> A n Á l i s i s

C o n s ta

** ’ ,

P r e c c m p ila d o r d e C++ a C . .

L é x ic o .

del

c a ra c te re s es

P roceso:

y

s a le n

* a * ,* C ’ ,

“ to k e n "s

A n á lis is

S in tá c tic o

es

A

e s te

p roceso

s in tá c tic a s !).

* w h ile * *

p a la b r a s

’ in t * ,

reserva d a s,

e n tra n

Un c a r a c t e r

*%* ,

e tc .

L os

id e n t ific a d o r e s ,

y S e m á n tic o .

s ig u ié n te s

p ro ceso s:

C h equ ear E s t a t u t o ,

"to k e n "s

s in t á c t ic a s .

Un t o k e n

ser:

L é x ic o .

C e n t id a d e s

o p era d o res o c a r a c te r e s .

L o fo rm a n l o s D e c la r a c ió n ,

A n a liz a r

"to k e n '* s

e tc .

p u eden

c o n s ta n te s ,

Los

23

del

E s ta s

A n á lis is

e n t id a d e s

A n a liz a r

S in t á x is ,

C h equ ear

C hequ ear E x p r e s ió n .

L é x ic o pu eden

son ser:

en

e n t id a d e s

d e c la r a c io n e s ,

a g ru p a d o s

e s ta tu to s

o e x p r e s io n e s .

Las

e n t id a d e s

d e t e r m in a r

s in tá c tic a s

errores

id e n t ific a d o r ,

error

t a le s de

son

ch equ eadas

como:

d e fin ic ió n

s in tá x is

i n v á l i d a Csuma d e 2 e s t r u c t u r a s ) ,

e tc .

en

un

s e m á n tic a m e n te d o b le e s ta tu to ,

del

p ara

mismo

e x p r e s ió n

cJ> E m is ió n , de C ó d ig o .

Una e n t id a d despu és d e é l ,

s in t á c t ic a ,

al

pasar

per

el

a n á lis is

p rod u ce de a cu erd o a s u - c a lid a d

s e m á n t ic o ,

y

...

M e n s a je s d e E r r o r . C ó d ig o C.

CQue s im u la a l

d e C++D.

cO C o m p ila c ió n d e C ó d ig o .

El tra v é s

c ó d ig o del

p r o d u c id o p o r

el

P r e c o m p ila d o r

de C++ a C ,

Com pi1a d o r C, y s e o b t i e n e c ó d i g o o b j e t o .

se

pasa a

Fr scornai I ador de C++ a C

FASE DE DISERÒ

40

ESTRUCTURAS DE DATOS D e l P r e c c n .p ilc .d c r de C + + a C .

I n t r odxic c io n . A

c o n t in u a c ió n

se

d e s c r ib e n

PrecGrn.pila.cLor d e C++ a C. la s

podem os c l a s i f i c a r

Las

la s

e s tru c tu ra s

fu n c io n e s

u sa d a s

qu e a c c e s a n

esta s

en

el

estru c tu ra s

en:

Fune i e n e s B á s ic a s . F u n c io n e s C o n c e p t u a le s .

Las p e d ir

F u n c io n e s y

e s c r ib ir

dar

v a lo r

e s ta s

B á s ic a s a

lo s

r u tin a s

r e a liz a n cam pos

a c c io n e s

de

"t r iv ia le s "

la s

d ir e c ta s ,

estru c tu ra s .

t a le s El

t r a e c o n s ig o c i e r t a s

como

hecho

de.

v e n ta ja s y

d e s v e n ta j a s .

V e n t a ja s d e l P e r m it e n

u s o de F u n c io n e s B á s ic a s . a la s

o tra s

r u tin a s

im p le m e n t a d ó n r e a l F a c ilita n

la

de l a

lla m a n te s ,

p r o g r a m a c ió n d e r u t i n a s

R e a liz a n chequ eos s o b re e r r o r e s E lim in a n e l

T ra b a j-e.

El

de

la

s u p e r io r e s .

d e p r o g r a m a c ió n C "b u g s "2 .

u so t e d i o s o d e a p u n ta d o r e s .

D e s v e n ta ja s d e l T iem p o.

a b s tra e rs e

e s tru c tu ra .

u s o de F u n c io n e s B á s ic a s . c ó d i g o r e s u l t a n t e e s más l e n t o .

Hay

qu e

in v e r t ir

r e c u p e r a en l a

tr a b a jo

en

e lla s ,

p r o g r a m a c ió n d e n i v e l

p ero

s u p e r io r .

se

P r e c o c i l a í o r ¡is C++ a C

La s que

la

c o rre c ta

F u n c io n e s n u eva

FASE DE DISEflO

C o n c e p t u a ie s

i n fo r m a c ió n

co n r e l a c i ó n

a la

sea

a grega n c o rre c ta

in fo r m a c ió n . por

si

V e r ific a n

m ism a,

in f o r m a c ió n qu e ha l l e g a d o

41

y

qu e

sea

p r e v ia m e n t e .

FASE DE DI SESO

F re e c o p ila d o r C’¡? C++ Oí- C

42

ESTRUCTURAS £>£ D.4TOS d e l P r e c ó m p i l e d e r d e C++ a C .

aJ> Tabla, de S ím b o lo s .

In tr o d u c c ió n . La

ta b la

C++ a C. c la s e s ,

El

lo s

un

a lc a n c e s

p ara

es

la

se r e g is tr a

p a rte

la

m ed u lar

i n fo r m a c ió n

del

P r e c o m p ila d o r

n e c e s a r ia

de

p a ra m a n eja r

s o b r e c a r g a d e f u n c io n e s y s o b r e c a r g a d e o p e r a d o r e s .

En C++ lo s

d e S ím b o lo s

En e l l a

S ím b o lo lé x ic o

a lc a n c e l é x i c o d e t e r m in a r

cam pos .de

si

d e fin e

a tr ib u to s

g lo b a l

s tru c t r_A < in t i ; > r l; s t r u c t r_B < s t r u c t r _ C -C in t i ; > r 2; > r 3; m a in O




t r a b a jo .

y

la s

Precorrici la d zr de C++ a C

Una

c la s e

d e s tru c to r. le

la

c o n s tru c to r. cu an d o s a l e

En

p u ed e 't e n e r

A un o b j e t o

a s ig n a

FASE DE DISEHO

m em oria Se

le

v a r io s

c o n s tru c to re s ,

se el

a p lic a

su

y

se

le

d e s tru c to r

a p lic a

a

un

o b je to

ta b la

se

a lm a c e n a

la

i n fo r m a c ió n

se

s a lir

b lo q u e ,

al

’ g o t o ’ s y en

del

S e m á n tic o .

de o tr o s

a lc a n c e

a C a tra v é s

el

c ie r to

pr e v i o .

’ b rea k ’ s

le n g u a je s ,

s in tá c tic o

del

’ S ta c k *

t ie m p o

de

al

S ím b o lo

a m b ie n te

s in tá c tic o ,

en

,

p ara

la

E s ta d e s t r u c c i ó n

en

’ c o n tin u e ’ s ,

en

CSTK__SEM2

c o r r e s p o n d e n c ia e n t r e e l l o s

En

c la s e ,

’ r e t u r n ’ s.

A d ife r e n c ia

CCURRENTD

de

n e c e s a r ia

d e c l a s e Ccon d e s t r u c t o r ! ) .

En C++ e l

e n s e g u id a

d e su e n t o r n o .

e s ta

' S la c f c '

un

n e c e s a r ia ,

de o b je t o s

cD

s o lo

d e c l a s e qu e e s d e c la r a d o en un b lo q u e ,

d e s tr u c c ió n hace

p ero

5C

y

el

t a le s

PASCAL o MODULA.

e s tá n

s e p a r a d o s . “ La

e s 11 evadar^por" c i

■ere •C r

S e m á n tic o .

" P r e c o m p ila c ió n " qu e

d e fin e

s in tá c tic o .

se e s tra e d el

como C,

s e m á n t ic o

el

Cuando

*S ta c k ’

se

se

t ie n e

a lc a n c e e n tra

S e m á n tic o ,

un

s e m á n t ic o a

el

un

n u evo

a p u n ta d o r p ara

un

a m b ie n te

a lc a n c e s i n t á c t i c o

eJ> * S ta c h .’ p a r a

Es

u sad o

d e s c r ip c ió n

p a ra

I n i c i a l is a c ió n .

la

i n i c i a l i z a c i ón

d e ta lla d a

e n c u e n tr a n i n c l u i d a s

CSTK_1 N IT 2

de

cam pos

en e s t e

de y

t r a b a jo .

a r r e g lo s f u n c io n e s

y

e s tru c tu ra s .

a s o c ia d a s

NO

La se

Preccm pi i ador de C++ a C

FASE DE DISEHO

52

ARCHIVOS d e l F r e c o p i l a d o r d e C++ a C

aJ A r c h i v o d e C ó d ig o L ig a d o .

La

t r a d u c c ió n

d e c ir ,

no

se

d e C++ a C no p u ed e

p u ed e

s im u ltá n e a m e n te .

E x is te n c ia

CFI_COD2

le e r

c ó d ig o

Las ra zo n e s

en

ser

h ech a

C++

p r in c ip a le s

y

p a r a le la m e n t e .

e s c r ib ir

son l a s

c ó d ig o

Es

en

C

s ig u ie n te s :

d e F u n c io n e s A n id a d a s .

A- d i f e r e n c i a

de

C,

s in tá c tic a m e n te

en

o tra

en

C++

una

C s ie m p re

f u n c ió n y

p u ed e

cu an d o

haya

e s ta r una

c o n t e n id a

d e c la r a c ió n

i n te r m e d i a d e e l a s e D .

En su

C++

vez

una

c la s e

e s ta

r e c u r s iv a m e n t e . r e q u ie r e

p u ed e

fu n c ió n

te n e r p u ed e

La t r a d u c c ió n

e x tra e r

la s

en

su

a C de e s t e

f u n c io n e s

in t e r io r

c o n te n e r

in te r n a s

una

una tip o y

fu n c ió n .

c la s e ,

y

A asi

de c o n s tr u c c io n e s ,

r e d e fin ir la s

a

n iv e l

g lo b a i.

Por c la s e

o tra

p a rte ,

p a ra , t r a d u c i r

una d e c l a r a c i ó n

con i n i c i a l i z a d o r , es n e c e s a r io

y gu a rd a r e s ta tu to s .

la

i n ic ia liz a c ió n

tr a d u c ir

p ara e m i t i r l a

al

de

s o lo

in ic io

un o b j e t o la

de

d e c la r a c ió n

de la

p a rte de

Un e je m p l o d e t r a d u c c ió n

s e m uestra, a c o n t in u a c ió n :

C 6 d ig o en C++.

C ó d ig o e q u i v a l e n t e en C. / * g lo b a l in t g; in t




in t

_ lg O

< in t

i ;

se e x tra

la

f u n c ió n

’ s tru c t*

P re c c m p ii ador de C++ a C

te m p o r a l lig a d a . en e l

de El

E s te

c ó d ig o f i n a l

o rd en dado por

Se tie n e n

Al

c ó d ig o .

la s

FASE DE DlgErrO

a r c h iv o

la s

s ig u ie n t e s

c ó d ig o

de

a r c h iv o

m anera lig a d o

lig a s .

g lo b a l

lig a

g lo b a l

lig a

lo c a l

de d e c la r a c io n e s ,

lig a

lo c a l

de e s ta tu to s .

de

"e l

lig a s .

lig a

h a b la r

g u a rd a

se o b tie n e r e e s c r ib ie n d o e l

54

de d e c la r a c io n e s , de i n ic ia liz a c ie n e s .

a r c h iv o

lig a d o ,

n os

es ta m o s

r e fir ie n d o

a

a r c h i vo.

¿O A r c h i v o d e C ó d ig o e n C.

E s te a r c h iv o r e s u lt a

CF1_COD_C2

d e la . r e e s c r i t u r a

del

A r c h iv o L ig a d o .

e s te

Pr&compi La.dar de C++

III.

F A S E

1 1 1 .1

D E S A R R O L L O .

55

.

INTRODUCCION.

En e s t a la

DE

FASE DE DESARROLLO

FASE

fa s e

DE

E s tru c tu ra s fu n c io n e s

s e d e s a r r o lla r o n

DI SEFJO.

Se

en C l o s

e s c r ib ie r o n

d e D a to s y d e A r c h iv o s .

p ro d u cto s

la s

Se c o d ific a r o n

qu e m an ejan e s a s E s t r u c t u r a s

a r r o ja d o s

d e c la r a c io n e s y

de

p rob a ron

por i as la s

y A r c h iv o s .

1 1 1 .2 OBJETIVOS.

E s p e c ific a r , D is e ñ o d e l

C o d ific a r

y

P rob a r

lo s

M ódu los

d e fin id o s

en

el

S is te m a .

I I I . 3 PRODUCTOS ENTREGADOS. 1 1 1 . 3 .1

ESPECIFICACION DETALLADA DE MODULOS Y FUNCIONES.

111.3 .2

MODULOS Y FUNCIONES PROBADOS.

I I I . 3. 3 C_ MODULOS IN TE GRADOS PROBADOS ) . I I I . 3. 4 - C PRUEBA CON DATOS. C )

NO FUERON ALCANZADOS.

COMPROBACION DE RESULTADOS ESPERADOS

I l i .3 .1

E SPE C IFI CACION DETALLADA DE MODULOS Y FUNGIOHES.

PROCESOS d e l P r e c o m p ila d o r de C++ a C :

ol> /4n.ál¿sis L é x i c o C Ver M ódu lo CPP. L2>

E s te

es

p ro g ra m a e n tra d a ,

Los

M ód u lo

t c k e n 's son

es e l

que

p rod u ce

b á s ic a m e n t e ,

a c c io n e s ’ LEX*

el

qu e

se

d e s c r ib e n

a n a liz a d o r

le

a lim e n t a

a

’ LEX * .

lé x ic o s .

*LEX*

una d e s c r i p c i ó n d e

e s ta tu to s

u fa n d o

s im p le s lé x ic o

E l M ódu lo CPP. L t i e n e

de clara cio n e s

se

a n a liz a d o r e s

o

*LEX*

es

r e c ib e

un

como

’ t o k e n ’ s y d e a c c io n e s .

e x p r e s io n e s

co m p u e s to s

de

r e g u la r e s , C.

La

y

la s

s a lid a

de

d e s c r ip c ió n

de

LEXYY.C .

4 p a rte s :

g lo bales

d e fin ic io n e s

r e g la s sxLbrxi t i ñ a s

En lo

la s

de

xlsxlclt

declaracion es

q u e im p o r t a y e x p o r t a

En

la s

d e f in ic io n e s

io

g lo b ales

el

se

se

e n c u e n tra

la

M ódu lo.

a s ig n a

un

nom bre

a

una

e x p r e s ió n

PreccRp;

tie C ++

Icdsr

r e g u la r .

Una

FASE DE DESARROLLO

d e fin ic ió n

tie n e

2

57

p a rte s :

nom bre e x p r e s ió n

Las r e a la s

r e g u la r .

c o n s ta n

e x p r e s ió n a c c ió n

ta m b ié n d e 2 p a r t e s :

r e g u la r

C e s t a t u t o en O

Las s u b r u iin a s

de u s u a r io q u e s e

tie n e n

son:

s e re e n C D yyvrapC D

s c re e n C D Es una r u t i n a

qu e,

su t o k e n , s i

es

dada una p a l a b r a ,

regresa

p a la b r a r e s e r v a d a ,

t o k e n d e ID E N T IF IE R ,

en o t r o

caso.

yyw rapC 3 E s ta lé x ic o

r u tin a C

es

y y le x O

lla m a d a D,

al

por1- l a

fu n c ió n

t e r m in a r

yyw r apC D d e v u o l v e 0,

y y le x O

c o n t in u a

1.

v y le x O

t e r m in a d e l e e r .

le y e n d o .

la

p r in c ip a l le c tu r a

de

del

a n a liz a d o r

’ to k e n ’ s.

Si

Precosipi I actor de C++

tO ,4ná. I i s i s

E s te

es

p ro g ra m a

S in tá c tic o

el

qu e

b á s ic a m e n te a s o c ia d a s ;

FASE DE DESARROLLO

M ódu lo

y S e rrín t i c o

qu e

p rod u ce como

y

se

le

CV er

en tra d a

prod u ce

como

una

Aper.di c e Ej

a lim e n t a

a n a liz a d o r e s

a

’ YACC’ .

s in tá c tic o s .

g r a m á t ic a

s a lid a

53

un

y

’ YACC* ’ YACC’

a c c io n e s

a n a liz a d o r

es

un

r e c ib e

s e m á n tic a s

s in t á c t ic o

y

s e m á n t ic o lla m a d o YTAB. C .

’ YACC* E sto s el

d e te c ta

M ódu lo

c o n flic to s

pueden

C P P .Y ,

d e t e c t a d o s en l a

El

lo s

c o n flic to s

se

ser

de la

com en tan

al

o

p r in c ip io

C ó d ig o pctra. e i

e s c e n c i a l m ente 3 p a r t e s :

P r e p r o c e s a d o r d e C.

D e / in ic io n e s R e g la s .

P r e p r o c e s c id o r d e C.

h ace sa b er.

’ rs d u c e -r edu ce ’ .

g r a m á t ic a d e C++ y su ca u s a .

M ódu lo C P P .Y t i e n e

C ó d ig o p a ra e l

g r a m á t ic a y i o s

’ s'ni f t - - r e d u c e ’

lo s

En

c o n flic to s

Fr&dozici l ador d s C++

En e s t a ex p o rta e l

p a rte

se

FASE DE DESARROLLO

e n c u e n tr a n

la

d e s c r ic io n

de l o

que

53

im p o r t a

y

M ódu lo.

D e / in ic io n e s

D e n tr o d e e s t a

— La

p a r t e s e e n c u e n tr a n .

d e fin ic ió n

a n a liz a d o r

— La d e f i n i c i ó n y o p erad ores. u n ió n

usan l o s

en e l

’ S ta c k ’ .

— La

de

la

s in tá c tic o

de Aqu í

‘ t o k e n 's ,

en e l

’ t o k e n *s

del

no t e r m i n a l e s ,

* S ta c k * .

R e g la s .

En l a s

que

u sa rá

R e g la s s e e s p e c i f i c a :

el

”S ta c k T

de i .

’ YACC*.

i n c lu y e n d o

p a la b r a s

ta m b ié n s e e s p e c i f i c a

e s p e c ific a c ió n

s ím b o lo s

u n ió n

p r o d u c id o p o r

qu e n e c e s i t a n

gu a rd a r

m iem b r^ —d e —i-a—tirrru!T qu e n e c e s i t a n

reserva d a s

q u e m iem bro d e l a

gu a rd a r

in f o r m a c ió n

le s i n f o r m a c ió n

FASE DE DESARROLLO

- La r e g l a -

La

s in tá c tic a .

a c c ió n

s e m á n tic a

a s o c ia d a .

en

la s

r e g la s

que

lo

n e c e s i ta n .

La g r a m á t ic a e m p le a d a p a r a e l e x te n s ió n

d e una g r a m á t ic a

s e m a n eja l a

Al

p r io r id a d

a gregar

la s

a n á lis is

LALRC1D

de C

s in tá c tic o í HARES-iI .

de. C++ e s una En su

s in tá x is

de o p era d o res.

e s tru c tu ra s s in t á c t ic a s

de C++ a e s t a g r a m á t ic a ,

s e o b tu v ie r o n c o n f l i c t o s .

Los

c o n flic to s

e lim in a d o s . re d u c id o , a s i,

e s to s

Los e lig e

de

En e s t o s el

no

t e r m in a l

c o n flic to s

c o n flic to s la

tip o

de

a c c ió n

tip o

’ s h ift’

s e p e r m itía e l

Un

de

e je m p lo

c o n s tr u c c ió n

de

la

YACC e l i g e p r im e r o

fu e ro n

r e g la

*s h i f t - r e d u c e ’ en

e llo s .

c o n flic t o .

c o n flic t o

s in tá c tic a

E l m e n s a je d e YACC f u e e l

Si

En o t r o

’ c la s e

C s h ift

130,

ser Aún

le n g u a j e .

a n a liz a d o s .

caso,

s u r g ió

d e r iv a d a *

r e d ’ n 50!)

de

YA CC

YACC

era

s e e lim in a b a .

qu e

s ig u ie n t e :

62 s h i f t / r e d u c e c o n f i i c t

p a ra

c o n flic t o .

e le c c ió n

’ s h ift - r e d u c e ’ de

er.

fu e ro n la

c o m p le ta m e n te

como s ím b o lo

i n d i c a n a m b igü ed a d en e l

adecuada,

la

’ r e d u c e —r e d u c e *

c o n flic to s ,

en

al

agrega r

p e r m it e

C-*-+.

FASE DE DESARROLLO

ci

S ta te c la s s _ s p e c ifie r

: aggr c la s s _ ta g _ d c ltr

_

c la s s _ s p e c ifie r

: aggr

_

e l a ss_sp eei f i er

: aggr e la s s _ ta g _ d c ltr

e la s s _ ta g _ d c ltr

_

C50D

e la s s _ b a s e _ n a m e



y su c a u s a s e d e t a l l a

D e b id o a l a

r e g la

a c o n t in u a c ió n .

:

member _ d a t a _ d e c l a r a t i'o n : o p t_ d e c l_ s p e c ifie r

m e m b e r _ d c ltr

* ;*

d on d e m e m b e r_ d c ltr :

el

s ím b o lo

*: * c o n s t _ e x p

’ : * e s ta

en é l

e s t o que s e q u ie r e h acer l a

D e b id o a l a

r e g la

o p t_ d e c l_ s p e c i f i er : c la s s _ s p e c ifie r donde: e l a s s _ s p e c i f 'i e r

’ fo llo w ’ a c c ió n

de

o p t_d e c l _sp eci f i er

’ red u ce’

Es

s o b r e e s t e s ím b o lo .

por

P reco m p ila d o r d e C +■+

FASE DE DESARROLLO



62

: a ggr e la s s _ t a g _ d c lt r : aggr y

e la s s _ ta g _ d c ltr

e la s s _ b a s e _ n a ñ ie

’ < * a0C03

c la s s _ b a 3 e _ n a r a e :

es i g u a l

* :*

el

TYPEDEF_NAME

’ fo llo w ’

de lo s

s ig u ie n t e s

s ím b o lo s no t e r m in a le s :

c p t _ c la s s _ s p e c i f i e r e la s s _ s p e e ifi er e la s s _ ta g _ d c ltr

y

por

ta n to ,

’ : *

e s ta

en

e la s s _ t a g _ d c lt r , y se tie n e

La e l e c c i ó n

el

’ fir s t*

un c o n f l i c t o

y

en

el

d e YACC en e s t e c a s o f u e a c e r t a d a .

un nom bre d e c l a s e ,

c o n s id e r a r á .

’ fo llo w ’

de

’ s h i f t - r e d u c e *.

Pu es,

’ : * como m iem bro d e l a

despu és de c la s e

base,

y NO como campo d e b i t s .

C o n flic t o s

de

e s te

G ra m á tic a

Cde C+-O

r e d u c ir

9.

del

a

m ód u lo,

En e l

E s to s

tip o

p ara

el

no

son

fá c ile s

P re co m p H a d a r

c o n flic to s ,

se

com en tan

c o n una b r e v e e x p l i c a c i ó n

P r e c o m p ila d o r d e C++ a C ,

de

v is u a liz a r .

de C++ a C, en

la

En

la

se

lo g r a r o n

p a rte

s u p e r io r

d e su c a u s a .

s o lo

se

tie n e n

la s

r u tin a s

que

F r e c c i a le d e r ds C++

r e a liz a n in c lu y e

p a rte el

del

FASE DE DESARROLLO

a n á lis is

t r a ta m ie n to

s e m á n t ic o d e l a s

de e r r o r e s

d e c la r a c io n e s .

s in tá c tic o s ,

tam p oco

la

S3

No s e e m is ió n

d e c ó d ig o .

Una d e c l a r a c i ó n

c o n s ta de 4 p a rte s .

Alm acenam i e n t o

CSTGE)

E j.

s t a t ic

T i po

CTYPED

Ej-

i nt

Oper a d o r e s d e D e c ia r a c i ón

CDCLTR)

E j.

x, O

Nombre

CNAME)

E j.

s t a t ic

En

el

a n á lis is

s in t e t iz a d o s

El

d e un i d e n t i f i c a d o r

de

y v a r ia b le s

a n a liz a d o r

lé x ic o

la s

d e c la r a c io n e s ,

se

i nt * a O

u s a ra n

a t r ib u t o s

g lo b a le s .

cu an do l e e

un i d e n t i f i c a d o r

regresara

una

e s t r u c t u r a q u e c o n t ie n e :

el

nom bre d e l

el

S ím b o lo p r e v i o con e l

En e l lo s

S ím b o lo

O p erad ores

r e fe r e n c ia , t r a n s m itir á n

id e n tific a d o r .

’ l o c a l ’ , s e gu a rd a ra e l

d e D e c la r a c ió n

que

mismo nom bre,

fu e ro n

de

si

e x is te .

A lm a c e n a m ie n to ,

un I d e n t i f i c a d o r .

regresad os

por

el

a s c e n d e n te m e n te en a t r i b u t o s

El

a n a liz a d o r s in t e t iz a d o s .

el

T ip o y

nom bre y

la

lé x ic o ,

se

Pre c o m p ila d o r de C++

e l E m is ió n d e C ó d ig o . NO INCLU ID A EN EL TRABAJO.

cO C o m p ila c ió n d e C ó d ig o . NO INCLUID A EN EL TRABAJO.

FASE DE DESARROLLO

64

ESTRUCTURAS DE DATOS d e l Precom pi l ador de C++ a C

a^ T a b la de S ím b o lo s .

CV&r M ódu lo TBLSYMO. O

En e s t e M ódu lo s e d e s c r ib e n :

Im p le m e n t a c io n d e l T ip o s d e

lo s

Campos d e

t ip o

S ím b o lo .

cam pos de l o s

S ím b o lo s Cy s u s v a l o r e s

n u lo s y .

l o s S ím b o lo s .

S í m b o lo s . F u n c io n e s B á s ic a s . F u n c io n e s C o n c e p t u a le s .

1m p le m e n ta c io n d e l

Como f u e e s ta r

m e n c io n a d o

lig a d o

S ím b o lo s .

tip o

Por

a o tro . e s ta

S ím b o lo .

en

la

ETAPA

En g e n e r a l , cau sa

el

t ip o

se

DE DISEFIO, tie n e n

S ím b o lo

un

lis ta s se

S ím b o lo en l a

i mpl em en tó

e s t r u c tu r a que c o n tie n e : - Una b a n d e ra i n d i c a d o r a d e l - Un a p u n ta d o r y q u e s e p u ed e v e r

Ca l a

tip o

d e S ím b o lo .

m em oria d e d ic a d a a l

como un a p u n ta d o r

La m em oria d e d ic a d a a l

S ím b o lo D .

con t ip o .

S ím b o lo e s a l o j a d a

pued

T % bla

d in á m ic a m e n te .

con

d un

FASE DE DESARROLLO

Preccn.pilc.dor de C++

T ip o s de

l o s cam pos d e

Con e l

fin

A cada n u lo .e s

tip o

o b je to

de

y al

la

se

v a lo r

r e p r e s e n ta c ió n de c i e r t o

n e c e s id a d

de

l e ^ a s o c ia

de r e g r e s o

el

rru le s ? .

medi f ’i c a r

tip o s

un

i as

de lo s

v a lo r

campo

f u n c io n e s

cam pos.

n u lo .

d e una f u n c ió n

E s te

v a lo r

C p o s ib le m e n t e

camp$.

S lm J b clcs.

fu n c ió n

tie n e n

in f o r m a c ió n

CFUNCTION) ,

COBJECTD

una l i s t a

la

Cy s u s v a l o r e s

c o n MACROS l e s

campo

lim p ia r

S ím b o lo s

S ím b o lo

creo

te n e r

s e d e fin ie r o n

Campos de l o s

Los

s in

u sa d o en e l

con e r r o r )

S í rrJbo l e s

de p od er m o d ific a r

d e un S ím b o lo , a s o c ia d a s ,

lo s

ss

tie n e n de to d o s

el lo s

s e m e ja n t e .

un S ím b o lo

campo

Nombre

p o s ib le s

Por

c ia s e C C L A S S ) CN'AME).

e je m p lo y

D e b id o

un

un S ím b o lo a

cam pos q u e c u a l q u i e r

es to

se

S ím b o lo

p u ed e t e n e r .

S í m b o lo s . Al qu e

d e fin ir

e s te

la

S ím b o lo

e s tru c tu ra p u ed e

p ara

ocu p ar.

un S ím b o lo , Por

se e lig e n

e je m p lo ,

la

lo s

cam pos

e s tru c tu ra

del

F reccizpi lodar d s C++

FASE DE DESARROLLO

S ím b o lo o b j e t o COBJECTD, ocupa, l o s

obj e to

OBJECT

Nombre

FLD_NAME

A l macenami e n t e

FLD_STGE

T i po

FLD_TYPE

D e c la r a d o r

FLD_DCLTR

Ni v e l

FLDJLÉVEL

R e f e r e n c ia

FLD_REF

Hermano

FLD_NEXT

V al or

FLD _VALr

cam pos:

E s ta e s t r u c t u r a e s u sad a ta m b ié n en e l •tip o

S im b o lo ,

S í m b o lo .

-cuando

se

p id e

el

S-

v a lo r

’ c a s t’ de

un

del

a p u n ta d o r d e l

campo

de

d ic h o

FASE DE DESARROLLO

P re c o m p ila d o r de C++

F u n c io n e s B á s ic a s de

Las

F u n c io n e s

6S

la T a b la de S ím b o lo s CVer M ódu lo TBLSYM1 . O

B á s ic a s

de

la

T a b la de S ím b o lo s

se

d iv id e n

en

2

gr upos:

F u n c io n e s q u e m a n eja n cam pos. F u n c i e n e s q u e m a n eja n S ím b o lo s .

F u n c io n e s q u e m a n e ja n cam pos.

E n tre e s ta s

f u n c io n e s

-

P e d ir

-

Dar e l

el

v a lo r

-

Im p r im ir e l

v a lo r

se

e n c u e n tr a n :

d e un

campo C

a un campo v a lo r de

G e t F ld O D

C P u t F ld O

2)

un campo C P r i n t F l d O }

F u n c io n e s q u e m a n e ja n S ím b o lo s .

E n tre -e s ta s

- P e d ir

f u n c io n e s s e e n c u e n tr a n :

el

- P re g u n ta r

tip o si

d e un S ím b o lo un S ím b o lo e s

n u lo

C G etS ym O

D

C N u llS y m O

D

P r e c a r i Ix d z r de C++

FASE DE DESARROLLO

S3

•C A l 1 o c G lo b a lC D , A l 1c c C la s s C D , A l lo c F u n c t i o n O , e t c . - Im p r im ir - B o rra r

un S ím b o lo

un S ím b o lo

D

C C le a r S y m O

}

- Rem over un S ím b o lo

(L Rem O

- L ib e r a r

C F reeO

la

m em oria d e un S ím b o lo

D

C PrintSym CD

D D

FASE DE DESARROLLO

Fre'compi l ador de C++

F u n c io n e s C o n c e p t u a le s de

70

la T a b la de S ím b o lo s .

C V er M ódu lo TBLSYM2. C D

L a s Fu n c io n e s

C o n c e p tu a le s

de

la

T a b la d e S ím b o lo s ,

s e d iv id e n

en 2 g ru p o s :

Fune i o n e s p a r a ca m p os. F u n c io n e s p a r a S ím b o lo s .

F u n c io n e s p a ra cam pos

C V er M ódu lo T3LSYM2. O

En e s t a M ódu lo s e d e s c r i b e n . :

B a n d era s AddT ypeC 2 ; A d d S tgeC 2 ;

1

AddDc 1 rC S>;

C h k S tg e C 3 ; AddDc 11 r F u n c C2 ;

AddDc 11 r A r r C 2 ;

B a n d era s

A lg u n o s cam pos m an ejan b a n d e r a s . en

mapas

de

b its .

P a ra

el

m a n ejo

E s ta s de

b a n d e ra s

b an d eras,

se

se

im p le m e n ta n

d e fin ie r o n

la s

MACRCS s i g u i e n t e s :

F la g C d ,fD

L e v a n ta l a

F la g P C d .fD

P r e g u n ta p o r l a

b a n d e ra

b a n d e ra

Tf *

R em FlagC d, f D

B a ja l a

’f ’

d e s c r ip to r

b a n d e ra

* f*

del

del

d e s c r ip t o r de

’d’ .

*d *. ’ d *.

AddT ypeCy

A g r e g a una n u e v a b a n d e ra de T i p o , C hequea qu e l a s n u eva.

Si

lo

b a n d e ra s

son,

m arca

e x c lu y e r it e s y l e v a n t a NOTA:

la

a un S ím b o lo .

a n te r io r e s error,

no s e a n

e lim in a

e x c lu y e n t e s

la s

b a n d e ra s

con

la

p r e v ia s

n u eva.

Una b a n d e ra e s e x c l u y e n t e c o n s ig o misma.

Los t ip o s

p e r m itid o s

t y p e d e f _name con st ----------- j | '----

son:

u n s ig n e d —j— i n t —i— '— s h o r t flo a t '— ch a r d o u b le

lo n g

c l ass s tru c t en'um voi d En l a

fig u r a

a n te r io r

d e b a n d e ra s p r e v i a s

se

v e q u e c a d a b a n d e ra t i e n e

no e x c lu y e n t e s .

p a ra

’ ch a r*,

p a ra

* in t’ , lo

s o n no e x c l u y e n t e s son

’ const

un c o n ju n t o

P o r e je m p lo : ’ c o n s t*

urtsi gn ed

y

’ u n s ig n e d * ,

1cn g ’

y

’ s h o rt*-.

72

FASE DE DESARROLLO

Precorraci I ador de C++

A d d S tgeC J

A g r e g a una n u e v a b a n d e ra d e A lm a c e n a m ie n to , Chequea qu e l a s nu eva.

Si

no

e x c lu y e n t e s NOTA:

lo

b a n d e ra s a n t e r i o r e s

son,

m arca

y le v a n ta l a

error,

a un S ím b o lo .

no s e a n

e lim in a

e x c lu y e n t-e s

la s

b a n d e ra s

con

la

p r e v ia s

nu eva .

Una b a n d e ra e s e x c l u y e n t e c o n s ig o misma.

L o s A 1 m acen am ien tos p e r m it id o s

son:

— a u to ------------s t a t i c — --------- o v e r l o a d — — e x te rn — — r e g is te r -

i n l i n e — ■' v i r t u a l —

fr ie n d

ty p e d e f

En l a de

fig u r a

b a n d e ra s

p ara

a n t e r io r

p r e v ia s

no

se ve

qu e c a d a b a n d e ra t i e n e

e x c lu y e n t e s

’ a u t o ’ , so n no e x c lu y e n t e s :

no

e x c lu y e n te s .

’ o v e r lo a d ’ ,

un c o n ju n t o Por

’ in lin e ’ ,

e je m p lo ,

’ v ir tu a l’

y

’ fr ie n d ’

C h J iS lg e C }

C hequea S ím b o lo ,

la s en

b a n d e ra s

c ie r to

de

e n to rn o .

A lm a c e n a m ie n to E sta

r u tin a

p e r m it id a s es

lla m a d a

p ara per

un la s

Func i o n e s p a r a. S í mJbo le s .

L a s b a n d e ra s d e A lm a c e n a m ie n to p e r m it id a s * e n to rn o ,

s e m u estra n en l a

Con l a s i g u i e n t e b a n d e ra C b a n d e ra } [b a n d e r a ]

1

AddDc l rC J>;

s ig u ie n t e

d a d o un S ím b o lo y un

t a b la .

c o n v e n c ió n : p e r m it id a p o r C. p e r m it id a p o r C++. p e r m it id a p o r C++ C d e fa u lt D .

Adid.Dc l1 r F u n c C5 ;

A n te s d e d e s c r i b i r

e s ta s

r u t in a s ,

AddDc l t r A r r C

se

;

dará, una e x p l i c a c i ó n

de

la

FASE DE DESARROLLO

Preccm pi laclar de C++

manera como s e a lm a c e n a un d e c l a r a d o r .

Un d e c la r a d o r

d e un S ím b o lo t i e n e 2 p a r t e s

D e s c r ip to r A p u n ta d o r a. l a

T a b la d e D im e n s io n e s .

D e s c r ip to r .

En

el

D e s c r ip to r

d e c la r a d o r .

se

g u a rd a

E s to s o p e ra d o re s

A p u n ta d or

ARR

F u n c ió n

FUNC

A p u n ta d o r C o n s t a n t e

CPTR

R e fe r e n c ia

REF

En

la

TABLA

DE

p a ra :

DIMENSIONES

E s ta t a b la

S e usa un r e n g ló n A r r e g lo

s e c u e n c ia

de

o p era d o res

del

PTR

Ar r e g l o

d e c la r a d o r .

la

p u eden s e r

CARRD

ó

se

es d e s c r ita

de la

F u n c ió n

g u a rd a

i n f o r m a c ió n

e x tra

del

p o s t e r io r m e n t e .

TABLA DE DIMENSIONES p a r a c a d a o p e r a d o r CFUNO.

En

ese

r e n g ló n

se

a lm a c e n a

F re c o x ip ila d c r ds L++

Al

FASE DE DESARROLLO

A r r e g l o CÁRRD

d im e n s ió n C e x p r e s ió n }

F u n c ió n CFUNCD

P r im e r s ím b o lo d e l a

lle g a r

a n te r io r .

Si

un n u evo

d e c la r a d o r ,

se

no h a y c o m p a t i b i l i d a d

e s p e c ific a d a . lis ta

chequ ea

e n tre

75

d e a rg u m e n te s .

c o n tra

lo s

dos

el

in m e d ia t o

d e c la r a d o r e s ,

se

m arca un e r r o r .

Cada- o p e r a d o r p r e v io s

de

p e r m it id o s .

d e c la r a c ió n E s ta

tie n e

r e la c ió n

un

se

c o n ju n t o

m u e s tra * en

de

o p era d o res

la

s ig u ie n te

ta b la :

DCLTR

DCLTR’ s p r e v i o s PTR x x x x CxD

PTR ARR FUNC CPTR REF C D

ARR

FUNC x

x x

p e r m it id o s CPTR x

REF CxD x

, x x

x C x)

Cx!) x

b a n d e ra s q u e s e a n u la n m utuam ente.

P o f e je m p lo ,

el

a n á lis is

s in tá c tic o

de la

d e c la r a c ió n

g lo b a l in t

a r r o ja ,

* C* f

3 C flo a t D

d e b id o a l a

C103

p r io r id a d ,

lo s

s ig u ie n t e s

op erad ores

FASE' DE DESARROLLO

Precom.pi i ador de C++

76

PTR FUNCC f 1 c a O ARRC103 PTR

en e s e o rd e n .

E sta d e c la r a c ió n

"a p u n ta d o r

s ig n ific a

a una fu n c ió n Cde a rg u m e n to f l o a O

a r r e g l o Cde 10 e le m e n te s !)

y s e g u a rd a en e l

d e c la r a d o r ,

mapa d e b i t s ,

543 PTR «—

10

Por

o tra

lo c a lid a d

o tra

p a rte que

que c o n tie n e

A d d D c lt r C l

un

como

b its

PTR

flo a t

y a qu e c a d a o p e r a d o r

la

210

ARR

de

FASE DE DESARROLLO

P re c e m p ila d o r de C++

ARCHIVOS d e l P r e c o m p i i a d o r d e C++ a C

aS> A r c h iv o d e C ó d ig o L ig a d o .

CFI_CODO

Hay 6 M ódu los d e d ic a d o s a l m a n ejo

de e s t e a r c h iv o :

P e d id o y

L ib e r a d o de M e m o ria D in á m ic a

C Móds.

F IP T R 0 -1 .C

T a b la de

C ó d ig o

C M óds,

TBLCCD O -i. C D

L is t a de

C ó d ig o

C Móds.

LSTCODC-1. C

P e d id o y L ib e r a d o d e Mem or i a. D in á m ic a

C M ódu los F IP T R 0 -1 .C D

En e s t e M ódu lo s e d e s c r ib e n :

T ip o A p u n ta d o r a A r c h iv o . A l o j a r M e m o ria e n A r c h i v o

C A llo c F iC D

L i b e r a r M e m o ria de A r c h i v o

CF r e e F i O

P e d i r V a l o r de

la L i g a

C P u t L in k O

D

D ar V a l o r a

lig a

C G e t L in k O

D

la

D D

T ip o A p u n ta d o r a A r c h iv o .

E s ta im p la m e n ta d o c o n una e s t r u c t u r a qu e c o n t i e n e :

D

2

r e n g ló n

ROW

colu m na

COL

P a ra m an eja

que

e s ta

como

un

A c tu a lm e n te ,

r e p r e s e n ta c ió n

a r r e g lo

n *

YO.

de

te n g a

c a ra c te re s ,

Donde n e s

el

A lo ja r - y L i b e r a r M eritoria de A r c h iv o

El. a r c h i v o

-

el

se

p u ede

ver

como

I n i c i a l m en te,

la

el

r e n g ló n . e llo s la

En o t r o Si

El

v a lo r

C A llo c F iO .

a r r e g lo

al

F r e e F iO

que

se

le

D

p u ed e

una c e l d a

Cuando s e

caso,

mayor q u e e l se

s i n r e n g lo n e s . C u a lq u ie r

p r o v o c a r á qu e s e a g r e g u e un r e n g ló n .

d e v u e lv e

q u e d a n 's u f i c i e n t e s

m em oria l i b r e

lio ta

un

se

m em oria máxima en un a r c h i v o .

a r c h i v o e s un a r r e g l o

m em oria p e d id a e s

un e r r o r -

a r c h iv o

d im e n s io n e s .

núm ero d e r e n g lo n e s q u e s e n e c e s i t e .

núm ero d e b y t e s q u e s e p id a n , Si

el

c ie r t a s

número d e r e n g lo n e s .

máximo d e n qu ed a d e te r m in a d o p o r l a

a grega r

s e n tid o , de

b y te s

d e .m e m o ria l i b r e ,

tam año d e l un

r e n g ló n ,

a p u n ta d o r

al

d e m em oria l i b r e ,

y en e s e momento,

el

se

m arca

in ic io

del

se crea

con

a p u n ta d o r

a

a p u n ta a e s a c e l d a .

lib e r a

una c e l d a d e m em oria, s e

do c o i d a s d-s> m em oria lih>r

c e ld a s

con

de

m em oria

u n -a p u n ta d o r

a

en

a r c h iv o

C TBL_COD D ,

una e s t r u c t u r a

y

qu e c o n t i e n e

Preccx.pt lador de C++

FASE DE DESARROLLO

S7

dos p a r te s :

A p u n ta d o r a l

in ic io

A p u n ta d o r a l

fin a l

Fxirxc io n e s

de l a de l a

lis t a lis t a

C In s S trB & g L C C 2 .

CTBL_CODD CTBL_CODD

In sS trE n cLLC C J>

1n sS trB & gLC C 2 Con

e s ta

fu n c ió n

hacem os

crecer

una

lis t a

de

c ó d ig o

por

su

de

una

p a rte f i n a l.

I rtsS t rEndLCC J> Con e s t a

fu n c ió n

podem os

a grega r

un e le m e n t o

al

fin a l

lis ta .

¿>J> A r c h i v o cle C ó d ig o &n C.

Es

el

fin a liz a r

I I I .3 .2

a r c h iv o el

CFI_COD_C!>

s e c u e n c ia l»

A n á lis is

c o m p ila b le

S in tá c tic o

en

y S e m á n tic o .

MODULOS Y FUNCIONES PROBADOS.

C,

qu e

se . crea

al

Precoxipi iadcz

Em

el

de C++

A p é n d ic e

m e n c io n a d o s ,

asi

FASE DE DESARROLLO

C,

como

se la

in c lu y e p a rte

una

de

lis t a

p r e s e n t a c ió n

de de

le s ca d a

M odulos uno

de

e l 1o s .

E l A r c h iv o de D e s c r ip c ió n d e l E l A rc.\

i xjo d e

I m p l e m e n t clc i ó n

M ó d u lo C **inc lu d e**} de

l as

Ru t iñas

Sks i c as

I I I . 3. 3 C_ MODUI-OS IN TE GRADOS PROBADOS 3 .

NO ALCANZADO.

I I I . 3. 4 C PR'.'EBA CON DATOS.

NO ALCANZADO.

COMPROBACION DE RESULTADOS ESPEPADQS —

FASE DE PRUEBA

Precdm pi laclar d e C++ a C

V. .

1 .1

F A S E

DE

89

P R U E B A .

INTRODUCCION.

En eta p a

e s ta

fa s e

fin a l.

r e q u e r im ie n t o s DISEfíO. la s

s e d e b ió

p ro b a r

el

A a b ia q u e v e r i f i c a r del

Adem ás,

u s u a r io

ta m b ié n

c a r a c te r ís tic a s

d e te r m in a n d o

la s

r e e m p la z á n d o la s

en

que e s ta

se fa s e ,

o p e r a c io n a le s

r u tin a s

por o tr a s

Pr& c cmp i l a d o r

qu e fu e r a n

más

p la n t e a r o n se del

c r ític a s

de

C++

s a tis fe c h o s en

d e b e r ía n

la h a b er

P r e c o m p ila d o r y

en

su

to d o s

le s

ETAPA

DE

m e jo r a d o de

C ++,

o p tim iz á n d o la s ,

o

m ejo rfes.

1 . 2 OBJETIVOS.

1 .2 .1

V e r ific a r

qu e

lo s

r e q u e r im ie n t o s d e l

u s u a r io

sean

s a ti s f echos. 1 .2 .2

L o gra r

1 .2 .3

F in a liz a r

c a r a c te r ís tic a s la

o p e r a c i o n a l e s ó p tim a s .

p ru e b a c o m p le t a d e l

S is te m a .

1. 3 PRODUCTOS ENTREGADOS.

El

P recom .p t la d o r

de

C + + no

fu e

p r o b a r s e c o m p le ta m e n te .

89

te r m in a d o ,

por

ta n to ,

no

pudo

FASE DE IMPLEMENTAd ON

Precom pi la d or de C++ a C

V I .

F A S E

V I .1

INTRODUCCION.

En e s t a C por do

fa s e

c ie r to

fu e r a

qu e

qu e

es tá n d a re s

la

p ara

fá c il

se

I

d e b ía

c o n tro l

v a r ific a r

r e v is a r ía

DE

M P L E N T A C I

hacer

se

cu m p lie ra .

p r o g r a m a c ió n la

pasar

de c a lid a d .

y

P r o g r a m a c ió n

su p o s t e r i o r

E s te con

al

O N .

P r e c em pi la d o r

co n tro l to d o

90

s e r ía

lo

de

el

p r o m e t id o .

d o c u m e n ta c ió n

c u m p lie r a

de

de

S is t e m a s ,

ta l

C+ +

a.

en ca rga d o Además con

lo s

fo rm a

qu e

m a n te n im ie n to .

V I. 2 OBJETIVOS.

V I . 2. 1

C om plem en tar

la

im p le m e n t a d ó n

de

to d o s

lo s

p r o c e d im ie n t o s y f u n c io n e s .

V I.2 .2

V e r ific a r y s e r v ic io

qu e s e cu m pla co n l o s

c r ite r io s

de a c e p ta c ió n

de p ro ceso .

R e a lm e n te la m e n to no h a b er p o d id o e n t r e g a r

e s to s

p ro d u c to s .

Predom.pt la d o r de C++ o. C

CONCLUSIONES

91

CONCLUSIONES

El

P re co m .p t had ar

Fue un i n t e n t o y

la

p r o g r a m a c ió n .

r e q u ie r e , la

C + + a. C

S in

NO f u e

c o n d ic io n e s .

e m b a rg o ,

p r£ p G S l& 0 dv

em b a rg o ,

mÁ5 a l c a n c e ,

p e r m it a

M e to d o lo g ía

d e C om pi1a d o r e s .

S in

crea r

lo g r a r

se ' desea s e m b ra r

es to

en

un

t e r m in a d o . el

d is e ñ o

c o rto

t ie m p o

ó d e una g r a n e x p e r i e n c i a

Y no s e

h e r r a m ie n t a s

de D e s a r r o llo

c o m p le ta m e n te

una h e r r a m ie n t a q u e f a c i l i t a r a

ó d e un e q u ip o d e p e r s o n a s ,

c o n s tr u c c ió n

q u e n os

de

de p ro veer

la

in q u i e t u d hechas.

en

n in g u n a d e e s a s

a n h e lo s a m e n te

b ie n

de P ro y e c to s .

t e n ía n

d* E se

lo g r a r

¿ a n a ir-u ir"a lg o "

2

o tro

es

«itera una

Precom.pt lodar- d e C++

A P ENDICE A»

cl

C.

METODOLOGIA DE DESARROLLO

M E T O D O L O G I A DE DESARROLLO.

A corit inu.ac ió.~. se describen brevemente los pasos seguir en este

cada una de

les fases de

la

.Petóle logia

trabajo.

I. FASE DE ESTUDIO.

LlL

i t *Taop jccip v.m

LúL 0?¿ETiycs;. OBJETIVOS DEL PROYECTOREQUERIMIENTOS DEL USUARIOSOLUCIONES pOTENCIALES• SOLUCIONES FÜTENCIAL ES. COSTOS Y BENEFICIOS SOLUCION ESPECIFICA RECOMENDADAPLAN r~L PROYECTO•

Lzl PRODUCTOS I EVTREO.V; ■„ DOCUMENTO DE OBJETIVOS DEL PROYECTO• DOCUMENTO DE REQUERIMIENTOS DEL USUARIODISEWO CONCEOTUAL DE LA SOLUCION °ECOMENDADA -

ue

se

ds¿en

pr opuesta

en

METODOLOGÍA DE DESARROLLO

Pracc.upi la d or da C++ a C.

II.

FASE DE DISEfJO.

V IS T A DE LA ARQUITECTURA DEL SISTEMA. FA C ILID A D E S PARA EL USUARIO. D ESCRIPCIO N DE DATOS: D i.c c iG n a .r io de D a to s . D is e ñ o

ló g ic o

de

la s B ases d e D a to s .

V IS T A DEL PROCESO DE DATOS. CD ia g ra m a q u e m u e s tr a p r i n c i p a l e s

fu n c io n e s ,

in te rfa c e s

y

d e p e n d e n c i asS>. DISEÑO DE LAS ESTRUCTURAS DE DATOS Y ARCHIVOS. DESCRIPCIO N DE LAS TRANSACCIONES DEL SISTEMA. C O r g a n is a c íó n

de

M ó d u lo s

y

P ro g ra m a s ,

D ia g ra m a

E s t r u c t u r a , E s tá n d a r e s d e P r o g r a m a c ió n y O r g a n is a c ió r O '

de

METODOLOGIA DE DESARROLLO

PROCEDI Ml E l'll OS ESPEC1ALES'. CExc&pc io n

Los e s tá.nd

! F_LONG! F_SHORT D

>

CF_UNSI GNED! F_FLCAT I F_DOU3LÉ 1F _ I N T! f_ char: f _sh ort: f

Y * b a n d e ra s d e d e c la r a d o r

_longd;

C’ d c l t r ’ D

/ x 4 b y t e s , 3 b i ts -'b a n d => 9 band + F_NCDCL

¿ d e fin e

N_FLG_DCLTR

111

3

b its

¿ d e fin e

F_NODCL

CDCLTRD

0x0000

¿ d e fin e

F_ARR

CDCLTRD

0x0001

¿ d e fin e

F_PTR

CDCLTRD

0x0002

¿ d e fin e

F_FUNC

CDCLTRD

0x0003

q u e ocu pa

*/

Frezorr.pilc.dor de C++ c C.

CODIGO DE LOS MODULOS

¿ d e f i ne

F_REF

CDCLTRD 0x0004

¿ d e f i ne

F_CPTR

CDCLTRD 0x0005

¿ d e fin e

F_CREF

CDCLTRD 0x0006

¿ d e fin e

F_ANYDCL

CDCLTRD 0x0007

b a n d e ra s d e a n c e s t r o C ’ p a r e n t ’ D ¿ • d e fin e

F _P R I V

1

¿ ■ d e fin e

F_PUB

2

funciones para C AMPOS

/ x T b lS ym x/

ex te rn

in t

G etS ym O ;

ex te rn

i nt

Nul 1 SymC D ;

/ x PUT

S

XX

e x te rn

NAME

PutNameC D;

e x te rn

STGE

P u tS tg e C D ;

e x te rn

TYPE

P u tT y p e O ;

e x te rn

DCLTR

P u tD e ltr C 3 ;

e x te rn

LEVEL

P u tL e v e lC D;

e x te rn

TOKEN

PutOperCD ;

e x te rn

TOKEN

PutC onyC D ;•

e x t e r n TOKEN

Pu tS tm tC D ;

e x te rn

TBL_SYM

PutRefC D ;

e x te rn

PARENT

P u tP aren tC D

112

P r ec omp i l ador de C++ o, C,

e x t e r n FLG PA R

P u tF lg P a r C D ;

e x te rn

ATTR

P u t-W ex t O :

e x te r r * t '* l U

FuiTwir.Cl :

f t v t - e r r> ATTP.

P u tM e m b l r\i t-C D ;

ATTŒ

FutAlira:

e x te rn

ATTR

P u tP u b A ttrC D ;

e x te rn

A TTR

P u tP r iv A ttr C D ;

e x te rn

FLG PA R

P u tF la g M e m b C D ;

e x te rn

HEAD

P u tC u rrH e a d C D ;

e x te rn

HEAD

P u tE n c H e a d C D ;

e x te rn

A TTR

P u t D t o r CD ;

e x te rn

T R E E _D E S T

P u tT r e e D e s tC D ;

e x te rn

T B L_LB L

P u tL b lO ;

e x te rn

T R E E _E X P

P u tV a l'C D ;

»r n

/ X GET s

e x te rn

NAME

e x te rn

STGE

G etN am eC D ; G e tS tg e O ;

e x te rn

TYPE

G e tT y p e C D ;

e x te rn

DCLTR

G e tD c l tr C D ;

e x te rn

LE V E L

G e t L ë ' v e l CD ;

e x te rn

TOKEN

G e t O perC D ;

e x te rn

TOKEN

G e t C o n vC D ;

e x t e r n TOKEN

G e tS tm tC D ;

e x te rn

TBLJSY-M

G e tR e fC D ;

e x te rn

P AR E N T

G e t P a r e n tC D ;

e x te rn

FLG PA R

G e tF lg P a r C D ;

e x te rn

A TTR

G e t N e x t CD ;

e x t e r n T W IN

G e t T w i nC D ;

e x te rn

ATTR

G e tM e m b ln i tC D

e x te rn

ATTR

G e t A ttrC D ;

e x te rn

ATTR

G e tP u b A ttrC D;

e x te rn

ATTR

G e t P r i v A t t r CD

CODIGO DE LOS MODULOS

F re 'Z Z -p i ladzr de O-*- c: C.

e x t e r n FLGPAR

G e tF l gMembC D ;

e x t e r n HEAD

G etC ur rHea.dCD ;

e x t e r n HEAD

G etE n cH ea d O ;

e x t e r n ATTR

G e tD to r CD;

e x t e r n TR EE_DE ST G e tT re e D e s tC D ; ex te rn

TBL_LBL

G etL b lC D ;

e x t e r n TREE_EXP

G e tValCD ;

P R IN T ’ S

e x t e r n NAME

P r i ntNameC D;

e x t e r n STGE

P r in t S t g e C D ;

e x t e r n TYPE

P r in tT y p e O ;

e x t e r n DCLTR

P r in tD c ltr C D ; t

e x t e r n LEVEL

P r in tL e v e lC D ;

extern

TOKEN

Pri n t Û p ô r C D ;

e x t e r n TOKEN e x t e r n TOKEN

P r in tC o n v O ; -

P r i ntSLm tCD;

e x t e r n TBL_SYM

P r in tR e fO ;

e x te rn

PARENT

P r in t P a r e n t C D ;

• e x t e r n FLGPAR

P r in t F lg P a r C D ;

e x te rn

ATTR

P r in tN e x tO ;

e x te rn

TWIN

P r in tT v in O ;

e x t e r n ATTR

P rin tM e m b In itC D ;

e x t e r n ATTR

P r in tA ttr O ;

e x t e r n ATTR

P r in t P u b A t t r O ;

e x t e r n ATTR

P r in tP r iv A ttr C D ;

e x t e r n FLGPAR

P rin tF lg M e m b C D ;

ex te rn

HEAD

P r in tC u r r H e a d C D ;

ex te rn

HEAD

P rin tE n c H e a d C D ;

e x te rn

ATTR

P r in t D t o r O ;

e x te rn

TREE_DEST

P r i r.tT r e eD estC D ;

e x t e r n T3L_LB L

P r in t L b lC D ;

ex te rn

P r in tV a lC D ;

TREE_EXP

CODIGO DE LOS MODULOS

114

/x fu n c io n e s p a r a SIMBOLOS

ALLOC’ s x/

e x te rn

TBL_SYM

A l 1 o cG l c b a l CD ;

e x t e r n TBL_SYM

A l 1 o c C i assCD ;

e x te rn

T5L_SYM

A l lo c F u n c t i o n O

e x te rn

TBL_SYM

A l 1 o cH ea d er CD ;

e x te rn

TBL_SYM

A l 1 ocO bj e c tC D ;

/ * PR IN T e x te rn

TBL_SYM

P r in tO ;

CLEAR e x te rn

TBL_SYM

C learC D ;

REMOVE’ S x/ e x t e r n TBL_SYM

RemoveCD;

/ x FREE x/ e x t e r n TBL_SYM

F reed ) ;

*

Pre*compi Ictcl&r cL& C++

AN A LISIS LEXICO DE C + -f

116

/*lí)(*í(Jf)ÉKJéJ C v - l + s i z e o f

¿ d e f i n e tokenCxD

x

v x s iz e o f

vCOlD

xx

Pr.a-n r .-1> ?cid o r d s C++

ANALI S IS LEXICO DE C++

ÌI7

/ X iH tX X it X X X X X X X X X X X X X X X X X X X X X X iiX X X X ÎO fX X ifX iiX X X X X X X X X X X itX K X X X X X K X X X X /

/ * EXPORTA

*/

/ x * M o o e x x x x x x x x x x x x x x x x x x x * o o o e x x ífr x x x x x x x x x x x x : x x x x x x x x x x x x x x x x x x x x x /

in t

yyn errs= 0 ;

/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxx/ /X LO C A L E S

x/

/X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X '

s t a t ic

in t

screen O ;

mai nC D ; s ta tic

s t r u c t r w ta b ie


/ x o rd e n a d a d a s x/

rw ta b le C 1 = -C AUTO

a u to "

,

b reak "

,

BREAK

case"

,

CASE CHAR

ch a r"

,

c la s s "

,

CLASS

co n s t"

,

CONST

c o n tin u e "

,

CONTINUE

d e fa u lt"

,

DEFAULT

d e le te "

,

DELETE

do"

,

DO

d o u b le "

,

DOUBLE

e ls e "

,

ELSE

enum"

,

ENUM

extern"

,

EXTERN

flo a t"

,

FLOAT .

'f o r "

,

FOR

‘ friend"

,

FRIEND

•g o to "

,

GOTO

x/

*/

AN ALISIS LEXICO DE C++

" i f

'

" i n i i ne"

IN L IN E

"in t"

I NT

* 'io n g "

LONG

"n e w "

NEW

"o p e ra to r'

o perator

" o v e r lo a d '

OVERLOAD

" p u b lic "

PUBLIC

"re g i s te r '

REGISTER

"re tu rn "

RETURN

"s h o rt”



SHORT

"s i z e o f"

SIZEOF

"s ta tic "

STATIC

".s tr u c t"

STRUCT

"s w itc h "

SWITCH

"th is "

T H IS

"ty p e d e f"

TYPEDEF

" u n io n "

UNI ON

" u n s ig n e d 1

UNSIGNED

"v ir tu a l "

VIRTUAL

"v o id "

VOID

" w h i1e "

WHILE :

•/* d e f i n i c i ó n

de tok en s

le t

C a -z A -Z ]

spc

C 3

d ig

CO-9]

n o n z e r o _ d ig

C l- 9 ]

IIS

CO-73

o c t_ d i g h ex_di g

C 0 -9 a -fA -F 3

1ong_m ark

Cl !L3

hex_ma.r k

C ,‘ 0 ,,CxX3D

di g_seq

C< d ig > +3

d o t _ d i gs

C < d lg _ s e q > " . " < d i g _ s e q > ? !

exp

C CeE3 C+ -3 ? < d ig _ s e q > D

dec_con st

C< n o n z e r o _ d i g> < d i g>

o c t_c o n s t

C " 0 " < o c t _ d i g> x < lo n g _m a rk > ? 3

hex_con st

C{h e x _ m a rk > -Chex_di g> +< lon g_ra a ,rk > ?)

flo a t

C< d i g_seq>-C exp> I -Cdot_di g s X e x p ) ? )

con st

"-Cd-i g_seq>D

1ong_m ar k> 70

ch ar_esc_cod e

Cn t b r f v n 3

num __esc_code

C < o c t _ d i^ > G < o c t _ d i g X o c ^ d i g}"?D 7D

esc_code

C < c h a r _ e s c _ c o d e > ! < n u ra _e s c _c o d a > )

e sc char



C " \ " < e s c code>D

p r in t _ c h a r

C : -Cdi g>D

ch a r

C -C p rin t_ c h a r> ! < e s c _ c h a r> D

ch a r_co n st

C ""< c h a r> ""5

s t r in g _ c o n s t

C " H< c h a r > x " " )

f i rs t_ c h a r

c< ie t> :

fo llo w _ c h a r

C < le t > :

i d i g>D

i den t

C {fir s t

c h a r X fo llo w

o th e r

ch ar>*5

AN A LISIS LEXICO DE C++

Precom pi leído r de C++

r e t ur n t ofcenCMGD r e t u r n tokenCPPD re tu rn

tokenCMMD

re tu rn

tokenCLLD

r e t u r n - tckenCGGD r e t u r n tokenCLED re tu rn

tckenCGED

re tu rn

tokenCEED

r e t u r n tckenCNED re tu rn

tokenCAAD

r e t u r n tok en C OOD re tu rn

tokenCPED

r e t ur n t ck enC MED re tu rn

tokenCTED

r e t u r n tokenCDED re tu rn r e t u r r. re tu rn

tokenCMDED sr;C tokenCLLED

r e t u r n tokenCAED re tu rn

tokenCXED

r e t ur n t ok enC OED

< d e c _ c o n s t>

re tu rn

token C D E C _IN TD ;

120

FrezcK cH cLd zr de C++

A N A LISIS LEXICO DE C++

< h e x _ c o n s t>

re tu rn

< o c t_c o n s t>

r e t ur n to k enC OCT__I NTD ;

tokenCHEX_INTD ;

< flo a t_ c o n s t>

r e t u r n to k en C F L O A T L IT D :

< c h a r _ c o n s t>

r e t u r n tckenC C H A R LITD ;

< s t r in g _ c o n s t >

r e t u r n tokenC STR IN G D ;

< id e n t >

re tu rn

< S p c>+

scre e n C D ;

;



RUTINA

121

r e t u r n tc jk e n C y y te x t[O ID ;

:

screen C )

:

Dado un i d e n t i f i c a d o r , d e v u e lv e

s *t

/ * FUNCION /* /*

to k e n c o r r e s p o n d i e n t e , t o k e n d e ID E N T IF IE R ,

si

*/

e s p a la b r a r e s e r v a d a * /

en o t r o

caso

m e d ia n te una b u sq u ed a b i n a r i a .

/ x x x x xx x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x /

P reccm p ila d o r de C++

s ta tic

in t

AN A LISIS LEXICO DE C++

122

i n t screen C I

t ;

s t r u c t r w ta b le

a p u n ts .

x p lo w = r w t a b l e , * p h ig h

= E N D C rw tab leD ,

a ia

t a b l a d e p a l¿ b r a s f e s e v .

in fe r io r /x s u p e r io r

x pm id;

a/

a/

*/

/ x m ed io x/

whi .1e Cp i ow< =p h i ghO < pm id=plow+C p h i g h -p lo w D / 2 ; if

C C t= s tr c m p C p m id - > r w _ n a m e ,y y te x O }

== 0 D

r 'e tu r n pmi d —> r w y y l e x : e ls e i f

Ct

devu el ve

xx t e r m in a .

c o n t in u a le y e n d o

x/

A N A LISIS SINTACTICO DE C++

Précomp¿ leedor de C++ a. C

MODULO

: C P P .Y

V e r s io n :

DESCPRICION:

A n á lis is

S in tá c tic o

NOTAS

9 C o n flic t o s

1 .0

124

F eb 1 9 /8 9 » » *

d e C++

*

:

s h ift_ r e d u c e

> ?

1.

m e r a b e r _ d a t a _ d e c la r a t ic n : o p t _ d e c l _ s p e c i f i e r / : c o n s *t_ e x p C b i t _ f i e l d D e la s s _ s p e c ifie r C s h ift D a g g r c l a s s _ t a g _ d c l t r / : TYPEDEF_NAME

* » * 5 >

2.

3.

4.

5 ,6 .

7.

8.

9.

p 2 _ d c ltr : OPERATOR o p e r a t o r assgn _exp

/ = in it_ e x p

l o c a l _ d a t a _ d e c l a r a t i on * : type_s^ecifier / deltr ; 3 c p p _exp CshiftD * : sim p l e _ t y p e _ n a m e / C l i s t _ e x p D 3 s i mpl a _ ty p e _ n a m e : TYPÉDEF_NAME / * id _n a m e C s h ift D : TYPEDEF_NAME / CC -ID E N T IF IE R i id _n a m e C s h 'iftD * : TYPEDEF_NAME / CC o p e r a t o r _ f une t i o n jiam eJ p 2 _ d c ltr 5 : OPERATOR o p e r a t o r / C l i s t _ e x p D 3í OPERATOR o p e r a t o r / O i • OPERATOR o p e r a t o r / C l i s t _ e x p D exp i : NEW TY PEDEF_NAME / i e x p C s h ift D ■ : NEW TYPEDEF_NAME / C l i s t _ e x p D ¡ d_name : ID E N T IF IE R / m em ber_dc 11r* C s h ift D ; : ID E N T IF IE R / : c o n s t _ e x p ifjs t m t : I F C 1i s t _ e x p D s tm t / i f e ls e _ s tm t : I F C l i s t _ e x p D s tm t ELSE stm t

En 2 , 3 , 4 , 5 y 6 , s e e l i g e l a e x p r e s i ó n en lu g a r 1& d e c l a r a c i o n , d e n t r o d e una f u n c ió n . . PROGRAMADOR:

5 * *

Ruben R u s i i e s

d

F t s c o T .p t I adO T

•¿token % token Jitoken %t ok en *«t ok en % token •/.token % token %t ok en J itoken Jitoken /■«token ?itok en Jitoken U oken % token U oken •/.token / i token /¿token J itoken % token 5-Stoken •/.token Jitok.en Jitoken Jitoken >;token •/Stoken Jit ok en • J itoken Jitoken s to k e n J itoken •/.token •/.token J itoken Jitoken s to k e n iito k e n J itoken Jitoken % token Jitoken %tok en %tok en % token s to k e n J itoken % tok en

efe c++ a C

AUTO BREAK CASE CHAR CLASS CONST CONTINUE DEFAULT DELETE DO DOUBLE ELSE ENUM EXTERN FLOAT FOR FRIEND GOTO IF IN L IN E I NT LONG NEW OPERATOR OVERLOAD PUBLIC REGISTER RETURN SHORT S I ZEOF S TATIC STRUCT SWITCH TH IS TYPEDEF UNI ON UNSIGNED VIRTUAL VOID WHILE ID E N T IF IE R TYPEDEF_NAME DEC_I NT HEX_INT OCT_I NT F LO ATLIT STRING CHARLIT

>

A N A LISIS SINTACTICO DE C++

125

P reco m p ila d o r de C++ a C

U oken '• to k e n •'»token U oken Jítoken Jítoken ííto k e n / ‘ ítoken U oken U oken U oken U ok en ít o k e n X to k e n Jítoken U oken Jítoken % token %tok'en ít o k e n Jítoken U oken U oken. '/ítoken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken U oken

*, * *