Вы находитесь на странице: 1из 15

Lenguajes y

Compiladores
Sintaxis
Lenguajes de Programacin 2

Un Lenguaje de Programacin est formado por:

Sintaxis: Como se escribe, habla del lenguaje.


(Ej. Integer z, x, y ; es la manera de definir enteros)

Semntica: Qu significa, es darle un resultado a lo que


el programador desea escribir. Qu resultado arroja la
instruccin? Qu significa?. (Ej. Begin. Indica el comienzo
de un bloque)

Pragmtica: Cuestiones de construccin, se refiere a las


caractersticas del compilador y de los aspectos
prcticos. Rpido o lento?, A qu versin pertenece?
Ocupa ms espacio en memoria?
Sintaxis 3

Sintaxis: responde a la pregunta Cmo se escriben los


elementos, las sentencias, etc. de un lenguaje de
programacin?
La sintaxis de un LP se describe a travs de gramticas libres
de contexto.
Las gramticas se conforman de cuatro elementos
Elementos
Elementos No Terminales
Terminales

( ENT , ET , S , R )
Reglas

Smbolo ENT
Distinguido ENT ET
ENT
Sintaxis 4

Los elementos no terminales se definen utilizando los


elementos terminales a travs de reglas gramaticales

Los elementos terminales no se definen.

Se define un elemento distinguido o Start symbol que


pertenece al conjunto de no terminales.

Las reglas son declarativas (no importa el orden en que


fueron definidas) y pueden ser recursivas.
Sintaxis 5
Con Animacin

<programa> <bloque>
( ENT , ET , S , R )
<bloque> <sent> regla recursiva
ENT = {<programa> , <bloque>
<bloque> <bloque> <sent> <sent>, }
ET = { WRITE, CTE_S}
<sent> WRITE CTE_S
S = {<programa>}

R
WRITE y CTE_S son tokens definidos en el Analizador Lxico
Sintaxis 6

Notacin

Gramticas BNF
ENT Letras Entre < >
Maysculas
ET Letras Directamente
Minsculas
S - -
R <> ::=
Sintaxis 7
Con Animacin

Flex Bison

A,B,C....Z Variables Sentencias


0,1,2....9 Expresiones Operadores REGLAS Procedimientos
Regulares SINTACTICAS
( [ { ) ].... Constantes Mtodos
*/-+ P.Reservadas
Comentarios

ALFABETO SIMBOLOS (TOKENS)


TERMINALES NO TERMINALES
(terminales para los reglas
sintcticas)
Estructurar de lo ms
Sintaxis general a lo particular 8
Con Animacin
<programa> ::= <sentencia>
<programa> ::= <programa> <sentencia>
<sentencia> ::= <asignacin>
<sentencia> ::= <iteracin>
<sentencia> ::= <seleccin>
<asignacin>::= id := <expresin>
<seleccin>::= if <condicin> then <programa> else <programa>
<seleccin>::= if <condicin> then <programa>
<iteracin>::= while <condicin> begin <programa> end
<condicin>::= <comparacin>
<condicin>::= <condicin> and <comparacin>
<condicin>::= <condicin> or <comparacin>
<comparacin>::= <expresin> <comparador> <expresin>
<comparador>::= >= | <= | < | > | = =
<expresin> ::= <expresin> + <termino> <expresin> - <termino>
<termino>
<termino> ::= <termino> * <factor> <termino> / <factor> <factor>
<factor> ::= ( <expresin> ) id | cte
rbol de parsing o rbol de
9
derivacin
Permite mostrar grficamente cmo se puede derivar cualquier
sentencia o elemento lxico de un lenguaje a partir del smbolo
distinguido de una gramtica que represente a dicho lenguaje.
Un rbol es un grafo dirigido a cclico con las siguientes propiedades:

El nodo raz est rotulado con el smbolo distinguido de la gramtica


Cada hoja corresponde a un smbolo terminal o un smbolo no terminal
Cada nodo interior corresponde a un smbolo no terminal

Nodo Raz (START)

Nodos Interiores (No Terminales)

Nodo Raz (Terminales)

Lectura de Izquierda a Derecha de Nodos Raz (Terminales)


rbol de parsing o rbol de
10
derivacin

Para cada sentencia o elemento lxico de un


lenguaje generado por una gramtica es posible
construir (al menos) un rbol de parsing, en el
cual cada hoja tiene como rtulo uno de los
smbolos de la sentencia.
rbol de parsing o rbol de
11
derivacin Con Animacin

Sentencia A := A + B <sent_asig>

<sent_asig> ::= <var> := <expresin> <var> := <expresion>


<expresin> ::= <expresin> + <trmino>
<expresin> ::= <expresin> - <trmino> A <expresion> + <termino>
<expresin> ::= <termino>
<trmino> ::= <trmino> * <factor>
<trmino> ::= <trmino> / <factor>
<trmino> ::= <factor>
<factor> ::= ( <expresin> ) <var> | <num>
<var> ::= A B C D ... Z
<num> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 B
Ambigedad Quiero
Reconocer
12
id + id * cte
<expresion> ::= <expresion> + <expresion> Con Animacin

<expresion> ::= <expresion> - <expresion>


<expresion> ::= <expresion>*<expresion>
<expresion> ::= <expresion>/<expresion>
<expresion> ::= cte
<expresion> ::= id
<expresion> <expresion>

<expresion> * <expresion> <expresion> + <expresion>

+ <expresion>
id
<expresion> cte * <expresion>
<expresion>

id
id
id cte

(a + b) * 2 = 22 a + (b * 2) = 18
suponiendo a=4 b=7
Ambigedad
13

Una gramtica es ambigua si existen dos


rboles de derivacin para la misma
sentencia, hilera o programa.

SOLUCIN
Cambiar las reglas de la gramtica
Asociatividad Quiero Hacer
12 - 8 - 4 14
Con Animacin
Gramtica 1 Gramtica 2
<expresion> ::= <expresion> + <termino> <expresion> ::= <termino> + <expresion>
<expresion> ::= <expresion> - <termino> <expresion> ::= <termino> - <expresion>
<expresion> ::= <expresion>*<termino> <expresion> ::= <termino>
<expresion> ::= <expresion>/<termino> <termino> ::= <factor> * <termino>
<expresion> ::= <termino> <termino> ::= <factor> / <termino>
<termino> ::= cte <termino> ::= <factor>
<factor> ::= cte
<expresion> <expresion>

<expresion> - <termino> <termino> - <expresion>

- <termino> <factor>
<expresion> cte3 <termino> - <expresion>
4
<termino> <factor> <termino>
cte1
cte2
8 12 <factor>
cte1 cte2
12
8
cte3
12 8 4 = 0 12 (8 4) = 8 4
Sintaxis 15
Con Animacin

Preguntas?
Hacer: Prctica Sintaxis BNF

Вам также может понравиться