27

Proyecto Compiladores

Embed Size (px)

DESCRIPTION

Compilador Cool

Citation preview

P r o y e c t o F i n a l C o m p i l a d o r e sUNIVERSIDAD ADVENTISTA DE CENTRO AMERICACOMPILADOR COOL!LUC" ANDRADE# RANDALL SALES# RAMON $ON%ALE%ContenidoIntroduccin 2Clases 3Caractersticas 3Herencia 3Tipos 4SELF_TYPE 5Tipo Cec!in" #$tri%utos &'oid()*todos (E+presiones ,Constantes ,Identi-icadores ,$si"nacin./0ispatc ./Condicionales ..1ucles .21lo2ues .2Let .3Case .33e4.4Is5oid .4$rit6*tica 7 operaciones de co6paracin .5Clases %8sicas .59%:ect .5Io .#Int .#Introd&cci'n Este 6anual descri%e el len"ua:e de pro"ra6acin Cool; Classroo6 9%:ecto len"ua:e 2ue se puede i6ple6entar con un es-uer?o ra?ona%le 7 aun asi conser5a 6ucas de las caractersticas delos len"ua:es de pro"ra6acin 6odernos@ inclu7endo o%:etos@ tipos est8ticos@ 7 "estin de 6e6oria auto68tica= Los pro"ra6as Cool son un con:unto de clases= Ana clase encapsula las 5aria%les 7 los procedi6ientos de un tipo de datos= 0onde las instancias de unaclase son o%:etos= En Cool@ se identi-ican las clases 7 los tiposB es decir@ cada clase de-ine un tipo= Las clases per6iten a los pro"ra6adores de-inir nue5os tipos 7 procedi6ientos asociados Co 6*todosD espec-icos a de los tipos= La erencia per6ite nue5os tipos de e+tender el co6porta6iento de los tipos e+istentes= Cool es un len"ua:e de e+presin= La 6a7ora de las construcciones Cool son e+presiones@ 7 cada e+presin tiene un 5alor 7 un tipo= Cool es de tipo se"uro; Los procedi6ientos est8n "aranti?ados para ser aplicado a los datos del tipo correcto= )ientras 2ue los tipos est8ticos i6ponen una -uerte disciplina en la pro"ra6acin en Cool@ lo 2ue "aranti?a 2ue en nin"En tie6po de e:ecucin los errores pueden sur"ir en los pro"ra6as= Este 6anual se di5ide en los co6ponentes -or6ales e in-or6ales= La descripcin in-or6al@ la pri6era 6itad Casta la seccin ,D= La descripcin -or6al co6ien?a con la Seccin ./=Clases Todo el cdi"o en Cool est8 or"ani?ado en clases= Cada de-inicin de clase de%e estar contenida en un solo arci5o -uente@ podiendo de-inirse en un solo arci5o 6Eltiples de ellas= Las de-iniciones de clase tienen la -or6a;La notacin F===G denota una construccin opcional= Todos los no6%res de las clases son 5isi%les "lo%al6ente= Los no6%res de clase de%en co6en?ar con una letra 6a7Escula= Y no pueden ser rede-inidas=Caracter(sticasEl cuerpo de una de-inicin de clase consiste en una lista de -unciones= Ana -uncin es o %ien un atri%uto o un 6*todo= 0onde un atri%uto de clase $ especi-ica una 5aria%le 2ue es parte del estado de los o%:etos de la clase $= Y un 6*todo de la clase $ es un procedi6iento 2ue puede 6anipular las 5aria%les7 o%:etos de la clase $=Ano de los te6as principales de los len"ua:es de pro"ra6acin 6odernos es elde in-or6ation idin"@ 2ue es la idea de 2ue ciertos aspectos de aplicacin de%en ser a%stractos 7 ocultos a los usuarios del tipo de datos= Cool apo7a la esto a tra5*s de un 6ecanis6o sencillo; todos los atri%utos tienen un 86%ito local en la clase@ 7 todos los 6*todos tienen un alcance "lo%al= Por lo tanto@ la Enica 6anera de proporcionar acceso al estado de o%:eto en Cool es a tra5*s de 6*todos=Los no6%res de -unciones de%en e6pe?ar con una letra 6inEscula= El no6%re de un 6*todo no se puede de-inir 5arias 5eces enuna clase@ ni nin"En no6%rede atri%uto@ pero si un 6*todo 7 un atri%utopueden tener el 6is6o no6%re=)erenciaSi la de-inicin de una clase es; Entonces la clase C ereda las caractersticas de P= En este caso@ P es la clasepadre de C 7 C es una clase i:a de P=La se68ntica de C ereda P@ donde C tiene todas las -unciones de-inidas en P ade68s de sus propias -unciones= En el caso de 2ue un padre 7 un i:o de-inenel 6is6o no6%re de 6*todo@ entonces la de-inicin dada en la clase i:a tiene prioridad= Teniendo presente 2ue no se puede rede-inir no6%res de atri%utos= $de68s@ para la se"uridad@ es necesario colocar al"unas restricciones so%re c6o pueden rede-inirse los 6*todos=Ha7 una clase o%:eto distin"uida H9%:ectI= Si la de-inicin de una clase no especi-ica una clase padre@ entonces la clase ereda 9%:ect por de-ecto= Ana clase solo puede eredar de una sola claseB a esto se le lla6a acertada6ente JHerencia si6pleJ= La relacin entre padres e i:os en clases de-ine un "r8-ico= Este "r8-ico puede no contener ciclos= Por e:e6plo@ si C ereda de P@ entonces P no de%e eredar de C= $de68s@ si C ereda de P@ entonces P de%e tener unade-inicin de clase en al"En lu"ar en el pro"ra6a= 0e%ido a 2ue Cool tiene erencia si6ple@deduce 2ue si estas dos restricciones se cu6plen@ entonces la "r8-ica de erencia -or6a un 8r%ol con o%:etos co6o la ra?=TiposEn Cool@ cada no6%re de clase es ta6%i*n un tipo= Y ade68s@ a7 un tipo SELF_TYPE 2ue se puede utili?ar en circunstancias especiales=Ana declaracin Tipo tiene la -or6a +; C@ donde + es una 5aria%le 7 C es un tipo= Cada 5aria%le de%e tener una declaracin Tipo en el 6o6ento de su introduccin@ 7a sea en un let@ case o co6o par86etro -or6alde un 6*todo= Los Tipos de los atri%utos ta6%i*n de%en ser declarados=La re"la de Tipo %8sico en Cool es 2ue si un 6*todo o 5aria%le espera un 5alor de Tipo P@ entonces cual2uier 5alorde Tipo C pueden utili?arse en su lu"ar@ lo 2ue indica 2ue P es un antepasado de C en la :erar2ua de clases= En otras pala%ras@ si C ereda de P@ 7a sea directa o indirecta6ente@ a continuacin@ un C puede ser usado donde una P sera su-iciente=Cuando un o%:eto de clase C puede ser usado en lu"ar de un o%:eto de clase P@deci6os 2ue C con-or6a a P o 2ue C K P Cpiense; C es 68s %a:o en el 8r%ol deerenciaD= Co6o se discuti anterior6ente@ la con-or6idad se de-ine en cuanto a la "r8-ica de erencia=0e-inicin 4=. Sean $@ C@ 7 P sean tipos= $ K $ para todos lo Tipos $ Si C ereda de P@ entonces C K P Si $ K C 7 C K P@ entonces$ K PPor2ue 9%:ect es la ra? de la clase :er8r2uica@ si"ue 2ue $ K 9%:ect para todoslos Tipos $=SELF*T"PEEl SELF_TYPE Tipo se utili?a para re-erirse al Tipo de la 5aria%le auto= Esto es Etil en las clases 2ue son eredadas por otras clases@ 7a 2ue le per6ite al pro"ra6ador e5itar la especi-icacin de un Tipo -inal arre"lado al tie6po 2ue la clase es escrita= Por e:e6plo el pro"ra6a; 0e%ido a 2ue SELF_TYPE se utili?a en la de-inicin del 6*todo de copia@ sa%e6os 2ue el resultado de copia es el 6is6o 2ue el Tipo par86etro sel-= Por lo tanto@ se deduce 2ue Cne4 Sall7D= Cop7 CD tiene el Tipo Sall7@ lo 2ue con-or6ala declaracin del atri%uto +=Ten"a en cuenta 2ue el si"ni-icado de SELF_TYPE no es -i:o@ sino 2ue depende de la clase en la 2ue se utili?a= En "eneral@ SELF_TYPE puede re-erirse a la clase C en el 2ue aparece@ o de cual2uier otra clase 2ue con-or6aa C= Cuando se es Etil acer e+plicar a lo SELF_TYPE puede re-erirse@ se utili?a el no6%re de la clase C en el 2ue SELF_TYPE aparece co6o ndice SELF_TYPEC= Esta notacin de su%ndice no es parte de la sinta+is de Cool@ seutili?a 6era6ente para de:ar en claro en 2u* la clase en particular SELF_TYPEaparece=0e la 0e-inicin 4=.@ se deduce 2ueSELF_TYPE+ K SELF_TYPE+= Ta6%i*n a7 una re"la especial para con-or6ar SELF_TYPE;Por Elti6o@ SELF_TYPE se puede utili?ar en los si"uientes lu"ares; ne4 SELF_TYPE@ co6o el Tipo de retorno de un 6*todo@ co6o el tipo declarado de la 5aria%le let@ o co6o el tipo declarado de un atri%uto= 3o a7 otros usos de SELF_TYPE 2ue se per6itan=Tipo C+ec,in- Tipo Siste6a Cool "aranti?a al tie6po de la co6pilacin 2ue la e:ecucin de un pro"ra6a no resulte en Tipo errores= Asando las Tipo declaraciones de los identi-icadores proporcionados por el pro"ra6ador@ el tipo Cec!in" in-iere un tipo para cada e+presin en el pro"ra6a=Es i6portante distin"uir entre el tipo asi"nado por el 5eri-icador de tipos para una e+presin en tie6po de co6pilacin@ 2ue lla6are6os el tipo est8tico de la e+presin@ 7 el tipo CsD a la 2ue la e+presin e5aluar8 durante la e:ecucin@ la lla6are6os los tipos din86icos=Es necesaria la distincin entre los tipos est8ticos 7 din86icos por2ue el tipo decorrector no puede@ al tie6po de co6pilacin@ tener la in-or6acin per-ecta so%re 2u* 5alores se calculan en tie6po de e:ecucin= Por lo tanto@ en "eneral@ los tipos est8ticos 7 din86icos pueden ser di-erentes= Lo 2ue necesita6os@ sin e6%ar"o@ es 2ue el tipo de corrector est8tico sea de 6e:or estado con respecto a los tipos din86icos=Definicin 4.2 Para cualquier expresin e, 0e es un tipo din86ico de e 7 de:ar2ue Se sea el tipo est8tico in-erido por el tipo de corrector= Entonces el tipo de corrector es de 6e:or estado si para todas las e+presiones e es el caso de 2ue 0e K Se=0ico de otra 6anera@ es necesario 2ue el tipo corrector err en el lado de so%reesti6ar el tipo de un e+presin en a2uellos casos donde la precisin per-ecta no es posi%le= Tal tipo de un corrector nunca aceptar8 un pro"ra6a 2ue contiene tipo errores= Sin e6%ar"o@ el precio 2ue se pa"a es 2ue el tipo corrector reca?ar8 al"unos pro"ra6as 2ue real6ente se e:ecutan sin erroresen tie6po de e:ecucin=Atri.&tosLa de de-inicin de un atri%uto tiene la -or6a;Cuando se crea un nue5o o%:eto la e+presin de iniciali?acin es opcional al 6o6ento de e:ecutarse= El Tipo est8tico de la e+presin de%e ser con-or6e al tipo declarado para el atri%uto= Si no se proporciona la iniciali?acin@ se utili?a lainiciali?acin predeter6inada= Cuando se crea un nue5o o%:eto de una clase@ todos los atri%utos eredados 7 locales de%en seriniciali?ados= $tri%utos eredados se iniciali?an pri6ero en orden de erencia co6en?ando con los atri%utos de la 6a7or clase ancestro= 0entro de una clase dada@ los atri%utos se iniciali?an en el orden en 2ue aparecen en el te+to de ori"en= Los atri%utos son locales de la clase en la 2ue se de-inen o se eredan= Los $tri%utos eredados no pueden ser rede-inidos=VoidTodas las 5aria%les en Cool se iniciali?an para contener 5alores del tipo apropiado= El 5alor especial 5oid es 6ie6%ro de todos los tipos 7 se utili?a co6o la iniciali?acin por de-ecto para las 5aria%les donde a7 iniciali?acin= C'oid se utili?a cuando se podra usar 3ALL en C o null en La5a= El 5oid de Cool no tiene nada e2ui5alente al de C o el de La5aD Ten"a en cuenta 2ue no a7 nin"En no6%re para 5oid en coolB la Enica 6anera de crear un 5alor nulo esdeclarando una 5aria%le de otra clase 2ue no sea Int@ Strin" o 1ool 7 esto per6ite se produ?ca la iniciali?acin por de-ecto@ o al6acenar el resultado de unMile Loop= Ha7 una -or6a especial@ isvoid expr@ 2ue pone a prue%a si un 5alor es= $dicional6ente@ los 5alores 5oid se pueden pro%ar por la i"ualdad= An 5alor nulo puede ser pasado co6o ar"u6ento@ asi"nado a una 5aria%le@ o cual2uier uso en cual2uier conte+to en el 2ue cual2uier 5alor sea le"ti6o@ sal5o 2ue un dispatc "enera un error de e:ecucin=M/todos La de de-inicin de un )*todo tiene la -or6a;Puede a%er cero o 68s par86etros -or6ales= Los identi-icadores utili?ados en la lista de par86etros -or6ales@ de%er8n ser distintos= El tipo de cuerpo del 6*todo de%e a:ustarse al tipo de retorno declarado= Cuando un 6*todo es in5ocado@ los par86etros -or6ales est8n li"ados a los ar"u6entos reales 7 se e5alEa la e+presinB el 5alor resultante es el si"ni-icado de la in5ocacin del 6*todo= An par86etro -or6al esconde cual2uier de-inicin de un atri%uto del 6is6o no6%re=Para "aranti?ar la se"uridad de los Tipos@ e+isten restricciones en la rede-inicin de los 6*todos eredados= La re"la es si6ple; si una clase C ereda un 6*todo - de una clase ancestro P@ entonces C puede anular la de-inicin de erencia de - sie6pre 2ue el nE6ero de ar"u6entos@ los tipos de los par86etros -or6ales@ 7 el re"reso Tipo sean e+acta6ente la 6is6a en a6%as de-iniciones=Para 5er por 2u* es necesaria al"una restriccin a la rede-inicin de los 6*todos eredados@ considere el si"uiente e:e6plo;Sea p un o%:eto con Tipo din86ico P= Entonces p=- CD N .= Es una e+presin %ien-or6ada con un 5alor de 2= Sin e6%ar"o@ no pode6os sustituir un 5alor de tipo C para p@ por2ue resultara a>adiendo un Strin" a un nE6ero= Por lo tanto@ si los 6*todos pueden ser rede-inidos de 6anera ar%itraria@ las su%clases no pueden si6ple6ente e+tender el co6porta6iento de sus padres@ 7 "ran parte de la utilidad de la erencia@ as co6o tipo de se"uridad@ se pierde=E0presionesLas e+presiones son la cate"ora sint8ctica 68s lar"a en Cool=Constantes Las e+presiones 68s si6ples son constantes= Las constantes %ooleanas son true 7 -alse= Las constantes enteras son Strin" sin si"no de d"itos co6o /@ .237 //&= Las constantes Strin" son secuencias de caracteres entre co6illas do%les@ co6o JEsto es una cadenaJ= En las constantes Strin" pueden estar la 6a7ora de los ./24 caracteres= Ha7 otras restricciones so%re los Strin"B 5*ase la Seccin ./= Las constantes pertenecen a las clases %8sicas 1ool@ Int@ 7 Strin"= El 5alor de una constante esun o%:eto de la clase %8sica apropiada=Identi1cadores Los no6%res de las 5aria%les locales@ los par86etros -or6ales de los 6*todos@ Sel-@ 7 los atri%utos de clase son todas e+presiones=El identi-icador Sel- puedeacer re-erencia@ pero es un error asi"nar a un Sel- o unir Sel- en un let@ un case@ o co6o un par86etro -or6al= Ta6%i*n es ile"al tener atri%utos con no6%re Sel-= Las 5aria%les locales 7 los par86etros -or6ales tienen 86%ito l*+ico= Los atri%utos son 5isi%les a lo lar"o de una clase en el 2ue se declaran o eredadas@ aun2ue pueden estar ocultos por las declaraciones locales dentro de e+presiones= La unin de un identi-icador de re-erencia es el alcance 68s interno 2ue contiene una declaracin para dico identi-icador@ o para el atri%uto del 6is6o no6%re si no a7 otra declaracin= La e+cepcin a esta re"la es el identi-icador Sel- 2ue se une de -or6a i6plcita en todas las clases=Asi-naci'n Ana asi"nacin tiene la -or6a;El Tipo est8tico de la e+presin de%e ser con-or6e con el Tipo declarado en el identi-icador= El 5alor es el 5alor de la e+presin= El Tipo est8tico de una asi"nacin es el Tipo est8tico de Oe+prP=Dispatc+ Ha7 tres -or6as de dispatc Ces decir@ el 6*todo de lla6adaD en Cool= Las tres -or6as di-ieren slo co6o el 6*todo lla6ado es seleccionado= La -or6a 68s usual de dispatc es;Considere el dispatc e/=- Ce.@ ===@ enD= Para e5aluar esta e+presin@ los ar"u6entos se e5alEan de i?2uierda a dereca en orden correcto@ desde e. a en= $ continuacin@ e/ es e5aluado 7 su clase C se>ala Csi e/ es 'oid se "enera un error de e:ecucinD= Final6ente@ el 6*todo F de la clase C se in5oca@ con el 5alor de e/ unido a Sel- en el cuerpo de - 7 los ar"u6entos reales unidos a los -or6ales@ co6o de costu6%re= El 5alor de la e+presin es el 5alor de5uelta por la in5ocacin del 6*todo= El Tipo Cec!in" es un distpac 2ue i6plica 5arios pasos= Supon"a6os e/ tiene Tipo est8tico $= CQecorde6os 2ue este tipo no es necesaria6ente el 6is6o 2ue el tipo C= $ es el Tipo in-erido por el tipo de correctorB C es la clase del o%:eto calculado en tie6po de e:ecucin@ 2ue es potencial6ente cual2uier su%clase de $=D Clase $ de%e tener un 6*todo -@ el en5o 7 la de-inicin de - de%en tener el 6is6o nE6ero de ar"u6entos 7 el tipo est8tico del par86etro real it 2ue de%e a:ustarse al tipo declarado del par86etro -or6al i= Si - de5uel5e un tipo 1 7 1 es un no6%re de clase@ el tipo est8tico del dispatc es 1= En caso contrario@ si - a d5uelto un tipo SELF_TYPE@ entonces el tipo est8tico del dispatc es $= Para 5er por 2u* esto es asi@ ten"a en cuenta 2ue el par86etro auto del 6*todo - se a:usta al tipo $= Por lo tanto@ 7a 2ue - de5uel5e SELF_TYPE@ pode6os in-erir 2ue el resultado ta6%i*n de%e ser con-or6e a $= 0educir tipos est8ticos precisa de las e+presiones en5iadas lo 2ue :usti-ica 2ue se inclu7a SELF_TYPE en el siste6a de tipos Cool= Las otras -or6as de dispatc son los si"uientes;La pri6era -or6a es la a%re5iatura de Sel-La se"unda -or6a proporciona una -or6a de acceso a los 6*todos de las clases padre 2ue se an ocultado por rede-iniciones en las clases i:as= En lu"ar de utili?ar la clase de la e+presin 68s a la i?2uierda para deter6inar el 6*todo@ se utili?a el 6*todo de la clase especi-icada de -or6a e+plcita= Por e:e6plo@ eR1=- CD in5oca el 6*todo - en la clase 1 en el o%:eto 2ue es el 5alor de e= Para esta -or6a de dispatc@ el Tipo est8tico a la i?2uierda de JRJ 0e%e estar con-or6e con el tipo especi-icado a la dereca de JRJ=Condicionales Ana condicin tiene la -or6a de;La se68ntica de los condicionales es est8ndar= El predicado se e5alEa pri6ero=Si el predicado es true@a continuacin@ se e5alEa ten= Si el predicado es -alse@ entonces se e5alEa else= El 5alor de la condicional es el 5alor de la ra6a e5aluada= El predicado de%e tener Tipo est8tico 1ool= Las ra6as pueden tener cual2uier Tipo est8tico= Para especi-icar elTipo est8tico de la condicional@ de-ini6os una operacin Cpronunciado J:oinJD so%re los Tipos de la si"uiente 6anera=$@ 1@ 0 sea cual2uier tipo 2ue no sean SELF_TYPE= El Alti6o Tipo de un con:unto de Tipos si"ni-ica el 6enor ele6ento con respecto a la relacin con-or6idad K=T 7 F los Tipos est8ticos de las ra6as de la condicional= Entonces el Tipo est8tico de la condicional es T F= Cpiense;= Ca6ina acia el o%:eto de cada uno de T 7 F asta 2ue los ca6inos se encuentranD=2&cles An %ucle tiene la -or6a Mile Oe+prP loop Oe+prP poolEl predicado se e5alEa antes de cada iteracin del %ucle= Si el predicado es -alsa@ el %ucle ter6ina7 se de5uel5e 5aco= Si el predicado es 5erdadero@ el cuerpo del %ucle se e5alEa 7 el proceso se repite= El predicado de%e tener tipo est8tico 1ool= El cuerpo puede tener cual2uier tipo est8tico= El tipo est8tico de un e+presin de %ucle es o%:eto=2lo3&esAn %lo2ue tiene la -or6a SOE+prPB === OE+prPB T Las e+presiones se e5alEan en orden de i?2uierda a dereca= Cada %lo2ue tiene al 6enos una e+presinB el 5alorde un %lo2ue es el 5alor de la Elti6a e+presin= Las e+presiones de un %lo2ue pueden tener cual2uier tipo est8ticas= El tipo est8tico de un %lo2ue es el tipo est8tico de la Elti6a e+presin= Ana -uente ocasional de con-usin en Cool es el uso del punto 7 co6a CJBJD= Se usanpuntos 7 co6as co6o ter6inadores en las listas de e+presiones Cpor e:e6plo@ la sinta+is del %lo2ue anteriorD 7 no co6o separadores de e+presin= Punto 7 co6a ta6%i*n ter6inan otro Qe-res2ue construcciones@ 5*ase la Seccin .. para 68s detalles=Letper6itir Ana e+presin let tiene la -or6a Let Oid.P; Otipo.P FO< Oe+pr.PG@ ===@ OidnP; Ot7penP FO< Oe+prnPG en Oe+prP Las e+presiones opcionales son de iniciali?acinB la otra e+presin es el cuerpo= $ let se e5alEa co6o si"uiente= Pri6ero Oe+pr.P se e5alEa 7 el resultado o%li"ado a Oid.P= Lue"o Oe+pr2P es e5aluado 7 el resultado unido a Oid2P@ 7 as sucesi5a6ente@ asta 2ue todas las 5aria%les en el let se iniciali?an= CSi la iniciali?acin de Oid!P se o6ite@ OTYPEUP se utili?a la iniciali?acin por de-ecto de tipo=D $ continuacin@ el cuerpo del let es e5aluado= El 5alor de la let es el 5alor del cuerpo= Los identi-icadores 5a6os Oid.P@ ===@ OP idn son 5isi%les en el cuerpo del let= $de68s@ los identi-icadores Oid.P@ ===@ Oid!Pson 5isi%les en la iniciali?acin de Oid6P para cual2uier 6P != Si un identi-icador est8 de-inido 5arias 5eces en un let@ despu*s enlaces esconden las anteriores= Identi-icadores introducido por let ta6%i*n ocultar las de-iniciones de los 6is6os no6%res en 86%itos 2ue contiene= Cada e+presin de%e de:ar introducir al 6enos un identi-icador= El tipo de una e+presin de iniciali?acin de%e a:ustarse al tipo declarado del identi-icador= el tipo de let es el tipo de cuerpo=El Oe+prP de un let e+tiende asta Ca%arca tantos to!ensD co6o la "ra68tica per6ite=CaseLa e+presin de case tiene la si"uiente -or6a; E+presiones de casos o-recen ensa7os de tipo en tie6po de e:ecucin en los o%:etos= En pri6er lu"ar@ se e5alEa e+pr/ 7 su tipo din86ico C se>alar Csi e+pr/ e5alEa a anular un error de tie6po de e:ecucin se produceD= $ continuacin@ deentre las ra6as de la ra6a con la 6enor tipo OTYPEUP tal 2ue C KOTYPEUP est8 seleccionada= El identi-icador Oid!P es atado al 5alor de Oe+pr/P 7 la e+presin Oe+pr!P se e5alEa= El resultado del caso es el 5alor de Oe+pr!P= Si nin"una ra6a puede ser seleccionada para la e5aluacin@ se "enera un error en tie6po de e:ecucin= Cada caso e+presin de%e tener al 6enos una ra6a= Para cada ra6a@ de:a T. sea el tipo est8tico de Oe+priP= El tipo est8tico de e+presin C$SE es El id identi-icador introducido por una ra6a de un caso esconde cual2uier de-inicin de la 5aria%le o atri%uto de Identi-icacin del 5isi%le en el 86%ito de aplicacin= La e+presin case no tiene construccin especial para un Jde-aultJ o ra6a Jde otra 6aneraJ= El 6is6o e-ecto se lo"ra 6ediante la inclusin de una ra6a=Ne4Ana nue5a e+presin tiene la -or6a ne4 Ot7peP El 5alor es un o%:eto -resco de la clase apropiada= Si el tipo es SELF TYPE@ el 5alor es un -resco o%:eto de la clase de uno 6is6o en el 86%ito actual= El tipo est8tico es Ot7peP=Is5oidLa e+presinis5oid e+pr E5alEa co6o true si e+pr es nulo 7 se e5alEa co6o -alse si e+pr no es nula=Aritm/tica y operaciones de comparaci'n Cool tiene cuatro operaciones arit6*ticas %inarias; N@