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.