Anda di halaman 1dari 3

Sintaxis de los Lenguajes de Programacin Metalenguaje B.N.F.

(Forma de Backus-Naur)
 smbolos no-terminales (uno de ellos distinguido)
Metalenguaje B.N.F. para describir los constructores sintcticos del LP sujeto
Notacin para especificar una gramtica generativa: define el
 smbolos terminales
conjunto de cadenas que son programas del LP sujeto, junto
con su estructura sintctica para describir los smbolos (texto) del LP sujeto
Permite describir lenguajes con una sintaxis independiente  reglas de produccin
del contexto una regla con (alternativas) para cada smb. no-terminal
Gramticas de atributos cada alternativa: cadena de terminales y/o no-terminales
Extensin de B.N.F. mediante atributos y reglas de evaluacin Ejemplos:
de dichos atributos. <sent-cond> ::= if <comp> then <serie-instr> fi |
Permite describir lenguajes con hechos sintcticos if <comp> then <serie-instr> else <serie-instr> fi
dependientes del contexto <programa> ::= <serie-declar> <serie-instr>

FLP 2009/10 - Marisa Navarro 1 FLP 2009/10 - Marisa Navarro 2

Se permite recursin en las reglas de produccin Gramtica ambigua:


Para una cadena terminal hay ms de un rbol sintctico
a izquierdas: <serie-instr> ::= <instr> | <serie-instr> ;<instr>
Ejemplo:
a derechas: <serie-instr> ::= <instr> | <instr> ; <serie-instr>
<expr> ::= x | y | z | (<expr>) | <expr> + <expr> | <expr> * <expr>
Estructura sintctica => rbol sintctico (recursin a izquierda y derecha para un mismo smbolo no-term.)
Dos rboles sintcticos para la cadena x + y * z :
Ejemplo (parte de un rbol):
<expr> <expr>
<sent-cond>

<expr> + <expr> <expr> * <expr>


if <comp> then <serie-instr> fi

x <expr> * <expr> <expr> + <expr> z


<serie-instr> ; <instr>
y z x y
FLP 2009/10 - Marisa Navarro 3 FLP 2009/10 - Marisa Navarro 4
Evitar la doble recursividad: Caractersticas del lenguaje Pam:
introduciendo nuevos smbolos no-terminales (dejando * y + aritmtica entera
al mismo nivel) sentencias condicionales estructuradas y bucles
<expr> ::= <elem> | <expr> + <elem> | <expr> * <elem> lectura, escritura, asignacin
<elem> ::= x | y | z | (<expr>)
 misma prioridad para * y + , y asociatividad a izquierdas Descripcin sintctica completa de Pam:
dada mediante la gramtica BNF de la tabla 2.1.
introduciendo nuevos smbolos no-terminales (dejando * y +
a distinto nivel)
Asumiremos en cada programa escrito en Pam:
<expr> ::= <term> | <expr> + <term>
dos ocurrencias de un mismo identificador denotan la
<term> ::= <elem> | <term> * <elem> misma variable
<elem> ::= x | y | z | (<expr>) una variable tendr valor indefinido hasta que se le asigne
 prioridad de * respecto de + , y asociatividad a izquierdas algn valor
para ambas operaciones.
FLP 2009/10 - Marisa Navarro 5 FLP 2009/10 - Marisa Navarro 6

Ejemplo de programa en Pam: Caractersticas del lenguaje Eva:


Es sintcticamente correcto? identificadores de distintos tipos (char, string, proc)
read n; estructura de datos compuesta (string) con operaciones
to n do asociadas (head, tail, cons)
read x; declaraciones
if x>0 then estructura de bloques
y:=1; z:=1; procedimientos (recursivos), paso de parmetros (por valor)
while z<>x do
z:=z+1; Asumiremos en cada programa escrito en Eva:
y:=y*z; se asociar un valor inicial por defecto (cadena vaca) a cada
end; variable de tipo string en el momento de su declaracin;
mientras que las variables de tipo char quedan indefinidas
write y
no hay conversiones de tipo (string char)
fi
end
FLP 2009/10 - Marisa Navarro 7 FLP 2009/10 - Marisa Navarro 8
begin EJEMPLO DE PROGRAMA en Eva
Descripcin sintctica completa de Eva: char c
Gramtica BNF de la tabla 2.2. + proc printword (string word)= (
neq tail word,: call printword (tail word)
CONDICIONES de CONTEXTO: output head word )
1. Los <name> distintos dentro de cada <declaration sequence> en cada proc control =
<block> y dentro de cada <parameter list> begin string w
2. Cada <name> contenido en una <statement> S tiene que haber sido proc readword = ( cons c,w
declarado en un <block> que contenga a S o bien pertenecer a una input c
<parameter list> de un proc que contenga a S.
neq c,space:call readword )
Si hay ms de uno  el ms interno call skipblaks
3. En input <name>  <name> debe ser de tipo char call readword
4. En call <name> (<expression list>)  <name> debe ser de tipo proc neq w,zz : ( call control
y el nmero y tipo de los argumentos de la llamada deben coincidir con output space
lo declarado para <name> call printword (w))
5. En cons <char expression>,<name>  <name> debe ser de tipo string end
6. <name> debe ser de tipo char en <char expression> y de tipo string en proc skipblancs = ( input c
<string expression> eq c, space: call skipblanks )
call control
FLP 2009/10 - Marisa Navarro 9 end FLP 2009/10 - Marisa Navarro 10

Variaciones de BNF
herramientas notacionales aadidas para
reducir el tamao de la gramtica
incrementar la claridad
no suponen mayor poder de expresin

Ejemplos:
[....] secuencia opcional
<sent-cond> ::= if <comp> then <serie-instr> [else <serie-instr>] fi

{...} repeticin de 0 ms veces


<serie-instr> ::= <instr> {; <instr> }

Gramticas de Pam y Eva con BNF extendido  tablas 2.3. y 2.4.

FLP 2009/10 - Marisa Navarro 11