Sunteți pe pagina 1din 19

COMPILADOR COOL

LUCY ANDRADE, RANDALL SALES, RAMON


GONZALEZ
UNIVERSIDAD ADVENTISTA DE CENTRO AMERICA

Proyecto Final Compiladores

Contenido
Introduccin 2
Clases

Caractersticas

Herencia 3
Tipos 4
SELF_TYPE

Tipo Checking

Atributos

Void8
Mtodos

Expresiones 9
Constantes

Identificadores

Asignacin 10
Dispatch

10

Condicionales
Bucles

12

Bloques

12

11

Let 13
Case

13

New14
Isvoid

14

Aritmtica y operaciones de comparacin


Clases bsicas
Object
Io

16

15

15

15

Int 16

Introduccin
Este manual describe el lenguaje de programacin Cool: Classroom ObjectOriented Language. Cool es un pequeo lenguaje que se puede implementar
con un esfuerzo razonable y aun asi conserva muchas de las caractersticas de
los lenguajes de programacin modernos, incluyendo objetos, tipos estticos, y
gestin de memoria automtica.
Los programas Cool son un conjunto de clases. Una clase encapsula las
variables y los procedimientos de un tipo de datos. Donde las instancias de una
clase son objetos. En Cool, se identifican las clases y los tipos; es decir, cada
clase define un tipo. Las clases permiten a los programadores definir nuevos
tipos y procedimientos asociados (o mtodos) especficos a de los tipos. La
herencia permite nuevos tipos de extender el comportamiento de los tipos
existentes.
Cool es un lenguaje de expresin. La mayora de las construcciones Cool son
expresiones, y cada expresin tiene un valor y un tipo.
Cool es de tipo seguro: Los procedimientos estn garantizados para ser
aplicado a los datos del tipo correcto.
Mientras que los tipos estticos imponen una fuerte disciplina en la
programacin en Cool, lo que garantiza que en ningn tiempo de ejecucin los
errores pueden surgir en los programas.
Este manual se divide en los componentes formales e informales. La
descripcin informal, la primera mitad (hasta la seccin 9). La descripcin
formal comienza con la Seccin 10.

Clases
Todo el cdigo en Cool est organizado en clases. Cada definicin de clase
debe estar contenida en un solo archivo fuente, podiendo definirse en un solo
archivo mltiples de ellas. Las definiciones de clase tienen la forma:

La notacin [...] denota una construccin opcional. Todos los nombres de las
clases son visibles globalmente. Los nombres de clase deben comenzar con
una letra mayscula. Y no pueden ser redefinidas.

Caractersticas
El cuerpo de una definicin de clase consiste en una lista de funciones. Una
funcin es o bien un atributo o un mtodo. Donde un atributo de clase A
especifica una variable que es parte del estado de los objetos de la clase A. Y
un mtodo de la clase A es un procedimiento que puede manipular las variables
y objetos de la clase A.
Uno de los temas principales de los lenguajes de programacin modernos es el
de information hiding, que es la idea de que ciertos aspectos de aplicacin
deben ser abstractos y ocultos a los usuarios del tipo de datos. Cool apoya la
esto a travs de un mecanismo sencillo: todos los atributos tienen un mbito
local en la clase, y todos los mtodos tienen un alcance global. Por lo tanto, la
nica manera de proporcionar acceso al estado de objeto en Cool es a travs
de mtodos.
Los nombres de funciones deben empezar con una letra minscula. El nombre
de un mtodo no se puede definir varias veces en una clase, ni ningn nombre
de atributo, pero si un mtodo y un atributo pueden tener el mismo nombre.

Herencia
Si la definicin de una clase es:

Entonces la clase C hereda las caractersticas de P. En este caso, P es la clase


padre de C y C es una clase hija de P.
La semntica de C hereda P, donde C tiene todas las funciones definidas en P
adems de sus propias funciones. En el caso de que un padre y un hijo definen
el mismo nombre de mtodo, entonces la definicin dada en la clase hija tiene
prioridad. Teniendo presente que no se puede redefinir nombres de atributos.
Adems, para la seguridad, es necesario colocar algunas restricciones sobre
cmo pueden redefinirse los mtodos.
Hay una clase objeto distinguida Object. Si la definicin de una clase no
especifica una clase padre, entonces la clase hereda Object por defecto. Una
clase solo puede heredar de una sola clase; a esto se le llama acertadamente
"Herencia simple". La relacin entre padres e hijos en clases define un grfico.
Este grfico puede no contener ciclos. Por ejemplo, si C hereda de P, entonces
P no debe heredar de C. Adems, si C hereda de P, entonces P debe tener una
definicin de clase en algn lugar en el programa. Debido a que Cool tiene
herencia simple, deduce que si estas dos restricciones se cumplen, entonces
la grfica de herencia forma un rbol con objetos como la raz.

Tipos
En Cool, cada nombre de clase es tambin un tipo. Y adems, hay un tipo
SELF_TYPE que se puede utilizar en circunstancias especiales.
Una declaracin Tipo tiene la forma x: C, donde x es una variable y C es un
tipo. Cada variable debe tener una declaracin Tipo en el momento de su
introduccin, ya sea en un let, case o como parmetro formal de un mtodo.
Los Tipos de los atributos tambin deben ser declarados.
La regla de Tipo bsico en Cool es que si un mtodo o variable espera un valor
de Tipo P, entonces cualquier valor de Tipo C pueden utilizarse en su lugar, lo
que indica que P es un antepasado de C en la jerarqua de clases. En otras

palabras, si C hereda de P, ya sea directa o indirectamente, a continuacin, un


C puede ser usado donde una P sera suficiente.
Cuando un objeto de clase C puede ser usado en lugar de un objeto de clase P,
decimos que C conforma a P o que C P (piense: C es ms bajo en el rbol de
herencia). Como se discuti anteriormente, la conformidad se define en cuanto
a la grfica de herencia.
Definicin 4.1 Sean A, C, y P sean tipos.
A A para todos lo Tipos A
Si C hereda de P, entonces C P
Si A C y C P, entonces A P
Porque Object es la raz de la clase jerrquica, sigue que A Object para todos
los Tipos A.

SELF_TYPE
El SELF_TYPE Tipo se utiliza para referirse al Tipo de la variable auto. Esto es
til en las clases que son heredadas por otras clases, ya que le permite al
programador evitar la especificacin de un Tipo final arreglado al tiempo que la
clase es escrita. Por ejemplo el programa:

Debido a que SELF_TYPE se utiliza en la definicin del mtodo de copia,


sabemos que el resultado de copia es el mismo que el Tipo parmetro self. Por
lo tanto, se deduce que (new Sally). Copy () tiene el Tipo Sally, lo que conforma
la declaracin del atributo x.

Tenga en cuenta que el significado de SELF_TYPE no es fijo, sino que


depende de la clase en la que se utiliza. En general, SELF_TYPE puede
referirse a la clase C en el que aparece, o de cualquier otra clase que conforma
a C. Cuando se es til hacer explicar a lo SELF_TYPE puede referirse, se
utiliza el nombre de la clase C en el que SELF_TYPE aparece como ndice
SELF_TYPEC. Esta notacin de subndice no es parte de la sintaxis de Cool, se
utiliza meramente para dejar en claro en qu la clase en particular SELF_TYPE
aparece.
De la Definicin 4.1, se deduce que SELF_TYPE x SELF_TYPEx. Tambin
hay una regla especial para conformar SELF_TYPE:

Por ltimo, SELF_TYPE se puede utilizar en los siguientes lugares: new


SELF_TYPE, como el Tipo de retorno de un mtodo, como el tipo declarado de
la variable let, o como el tipo declarado de un atributo. No hay otros usos de
SELF_TYPE que se permitan.

Tipo Checking
Tipo Sistema Cool garantiza al tiempo de la compilacin que la ejecucin de un
programa no resulte en Tipo errores. Usando las Tipo declaraciones de los
identificadores proporcionados por el programador, el tipo Checking infiere un
tipo para cada expresin en el programa.
Es importante distinguir entre el tipo asignado por el verificador de tipos para
una expresin en tiempo de compilacin, que llamaremos el tipo esttico de la
expresin, y el tipo (s) a la que la expresin evaluar durante la ejecucin, la
llamaremos los tipos dinmicos.
Es necesaria la distincin entre los tipos estticos y dinmicos porque el tipo de
corrector no puede, al tiempo de compilacin, tener la informacin perfecta
sobre qu valores se calculan en tiempo de ejecucin. Por lo tanto, en general,
los tipos estticos y dinmicos pueden ser diferentes. Lo que necesitamos, sin

embargo, es que el tipo de corrector esttico sea de mejor estado con respecto
a los tipos dinmicos.
Definicin 4.2 Para cualquier expresin e, De es un tipo dinmico de e y dejar
que Se sea el tipo esttico inferido por el tipo de corrector. Entonces el tipo de
corrector es de mejor estado si para todas las expresiones e es el caso de que
De Se.
Dicho de otra manera, es necesario que el tipo corrector err en el lado de
sobreestimar el tipo de un expresin en aquellos casos donde la precisin
perfecta no es posible. Tal tipo de un corrector nunca aceptar un programa
que contiene tipo errores. Sin embargo, el precio que se paga es que el tipo
corrector rechazar algunos programas que realmente se ejecutan sin errores
en tiempo de ejecucin.

Atributos
La de definicin de un atributo tiene la forma:

Cuando se crea un nuevo objeto la expresin de inicializacin es opcional al


momento de ejecutarse. El Tipo esttico de la expresin debe ser conforme al
tipo declarado para el atributo. Si no se proporciona la inicializacin, se utiliza la
inicializacin predeterminada.
Cuando se crea un nuevo objeto de una clase, todos los atributos heredados y
locales deben ser inicializados. Atributos heredados se inicializan primero en
orden de herencia comenzando con los atributos de la mayor clase ancestro.
Dentro de una clase dada, los atributos se inicializan en el orden en que
aparecen en el texto de origen.
Los atributos son locales de la clase en la que se definen o se heredan. Los
Atributos heredados no pueden ser redefinidos.

Void
Todas las variables en Cool se inicializan para contener valores del tipo
apropiado. El valor especial void es miembro de todos los tipos y se utiliza
como la inicializacin por defecto para las variables donde hay inicializacin.
(Void se utiliza cuando se podra usar NULL en C o null en Java. El void de
Cool no tiene nada equivalente al de C o el de Java) Tenga en cuenta que no
hay ningn nombre para void en cool; la nica manera de crear un valor nulo es
declarando una variable de otra clase que no sea Int, String o Bool y esto
permite se produzca la inicializacin por defecto, o almacenar el resultado de
un While Loop.
Hay una forma especial, isvoid expr, que pone a prueba si un valor es.
Adicionalmente, los valores void se pueden probar por la igualdad. Un valor
nulo puede ser pasado como argumento, asignado a una variable, o cualquier
uso en cualquier contexto en el que cualquier valor sea legtimo, salvo que un
dispatch genera un error de ejecucin.

Mtodos
La de definicin de un Mtodo tiene la forma:

Puede haber cero o ms parmetros formales. Los identificadores utilizados en


la lista de parmetros formales, debern ser distintos. El tipo de cuerpo del
mtodo debe ajustarse al tipo de retorno declarado. Cuando un mtodo es
invocado, los parmetros formales estn ligados a los argumentos reales y se
evala la expresin; el valor resultante es el significado de la invocacin del
mtodo. Un parmetro formal esconde cualquier definicin de un atributo del
mismo nombre.
Para garantizar la seguridad de los Tipos, existen restricciones en la
redefinicin de los mtodos heredados. La regla es simple: si una clase C
hereda un mtodo f de una clase ancestro P, entonces C puede anular la
definicin de herencia de f siempre que el nmero de argumentos, los tipos de

los parmetros formales, y el regreso Tipo sean exactamente la misma en


ambas definiciones.
Para ver por qu es necesaria alguna restriccin a la redefinicin de los
mtodos heredados, considere el siguiente ejemplo:

Sea p un objeto con Tipo dinmico P. Entonces p.f () + 1. Es una expresin bien
formada con un valor de 2. Sin embargo, no podemos sustituir un valor de tipo
C para p, porque resultara aadiendo un String a un nmero. Por lo tanto, si
los mtodos pueden ser redefinidos de manera arbitraria, las subclases no
pueden simplemente extender el comportamiento de sus padres, y gran parte
de la utilidad de la herencia, as como tipo de seguridad, se pierde.

Expresiones
Las expresiones son la categora sintctica ms larga en Cool.

Constantes
Las expresiones ms simples son constantes. Las constantes booleanas son
true y false. Las constantes enteras son String sin signo de dgitos como 0, 123
y 007. Las constantes String son secuencias de caracteres entre comillas
dobles, como "Esto es una cadena". En las constantes String pueden estar la
mayora de los 1024 caracteres.
Hay otras restricciones sobre los String; vase la Seccin 10. Las constantes
pertenecen a las clases bsicas Bool, Int, y String. El valor de una constante es
un objeto de la clase bsica apropiada.

Identificadores
Los nombres de las variables locales, los parmetros formales de los mtodos,
Self, y los atributos de clase son todas expresiones. El identificador Self puede
hacer referencia, pero es un error asignar a un Self o unir Self en un let, un
case, o como un parmetro formal. Tambin es ilegal tener atributos con
nombre Self.
Las variables locales y los parmetros formales tienen mbito lxico. Los
atributos son visibles a lo largo de una clase en el que se declaran o
heredadas, aunque pueden estar ocultos por las declaraciones locales dentro
de expresiones. La unin de un identificador de referencia es el alcance ms
interno que contiene una declaracin para dicho identificador, o para el atributo
del mismo nombre si no hay otra declaracin. La excepcin a esta regla es el
identificador Self que se une de forma implcita en todas las clases.

Asignacin
Una asignacin tiene la forma:

El Tipo esttico de la expresin debe ser conforme con el Tipo declarado en el


identificador. El valor es el valor de la expresin. El Tipo esttico de una
asignacin es el Tipo esttico de <expr>.

Dispatch
Hay tres formas de dispatch (es decir, el mtodo de llamada) en Cool. Las tres
formas difieren slo como el mtodo llamado es seleccionado. La forma ms
usual de dispatch es:

Considere el dispatch e0.f (e1, ..., en). Para evaluar esta expresin, los
argumentos se evalan de izquierda a derecha en orden correcto, desde e 1 a
en. A continuacin, e0 es evaluado y su clase C seala (si e0 es Void se genera

un error de ejecucin). Finalmente, el mtodo F de la clase C se invoca, con el


valor de e0 unido a Self en el cuerpo de f y los argumentos reales unidos a los
formales, como de costumbre. El valor de la expresin es el valor devuelta por
la invocacin del mtodo.
El Tipo Checking es un distpach que implica varios pasos. Supongamos e 0
tiene Tipo esttico A. (Recordemos que este tipo no es necesariamente el
mismo que el tipo C. A es el Tipo inferido por el tipo de corrector; C es la clase
del objeto calculado en tiempo de ejecucin, que es potencialmente cualquier
subclase de A.) Clase A debe tener un mtodo f, el envo y la definicin de f
deben tener el mismo nmero de argumentos y el tipo esttico del parmetro
real ith que debe ajustarse al tipo declarado del parmetro formal i.
Si f devuelve un tipo B y B es un nombre de clase, el tipo esttico del dispatch
es B. En caso contrario, si f ha dvuelto un tipo SELF_TYPE, entonces el tipo
esttico del dispatch es A. Para ver por qu esto es asi, tenga en cuenta que el
parmetro auto del mtodo f se ajusta al tipo A. Por lo tanto, ya que f devuelve
SELF_TYPE, podemos inferir que el resultado tambin debe ser conforme a A.
Deducir tipos estticos precisa de las expresiones enviadas lo que justifica que
se incluya SELF_TYPE en el sistema de tipos Cool.
Las otras formas de dispatch son los siguientes:

La primera forma es la abreviatura de Self

La segunda forma proporciona una forma de acceso a los mtodos de las


clases padre que se han ocultado por redefiniciones en las clases hijas. En
lugar de utilizar la clase de la expresin ms a la izquierda para determinar el
mtodo, se utiliza el mtodo de la clase especificada de forma explcita. Por
ejemplo, e@B.f () invoca el mtodo f en la clase B en el objeto que es el valor
de e. Para esta forma de dispatch, el Tipo esttico a la izquierda de "@" Debe
estar conforme con el tipo especificado a la derecha de "@".

Condicionales
Una condicin tiene la forma de:

La semntica de los condicionales es estndar. El predicado se evala primero.


Si el predicado es true, a continuacin, se evala then. Si el predicado es
false, entonces se evala else. El valor de la condicional es el valor de la rama
evaluada.
El predicado debe tener Tipo esttico Bool. Las ramas pueden tener cualquier
Tipo esttico. Para especificar el Tipo esttico de la condicional, definimos una
operacin

(pronunciado "join") sobre los Tipos de la siguiente manera. A, B,

D sea cualquier tipo que no sean SELF_TYPE. El Ultimo Tipo de un conjunto


de Tipos significa el menor elemento con respecto a la relacin conformidad .

T y F los Tipos estticos de las ramas de la condicional. Entonces el Tipo


esttico de la condicional es T

F. (piense:. Camina hacia el objeto de cada

uno de T y F hasta que los caminos se encuentran).

Bucles
Un bucle tiene la forma
While <expr> loop <expr> pool
El predicado se evala antes de cada iteracin del bucle. Si el predicado es
falsa, el bucle termina y se devuelve vaco. Si el predicado es verdadero, el
cuerpo del bucle se evala y el proceso se repite.
El predicado debe tener tipo esttico Bool. El cuerpo puede tener cualquier tipo
esttico. El tipo esttico de un expresin de bucle es objeto.

Bloques
Un bloque tiene la forma
{<Expr>; ... <Expr>; }
Las expresiones se evalan en orden de izquierda a derecha. Cada bloque
tiene al menos una expresin; el valor de un bloque es el valor de la ltima
expresin. Las expresiones de un bloque pueden tener cualquier tipo estticas.
El tipo esttico de un bloque es el tipo esttico de la ltima expresin. Una
fuente ocasional de confusin en Cool es el uso del punto y coma (";"). Se usan
puntos y comas como terminadores en las listas de expresiones (por ejemplo,
la sintaxis del bloque anterior) y no como separadores de expresin. Punto y
coma tambin terminan otro Refresque construcciones, vase la Seccin 11
para ms detalles.

Let
permitir
Una expresin let tiene la forma
Let <id1>: <tipo1> [<- <expr1>], ..., <idn>: <typen> [<- <exprn>] en <expr>
Las expresiones opcionales son de inicializacin; la otra expresin es el
cuerpo. A let se evala como siguiente. Primero <expr1> se evala y el
resultado obligado a <id1>. Luego <expr2> es evaluado y el resultado unido a
<id2>, y as sucesivamente, hasta que todas las variables en el let se
inicializan. (Si la inicializacin de <idk> se omite, <TYPEK> se utiliza la
inicializacin por defecto de tipo.) A continuacin, el cuerpo del let es evaluado.
El valor de la let es el valor del cuerpo. Los identificadores vamos <id1>, ..., <>
idn son visibles en el cuerpo del let. Adems, los identificadores <id1>, ..., <idk>
son visibles en la inicializacin de <idm> para cualquier m> k. Si un
identificador est definido varias veces en un let, despus enlaces esconden
las anteriores. Identificadores introducido por let tambin ocultar las
definiciones de los mismos nombres en mbitos que contiene. Cada expresin
debe dejar introducir al menos un identificador.

El tipo de una expresin de inicializacin debe ajustarse al tipo declarado del


identificador. el tipo de let es el tipo de cuerpo. El <expr> de un let extiende
hasta (abarca tantos tokens) como la gramtica permite.

Case
La expresin de case tiene la siguiente forma:

Expresiones de casos ofrecen ensayos de tipo en tiempo de ejecucin en los


objetos. En primer lugar, se evala expr0 y su tipo dinmico C sealar (si expr0
evala a anular un error de tiempo de ejecucin se produce). A continuacin, de
entre las ramas de la rama con la menor tipo <TYPEK> tal que C <TYPEK>
est seleccionada. El identificador <idk> es atado al valor de <expr0> y la
expresin <exprk> se evala. El resultado del caso es el valor de <exprk>. Si
ninguna rama puede ser seleccionada para la evaluacin, se genera un error
en tiempo de ejecucin. Cada caso expresin debe tener al menos una rama.
Para cada rama, deja T1 sea el tipo esttico de <expri>. El tipo esttico de
expresin CASE es
El id identificador introducido por una rama de un caso esconde
cualquier definicin de la variable o atributo de Identificacin del visible en el
mbito de aplicacin. La expresin case no tiene construccin especial para un
"default" o rama "de otra manera". El mismo efecto se logra mediante la
inclusin de una rama.

New
Una nueva expresin tiene la forma
new <type>
El valor es un objeto fresco de la clase apropiada. Si el tipo es SELF TYPE, el
valor es un fresco objeto de la clase de uno mismo en el mbito actual. El tipo
esttico es <type>.

Isvoid
La expresin
isvoid expr
Evala como true si expr es nulo y se evala como false si expr no es nula.

Aritmtica y operaciones de comparacin


Cool tiene cuatro operaciones aritmticas binarias: +, -, *, /.
La sintaxis es EXPR1 <op> expr2
Para evaluar una expresin se evala primero expr1 y expr2. El resultado de la
operacin es el resultado de la expresin.
Los tipos estticos de los dos sub-expresiones debe ser int. El tipo esttico de
la expresin es int. Cool tiene solamnte divisin entera.
Cool tiene tres operaciones de comparacin: <, <=, =. Para <y <= las reglas
son exactamente las mismas que para las operaciones aritmticas binarias,
excepto que el resultado es un Bool. La comparacin = es un caso especial. Si
bien <expr1> o <expr2> tiene tipo esttico Int, Bool, o String, entonces el otro
debe tener el mismo tipo esttico. Cualquier otro tipo, incluidos SELF-TYPE se
pueden comparar libremente. En los objetos no bsicos, la igualdad
simplemente comprueba la igualdad puntero (es decir, si las direcciones de
memoria de los objetos son los mismos). La igualdad se define por vaco.
En principio, no hay nada de malo en permitir pruebas de igualdad entre, por
ejemplo, Bool y Int. Sin embargo, esta prueba debe ser siempre falsa y casi
seguro que indica algn tipo de error de programacin. Las reglas de
comprobacin de tipo Super atrapar esos errores en tiempo de compilacin en
tiempo en lugar de esperar hasta el tiempo de ejecucin.
Finalmente, hay una aritmtica y un operador unario lgico. La expresin
<expr> es el complemento entero de <expr>. La expresin <expr> debe tener
tipo esttico Int y toda la expresin tiene un tipo esttico Int. La expresin no
<expr> es el complemento de boolean <expr>. La expresin <expr> deben
tener tipo esttico Bool y toda la expresin tiene un tipo esttico Bool

Clases bsicas
Object
La clase Object es la raz de la grfica de herencia. Los mtodos con las
siguientes declaraciones se definen:

El mtodo abort, detiene la ejecucin del programa se detiene con un mensaje


de error. El nombre del tipo de mtodo devuelve una cadena con el nombre de
la clase del objeto. La copia mtodo produce una copia superficial del objeto.

Io
La clase IO proporciona los siguientes mtodos para realizar operaciones de
entrada y salida sencillas:

Los mtodos out_string y out_int imprimen su argumento y devuelven su propio


parmetro. El mtodo in_string lee una cadena de la entrada estndar, hasta,
pero no incluyendo un carcter de nueva lnea. El mtodo en el int lee un solo
entero, que pueden ser precedidos por espacios en blanco. Los caracteres
siguientes el nmero entero, hasta e incluyendo la siguiente lnea nueva, se
descartan por in_int.
Una clase puede hacer uso de los mtodos de la clase IO heredando de IO. Es
un error para redefinir la clase IO

Int
La clase Int proporciona nmeros enteros. No hay mtodos especiales a int. La
inicializacin por defecto para las variables de tipo int es 0 (no nula). Es un
error que heredar de redefinir o int.

String
La clase String proporciona cuerdas. Los siguientes mtodos se definen:

El mtodo length devuelve la longitud del parmetro self. El mtodo concat


devuelve la cadena formada por la concatenacin de s despus de uno mismo.
El mtodo substr devuelve la subcadena de su parmetro auto a partir de las i
posicin con longitud l; posiciones de cuerda se numeran a partir de las 0 se
genera un error de tiempo de ejecucin si la subcadena especificada est fuera
de rango.
La inicializacin por defecto para las variables de tipo String es "" (no void). Es
un error que heredar de redefinir o String.

Booleano
El booleano proporciona verdadero o falso. La inicializacin por defecto para
las variables de tipo Bool es falso (no void).

Main class
Cada programa debe tener una clase main. Por otra parte, la clase main debe
tener un mtodo principal que no tiene parmetros formales. El mtodo
principal se debe definir en la clase principal (no heredadas de otra clase). Un
programa se ejecuta mediante la evaluacin de (new Main) .main ().

Estructura lxica
Las unidades lxicas de cool son enteros, identificadores de tipo,
identificadores de objeto notacin especial, cuerdas, palabras clave y los
espacios en blanco.

Enteros, identificadores y notacin especial

S-ar putea să vă placă și