1
Profesor Leopoldo Silva Bijit 20-01-2010
Apéndice 1
DESCRIPCION FORMAL DE
LENGUAJES
A1.1. Léxico, Sintaxis, Semántica.
Un programa es una secuencia de símbolos y puede considerarse como un texto.
Los símbolos de un lenguaje pertenecen a un conjunto que se denomina vocabulario o léxico.
Los símbolos también se denominan elementos léxicos o tokens. Léxico significa diccionario; y
aplicado en el ambiente de lenguajes de programación se utiliza para denotar los símbolos del
lenguaje. Estos símbolos, a su vez, están formados por secuencias de caracteres; y existen reglas
que determinan cómo puede generarse o producirse un símbolo a partir de caracteres.
Cada lenguaje de programación define reglas que permiten componer el texto de un programa
como una secuencia de símbolos. El conjunto de estas reglas se denomina gramática, o más
usualmente, la sintaxis del lenguaje. Sintaxis significa con orden. Cada regla establece una clase
definida de objetos o categorías sintácticas; como ejemplos pueden darse algunas partes típicas
de un programa: acciones, declaraciones, condiciones, expresiones, etc.
Asociado a cada palabra (símbolo) y a cada frase o sentencia (categoría sintáctica) debe existir
un significado, el cual se traduce en valores de los objetos (constantes y variables) de acuerdo a
sus tipos; o en nombres de objetos o grupos de acciones; o en la especificación de las
operaciones que deben efectuarse sobre esos objetos. Todas las reglas que aportan esta
información se denomina: Semántica del lenguaje.
Si bien las reglas para construir símbolos y frases son finitas, el conjunto de programas es
infinito.
Para describir con rigurosidad los lenguajes de programación se emplea una notación formal
que se denomina Metalenguaje.
El formulismo más conocido, y que emplearemos en la descripción, es el Formalismo
Extendido Backus-Nauer. (BNF, Backus Nauer Formalism).
Básicamente consiste en describir una frase, (categoría sintáctica) o parte abstracta de un
programa, mediante la secuencia de componentes, de menor categoría, que pueden reemplazar
2 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
dicha frase. Las reglas deben especificar hasta llegar al reemplazo por los símbolos que
componen el diccionario.
En este ambiente, los elementos léxicos del lenguaje se denominan símbolos terminales. Las
componentes estructurales del lenguaje que serán reemplazadas, se denominan símbolos no
terminales. La regla que establece el reemplazo de un símbolo no terminal por una secuencia de
símbolos terminales y no terminales se denomina producción.
Las reglas deben permitir verificar, con facilidad, si una secuencia de símbolos es o no una
sentencia correcta del lenguaje.
Un programador debe conocer cómo generar secuencias de símbolos terminales que cumplen
la gramática.
A1.2. Metalenguaje BNF.
A1.2.1. Producción.
Existe sólo una acción primitiva, es la producción. Es una ecuación sintáctica que permite
definir una categoría sintáctica, S; mediante una expresión E.
En símbolos:
<S> ::= <E>
Gráficamente:
Figura A1.1. Producción
Los paréntesis de ángulo, delimitan los símbolos no terminales. En el gráfico esto se representa
por un rectángulo.
La secuencia ::= , es el metasímbolo para la producción. Y se lee: puede ser reemplazado por.
Una producción puede considerarse la instancia de definición de S en términos de E.
Lo usual es que S corresponda a una parte o concepto del lenguaje. Por ejemplo: acciones,
condiciones, tipos, etc.
La expresión E, debe especificar una secuencia de símbolos; éstos, a su vez, deben especificar,
en forma precisa, cómo se estructura una parte en términos de sus componentes.
E S
Apéndice 1. Descripción formal de lenguajes 3
Profesor Leopoldo Silva Bijit 20-01-2010
A1.2.2. Secuenciación de símbolos.
Los lenguajes estructurados suelen disponer tres formas básicas para establecer secuencias: La
alternativa, la concatenación, y la iteración.
A1.2.2.1. Alternativa.
Una expresión puede considerarse como una lista de términos sintácticos alternativos.
En símbolos:
<E> ::= <T1>|<T2>|--- |<Tn> n>0
Gráficamente:
Figura A1.2. Alternativa
El metasímbolo | se lee como o excluyente. La producción anterior explica que una expresión
puede remplazarse por uno (y sólo uno) de los términos de la lista.
Ejemplo:
<clase de almacenamiento> ::= 'auto ' | 'extern ' | 'register ' | 'static ' | 'typedef '
Nótese que los símbolos terminales, se indican por una secuencia de caracteres entre comillas
simples.
A1.2.2.2. Concatenación.
Cada término puede ser reemplazado por la concatenación (o producto) de factores sintácticos.
En símbolos:
<T> ::= <F1><F2> ---- <Fn> n>0
T1
E
T2
Tn
Ti
4 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
Gráficamente:
Figura A1.3. Concatenación
Ejemplo:
<acción repetitiva> ::= 'while' '(' <expresión> ')' <acción>
A1.2.2.3. Opción.
a) Opción. Una o ninguna.
Una forma de reemplazar un factor es mediante la opción.
En símbolos:
<F> ::= [ E ]
Gráficamente:
Figura A1.4. Opción.
Los paréntesis cuadrados son los metasímbolos empleados para la opción, se indica que el factor
puede ser reemplazado por la expresión o por nada. Se dice que [E] es opcional; puede estar o
no. Y si está, lo hace sólo una vez.
Ejemplo:
<signo> ::= [ '+' | '-' ]
F1 F2 Fn T Fi
S
F
Apéndice 1. Descripción formal de lenguajes 5
Profesor Leopoldo Silva Bijit 20-01-2010
Figura A1.5. Sintaxis de Signo
Debe notarse que los símbolos terminales se representan encerrados en ovoides o círculos, en
la descripción gráfica.
La ausencia de símbolo, suele ser tratada como la ocurrencia del símbolo vacío.
b) Repetición.
Un factor también puede ser reemplazado por la repetición, de cero o más veces, de una
expresión.
En símbolos:
<F> ::= { E }
Gráficamente:
Figura A1.6. Repetición
Los paréntesis de llave denotan la repetición.
Ejemplo:
<número entero sin signo> ::= <dígito>{dígito}
Para delimitar el número máximo de repeticiones, suele agregarse un valor entero como
superíndice.
Ejemplo: {digito}^3 indica a lo más 3 cifras.
Signo
-
+
E
F
6 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
c) Repetición de a lo menos una vez.
Una alternativa de reemplazo de factor, es la repetición, de una expresión, por lo menos una
vez.
En símbolos:
<F> ::= <E> {E}
La que es semánticamente equivalente a:
<F> ::= {E} <E>
Estableceremos la siguiente equivalencia, como convenio, para simplificar la notación:
<F> ::= {E*}
Gráficamente:
Figura A1.7. Repetición de a lo menos una vez.
d) Lista.
Una construcción de uso frecuente es:
<lista> ::= { <entidad> <separador> } <entidad>
La lista está formada por una entidad a lo menos; en caso de existir varias entidades, éstas
aparecen separadas por el separador. Nótese que después de la última entidad no debe existir un
separador.
Debido a su frecuente uso, la sintaxis de lista puede convenirse en anotarla, en forma
abreviada, según:
<lista> ::= { <entidad>* <separador> }
E F
Apéndice 1. Descripción formal de lenguajes 7
Profesor Leopoldo Silva Bijit 20-01-2010
A1.2.2.4. Agrupaciones.
En las ocasiones que sean necesarias pueden agruparse términos y factores sintácticos
mediante paréntesis redondos.
Ejemplo:
<término simple> ::= ('A'|'B')('C'|'D')
Las siguientes secuencias cumplen la sintaxis de término simple:
AC AD BC BD
A1.2.2.5. Sintaxis de factor.
En símbolos:
<F> ::= <S>|<símbolo terminal>|(E)| E |[ E ]|{ E }
Los símbolos terminales son secuencias de símbolos tomados del vocabulario del lenguaje. Y
se representan entre comillas simples.
La entidad sintáctica <S> debe considerarse representada por su identificador o nombre; y
debe estar definida previamente.
A1.2.3. Descripción formal de BNF.
El BNF es un lenguaje formal, y como veremos puede emplearse para describirse a sí mismo.
Las siguientes producciones definen el formalismo:
<sintaxis> ::= <producción>
<producción> ::= <identificador> '::=' <expresión>
<expresión> ::= <término> { '|' <término> }
<término> ::= <factor> { <factor> }
<factor> ::= <identificador> |
<símbolo terminal> |
'(' <expresión> ')' |
<expresión> |
'[' <expresión> ']' |
'{' <expresión> '}'
El identificador denota una entidad sintáctica.
8 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
A1.2.4. Ejemplos.
a) 'A'['B']'C' genera ABC y AC
b) 'A'{'BA'} genera A ABA ABABA .......
c) {'A'|'B'}'C' genera C AC BC AAC
A1.2.5. Árboles de Derivación.
Una forma de ayudar a reconocer las frases y su estructura es el desarrollo de árboles de
derivación.
Ejemplo: Dadas las producciones:
<entero con signo>::=<signo><entero>
<signo>::='+'|'-'
<entero>::=<dígito><entero>|<dígito> (definición recursiva)
<dígito>::='0'|'1'
Verificar si +10 pertenece o no al lenguaje. Específicamente si es o no un entero con signo.
Una forma de verificación es la construcción de un árbol de derivación, que consiste en
representar gráficamente los reemplazos que se efectúan desde el símbolo de partida (raíz) hasta
llegar a elementos terminales (hojas). [top-down]
El entero con signo puede reemplazarse por la secuencia: signo entero.
Figura A1.8. Secuencia signo entero
A su vez, signo se reemplaza por + (ya es terminal). Y entero por: dígito entero.
Figura A1.9. Dígito entero
Dígito por el terminal 1, y entero por dígito. Finalmente dígito por el terminal 0.
signo
enteroconsigno
entero
signo
enteroconsigno
entero
entero dígito +
Apéndice 1. Descripción formal de lenguajes 9
Profesor Leopoldo Silva Bijit 20-01-2010
Figura A1.10. Entero con signo
El procedimiento de reconocimiento puede también efectuarse a la inversa, desde las hojas
hacia la raíz. (bottom up)
A1.2.6. Recursividad en Producciones.
Consiste, en este caso, en definir un símbolo no terminal en términos de sí mismo. La
recursividad permite definir lenguajes con un número finito de producciones. La definición
recursiva permite generar símbolos de longitud variable.
El factor básico de repetición puede describirse explícitamente en forma recursiva. Se tiene
que:
<A>::={<B>} (i)
es equivalente a:
<A>::=<vacío>|<A><B> (ii)
En forma gráfica:
Figura A1.11. Repetición (i)
signo
enteroconsigno
entero
entero dígito +
1
dígito
0
B
A
10 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
Figura A1.12. Repetición recursiva (ii)
Se dice que la definición ii) de A es recursiva. Puede comprobarse que existen otras formas
equivalentes. Son equivalentes porque generan las mismas secuencias; cuestión que puede
verificarse desarrollando árboles de derivación.
Otras formas equivalentes son:
<A> ::= <vacío>|<B><A> (iii)
<A> ::= <vacío>|<A><B><A> (iv)
La secuencia BBBB, puede lograrse para el caso (ii) según:
A es reemplazado por:
AB; luego A es nuevamente reemplazado por AB:
ABB; luego A por AB, queda:
ABBB; otra vez A por AB, queda:
ABBBB; finalmente A por el símbolo vacío.
Ejemplo: <S>::='z'|'y'<S>
Figura A1.13. Producción recursiva
Genera las secuencias:
z
yz
yyz
yyyz
...
B
A
A
S
S
y
z
Apéndice 1. Descripción formal de lenguajes 11
Profesor Leopoldo Silva Bijit 20-01-2010
Puede escribirse: <S>::={'y'}'z'
Figura A1.14. Simplificación a no recursiva.
A1.2.7. Asociatividad en Producciones.
El uso de recursividad en las producciones, permite establecer reglas de asociatividad sin uso
de paréntesis.
Puede emplearse recursividad por la izquierda.
Ejemplo:
<expresión>::= <expresión><operador><variable>|<variable>
<operador> ::= '+'|'*'
<variable> ::= 'x'|'y'
La secuencia x+y*x+y se interpreta: ((x+y)*x)+y
Con la derivación:
Figura A1.15. Derivación
Se refleja la asociatividad, agrupando primero las hojas más alejadas de la raíz.
También puede emplearse recursividad por la derecha:
S
y
z
exp
exp var op y +
exp var op
x * exp var op
var y +
x
12 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
Ejemplo:
<expresión> ::=<variable><operador><expresión>|<variable>
<operador> ::='+'|'*'
<variable> ::='x'|'y'
La secuencia x+y*x+y se interpreta: x+(y*(x+y))
Con la derivación:
Figura A1.16. Derivación
A1.2.8. Ambigüedad en Producciones.
Ciertas producciones pueden llevar a ambigüedades semánticas:
Ejemplo:
<expresión> ::=<expresión><operador><expresión>|<variable>
<operador> ::='+'|'*'
<variable> ::='a'|'b'|'c'
Puede comprobarse que la secuencia: a+b*c puede interpretarse como a+(b*c) y también como
(a+b)*c.
Comprobar lo anterior generando los árboles de derivación correspondientes. Obviamente en
una gramática deben evitarse producciones que generen ambigüedades.
exp
var
var exp op
var exp op
var exp op
y
+ x
* y
+ x
Apéndice 1. Descripción formal de lenguajes 13
Profesor Leopoldo Silva Bijit 20-01-2010
A1.2.9. Precedencia de operadores en expresiones aritmético lógicas.
El formalismo BNF, permite reflejar el orden o jerarquía de los operadores en una expresión
aritmética o lógica.
Por ejemplo: Si se tiene que el operador * tiene precedencia (o mayor jerarquía) que el
operador +; entonces la secuencia a+b*c se interpreta como:
a+(b*c)
Es decir, se realiza primero la multiplicación, luego la adición.
El uso cuidadoso de las reglas de composición de expresiones aritméticas y lógicas, permite
escribirlas sin usar paréntesis. Sin embargo, para mejorar la legibilidad en ciertos casos, suelen
emplearse éstos.
Cuando se escriben expresiones complejas empleando paréntesis, suele usarse la regla de
contar los paréntesis abiertos y los cerrados: deben estar balanceados.
A1.2.10. Reglas para construir Expresiones.
i) Las expresiones están formadas por operadores y operandos.
ii) Son fórmulas o reglas para computar valores.
iii) Precedencia de operadores
iv) Los grupos de operadores de igual precedencia se ejecutan de acuerdo a su regla de
asociatividad.
La siguiente lista muestra los operadores agrupados, en niveles de precedencia, en orden
descendente de ésta. Cada grupo está separado del siguiente por una línea en blanco. La
columna a la derecha establece la asociatividad del operador.
Operador Ejemplo notación Asociatividad
Post-incremento X++ desde izquierda hacia la derecha
Post-decremento X--
subíndice X[Y]
llamado a función X(Y)
selección de miembro X.Y
apunta a miembro X->Y
sizeof sizeof X desde derecha a izquierda
pre-incremento ++X
pre-decremento --X
dirección de &X
indirección *X
más +X
menos -X
14 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
NOT al bit ~X
NOT lógico !X
casteo de tipo (declaración)X
multiplicación X * Y desde izquierda a derecha
división X / Y
Resto (modulo) X % Y
suma X + Y desde izquierda a derecha
resta X – Y
Corrimiento a izquierda X << Y desde izquierda a derecha
Corrimiento a derecha X >> Y
Menor que X < Y desde izquierda a derecha
Menor o igual que X <= Y
Mayor que X > Y
Mayor o igual que X >= Y
Igualdad X == Y desde izquierda a derecha
No igualdad X != Y
AND al bit X & Y desde izquierda a derecha
OR exclusivo al bit X ^ Y desde izquierda a derecha
OR inclusivo al bit X | Y desde izquierda a derecha
AND lógico X && Y desde izquierda a derecha
OR lógico X || Y desde izquierda a derecha
Condicional Z ? X : Y desde derecha a izquierda
Asignación X = Y desde derecha a izquierda
Multiplica y asigna X *= Y X=X*Y
Divide y asigna X /= Y X=X/Y
Resto y asigna X %= Y
Suma y asigna X += Y
Resta y asigna X -= Y
Left shift assign X <<= Y
right shift assign X >>= Y
AND al bit y asigna X &= Y
OR ex al bit y asigna X ^= Y
OR inclusive al bit asigna X |= Y
Apéndice 1. Descripción formal de lenguajes 15
Profesor Leopoldo Silva Bijit 20-01-2010
coma X, Y desde izquierda a derecha
Figura A1.17. Reglas de precedencia y asociatividad.
La precedencia se refiere al orden de evaluación. Es decir, cuáles operadores reciben primero
sus operandos.
Ejemplos:
La semántica de a/b/c es (a/b)/c de acuerdo a la regla iv) ya que hay secuencia de operadores de
igual precedencia y se asocia desde izquierda a derecha.
En forma similar: a/b*c se interpreta: (a/b)*c
y = m * x + b se interpreta como y = ((m * x) + b)
*p++ = -X->Y se interpreta como (*(p++)) = (-(X->Y))
Para la expresión: a + b*c, aplicando la regla iii), la multiplicación tiene precedencia sobre la
suma, por lo tanto se ejecuta primero. Se interpreta: a + (b*c)
A1.3. Símbolos del lenguaje. Léxico.
El texto de un programa está formado por una secuencia de símbolos o elementos léxicos.
Los elementos léxicos, a su vez, están formados por secuencias de caracteres.
Existen reglas de composición que determinan cómo pueden generarse o producirse un
símbolo a partir de caracteres; que en el caso de programas de alto nivel, se consideran símbolos
terminales.
El conjunto de símbolos terminales es el vocabulario del lenguaje (reglas léxicas).
A1.3.1. Conjuntos de Caracteres.
Los caracteres están estandarizados y les corresponde un código único (de un código de 7
bits, ISO estándar). Con 7 bits pueden codificarse 128 caracteres diferentes.
Suele emplearse el código ASCII (Código Estándar Americano para el Intercambio de
Información), que usa 8 bits por carácter, dejando un bit para controlar la paridad. La paridad
consiste en dejar un número par o impar de unos en una palabra del código, y se emplea con
fines de detección de errores.
Los elementos del código que se representan (visualmente) mediante un símbolo gráfico se
denominan caracteres gráficos. Entre ellos 26 letras mayúsculas, 26 minúsculas, 10 dígitos
decimales, 32 caracteres especiales (signos), y el espacio.
16 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
El resto del código (33 símbolos, no gráficos) está formado por caracteres de control, que se
emplean para dar efectos de formato y para controlar la comunicación de caracteres entre un
equipo y otro. Se denominan de formato a: tabulación horizontal y vertical, retorno de carro,
alimentación de nueva línea y alimentación de nuevo formulario.
En el texto de un programa sólo se permiten caracteres gráficos y de formato.
A1.3.2. Elementos Léxicos (tokens).
En lenguajes de alto nivel es usual definir las siguientes unidades:
i) Delimitadores
ii) Identificadores
iii) Números (literal numérico)
iv) Carácter
v) Strings
vi) Comentarios
vii) Separadores
El efecto de un programa depende solamente de la particular secuencia de elementos léxicos
que lo forman.
Existen reglas que determinan como puede generarse una frase a partir de los elementos
léxicos. El conjunto de reglas se denomina gramática del lenguaje.
La gramática o estructura del lenguaje permite determinar si una secuencia de palabras
(tokens) es una sentencia correcta o no. La estructura de las frases es esencial en el
reconocimiento del significado de éstas (semántica).
A1.3.3. Separadores
En algunos casos es necesario un separador explícito para separar elementos léxicos
adyacentes.
Se consideran separadores al espacio, a los caracteres con efecto de formato y el final de una
línea. Suele no definirse qué causa el fin de línea, en algunos sistemas pueden ser uno o más
caracteres de control.
Reglas para el uso de separadores:
a) Se requiere a lo menos un separador entre un identificador o número y el identificador o
número adyacente.
b) Se permite uno o más separadores entre dos elementos léxicos adyacentes. También se
acepta uno o más separadores, antes del primer elemento léxico del programa y después del
último. (Formato libre)
Apéndice 1. Descripción formal de lenguajes 17
Profesor Leopoldo Silva Bijit 20-01-2010
c) Los comentarios son considerados separadores.
A1.3.4. Comentarios.
Los comentarios se emplean para mejorar la legibilidad del programa; y deben ocuparse con
frecuencia para aclarar el significado de variables, o de acciones. Los comentarios pueden
sacarse del texto sin alterar el significado del programa.
Cualquier secuencia de caracteres encerrados entre los símbolos /* y */ se denomina
comentario. Hay comentarios de fin de línea, de línea completa o de varias líneas.
Alternativamente un comentario puede comenzar con el doble símbolo: //.
A1.3.5. Carácter.
Un carácter literal se forma encerrando uno de los 95 caracteres gráficos (incluyendo el
espacio) entre comillas simples.
Ej: '*' '"' 'g' ' '
A1.3.6. Strings. ( tira, mensaje, texto, hileras, cadenas)
Son secuencias de caracteres gráficos entre comillas dobles. Para incluir una comilla doble, se
la precede con \. ”O/”Higgins”.
El largo del string es el número de caracteres que forman la secuencia. Se emplean para
intercalar texto (legible) en la salida. Pueden usarse para alertar al operador que se requiere una
entrada o una operación de su parte (prompts); o bien para hacer más comprensible la salida
(mensajes).
A1.3.7. Números.
Se habla de literal numérico cuando se quiere enfatizar que se está haciendo referencia a cómo
se escribe un número como una secuencia de caracteres.
Existen enteros y reales. Los reales incluyen un punto (la coma decimal). Entre los reales, se
habla de punto fijo y punto flotante (o formato científico y exponencial; llevan la letra E).
<signo> ::= ['+' | '-']
<constante entera sin signo> ::= { dígito* }
<constante entera> ::= <signo> <constante entera sin signo>
<real punto fijo> ::= {dígito*} '.' {dígito}
<exponente> ::= ('e'|'E')<constante entera>
<real punto flotante> ::= {dígito*} ['.'{dígito*}] <exponente>
<constante real> ::= <real punto fijo> |
<real punto flotante>
18 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
Un resumen de las producciones anteriores es:
Figura A1.18. Sintaxis de número
La representación anterior no considera aspectos prácticos como máximo número representable,
exactitud de representación, etc., que dependen de la instalación. La sintaxis de número se
abstrae de estos detalles y sólo explica cómo se escriben.
A1.3.8. Identificadores.
Se usan como nombres y también como palabras reservadas. Comienzan con una letra, que
puede ser seguida de cualquier combinación de letras y números. El espacio no se acepta dentro
de un identificador. Sirven para dar nombre a: constantes, tipos de datos, variables,
procedimientos, funciones.
Figura A1.19. Sintaxis de identificador
Las palabras reservadas tienen un significado especial en el lenguaje y no pueden emplearse
como identificadores de objetos.
Los siguientes símbolos son palabras reservadas:
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
Estos símbolos también pueden ser clasificados como delimitadores.
dígito
identificador letra
letra
número dígito dígito dígito
+
-
E . +
-
Apéndice 1. Descripción formal de lenguajes 19
Profesor Leopoldo Silva Bijit 20-01-2010
Existen también identificadores estándares que el lenguaje predefine. Por ejemplo, el nombre
de algunas funciones y constantes. Pueden usarse sin definirse previamente. Además podrían ser
redefinidos dentro del programa; es decir, cambiar el significado estándar.
A1.3.9. Delimitadores.
Es uno de los siguientes caracteres especiales:
~ + ; ] % , < ^
& - = { ( . > | ) / ? } ! * : [
O uno de los siguientes delimitadores, compuestos de dos caracteres especiales adyacentes:
... && -= >= <<= &= -> >>
>>= *= /= ^= != ++ << |=
%= += <= || -- ==
Algunos delimitadores se usan como operadores. Otros para establecer mecanismos de acceso
o selección de datos estructurados.
A1.3.10. Resumen.
<texto de un programa> ::= { { <separador> } <token> }
<separador> ::= <espacio> | <fin de línea> | <comentario>
<token> ::= <palabra reservada> |
<delimitador> |
<nombre> |
<constante>
<constante> ::= <contante entera> |
<constante real> |
<constante caracter> |
<string>
A1.3.11. Ejemplos.
A1.3.11.1. Indicar mediante paréntesis como se evalúan las expresiones:
a) 80/5/4
La expresión se evalúa ((80/5)/4)
b) sqrt(sqr(3)+11*5)
20 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
Se evalúa: sqrt(sqr(3)+(11*5))
c) x =2*y-5.02
Se evalúa: x = ((2*y) - 5.02)
A1.3.11.2. Escribir todas las secuencias que cumplen la sintaxis dada por:
a) {'A'|'B'}'C'
b) 'A'{'BA'}
c) ('A'|'B')('C'|'D')
d) 'A'['B']('C'|'D')
Si el número de secuencias es mayor que 10, escribir por lo menos 5 de ellas.
a) {'A'|'B'}'C'
número de secuencias>10
1) C
2) AC
3) BC
4) ABC
5) AAC
b) 'A'{'BA'}
número de secuencias >10
1) A
2) ABA
3) ABABA
4) ABABABA
5) ABABABABA
c) ('A'|'B')('C'|'D')
número de secuencias = 4
1) AC
2) AD
3) BC
4) BD
d) 'A'['B']('C'|'D')
número de secuencias = 4
1) AC
2) AD
3) ABC
4) ABD
C
A
B
AB
A
A
B D
C
A
B D
C
Apéndice 1. Descripción formal de lenguajes 21
Profesor Leopoldo Silva Bijit 20-01-2010
Índice general.
APÉNDICE 1 .............................................................................................................................................. 1
DESCRIPCION FORMAL DE LENGUAJES ........................................................................................ 1
A1.1. LÉXICO, SINTAXIS, SEMÁNTICA. ..................................................................................................... 1 A1.2. METALENGUAJE BNF. .................................................................................................................... 2
A1.2.1. Producción. ............................................................................................................................. 2 A1.2.2. Secuenciación de símbolos. ..................................................................................................... 3
A1.2.2.1. Alternativa........................................................................................................................................ 3 A1.2.2.2. Concatenación. ................................................................................................................................. 3 A1.2.2.3. Opción. ............................................................................................................................................. 4
a) Opción. Una o ninguna. .......................................................................................................................... 4 b) Repetición. .............................................................................................................................................. 5 c) Repetición de a lo menos una vez. .......................................................................................................... 6 d) Lista. ....................................................................................................................................................... 6
A1.2.2.4. Agrupaciones. .................................................................................................................................. 7 A1.2.2.5. Sintaxis de factor. ............................................................................................................................. 7
A1.2.3. Descripción formal de BNF. ................................................................................................... 7 A1.2.4. Ejemplos. ................................................................................................................................. 8 A1.2.5. Árboles de Derivación. ........................................................................................................... 8 A1.2.6. Recursividad en Producciones. ............................................................................................... 9 A1.2.7. Asociatividad en Producciones. ............................................................................................ 11 A1.2.8. Ambigüedad en Producciones. .............................................................................................. 12 A1.2.9. Precedencia de operadores en expresiones aritmético lógicas. ........................................... 13 A1.2.10. Reglas para construir Expresiones. .................................................................................... 13
A1.3. SÍMBOLOS DEL LENGUAJE. LÉXICO. .............................................................................................. 15 A1.3.1. Conjuntos de Caracteres. ...................................................................................................... 15 A1.3.2. Elementos Léxicos (tokens). .................................................................................................. 16 A1.3.3. Separadores .......................................................................................................................... 16 A1.3.4. Comentarios. ......................................................................................................................... 17 A1.3.5. Carácter. ............................................................................................................................... 17 A1.3.6. Strings. ( tira, mensaje, texto, hileras, cadenas) ................................................................... 17 A1.3.7. Números. ............................................................................................................................... 17 A1.3.8. Identificadores. ..................................................................................................................... 18 A1.3.9. Delimitadores. ....................................................................................................................... 19 A1.3.10. Resumen. ............................................................................................................................. 19 A1.3.11. Ejemplos. ............................................................................................................................. 19
A1.3.11.1. Indicar mediante paréntesis como se evalúan las expresiones:..................................................... 19 A1.3.11.2. Escribir todas las secuencias que cumplen la sintaxis dada por: .................................................. 20
ÍNDICE GENERAL. ................................................................................................................................... 21 ÍNDICE DE FIGURAS. ................................................................................................................................ 22
22 Estructuras de Datos y Algoritmos
Profesor Leopoldo Silva Bijit 20-01-2010
Índice de figuras.
FIGURA A1.1. PRODUCCIÓN .......................................................................................................................... 2 FIGURA A1.2. ALTERNATIVA ........................................................................................................................ 3 FIGURA A1.3. CONCATENACIÓN.................................................................................................................... 4 FIGURA A1.4. OPCIÓN. .................................................................................................................................. 4 FIGURA A1.5. SINTAXIS DE SIGNO................................................................................................................. 5 FIGURA A1.6. REPETICIÓN ............................................................................................................................ 5 FIGURA A1.7. REPETICIÓN DE A LO MENOS UNA VEZ. .................................................................................... 6 FIGURA A1.8. SECUENCIA SIGNO ENTERO ..................................................................................................... 8 FIGURA A1.9. DÍGITO ENTERO ....................................................................................................................... 8 FIGURA A1.10. ENTERO CON SIGNO .............................................................................................................. 9 FIGURA A1.11. REPETICIÓN (I) ...................................................................................................................... 9 FIGURA A1.12. REPETICIÓN RECURSIVA (II) ................................................................................................ 10 FIGURA A1.13. PRODUCCIÓN RECURSIVA.................................................................................................... 10 FIGURA A1.14. SIMPLIFICACIÓN A NO RECURSIVA. ..................................................................................... 11 FIGURA A1.15. DERIVACIÓN ....................................................................................................................... 11 FIGURA A1.16. DERIVACIÓN ....................................................................................................................... 12 FIGURA A1.17. REGLAS DE PRECEDENCIA Y ASOCIATIVIDAD. ..................................................................... 15 FIGURA A1.18. SINTAXIS DE NÚMERO ......................................................................................................... 18 FIGURA A1.19. SINTAXIS DE IDENTIFICADOR .............................................................................................. 18