Sintáxis

Anuncio
Agenda
• Introducción
• El problema general de describir la
sintaxis
• Métodos Formales para describir sintaxis
• Gramáticas del atributo
• Describiendo el significado de los
programas: Semántica dinámica
Copyright © 2006 Addison-Wesley. All rights reserved.
1-1
Introduction
• Sintáxis: se refiere a la forma o
estructura de las expresiones, sentencias
y programas
• Semántica: es el significado de las
expresiones, sentencias y programas
• La sintáxis y la semántica proveen la
definición de un lenguaje
– Usuarios de la definición de un lenguaje
• Diseñadores de otros lenguajes
• implementadores
• programadores (los usuarios del lengaueje)
Copyright © 2006 Addison-Wesley. All rights reserved.
1-2
El problema general de describir la
sintaxis: Terminología
• Una sentencia es una cadena de
caracteres en algún alfabeto
• Un lenguaje es un conjunto de sentencias
• Un lexema es la unidad sintáctica más
pequeña de un lenguaje (e.g., *, sum,
begin)
• Un token es una categoría de lexemas
(e.g., identifier)
Copyright © 2006 Addison-Wesley. All rights reserved.
1-3
Definición formal de lenguajes
• Reconocedor
– Un dispositivo para reconocer lee cadenas de
entrada de un lenguaje y decide si la cadena
de entrada pertenece al lenguaje
– Ejemplo: El analizador sintáctico
• Generador
– Un dispositivo que genera sentencias de un
lenguaje
– Uno puede determinar si la sintaxis de una
sentencia en particular es correcta mediante
comparándola con la estructura del generador
Copyright © 2006 Addison-Wesley. All rights reserved.
1-4
Métodos formales para describir
sintaxis
• Backus-Naur Form y las gramáticas
libres del contexto
– Es el método más ampliamente conocido
para describir la sintaxis de un lenguaje de
programación
• BNF extendido
– Mejor la legibilidad y facilidad de escribir
BNFs
• Gramáticas y reconocedores
Copyright © 2006 Addison-Wesley. All rights reserved.
1-5
BNF y las gramáticas libres del
contexto
• Gramáticas libres del contexto
– Desarrollado por Noam Chomsky in a
medidados de los 1950s
– Gnerador de lenguaje, describen la sitáxis de
lenguajes naturales
– Definen una clase de lenguajes llamados
lenguajes libres del contexto
Copyright © 2006 Addison-Wesley. All rights reserved.
1-6
Backus-Naur Form (BNF)
• Backus-Naur Form (1959)
– Invntado por John Backus para describir
Algol 58
– BNF es equivalente a las gramáticas libres
del contexto
– BNF es un metalenguaje usado para
describir otro lenguaje
– En BNF, las abstracciones son usadas para
representar clases de estructuras
sintácticas – actúan como variables
sintácticas (también llamadas símbolos no
terminales)
Copyright © 2006 Addison-Wesley. All rights reserved.
1-7
BNF: Fundamentos
• No-terminales: abstraciones BNF
• Terminales: lexemas y tokens
• Gramaticas: una colección de reglas
– Ejemplos de reglas BNF:
<ident_list> → identifier | identifier, <ident_list>
<if_stmt> → if <logic_expr> then <stmt>
Copyright © 2006 Addison-Wesley. All rights reserved.
1-8
BNF: Reglas
• Una regla tiene una parte izquierda
(LHS) y una parte derecha (RHS), y
consiste en símbolos terminales y noterminales
• Una gramática es una colección finita
de reglas no vacías
• Una abstracción (o símbolo no-terminal)
puede tener más de una RHS
<stmt> → <single_stmt>
| begin <stmt_list> end
Copyright © 2006 Addison-Wesley. All rights reserved.
1-9
Describiendo listas
• Las listas sintácticas son descritas
usando recursión
<ident_list> → ident
| ident, <ident_list>
• Una derivación es una aplicación
repetida de reglas, comenzando con el
símbolo inicial y terminado con una
sentencia (todos ímbolos terminales)
Copyright © 2006 Addison-Wesley. All rights reserved.
1-10
Una gramática de ejemplo
<program> → <stmts>
<stmts> → <stmt> | <stmt> ; <stmts>
<stmt> → <var> = <expr>
<var> → a | b | c | d
<expr> → <term> + <term> | <term> - <term>
<term> → <var> | const
Copyright © 2006 Addison-Wesley. All rights reserved.
1-11
Un ejemplo de derivación
<program> => <stmts> => <stmt>
=> <var> = <expr> => a =<expr>
=> a = <term> + <term>
=> a = <var> + <term>
=> a = b + <term>
=> a = b + const
Copyright © 2006 Addison-Wesley. All rights reserved.
1-12
Derivación
• Cada cadena de símbolos es una forma
sentencial
• Una sentencia es una forma sentencial
que solo tiene símbolos terminales
• Una derivación izquierda es aquella en la
que el símbolo terminal más a la izquiera
de cada forma sentencial es expandido
• Una derivación puede ser izquierda o
derecha
Copyright © 2006 Addison-Wesley. All rights reserved.
1-13
Árbol analizador sintácto (parse
tree)
• Representación jerárquica de una
derivación
<program>
<stmts>
<stmt>
<var> =<expr>
a <term>+<term>
<var>
const
b
Copyright © 2006 Addison-Wesley. All rights reserved.
1-14
Ambiguedad en gramáticas
• Una gramática es ambigua si y solo si
genera una forma sentencial que tiene
dos o más árboles analizadores
sintácticos distintos
Copyright © 2006 Addison-Wesley. All rights reserved.
1-15
Una expresión gramatical ambigua
<expr> → <expr> <op> <expr>
<op> → / | <expr>
<expr>
<op>
<expr>
- const /
Copyright © 2006 Addison-Wesley. All rights reserved.
const
<expr>
<expr> <op>
<expr>
const
|
<expr>
<op>
<expr>
<expr>
<op>
<expr>
const
const -
const / const
1-16
Una expresión gramatica no-ambigua
• Si usamos un arbol analizador sintáctico
para indicar niveles de precedencia de los
operadoers, no podemos tener
ambiguedad
<expr> → <expr> - <term> | <term>
<term> → <term> / const| const
<expr>
<expr> -
<term>
<term> <term>/ const
const
Copyright © 2006 Addison-Wesley. All rights reserved.
const
1-17
Asociatividad de operadores
• Asociatividad de operadores pueden también ser
indicado por una gramática
<expr> -> <expr> + <expr> |
<expr> -> <expr> + const |
const
const
(ambiguous)
(unambiguous)
<expr>
<expr>
<expr>
+
const
<expr> + const
const
Copyright © 2006 Addison-Wesley. All rights reserved.
1-18
BNF extendido
• Partes opcionales se encierran entre
corchetes [ ]
<proc_call> -> ident [(<expr_list>)]
• Partes alternativas de un RHS se deben
colocar entre paréntesis y se deben
separar por barras verticales
<term> → <term> (+|-) const
• Repeticiones (0 o más) son colocadas
dentro de llaves { }
<ident> → letter {letter|digit}
Copyright © 2006 Addison-Wesley. All rights reserved.
1-19
BNF y EBNF
• BNF
<expr> → <expr> + <term>
| <expr> - <term>
| <term>
<term> → <term> * <factor>
| <term> / <factor>
| <factor>
• EBNF
<expr> → <term> {(+ | -) <term>}
<term> → <factor> {(* | /) <factor>}
Copyright © 2006 Addison-Wesley. All rights reserved.
1-20
Attribute Grammars
• Gramáticas independientes del contexto
(CFGs) no pueden describir toda la
sintáxis de un lenguaje de
programación
• Adicionalmente a las CFGs se de lleve
llevar alguna información semántica
através de los árboles de análisis
sintáctico
• Valores primarios de attribute
grammars (AGs)
– Especificación de la semántica estática
Copyright
2006 Addison-Wesley.
reserved.
– ©Diseño
deAll rights
compiladores
(verificador de la
1-21
Attribute Grammars : Definición
• Una attribute grammar es una gramática
independiente del contexto G = (S, N, T,
P) con las siguientes condiciones:
– Para cada símbolo gramatical x existe un
conjunto A(x) de valores de atributos
– Cada regla tiene un conjunto de funciones que
define cierto atributo no-terminales en la regla
– Cada regla tiene un conjunto (poblemente
vacío) de predicados para verificar la
consistencia de la gramática
Copyright © 2006 Addison-Wesley. All rights reserved.
1-22
Attribute Grammars: Definición
• Sea X0 → X1 ... Xn una regla
• Funciones de la forma S(X0) = f(A(X1), ... ,
A(Xn)) definen atributos sintetizados
• Funciones de la forma I(Xj) = f(A(X0), ... ,
A(Xn)), for i <= j <= n, definen atributos
heredados
• Inicialmente, hay atributos intrínsecos en
las hojas
Copyright © 2006 Addison-Wesley. All rights reserved.
1-23
Attribute Grammars: Un ejemplo
• Sintáxis
<assign> -> <var> = <expr>
<expr> -> <var> + <var> | <var>
<var> A | B | C
• actual_type: sintetizado para <var>
y <expr>
• expected_type: heredado para
<expr>
Copyright © 2006 Addison-Wesley. All rights reserved.
1-24
Attribute Grammar (continución)
• Regla sintáctica: <expr> → <var>[1] +
<var>[2]
Reglas semánticas:
<expr>.actual_type ← <var>[1].actual_type
predicado:
<var>[1].actual_type == <var>[2].actual_type
<expr>.expected_type == <expr>.actual_type
• Regla sintáctica: <var> → id
Regla semántica:
<var>.actual_type ← lookup (<var>.string)
Copyright © 2006 Addison-Wesley. All rights reserved.
1-25
Attribute Grammars (continuación)
• ¿Cómo son computados los attribute
values?
– Si todos los atributos fueran heredados, el
árbol podría ser decorado siguiendo un órden
top-down.
– Si todos los atributos fueran sintetizados, el
árbol podría ser decorado siguiendo un órden
bottom-up.
– En muchos casos, ambos tipos de atributos
son usados, y alguna combinación de topdown y bottom-up debe ser usado.
Copyright © 2006 Addison-Wesley. All rights reserved.
1-26
Attribute Grammars (continuación)
<expr>.expected_type ← heredado del
padre
<var>[1].actual_type ← lookup (A)
<var>[2].actual_type ← lookup (B)
<var>[1].actual_type =?
<var>[2].actual_type
<expr>.actual_type ←
<var>[1].actual_type
<expr>.actual_type =?
<expr>.expected_type
Copyright © 2006 Addison-Wesley. All rights reserved.
1-27
Semántica
• No existe una notación o formalismo
ampliamente aceptado para describir la
semántica
• Semántica operacional
– Describe el significado de un programa
mediante la ejecución de sus sentencias en
una máquina ya sea simulada o la actual. El
cambio en el estado de la máquina (memoria,
registros, etc) define el significado de la
sentencia
Copyright © 2006 Addison-Wesley. All rights reserved.
1-28
Semántica operacional
• Para usar semántica operacional para un
lenguaje de alto nivel, se necesita una
máquina virtual
• Un interprete en hardware sería muy caro
• Un interprete en software también tiene
sus problemas
– Las características detalladas de la
computadora crearía acciones difíciles de
entender
– Dicha definición semántica la haría
dependiente-de-la-máquina
Copyright © 2006 Addison-Wesley. All rights reserved.
1-29
Semántica operacional
(continuación)
• Una mejor alternativa: Una simulación de
una computadora completa
• El proceso:
– Construir un traductor (traduce código fuente
al código máquina de una computadora ideal)
– Construir un simulador para la computadora
ideal
• Evaluación de la semántica operacional:
– Buena si se usa informalmente (manuales del
lenguaje, etcétera)
– Extremadamente compleja si se usa
formalmente (e.g., VDL), fue inicialmente
Copyright © 2006 Addison-Wesley. All rights reserved.
1-30
Semántica axiomática
• Basada en lógica formal (cálculo de
predicados)
• Propósito original: verificación formal de
un programa
• Axiomas o reglas de inferencias son
definidas para cada sentencia tipo en el
lenguaje (para permitir transformación de
expresiones a otras expresiones)
• Las expresiones son llamadas
afirmaciones
Copyright © 2006 Addison-Wesley. All rights reserved.
1-31
Semántica
axiomática(continuación)
• Una afirmación
• Una afirmación antes de una declaración
(una condición), establece las relaciones y
las limitaciones entre las variables que
son verdaderas en ese momento en
ejecución
• Ua afirmación seguida de sentencia es
una postcondición
• Una precondición más débil es la
precondición menos restrictiva que
garantizará la postcondición.
Copyright © 2006 Addison-Wesley. All rights reserved.
1-32
Formas de semánticas
axiomáticas
• Formas pre-, post: {P} Sentencias {Q}
• Un ejemplo
– a = b + 1 {a > 1}
– Una posible precondición: {b > 10}
{b > 0}
– La precondición más débil:
Copyright © 2006 Addison-Wesley. All rights reserved.
1-33
Proceso de prueba de programa
• La postcondición para el programa entero
es el resultado deseado
– Work back through the program to the first
statement. If the precondition on the first
statement is the same as the program
specification, the program is correct.
Copyright © 2006 Addison-Wesley. All rights reserved.
1-34
Semántica axiomática: Axiomas
• Un axioma para sentencias de asignación
(x = E): {Qx->E} x = E {Q}
• La regla de consecuencia:
{P } S {Q }, P' ⇒ P, Q ⇒ Q'
{P' } S {Q'}
Copyright © 2006 Addison-Wesley. All rights reserved.
1-35
Semántica axiomática: Axiomas
• Una regla de inferencia para secuencias
{P1} S1 {P2}
{P2} S2 {P3}
{P1} S1 {P2}, {P2} S2 {P3}
{P1} S1; S2 {P3}
Copyright © 2006 Addison-Wesley. All rights reserved.
1-36
Semántica axiomática: Axiomas
• Una regla de inferencia para ciclos con
condición precondicionada
{P} while B do S end {Q}
 I and B  S {I }
{I } while B do S {I and  not B }
donde I es el ciclo invariante( la hipótesis
inductiva)
Copyright © 2006 Addison-Wesley. All rights reserved.
1-37
Semántica axiomática: Axiomas
• Características del ciclo invariante: I debe
cumplir las siguientes condiciones:
– P => I
-- El ciclo invariante debe tener inicialmente un valor
verdadero
– {I} B {I}
-- la evalauación de la booleana, no debe cambiar la
validación de I
– {I and B} S {I}
-- I no es cambiada por la ejecución del cuerpo
del ciclo
– (I and (not B)) => Q
-- si I es verdadero y B es falso, está
implicado
Copyright © 2006 Addison-Wesley. All rights reserved.
1-38
El ciclo invariante
• El ciclo invariante I es una versión
debilitada de un ciclo postcondicionado y
también es una precondición
• I debe ser suficientemente débil para ser
satisfecho antes del inicio del ciclo, pero
cuando esté combinado con la condición
de salida del ciclo, debe ser
suficientemente fuerte para forzar la
verdad de la postcondición
– El ciclo termina
Copyright © 2006 Addison-Wesley. All rights reserved.
1-39
Evaluación de la semántica
aximomática
• Desarrollando axiomas o reglas de
inferencia para todas las sentencias en un
lenguaje es difícil
• Es una buena herramienta para pruebas
de correctitud y un excelente marco de
trabajo para razonamiento sobre los
programas, pero no es tan útil para
lenguajes de usuarios y escritores de
compiladores
Copyright © 2006 Addison-Wesley. All rights reserved.
1-40
Semántica denotacional
• Basada en teoría de funciones recursivas
• Es el método más abstracto para describir
semántica
• Originalmente desarrollado por Scott y
Strachey (1970)
Copyright © 2006 Addison-Wesley. All rights reserved.
1-41
La semántica denotacional
(continuación)
• El proceso de construir una especificación
denotacional para un lenguaje define un
objeto matemático para cada entidad del
lenguaje
– Define la función que mapea las instancias de
las entidades del lenguaje en las instancias de
los correspondientes objetos matemáticos
• El significado de los constructores del
lenguaje son definidos por los valores de
las variables del programa
Copyright © 2006 Addison-Wesley. All rights reserved.
1-42
Semántica denotacional vs Semántica
operacional
• En la semántica operacional, los cambios
de los estados están definidos por
algoritmos codificados
• En semántica denotacional, los cambios
de estado son definidos por funciones
matemáticas rigurosas
Copyright © 2006 Addison-Wesley. All rights reserved.
1-43
Semántica denotacional: Estado del
programa
• El estado de un programa es el valor
actual de todas sus variables
s = {<i1, v1>, <i2, v2>, …, <in, vn>}
• sea VARMAP una función que, cuando se
le da el nombre d euna variable y un
estado, regresa el valor actual de la
variable
VARMAP(ij, s) = vj
Copyright © 2006 Addison-Wesley. All rights reserved.
1-44
Números decimales
<dec_num> → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9|
<dec_num> (0 | 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9)
Mdec('0') = 0,
Mdec (<dec_num>
Mdec (<dec_num>
…
Mdec (<dec_num>
Mdec ('1') = 1, …, Mdec ('9') = 9
'0') = 10 * Mdec (<dec_num>)
'1’) = 10 * Mdec (<dec_num>) + 1
'9') = 10 * Mdec (<dec_num>) + 9
Copyright © 2006 Addison-Wesley. All rights reserved.
1-45
Expresiones
• Mapear expresiones en Z ∪ {error}
• Asumimos que las expresiones son
números decimales, variables o
expresiones binarias que tienen un
operador aritmético y dos operandos,
pudiendo cada uno de los cuales ser una
expresión
Copyright © 2006 Addison-Wesley. All rights reserved.
1-46
3.5 Semantica (cont.)
Me(<expr>, s) ∆=
case <expr> of
<dec_num> => Mdec(<dec_num>, s)
<var> =>
if VARMAP(<var>, s) == undef
then error
else VARMAP(<var>, s)
<binary_expr> =>
if (Me(<binary_expr>.<left_expr>, s) == undef
OR Me(<binary_expr>.<right_expr>, s) =
undef)
then error
else
if (<binary_expr>.<operator> == ‘+’ then
Me(<binary_expr>.<left_expr>, s) +
Me(<binary_expr>.<right_expr>, s)
else Me(<binary_expr>.<left_expr>, s) *
Me(<binary_expr>.<right_expr>, s)
...
Copyright © 2006 Addison-Wesley. All rights reserved.
1-47
Sentencias de asignación
• Mapear conjuntos de estado a conjuntos de
estado
Ma(x := E, s) ∆=
if Me(E, s) == error
then error
else s’ =
{<i1’,v1’>,<i2’,v2’>,...,<in’,vn’>},
where for j = 1, 2, ..., n,
vj’ = VARMAP(ij, s) if ij <> x
= Me(E, s) if ij == x
Copyright © 2006 Addison-Wesley. All rights reserved.
1-48
Ciclos de preverificación lógica
• Mapear conjuntos de estado a conjuntos
de estado
Ml(while B do L, s) ∆=
if Mb(B, s) == undef
then error
else if Mb(B, s) == false
then s
else if Msl(L, s) == error
then error
else Ml(while B do L, Msl(L, s))
Copyright © 2006 Addison-Wesley. All rights reserved.
1-49
Significado de ciclo
• El significado de ciclo es el valor de las
variables del programa después de que
las sentencias en el ciclo hayan sido
ejecutadas el número preescrito de veces,
asumiendo que hubieron errores
• En escencia, el ciclo ha sido convertido de
iteración a recursión, donde el control
recursivo es definido matemáticamente
por otras funciones de mapeo de estado
recursivo
• Cuando se compara la recursión con
iteración es más es más fácilmente
descrita con rigor matemático
Copyright © 2006 Addison-Wesley. All rights reserved.
1-50
Evaluación de la semántica
denotacional
• Puede ser usada para provar la
correctitud de los programas
• Provee una rigorosa manera de
pensamiento acerca de los programas
• Puede ser de ayuda en el diseño de un
lenguaje
• Debido a su complejidad han sido
escasamente usados por usuarios de
lenguajes
Copyright © 2006 Addison-Wesley. All rights reserved.
1-51
Resumen
• BNF las gramáticas independientes del
contexto son meta-lenguajes equivalentes
– Bien adaptados para describir la sintaxis de los
lenguajes de programación
• Un atributo gramatical es un formalismo
descriptivo que puede describir la sintaxis
y la semántica de un lenguaje
• Los tres principales métodos para
descripción de semántica son
– Operacional, axiomática y denotacional
Copyright © 2006 Addison-Wesley. All rights reserved.
1-52
Descargar