Académique Documents
Professionnel Documents
Culture Documents
Sintxis
Conjunto de reglas que determinan si las sentencias de un programa estn bien formadas o no.
La sintaxis se define formalmente usando una gramtica de contexto libre. Una gramtica consiste de las reglas que permiten construcciones sintcticamente correctas en un lenguaje. Tres notaciones son usadas comnmente para describir la sintaxis:
TIPOS DE GRAMATICAS
Tipos de gramticas Las gramticas ms sencillas son las gramticas regulares, debido a que no presentan anomalas de ningn tipo. Desafortunadamente este tipo de gramticas no permiten expresar todos los lenguajes posibles y en especial los humanos por lo que se necesitan otros tipos de gramticas. Las ms utilizadas en informticas son las libres del contexto. Gramticas Regulares Son las que se forman a travs de Autmatas Finitos Deterministas y Expresiones regulares. No presentan ambiguedades.
GRAMATICAS
Gramticas Son un formalismo matemtico que permite decidir si una cadena pertenece a un lenguaje dado. Se define como la cuarteta G= (N, , S, P), en donde N es el conjunto de smbolos terminales, es conjunto de smbolos terminales, S es el smbolo inicial (S pertenece a N) y P es un cojunto de reglas de produccin. Gramticas Los smbolos no terminales (N) son aquellos que pueden seguir derivando en otros; mientras que los terminales el proceso finaliza all.
Un smbolo terminal seguido de una variable Slo un smbolo terminal La cadena vaca.
Ejemplo: A aB | a |
Gramticas Libres de Contexto, GLC, (tipo 2 o G2): el conjunto
Ejemplo: S aSb | ab |
Diagramas Sintcticos
Constituyen un mtodo de descripcin de lenguajes, equivalente a la BNF, originalmente para definir sintxis de Pascal.
:=
Exp
Sentencia if:
If
Exp B
then
Sentencia while:
While
Exp B
do
Sentencia
Arbol de Parseo
Representacin grfica de la estructura parseada
Muestra la secuencia de derivaciones efectuada Nodos internos son no-terminales Hojas son terminales Cada nodo padre es el lado izquierdo (LHS) y los hijos son el lado derecho (RHS) de una produccin
Arbol de Parseo
left_paren_op
num(123.3) plus_op num(23.6) right_paren_op
( )
123.3
23.6
+
Universidad Galileo
Oscar Bonilla
10
Este es el parse tree para el string The dog eats bones (gramtica #1):
<sentence>
<subject>
<predicate>
<article>
<noun>
<verb>
<object>
The
dog
eats
bones
Aqu muestro qu pasa se se intenta construir un parse tree para el string -.3 (gramtica #2):
<real>
<integer>
<fraction>
<sign>
<digit-sequence>
<digit-sequence>
PROBLEMA!
<digit>
num
num
num
num
num
Expresiones
Cuando se define la gramtica de un lenguaje de programacin es necesario tomar en consideracin especial la gramtica de las expresiones. Una expresin consiste de operadores aplicados a operando para obtener un resultado. Dependiendo de la cantidad de operandos, un operador puede clasificarse como unitario o binario.
Notaciones para Expresiones La mayora de los lenguajes de programacin utilizan la notacin infija
(infix notation) para las expresiones. En la notacin infija el operador se coloca entremedio de los operandos Ejemplo: a + b Otra notacin usada es la notacin prefija (prefix notation). En esta notacin el operador se coloca antes de los operandos. Ejemplos: (1) + a b; (2) ++ a Una ltima notacin es la notacin postfija (postfix notation). En esta notacin el operador se coloca despus de los operandos. Ejemplos: (1) a b +; (2) a ++
Ejemplo: Escriba los equivalentes en notacin prefija y posfija para la expresin infija a + b * c: Prefija: + a * b c Posfija: a b c * + Ejemplo: Escriba los equivalentes en notacin prefija y posfija para la expresin infija (a + b) * c: Prefija: * + a b c Posfija: a b + c *
La asociatividad de operadores es usada cuando se evalan operadores en el mismo nivel de jerarqua. La asociatividad indica si los operadores de igual jerarqua se evalan de izquierda a derecha o de derecha a izquierda. Jerarqua de los operadores en C y lenguajes derivados:
Operador ++, -++, --, !, +, Asociatividad Der. A Izq. Der. A Izq. Comentarios ++, -- (posfijos) ++, -- (prefijos) ! (not) +, - (pos., neg.)
Izq. A Der.
Izq. A Der. Izq. A Der. Izq. A Der. Izq. A Der. Der. A Izq. Der. A Izq.
+, - (suma, resta)
Fjese que la gramtica presentada toma en consideracin la asociatividad. Por ejemplo el parse tree para a + b + c es:
<expression> + <expression> + <term>
<expression>
<term>
<factor>
<term>
<factor>
<factor>
<identifier>
E E
E *
id E * E E + E id
id
id
id
id
25/08/2013
23
25/08/2013
24
Pila
Smbolos gramaticales que se van utilizando
Cadena de Salida
Cadena de Salida posterior al anlisis
25/08/2013
25
LL(1)
25/08/2013
26
25/08/2013
27
25/08/2013
28
Si X es terminal
Si X produccin Si X es No Terminal y X YZW
25/08/2013
29
Si A B Produccin
25/08/2013
30
25/08/2013
31
Pila
Entrada
25/08/2013
32
Ejemplo LL(1)
Partiendo de la Gramtica:
E E T T F T E + T E | F T x F T | num | ( E )
25/08/2013
33
Ejemplo LL(1)
2. Clculo del First / Primero
Smbolo No Terminal
First
E
E T T F
25/08/2013
num, (
+, num, ( x, Num, (
E T E E + T E | T F T T x F T | F num | ( E )
34
Ejemplo LL(1)
2. Clculo del Follow / Siguiente
Smbolo No Terminal
Follow
E
E T T F
25/08/2013
$,)
$,) +, $, ) + ,$, ) x, +, $, )
E T E E + T E | T F T T x F T | F num | ( E )
35
Ejemplo LL(1)
3. Construir la tabla de Anlisis Sintctico
Smbolo No Terminal
First E
First
First E T E
num, (
num + x (
ET E
ET E
25/08/2013
36
Ejemplo LL(1)
3. Construir la tabla de Anlisis Sintctico
Smbolo No Terminal
First E
First
+,
num +
E + T E
First E + T E | x (
ET E
E E
E E
ET E
25/08/2013
37
Ejemplo LL(1)
3. Construir la tabla de Anlisis Sintctico
num E E T T F
ET E E + T E TF T T TxF T TF T T T
(
ET E
)
E
$
E
F num
F( E )
25/08/2013
38
25/08/2013
Se busca el smbolo terminal y el no terminal, remplazndolo por la E produccin que le corresponda. Colocndola de izquierda a derecha
num
ET E
40
Entrada num + num x num $ num + num x num $ num + num x num $ num + num x num $ + num x num $ + num x num $ num x num $ ...
42
Entrada
Se acepta la cadena si se logra eliminar de la pila y la entrada, todos los smbolos. De lo contrario no se acepta la cadena.
... num x num $ num x num $ x num $ num $ num $ $ $ $ $ $
43
ANLISIS ASCENDENTE
Estilo general: Anlisis sintctico por desplazamiento y reduccin
Por precedencia de operadores (gramticas muy especficas) LR (generadores automticos de AS)
concuerde con el lado derecho de un regla de produccin por el smbolo no terminal del lado izquierdo de esa regla
ASIDEROS O MANGOS
concuerda con el lado derecho de una produccin y cuya reduccin al no terminal del lado izquierdo de la regla es un paso de una derivacin por la derecha
Ejemplo
S aABe A Abc Ab Bd
asidero posicin 2 (regla A b) asidero posicin 2 (regla A Abc) asidero posicin 3 (regla B d) asidero posicin 1 (regla S aABe)
ASIDEROS O MANGOS
concuerda con el lado derecho de una produccin A no es un asidero si la reduccin por esa regla genera una cadena no reducible al smbolo inicial
Ejemplo
S aABe A Abc Ab Bd
aAbcd e
aunque b es la subcadena situada ms a la izquierda que concuerda con una parte derecha (regla A b) no es un asidero
a A A c d e No se puede reducir a S
Ejemplo
Formas de Frase Derecha id1 + id2 * id3 E + id2 * id3 E + E * id3 E+E*E E+E E Asidero id1 id2 id3 E*E E+E Regla de Reduccin E id E id E id E E*E E E+E
(w$)
cima de la pila Reducir: (En este momento el extremo derecho del asidero est en la cima de la pila) Localizar el extremo izquierdo del asidero dentro de la pila y decidir el no terminal con el que se debe sustituir el asidero. Aceptar: Anunciar el fin con xito del anlisis Error: Llamar a la rutina de recuperacin de errores
entrada
accin
id1 + id2 * id3 $ desplazar + id2 * id3 $ reducir por E id + id2 * id3 $ desplazar id2 * id3 $ desplazar * id 3 $ reducir por E id * id 3 $ desplazar id3 $ desplazar $ reducir por E id $ reducir por E E*E $ reducir por E E+E $ aceptar
TABLA DE SIMBOLOS
Tambin se la llama tabla de nombres o tabla de identificadores y tiene dos funciones principales: - Efectuar chequeos lxicos, sintcticos y semnticos. -Generacin de cdigo. Permanece slo en tiempo de compilacin, no de ejecucin, excepto en aquellos casos en que se compila con opciones de depuracin. La tabla almacena la informacin que en cada momento se necesita sobre las variables del programa, informacin tal como: nombre, tipo, direccin de localizacin, tamao, etc.
x : = y + 1 IF a THEN y : = z.
RECUPERACION DE ERRORES. Estrategias de recuperacin de errores: Modo Pnico Nivel de Frase Producciones de error Correccin global
Esta tcnica utiliza una correccin de caracteres adyacentes, ya sea por insercin, eliminacin o intercambio. Esta tcnica permite sustituir , por ;, etc. Son traductores que corrigen errores. Desafortunadamente para muchos casos no aplican por lo que no se utilizan demasiados.
PRODUCCIONES DE ERROR
Se pueden generar gramticas para generar producciones de error y as de esta forma seguir con el proceso. La dificultad radica en el sentido de encontrar esas reglas gramaticales para generar error. En algunos casos sera inclusiva ms extensa que la gramtica del propio lenguaje. for(i<3, a<10; i++)