JAVA Tokens

Anuncio
JAVA
Tokens
Llamamos token a la unidad más pequeña interpretada por el compilador. Podemos dividirlos en 5 tipos:
Identificadores
Palabras clave
Literales
Operadores
Separadores
El compilador se encargará de eliminar en tiempo de compilación los espacios en blanco, tabuladores y
retornos de carro, así como los Comentarios.
Identificadores
Los identificadores son los nombres que asignamos a variables, métodos y clases. Las restricciones que
existen en estos identificadores son las siguientes:
El compilador diferencia entre mayúsculas y minúsculas en los identificadores deben comenzar con una letra,
un subrayado (_) o un símbolo de dólar ($).
No pueden contener espacios.
No pueden usarse las palabras clave de Java como Identificadores
Palabras clave
Las palabras clave son palabras reservadas para un uso especial en Java y que no pueden ser utilizadas como
nombres en el código. Estas palabras son:
abstract double int super
boolean else interface switch
break extends long synchronized
byte false native this
byvalue final new threadsafe
case finally null throw
catch float package transient
1
char for private true
class goto protected try
const if public void
continue implements return while
default import short do
instanceof static
Literales
Llamamos literales a los números enteros, los números de coma flotante, los booleanos, los caracteres y
las cadenas que se presentan de forma explícita dentro del código. A su vez, cada uno de estos literales
puede aparecer en diferentes formatos:
Enteros:
Decimales (base 10)
Hexadecimales (base 16): Comienzan con 0x ó 0X
Octales (base 8): Comienzan con 0
De coma flotante:
double (64 bits)
float (32 bits): Terminan con f ó F
Notación científica
Booleanos:
true
false
Caracteres:
Normales: Representan un carácter Unicode
De control: Van precedidos por un \:
\ \ backslash
\ b retroceso
\ r retorno de carro
2
\ t tabulador
\ f form feed
\ n line feed
\ ' comilla simple
\ " comilla doble
\udddd carácter Unicode
\ddd número Octal
\ continuación
Cadenas:
Se implementan en Java como un objeto String:
Operadores
Los operadores nos permiten realizar operaciones entre datos u objetos. Los operadores junto a las variables y
datos a los que se aplican forman las expresiones. Un ejemplo de expresión sería:
x = y * 6 donde:
variables: x, y
literales: 6
operadores: =, *
La evaluación se realiza siempre de derecha a izquierda.
Precedencia de operadores: La precedencia de operadores determina el orden en que estos se evalúan. A
continuación se presenta lista de operadores desde la máxima a la mínima precedencia. Todos los que están en
la misma fila tienen la misma precedencia, y esta precedencia va disminuyendo al bajar a las filas inferiores:
. [] () ++ −−
!~*/%
+ − << >> >>>
< > <= >= ==
!= & ^ && ||
?: =
Por lo tanto, la expresión:
3
x = 5 * 9 + 4 / 2 se evalúa como si fuera:
x = (5 * 9) + (4 / 2) ya que * y / tiene una precedencia superior a +.
Operadores Enteros
Se pueden realizar tres tipos de operaciones sobre enteros: unarias, binarias y relacionales.
Operadores Unarios: Los operadores unarios actúan sobre un solo entero. Devuelve un tipo int excepto cuando
el operando es un long, en cuyo caso el resultado será también de tipo long.
Incremento: ++
Aumenta una variable entera una unidad. Se puede utilizar como prefijo o como sufijo.
Prefijo: Se produce la variación antes de evaluar la expresión en la que se encuentra. Ejemplo:
y = ++x Antes de la expresión: x = 4
Después de la expresión: y = 5, x = 5
Sufijo: Se produce la variación después de evaluar la expresión en la que se encuentra. Ejemplo:
y = x++ Antes de la expresión: x = 4
Después de la expresión: y = 4, x = 5
Decremento: −−
Disminuye una variable entera una unidad. Se puede utilizar como prefijo o como sufijo.
Negación: −
Cambia el signo de un valor entero. Ejemplo:
y = −x Antes de la expresión: x = 4
Después de la expresión: y = −4
Complemento a nivel de bits: ~
Se conmuta cada bit del número, los 1 pasan a 0 y viceversa.
Operadores Binarios:
Los operadores unarios actúan sobre pares de enteros.
Devuelven un tipo int excepto cuando uno de los operandos es un long, en cuyo caso el resultado será también
de tipo long.
Adición: +
4
Sustracción: −
Multiplicación: *
División: /
Módulo: % Resto de una división
AND a nivel de bits: &
OR a nivel de bits: |
XOR a nivel de bits: ^
Comparan cada bit de cada numero realizan las operaciones lógicas especificadas.
Desplazamiento a la izquierda: <<
Desplazamiento a la derecha: >>
Desplazamiento a la derecha con inclusión de ceros: >>>
Desplazan los bits individuales de un entero en una cantidad entera determinada.
Operadores Relacionales:
Los operadores unarios actúan sobre pares de números enteros. Devuelven un Booleano.
Menor que: <
Mayor que: >
Menor o igual que: <=
Mayor o igual que: >=
Igual que: =
Distinto a: !=
Operadores de coma flotante:
Igual que sobre enteros, sobre números de coma flotante se pueden realizar tres tipos de operaciones:
unarias, binarias y relacionales.
Operadores Unarios:
Los operadores unarios actúan sobre un solo número de coma flotante. Devuelve un tipo float cuando el
número es de este tipo, y un tipo double si el número es un double.
Incremento: ++
5
Aumenta una variable de coma flotante en 1.0
Se puede utilizar como prefijo o como sufijo.
Decremento: −−
Disminuye una variable de coma flotante en 1.0
Se puede utilizar como prefijo o como sufijo.
Operadores booleanos:
Los operadores booleanos operan sobre tipos booleanos. Devuelven un resultado Booleano.
AND: &
OR: |
XOR: ^
AND lógico: &&
Evita la evaluación del lado derecho de la expresión si
no es necesario
OR lógico: ||
Evita la evaluación del lado derecho de la expresión si
no es necesario
Negación: !
Igual que: ==
Distinto a: !=
Condicional: ?:
Operadores de cadenas:
Actúan sobre cadenas de caracteres.
Concatenación de cadenas: +
Operadores de asignación:
Hacen la misma función que los operadores normales, pero almacenando el valor resultante en la parte
izquierda de la expresión.
Adición: +=
6
Sustracción −=
Multiplicación: *=
División: /=
Módulo: %=
AND: &=
OR: |=
XOR: ^=
Desplazamiento a la izquierda: <<=
Desplazamiento a la derecha: >>=
Desplazamiento a la derecha con inclusión de ceros:
>>>=
Ejemplo: x += 6, equivale a x = x + 6
Separadores
Los separadores indican al compilador cómo está organizado el código. Los caracteres separadores son:
() Se usa en expresiones para variar la precedencia
y en métodos para indicar sus parámetros.
{} Se usan para definir los bloques de código.
[] Se usan en la definición de matrices.
; Se usa para delimitar sentencias.
, Se usa para declarar un cierto número de
variables del mismo tipo y dentro de la sentencia
for.
. Se usa en el enunciamiento de jerarquías de
Clases.
Comentarios
Un comentario es un texto que añadimos al código por motivos documentales. El compilador los ignora
completamente. Existen tres maneras de realizar un comentario:
7
/*comentario*/
El compilador no tiene en cuenta lo que exista entre "/*"
y "*/" (Ocupe una o varias líneas).
//comentario
El compilador no tiene en cuenta lo que exista desde "//"
y el final de la línea.
/**comentario */
Igual que "/* */" excepto que el comentario se puede
utilizar para realizar documentación automática.
C ++
Caracteres de C ++
Estos caracteres son utilizados para formar constantes, los identificadores y las palabras claves de C++. El
compilador de C++ trata las letras mayusculas y minusculas como como caracteres diferentes. Por ejemplo los
identificadores Pi y PI son diferentes.
Caracteres especiales y signos de puntuacion
Se utilizan de diferentes formas y son los siguientes:
, . ; : ? ¨ ' ( ) {} [ ] < ! | / \ ~ + # % & ^ * − = >
Tipos de datos:
Hay dos clases de tipos: tipos fundamentales y tipos derivados.
Tipos fundamentales
Hay varios tipos fundamentales de datos. Los ficheros de cabecera limits.h y float.h especifican los valores
máximo y mínimo para cada tipo. Los podemos clasificar en:
Tipos enteros: char, short, int, long y enum.
Tipos reales: float, double y long double.
otros: void.
Cada tipo entero puede ser calificado por las palabras clave signed o unsigned, lo que da lugar a tener
disponibles los siguientes tipos extras:
signed char, unsigned char
8
signed short, unsigned short
signed int, unsigned int
signed long, unsigned long
Un entero calificado signed es un entero con signo, esto es un número positivo o negativo. Un número entero
calificado unsigned es un número entero sin signo, el cual es manipulado como un número entero positivo.
Si los modificadores signed y unsigned se utilizan con un tipo específico, se asume el tipo int. Por este
motivo, las siguientes declaraciones son equivalentes:
signed x;
signed int x;
unsigned y;
unsigned int y;
char (carácter − 1 byte)
El tipo char es utilizado para almacenar un valor entero en el rango −128 a 127, correspondiente a un carácter
del código ASCII. Solamente los valores 0 al 127 son equivalentes a un carácter. 0
De forma similar el tipo unsigned char puede almacenar valores en el rango de 0 a 255, valores
correspondientes a los números ordinales de los 256 caracteres ASCII.
En ANCI C, signed y unsigned char son tipos diferentes.
short (entero formato corto − 2 bytes)
El tipo short proporciona un entero en el rango de valores de:
−3278 a 32767 (−2E15 a 2E15−1).
De forma similar el tipo unsigned short puede almacenar valores en el rango de 0 a 65535 (0 a 2E16−1).
Ejemplo:
short y, j;
Este ejemplo declarara i y j, como variables enteras con posibilidad de tomar valores entre −32768 y 32767.
int (entero)
Un entero es para C un número sin punto decimal. El rango de valores depende de la maquina. Igualmente
ocurre con el tipo unsigned int. Para una máquina con un procesador de 16 bits el rango de valores es de:
32768 a 32767 (−2E15 a 2E15−1) para el tipo int.
0 a 65535 (0 a 2E16−1)para el tipo unsigned.
9
El uso de enteros produce un código compacto y rápido. Para una maquina de 16 bits este tipo es equivalente
al tipo short y solo ocupa 2 bytes de memoria. En general:
tamaño(short) <= tamaño(int)
long (entero formato largo − 4 bytes)
Este tipo de números es idóneo para aplicaciones de gestión. Al igual que los enteros, son números sin punto
decimal comprendidos en el rango de:
−2147483648 a 2147483647 (−2E31 a 2E31−1) para el tipo long.
0 a 4294967295 (0 a 2E32−1) para el tipo unsigned long.
En general:
tamaño(int) <= tamaño (long)
enum
La declaración de un tipo enumerado es simplemente una lista de valores que pueden ser tomados por una
variable de ese tipo. Los valores del tipo enumerado se representaran con identificadores, que serán las
constantes del nuevo tipo.
Creación de una enumeración
Crear una enumeración es definir un nuevo tipo de datos, denominado tipo enumerado y declarar una variable
de este tipo. La sintaxis es la siguiente:
enum tipo_enumerado
{
definición de nombres de constantes enteras
};
tipo_enumerado es un identificador que nombra el nuevo tipo definido.
Después de definir un tipo enumerado, podemos declarar una o mas variables de este tipo, de la forma:
[enum] tipo_enumerado [variable[, variable]...];
float (reales en simple precisión − 4 bytes)
Estos números son los mas recurridos en el lenguaje de programación. Un real en simple precisión es un
numero que puede tener un numero decimal y que puede estar comprendido en el rango de:
−3.40E + 38 a −1.17E −37 para números negativos
1.17E −37 a 3.40E +38 para números positivos
10
Un numero real en simple precisión no tiene mas de 7 dígitos significativos.
double (reales en doble precisión − 8 bytes)
Un numero real en doble precisión es un numero que puede tener un punto decimal y puede estar
comprendido en el rango de:
−1.79E+308 a −2.22E−307 para números negativos
2.22E−307 a 1.79E+308 para los números positivos
Un numero real en doble precisión tiene hasta 15 dígitos significativos. Esto da a lugar a cálculos mas exactos
que en simple precisión.
long double (reales doble precisión formato largo − 8 bytes)
Para este compilador, este tipo es igual al tipo double.
void
El tipo void se utiliza para declarar funciones que nom retornan un valor o para declarar un puntero a un tipo
no especificado. Si void aparece entre paréntesis a continuación del nombre de una función, no es interpretado
como un tipo. En este caso indica que la función no acepta argumentos.
TIPOS DERIVADOS
Los tipos derivados son construidos a partir de los tipos fundamentales.
Algunos de ellos son los siguientes:
punteros
estructuras
unión
arrays
funciones
clases
CONSTANTES
Una constante es un valor que, una vez fijado por el compilador, no cambia durante la ejecución del
programa. Una constante en C puede ser un número o una cadena de caracteres.
Constantes enteras
El lenguaje C+ + permite especificar un entero en base: 10, 8, 16 y 2.
En general, si la constante es positiva, el signo + es opcional y si es negativa, llega el signo −. El tipo de una
11
constante entera viene determinado por su valor. También se puede indicar explícitamente el tipo de una
constante entera, añadiendo los sufijos L,U, o UL (mayúsculas o minúsculas). Si el sufijo es L, su tipo es long
cuando el valor puede ser representado en este tipo, si no es unsigned long. Si el sufijo es U, su tipo es
unsigned int cuando el valor puede ser representado en este tipo, si no es unsigned long. Si el sufijo es UL,
su tipo es unsigned long.
Ejemplos de constantes enteras:
constante decimal puede tener uno o mas dígitos, 0 a 9, de los cuales el primero de ellos es distinto de cero.
constante octal puede tener 1 o mas dígitos, 0 a 7, precedidos por 0 (cero). Su valor esta comprendido dentro
los limites de un rango.
constante hexadecimal puede tener 1 o mas caracteres, 0 a 9, y A a F, precedidos por 0x o 0X (cero mas x).
Su valor esta comprendido dentro los limites de un rango.
constante binaria puede tener 1 o mas dígitos, 0 o 1, precedidos por 0b o 0B (cero mas b). Este tipo de
constantes es una extensión de Zortech C+ +.
Constantes reales
Una constante real esta formada por una parte entera, seguida por un punto decimal, y una parte
fraccionaria. También se permite la notación científica, en cuyo caso se añade al valor una e o E, seguida por
un exponente positivo o negativo.
parte−entera.parte−fraccionaria[{e/E}{[+]/−}dígitos]
donde dígitos representa cero o mas dígitos del 0 al 9 y E o e es el símbolo de exponente de base 10 que
puede ser negativa o positiva.
Constantes de un solo carácter
Este tipo de constantes esta formado por un único carácter encerrado entre comillas simples. Una secuencia de
escape es considerada como un único carácter.
Constantes de caracteres
Una constante de caracteres es una cadena de caracteres encerrados entre comillas dobles.
PALABRAS CLAVE
Las palabras clave son identificadores predefinidos que tienen significado especial para el compilador C. Un
identificador definido por el usuario, no puede tener el mismo nombre que una palabra clave.
El lenguaje C, tiene las siguientes palabras clave:
auto double int struct
break else long switch
case enum register typedef
12
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
Además de las palabras clave anteriores, el compilador C+ + tiene también las siguientes:
asm friend overload template
catch inline private this
class new protected virtual
delete operator public
las palabras claves siempre se deben escribir en minúsculas.
OPERADORES
Los operadores son símbolos que indican como son manipulados los datos. Se pueden clasificar en los
siguientes grupos: aritméticos, lógicos, relaciónales, unitarios, lógicos para manejo de bits, de asignación,
operador ternario para expresiones condicionales y otros.
Operadores aritméticos
Operador
+
−
*
/
%
Operación
Suma. Los operandos pueden ser enteros, reales o punteros
Resta. Los operandos pueden ser enteros, reales o punteros
Multiplicación. Los operandos pueden ser enteros o reales
División. Los operandos pueden ser enteros o reales
Modulo o resto de una división entera. Los operandos tiene que ser enteros.
Operadores lógicos
Operador
&&
**
!
Operación
AND. Da como resultado el factor lógico 1 si ambos operandos son distintos de cero.
Si uno de ellos es cero el resultado es el valor lógico 0. Si el primer operando es igual a
cero, el segundo operando no es evaluado.
OR. El resultado es cero si ambos operandos son 0. Si uno de los operandos tiene un
valor distinto de 0, el resultado es 1. Si el primer operando es distinto de cero, el
segundo operando no es evaluado.
NOT. el resultado es 0 si el operando tiene un valor distinto de cero, y 1 en caso
contrario.
El resultado es de tipo int. Los operandos pueden ser enteros, reales o punteros.
13
Operadores de relación
Operador
<
>
<=
>=
==
!=
Operación
Primer operando menor que el segundo
Primer operando mayor que el segundo
Primer operando menor o igual al segundo
Primer operando mayor o igual que el segundo
Primer operando igual que el segundo
Primer operando distinto que el segundo
Los operandos pueden ser de tipo entero, real o puntero.
Expresiones de Boole
Una expresión de Boole da como resultado los valores lógicos 0 o 1. Los operadores que intervienen en una
expresión de Boole pueden ser: operadores lógicos y operadores de relación.
Operadores unitarios
Operador
−
~
Operando
Cambia el signo al operando. El operando puede ser entero o real.
Complemento a 1. El operando tiene que ser entero
Operador lógico para el manejo de bits
Operador
&
*
^
<<
>>
Operando
Operador AND a nivel de bits
Operador OR a nivel de bits
Operador XOR a nivel de bits
Desplazamiento a la izquierda
Desplazamiento a la derecha
Los operadores para este tipo de operaciones tienen que ser tipo entero
( tamaño(operador) <= tamaño(int) ), no pueden ser reales.
Operadores de asignación
Operador
++
−−
=
*=
/=
%=
+=
−=
Operando
Incremento.
Decremento.
Asignacion simple.
Multiplicacion mas asignacion.
Division mas asignacion.
Modulo mas asignacion.
Suma mas asignacion.
Resta mas asignacion.
14
<< =
>> =
&=
|=
^=
Desplazamiento a izquierdas mas asignacion.
Desplazamiento a derechas mas asignacion.
Operacion AND sobre bits mas asignacion.
Operacion OR mas asignacion.
Operador XOR sobre bits mas asignacion.
En una operacion de asignacion, el valor de la derecha, es convertido al tipo del valor de la izquierda.
Otros operadores
Operador coma
Operador de indireccion (*)
Operador de direccion − de (&)
Operador sizeof (tamaño de)
Los operadores que hemos visto hasta ahora, tambien son aplicables a C, los que veremos a continuacion, solo
pueden utilizarse en C+ +.
Operdor
::
this
&
new
delete
.*
−>*
Operacion
Operador de resolucion del ambito de una variable o de una funcion miembro de una
clase.
significa la direccion del objeto (estructura o clase) sobre el que estamos trabajando.
Este operador hace que el operando que le sigue tome la direccion de la variable
asignada, en lugar del valor de la misma. Es lo que se conoce referencia de una
variable. Aplicado a un parametro formal de una funcion, declara a este como
parametro variable (pasar un valor por referencia), dejando de ser un parametro valor
Crea un objeto de un tipo especificado, asignado a memoria dinamicamente.
Destruye un objeto creado dinamicamente por el operador new.
operador para acceder a un miembro de una clase, cuando el miembro es referenciado
por un puntero. El operando de la izquierda es el nombre de un objeto de esa clase y el
operando a la derecha es un puntero asl miembro de la clase.
operador para acceder a un miembro de una clase cuando ambos, miembro y clase, son
referenciados por punteros. El operando de la izquierda es un puntero a un objeto de
esa clase y el operando a la derecha es un puntero al miembro de la clase.
PRIORIDAD Y ORDEN DE EVALUACION
La tabla que se presenta a continuacion, resume las reglas de prioridad y asociatividad de todos los operdores.
Los operadores escritos sobre una misma linea tienen la misma prioridad.
izda. a dcha.
izda. a dcha.
Una expresion entre parentesis, siempre se evalua primero. Los parentesis tienen mayor prioridad y son
evaluados de mas internos a mas externos.
15
Operador Asociatividad
( ) [ ] . − > :: −> *.* & izda. a dcha.
− ~ ! * & + + − − sizeof (tipo) new delete dcha. a izda.
* / % izda. a dcha.
+ − izda. a dcha.
<< >> izda. a dcha.
< < = > > = izda. a dcha.
= = ! = izda. a dcha.
& izda. a dcha.
^ izda. a dcha.
| izda. a dcha.
& & izda. a dcha.
| | izda. a dcha.
? : dcha a izda.
= * = / = % = + = − = << = >> = & = | = ^ = dcha a izda.
, izda. a dcha.
16
Descargar