Temas:
Por ejemplo, en la siguiente instrucción, sqrt(...) es una invocación de función:
Las reglas sintácticas que describen lo que puede ser una invocación
de función o método son las siguientes:
double raiz= sqrt(b*b-4*a*c);
| exp | -> ident ( args ) | La invocación de una función |
| -> exp . ident ( args ) | La invocación de un método | |
| args | -> | No hay argumentos |
| -> exp más-args | Hay al menos un argumento | |
| más-args | -> | No hay más argumentos |
| -> , exp más-args | Queda al menos un argumento adicional |
El siguiente es el árbol sintáctico para max(a,1):
max ( a , 1 )
| | | | | |
ident | ident | const |
| | | \ | |
\ | exp \ exp más-args |
\ \ \ \ \ / /
\ \ \ más-args /
\ \ \ / /
\ \ args /
\ \ | /
------+-----------
exp
| más-args | -> |
lect . readLine ( )
| | | | |
ident | ident | |
| | | | |
exp | | | args |
\ \ | / / /
-----+-------------
exp
| exp | -> new tipo ( args ) |
Un tipo es una categoría sintáctica que representa todos los tipos de Java: int, double, String, TextReader, etc.
Ejercicio: demuestre que new TextReader("datos.txt").close() es una expresión (construya su árbol sintáctico). Explique en palabras qué hace la expresión.
Ejercicio:
Escriba un programa que entregue la distancia entre Santiago y alguna ciudad de Chile. El diálogo debe ser el siguiente:
Nombre de ciudad ? arica
La distancia entre Santiago y Arica es 2030 kilómetros
Arica:2030
Puerto Mont:1012
Valparaiso:109
...
Si la ciudad solicitada por el usuario no aparece en el archivo, el programa debe desplegar el siguiente mensaje:
Nombre de ciudad ? Mendoza
La ciudad de Mendoza no se encuentra en mi base de datos
Observación: La comparación se debe hacer ignorando la diferencia entre
mayúsculas y minúscula. Por esta razón, se usó la función lower
que traduce todo a letras minúsculas.
print("Nombre de ciudad ? ");
String ciudadBusc= readLine();
TextReader lect= new TextReader("dist.txt");
int existe= 0;
String linea= lect.readLine();
while (!lect.eofReached() && existe==0) {
FieldParser decod= new FieldParser(linea, ":");
String ciudad= decod.readString();
if (compare(lower(ciudad), lower(ciudadBusc))==0) {
int dist= decod.readInt();
println("La distancia entre Santiago y "+ciudad+" es "+dist+
"kilometros");
existe= 1;
}
linea= lect.readLine();
}
if (existe!=0)
println("La ciudad de "+ciudadBusc+
" no se encuentra en mi base de datos");
lect.close();
Si se encuentra la ciudad, no tiene sentido seguir leyendo el archivo. Por esta razón se agregó la variable existe. Esta variable permanece en 0 mientras no se haya encontrado la ciudad. Cuando se encuentra la ciudad se le asigna un 1, lo que se traduce en que el ciclo termina, puesto que no satisface la condición existe==0.