Análisis lexicográfico

Los nombres de los procedimientos, de las variables y de las listas de propiedades son insensible a las mayúsculas y minúsculas. También son las palabras especiales FIN, CIERTO y FALSO. Sin embargo, las mayúsculas y minúsculas son preservadas en todo el resto que tecleas.

Dentro de corchetes, las palabras están delimitadas sólo por espacios y corchetes. Así, [2+3] es una lista que contiene una sola palabra.

Después de una comilla inglesa (que no está dentro de corchetes), una palabra está delimitada por un espacio, corchetes o paréntesis.

Una palabra que no está después de una comilla inglesa o entre corchetes se delimita con un espacio, corchetes, paréntesis o un operador infijo +-*/=<>. Observa que las comillas inglesas y comas no son delimitadores.

Una interrogación seguida por un número (por ejemplo, ?3), cuando se ejecuta (por ejemplo, cuando se espera un procedimiento), son ejecutados como si fueran la secuencia

(? 3)

es decir, como si fuera el número un argumento del procedimiento ?. (Veas el tema de Iteración de Plantilla.) Este tratamiento especial no se aplica a palabras leídas como datos, a palabras en las que al signo de interrogación no le sigue un carácter numérico, si el signo de interrogación es escapado con barra inversa o si el signo de interrogación es «¿».

El punto y coma no tiene un significado especial en las líneas de datos leídos con LEEPALABRA o LEELISTA, pero se puede reanalizar la línea usando EJECUTAANALIZA y entonces se reconocerá el comentario.

Si quieres incluir un delimitador (punto y coma o tilde de la eñe) en una palabra, debe estar precedido por una barra inversa (\). Si el último carácter de una línea es una barra inversa, entonces el carácter de nueva línea es parte del último palabra en la línea, y la línea sigue a través de la próxima línea. Para incluir una barra inversa en una palabra, usa dos barras inversas \\. Todo esto se aplica a las líneas de datos leídas con LEEPALABRA o LEELISTA como a las líneas de instrucciones.

FMSLogo traduce «\n» como salto de línea.

Ejemplo:

ESCRIBE "Hola,\ ¿cómo\ está\ usted?\nMuy\ bien,\ gracias.
Hola, ¿cómo está usted?
Muy bien, gracias.

Funciona de esta manera tanto en un procedimiento como en la Caja de Entrada.

Un carácter con barra inversa y el mismo sin el signo son IGUALES?; es decir el resultado es CIERTO, pero puedes distinguirlos con el predicado TIENEBARRA?. La barra inversa solo tiene efecto sobre los caracteres que la necesitan: espacio en blanco, paréntesis, corchetes, operadores infijos, barra inversa, barra vertical, tilde de la eñe, comilla inglesa, punto y coma, dos puntos y signo de interrogación.

Una notación alternativa para delimitar caracteres en palabras es incluir el grupo de caracteres entre barras verticales (|). Todos los caracteres entre barras verticales son tratados como letras. En datos leídos con LEEPALABRA las barras verticales se guardan en la palabra resultante. En datos leídos con LEELISTA (o en el resultado de un ANALIZA o EJECUTAANALIZA de una palabra) las barras verticales no aparecen explícitamente; todos los caracteres delimitadores (espacios, corchetes, paréntesis y operadores infijos) aparecen como si se hubieran entrado con barra inversa (\). Dentro de las barras verticales puedes usar barra inversa; pero en este contexto solo las barra inversas y las barras verticales deben ser escapado con barra inversa. Dentro de las barras verticales también se traducen «\n» como salto de línea.

Ejemplo:

ESCRIBE "|Hola, ¿cómo está usted?\nMuy bien, gracias.|
Hola, ¿cómo está usted?
Muy bien, gracias.

Los caracteres entrados entre barras verticales son siempre especiales, aun cuando la palabra o lista que los contiene sea analizada con ANALIZA o EJECUTAANALIZA. Igualmente sucede con un carácter escrito después de una barra inversa, excepto cuando una palabra que contiene caracteres escapos con barras inversas es ejecutada y analizada, los caracteres escapados con barras inversas pierden su cualidad especial, como si se hubieran escrito normalmente. Esta distinción es importante sólo si construyes una expresión Logo que ejecutarás después, y quieres usar paréntesis. Por ejemplo,

ESCRIBE EJECUTA (FRASE "\( 2 "+ 3 "\))

escribe 5, pero

EJECUTA (FRASE "HAZ ""|(| 2)

crea una variable cuyo nombre es el paréntesis que abre (.

Estos dos ejemplos fallarían si se intercambiaran las barras verticales y las barras inversas.


SourceForge.net Logo