Lenguajes de programación

Java. C++. Tokens. Identificadores. Operadores Relacionales. Tipos Derivados. Prioridad y Orden de Evaluación

  • Enviado por: El remitente no desea revelar su nombre
  • Idioma: castellano
  • País: España España
  • 21 páginas

publicidad
cursos destacados
Programacion en Prestashop
Programacion en Prestashop
Vídeo tutoriales para enseñar los apartados básicos en la programación dentro de Prestashop.
Ver más información

conviértete en un desarrollador web desde cero aprendiendo xml, json y ajax (Capítulo 4)
conviértete en un desarrollador web desde cero aprendiendo xml, json y ajax (Capítulo 4)
¡Bienvenidos a la versión española del curso más completo y más vendido en la web...
Ver más información


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

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

\ 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:

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: +

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: ++

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: +=

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:

/*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

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.

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

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 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

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.

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.

<< =

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

Operacion

::

Operador de resolucion del ambito de una variable o de una funcion miembro de una clase.

this

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

new

Crea un objeto de un tipo especificado, asignado a memoria dinamicamente.

delete

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.

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.