Académique Documents
Professionnel Documents
Culture Documents
Apndice 1
dicha frase. Las reglas deben especificar hasta llegar al reemplazo por los smbolos que componen el diccionario. En este ambiente, los elementos lxicos del lenguaje se denominan smbolos terminales. Las componentes estructurales del lenguaje que sern reemplazadas, se denominan smbolos no terminales. La regla que establece el reemplazo de un smbolo no terminal por una secuencia de smbolos terminales y no terminales se denomina produccin. Las reglas deben permitir verificar, con facilidad, si una secuencia de smbolos es o no una sentencia correcta del lenguaje. Un programador debe conocer cmo generar secuencias de smbolos terminales que cumplen la gramtica.
Figura A1.1. Produccin Los parntesis de ngulo, delimitan los smbolos no terminales. En el grfico esto se representa por un rectngulo. La secuencia ::= , es el metasmbolo para la produccin. Y se lee: puede ser reemplazado por. Una produccin puede considerarse la instancia de definicin de S en trminos de E. Lo usual es que S corresponda a una parte o concepto del lenguaje. Por ejemplo: acciones, condiciones, tipos, etc. La expresin E, debe especificar una secuencia de smbolos; stos, a su vez, deben especificar, en forma precisa, cmo se estructura una parte en trminos de sus componentes.
20-01-2010
Los lenguajes estructurados suelen disponer tres formas bsicas para establecer secuencias: La alternativa, la concatenacin, y la iteracin. A1.2.2.1. Alternativa. Una expresin puede considerarse como una lista de trminos sintcticos alternativos. En smbolos: <E> ::= <T1>|<T2>|--- |<Tn> Grficamente: n>0
T1
T2 E Ti
Tn
Figura A1.2. Alternativa El metasmbolo | se lee como o excluyente. La produccin anterior explica que una expresin puede remplazarse por uno (y slo uno) de los trminos de la lista. Ejemplo: <clase de almacenamiento> ::= 'auto ' | 'extern ' | 'register ' | 'static ' | 'typedef ' Ntese que los smbolos terminales, se indican por una secuencia de caracteres entre comillas simples. A1.2.2.2. Concatenacin. Cada trmino puede ser reemplazado por la concatenacin (o producto) de factores sintcticos. En smbolos: <T> ::= <F1><F2> ---- <Fn> Profesor Leopoldo Silva Bijit 20-01-2010 n>0
4 Grficamente:
F1
F2
Fi
Fn
Figura A1.3. Concatenacin Ejemplo: <accin repetitiva> ::= 'while' '(' <expresin> ')' <accin> A1.2.2.3. Opcin. a) Opcin. Una o ninguna. Una forma de reemplazar un factor es mediante la opcin. En smbolos: <F> ::= [ E ] Grficamente:
F S
Figura A1.4. Opcin. Los parntesis cuadrados son los metasmbolos empleados para la opcin, se indica que el factor puede ser reemplazado por la expresin o por nada. Se dice que [E] es opcional; puede estar o no. Y si est, lo hace slo una vez. Ejemplo: <signo> ::= [ '+' | '-' ]
20-01-2010
+
Signo
Figura A1.5. Sintaxis de Signo Debe notarse que los smbolos terminales se representan encerrados en ovoides o crculos, en la descripcin grfica. La ausencia de smbolo, suele ser tratada como la ocurrencia del smbolo vaco. b) Repeticin. Un factor tambin puede ser reemplazado por la repeticin, de cero o ms veces, de una expresin. En smbolos: <F> ::= { E } Grficamente:
F E
Figura A1.6. Repeticin Los parntesis de llave denotan la repeticin. Ejemplo: <nmero entero sin signo> ::= <dgito>{dgito} Para delimitar el nmero mximo de repeticiones, suele agregarse un valor entero como superndice. Ejemplo: {digito}^3 indica a lo ms 3 cifras.
20-01-2010
Una alternativa de reemplazo de factor, es la repeticin, de una expresin, por lo menos una vez. En smbolos: <F> ::= <E> {E} La que es semnticamente equivalente a: <F> ::= {E} <E> Estableceremos la siguiente equivalencia, como convenio, para simplificar la notacin: <F> ::= {E*} Grficamente:
Figura A1.7. Repeticin de a lo menos una vez. d) Lista. Una construccin 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. Ntese que despus 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, segn: <lista> ::= { <entidad>* <separador> }
20-01-2010
En las ocasiones que sean necesarias pueden agruparse trminos y factores sintcticos mediante parntesis redondos. Ejemplo: <trmino simple> ::= ('A'|'B')('C'|'D') Las siguientes secuencias cumplen la sintaxis de trmino simple: AC AD BC BD A1.2.2.5. Sintaxis de factor.
En smbolos:
<F> ::= <S>|<smbolo terminal>|(E)| E |[ E ]|{ E } Los smbolos terminales son secuencias de smbolos tomados del vocabulario del lenguaje. Y se representan entre comillas simples. La entidad sintctica <S> debe considerarse representada por su identificador o nombre; y debe estar definida previamente. A1.2.3. Descripcin 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> ::= <produccin>
<produccin> ::= <identificador> '::=' <expresin> <expresin> ::= <trmino> { '|' <trmino> } <trmino> <factor> ::= <factor> { <factor> } ::= <identificador> <smbolo terminal> '(' <expresin> ')' <expresin> '[' <expresin> ']' '{' <expresin> '}' | | | | |
20-01-2010
8 A1.2.4. Ejemplos. a) 'A'['B']'C' b) 'A'{'BA'} c) {'A'|'B'}'C' genera ABC y AC genera A ABA ABABA ....... genera C AC BC AAC
A1.2.5. rboles de Derivacin. Una forma de ayudar a reconocer las frases y su estructura es el desarrollo de rboles de derivacin. Ejemplo: Dadas las producciones: <entero con signo>::=<signo><entero> <signo>::='+'|'-' <entero>::=<dgito><entero>|<dgito> <dgito>::='0'|'1'
(definicin recursiva)
Verificar si +10 pertenece o no al lenguaje. Especficamente si es o no un entero con signo. Una forma de verificacin es la construccin de un rbol de derivacin, que consiste en representar grficamente los reemplazos que se efectan desde el smbolo de partida (raz) hasta llegar a elementos terminales (hojas). [top-down] El entero con signo puede reemplazarse por la secuencia: signo entero.
A su vez, signo se reemplaza por + (ya es terminal). Y entero por: dgito entero.
entero entero
20-01-2010
A B
20-01-2010
10
A B
Figura A1.12. Repeticin recursiva (ii) Se dice que la definicin ii) de A es recursiva. Puede comprobarse que existen otras formas equivalentes. Son equivalentes porque generan las mismas secuencias; cuestin que puede verificarse desarrollando rboles de derivacin. Otras formas equivalentes son: <A> ::= <vaco>|<B><A> <A> ::= <vaco>|<A><B><A> (iii) (iv)
La secuencia BBBB, puede lograrse para el caso (ii) segn: 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 smbolo vaco. Ejemplo: <S>::='z'|'y'<S>
S y
Figura A1.13. Produccin recursiva Genera las secuencias: z yz yyz yyyz ...
20-01-2010
11
y
Figura A1.14. Simplificacin a no recursiva. A1.2.7. Asociatividad en Producciones. El uso de recursividad en las producciones, permite establecer reglas de asociatividad sin uso de parntesis. Puede emplearse recursividad por la izquierda. Ejemplo: <expresin>::= <expresin><operador><variable>|<variable> <operador> ::= '+'|'*' <variable> ::= 'x'|'y' La secuencia x+y*x+y se interpreta: ((x+y)*x)+y Con la derivacin:
exp
exp
op
var
exp
op
var
exp var
op +
var * y
x
Figura A1.15. Derivacin Se refleja la asociatividad, agrupando primero las hojas ms alejadas de la raz. Tambin puede emplearse recursividad por la derecha: Profesor Leopoldo Silva Bijit 20-01-2010
12
Ejemplo: <expresin> ::=<variable><operador><expresin>|<variable> <operador> ::='+'|'*' <variable> ::='x'|'y' La secuencia x+y*x+y se interpreta: x+(y*(x+y)) Con la derivacin:
exp
var
op
exp
var
op
exp
* x
var
op
exp var y
20-01-2010
Apndice 1. Descripcin formal de lenguajes A1.2.9. Precedencia de operadores en expresiones aritmtico lgicas.
13
El formalismo BNF, permite reflejar el orden o jerarqua de los operadores en una expresin aritmtica o lgica. Por ejemplo: Si se tiene que el operador * tiene precedencia (o mayor jerarqua) que el operador +; entonces la secuencia a+b*c se interpreta como: a+(b*c) Es decir, se realiza primero la multiplicacin, luego la adicin. El uso cuidadoso de las reglas de composicin de expresiones aritmticas y lgicas, permite escribirlas sin usar parntesis. Sin embargo, para mejorar la legibilidad en ciertos casos, suelen emplearse stos. Cuando se escriben expresiones complejas empleando parntesis, suele usarse la regla de contar los parntesis abiertos y los cerrados: deben estar balanceados. A1.2.10. Reglas para construir Expresiones. i) Las expresiones estn formadas por operadores y operandos. ii) Son frmulas 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 lnea en blanco. La columna a la derecha establece la asociatividad del operador. Operador Post-incremento Post-decremento subndice llamado a funcin seleccin de miembro apunta a miembro sizeof pre-incremento pre-decremento direccin de indireccin ms menos Profesor Leopoldo Silva Bijit Ejemplo notacin X++ X-X[Y] X(Y) X.Y X->Y sizeof X ++X --X &X *X +X -X 20-01-2010 Asociatividad desde izquierda hacia la derecha
14 NOT al bit NOT lgico casteo de tipo multiplicacin divisin Resto (modulo) suma resta Corrimiento a izquierda Corrimiento a derecha Menor que Menor o igual que Mayor que Mayor o igual que Igualdad No igualdad AND al bit OR exclusivo al bit OR inclusivo al bit AND lgico OR lgico Condicional Asignacin Multiplica y asigna Divide y asigna Resto y asigna Suma y asigna Resta y asigna Left shift assign right shift assign AND al bit y asigna OR ex al bit y asigna OR inclusive al bit asigna Profesor Leopoldo Silva Bijit ~X !X (declaracin)X X*Y X/Y X%Y X+Y XY X << Y X >> Y X<Y X <= Y X>Y X >= Y X == Y X != Y X&Y X^Y X|Y X && Y X || Y Z?X:Y X=Y X *= Y X /= Y X %= Y X += Y X -= Y X <<= Y X >>= Y X &= Y X ^= Y X |= Y
desde izquierda a derecha desde izquierda a derecha desde izquierda a derecha desde izquierda a derecha desde izquierda a derecha desde derecha a izquierda desde derecha a izquierda X=X*Y X=X/Y
20-01-2010
15
Figura A1.17. Reglas de precedencia y asociatividad. La precedencia se refiere al orden de evaluacin. Es decir, cules operadores reciben primero sus operandos. Ejemplos: La semntica 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 *p++ = -X->Y se interpreta como y = ((m * x) + b) se interpreta como (*(p++)) = (-(X->Y))
Para la expresin: a + b*c, aplicando la regla iii), la multiplicacin tiene precedencia sobre la suma, por lo tanto se ejecuta primero. Se interpreta: a + (b*c)
16
El resto del cdigo (33 smbolos, no grficos) est formado por caracteres de control, que se emplean para dar efectos de formato y para controlar la comunicacin de caracteres entre un equipo y otro. Se denominan de formato a: tabulacin horizontal y vertical, retorno de carro, alimentacin de nueva lnea y alimentacin de nuevo formulario. En el texto de un programa slo se permiten caracteres grficos y de formato. A1.3.2. Elementos Lxicos (tokens). En lenguajes de alto nivel es usual definir las siguientes unidades: i) Delimitadores ii) Identificadores iii) Nmeros (literal numrico) iv) Carcter v) Strings vi) Comentarios vii) Separadores El efecto de un programa depende solamente de la particular secuencia de elementos lxicos que lo forman. Existen reglas que determinan como puede generarse una frase a partir de los elementos lxicos. El conjunto de reglas se denomina gramtica del lenguaje. La gramtica 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 (semntica). A1.3.3. Separadores En algunos casos es necesario un separador explcito para separar elementos lxicos adyacentes. Se consideran separadores al espacio, a los caracteres con efecto de formato y el final de una lnea. Suele no definirse qu causa el fin de lnea, en algunos sistemas pueden ser uno o ms caracteres de control. Reglas para el uso de separadores: a) Se requiere a lo menos un separador entre un identificador o nmero y el identificador o nmero adyacente. b) Se permite uno o ms separadores entre dos elementos lxicos adyacentes. Tambin se acepta uno o ms separadores, antes del primer elemento lxico del programa y despus del ltimo. (Formato libre) Profesor Leopoldo Silva Bijit 20-01-2010
Apndice 1. Descripcin formal de lenguajes c) Los comentarios son considerados separadores. A1.3.4. Comentarios.
17
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 smbolos /* y */ se denomina comentario. Hay comentarios de fin de lnea, de lnea completa o de varias lneas. Alternativamente un comentario puede comenzar con el doble smbolo: //. A1.3.5. Carcter. Un carcter literal se forma encerrando uno de los 95 caracteres grficos (incluyendo el espacio) entre comillas simples. Ej: '*' '"' 'g' ' '
A1.3.6. Strings. ( tira, mensaje, texto, hileras, cadenas) Son secuencias de caracteres grficos entre comillas dobles. Para incluir una comilla doble, se la precede con \. O/Higgins. El largo del string es el nmero 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 operacin de su parte (prompts); o bien para hacer ms comprensible la salida (mensajes). A1.3.7. Nmeros. Se habla de literal numrico cuando se quiere enfatizar que se est haciendo referencia a cmo se escribe un nmero 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 cientfico y exponencial; llevan la letra E). <signo> ::= ['+' | '-'] <constante entera sin signo> ::= { dgito* } <constante entera> ::= <signo> <constante entera sin signo> <real punto fijo> ::= {dgito*} '.' {dgito} <exponente> ::= ('e'|'E')<constante entera> <real punto flotante> ::= {dgito*} ['.'{dgito*}] <exponente> <constante real> ::= <real punto fijo> | <real punto flotante> Profesor Leopoldo Silva Bijit 20-01-2010
nmero
+ dgito -
+ dgito E dgito
Figura A1.18. Sintaxis de nmero La representacin anterior no considera aspectos prcticos como mximo nmero representable, exactitud de representacin, etc., que dependen de la instalacin. La sintaxis de nmero se abstrae de estos detalles y slo explica cmo se escriben. A1.3.8. Identificadores. Se usan como nombres y tambin como palabras reservadas. Comienzan con una letra, que puede ser seguida de cualquier combinacin de letras y nmeros. El espacio no se acepta dentro de un identificador. Sirven para dar nombre a: constantes, tipos de datos, variables, procedimientos, funciones.
do
if
static
while
Estos smbolos tambin pueden ser clasificados como delimitadores. Profesor Leopoldo Silva Bijit 20-01-2010
19
Existen tambin identificadores estndares que el lenguaje predefine. Por ejemplo, el nombre de algunas funciones y constantes. Pueden usarse sin definirse previamente. Adems podran ser redefinidos dentro del programa; es decir, cambiar el significado estndar. 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 seleccin de datos estructurados. A1.3.10. Resumen.
<texto de un programa> ::= { { <separador> } <token> } <separador> ::= <espacio> | <fin de lnea> | <comentario>
| | |
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 nmero de secuencias es mayor que 10, escribir por lo menos 5 de ellas. a) {'A'|'B'}'C' nmero de secuencias>10 1) C 2) AC 3) BC 4) ABC 5) AAC b) 'A'{'BA'} nmero de secuencias >10 1) A 2) ABA 3) ABABA 4) ABABABA 5) ABABABABA c) ('A'|'B')('C'|'D') nmero de secuencias = 4 1) AC 2) AD 3) BC 4) BD d) 'A'['B']('C'|'D') nmero de secuencias = 4 1) AC 2) AD 3) ABC 4) ABD
C A B
A AB
A B
C D
C A B D
20-01-2010
21
ndice general.
APNDICE 1 .............................................................................................................................................. 1 DESCRIPCION FORMAL DE LENGUAJES ........................................................................................ 1 A1.1. LXICO, SINTAXIS, SEMNTICA. ..................................................................................................... 1 A1.2. METALENGUAJE BNF. .................................................................................................................... 2 A1.2.1. Produccin. ............................................................................................................................. 2 A1.2.2. Secuenciacin de smbolos. ..................................................................................................... 3
A1.2.2.1. Alternativa........................................................................................................................................ 3 A1.2.2.2. Concatenacin. ................................................................................................................................. 3 A1.2.2.3. Opcin. ............................................................................................................................................. 4 a) Opcin. Una o ninguna. .......................................................................................................................... 4 b) Repeticin. .............................................................................................................................................. 5 c) Repeticin 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. Descripcin formal de BNF. ................................................................................................... 7 A1.2.4. Ejemplos.................................................................................................................................. 8 A1.2.5. rboles de Derivacin. ........................................................................................................... 8 A1.2.6. Recursividad en Producciones. ............................................................................................... 9 A1.2.7. Asociatividad en Producciones. ............................................................................................ 11 A1.2.8. Ambigedad en Producciones. .............................................................................................. 12 A1.2.9. Precedencia de operadores en expresiones aritmtico lgicas. ........................................... 13 A1.2.10. Reglas para construir Expresiones. .................................................................................... 13 A1.3. SMBOLOS DEL LENGUAJE. LXICO. .............................................................................................. 15 A1.3.1. Conjuntos de Caracteres. ...................................................................................................... 15 A1.3.2. Elementos Lxicos (tokens). .................................................................................................. 16 A1.3.3. Separadores .......................................................................................................................... 16 A1.3.4. Comentarios. ......................................................................................................................... 17 A1.3.5. Carcter. ............................................................................................................................... 17 A1.3.6. Strings. ( tira, mensaje, texto, hileras, cadenas) ................................................................... 17 A1.3.7. Nmeros. ............................................................................................................................... 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 parntesis como se evalan las expresiones:..................................................... 19 A1.3.11.2. Escribir todas las secuencias que cumplen la sintaxis dada por: .................................................. 20
20-01-2010
22
ndice de figuras.
FIGURA A1.1. PRODUCCIN ..........................................................................................................................2 FIGURA A1.2. ALTERNATIVA ........................................................................................................................3 FIGURA A1.3. CONCATENACIN....................................................................................................................4 FIGURA A1.4. OPCIN. ..................................................................................................................................4 FIGURA A1.5. SINTAXIS DE SIGNO.................................................................................................................5 FIGURA A1.6. REPETICIN ............................................................................................................................5 FIGURA A1.7. REPETICIN DE A LO MENOS UNA VEZ.....................................................................................6 FIGURA A1.8. SECUENCIA SIGNO ENTERO .....................................................................................................8 FIGURA A1.9. DGITO ENTERO.......................................................................................................................8 FIGURA A1.10. ENTERO CON SIGNO ..............................................................................................................9 FIGURA A1.11. REPETICIN (I) ......................................................................................................................9 FIGURA A1.12. REPETICIN RECURSIVA (II) ................................................................................................10 FIGURA A1.13. PRODUCCIN RECURSIVA....................................................................................................10 FIGURA A1.14. SIMPLIFICACIN A NO RECURSIVA. .....................................................................................11 FIGURA A1.15. DERIVACIN .......................................................................................................................11 FIGURA A1.16. DERIVACIN .......................................................................................................................12 FIGURA A1.17. REGLAS DE PRECEDENCIA Y ASOCIATIVIDAD. .....................................................................15 FIGURA A1.18. SINTAXIS DE NMERO .........................................................................................................18 FIGURA A1.19. SINTAXIS DE IDENTIFICADOR ..............................................................................................18
20-01-2010