Capítulo II 2.1 Sintaxis y Semántica Conceptos Fundamentales de Lenguajes de Programación

Anuncio
Departamento de Informática
Universidad Técnica Federico Santa María
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Capítulo II
2.1 Sintaxis y Semántica
Conceptos Fundamentales de
Lenguajes de Programación
Descripción de sintaxis y semántica,
análisis sintáctico y semántico
1
RMA/2000
Departamento de Informática
Universidad Técnica Federico Santa María
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
• Conjunto de caracteres
• Identificadores
• Símbolos de operadores
• Palabras claves y reservadas
• Comentarios
• Blancos, delimitadores y paréntesis
• Expresiones
• Sentencias
while (<expr>) do <sentencia>
RMA/2000
Lenguajes de Programación
Elementos Sintácticos
• SINTAXIS: forma de expresiones,
sentencias y unidades de programa
• SEMÁNTICA: significado de estas
expresiones, sentencias y unidades de
programa
• Ejemplo:
II- 3
Departamento de Informática
Universidad Técnica Federico Santa María
2
RMA/2000
Definición: Sintaxis y Semántica
RMA/2000
II- 4
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Descripción de Sintaxis
Lenguajes de Programación
Elementos de BNF
• Definición de Lenguajes
• Símbolos no terminales
– Reconocimiento (reconoce si string de entrada
pertenece al lenguaje)
– Abstracción que representa una reglas
• Símbolos terminales
– Generación (genera strings que pertenecen al
lenguaje)
– Tokens de las reglas
• Símbolo de partida
• Métodos formales de descripción
– Símbolo no terminal que permite generar un
programa
– Backus Nauer Form (BNF)
– Extended BNF (EBNF)
RMA/2000
Lenguajes de Programación
II- 5
RMA/2000
II- 6
Departamento de Informática
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Lenguajes de Programación
Universidad Técnica Federico Santa María
Ejemplo de Gramática
Parse Tree
• Expresión
<program> ::= begin <stmt_list> end
A := A*B + C
stmt
<stmt_list> ::= begin <stmt> ; <stmt_list> end
id
<stmt>
::= <id> := <exp>
<id>
::= A | B | C
exp
:=
exp
A
<exp>
*
exp
II- 7
exp
exp
id
id
id
A
B
::= <id> | <exp> + <exp> | <id> * <exp> | (<exp>)
RMA/2000
+
C
RMA/2000
Departamento de Informática
II- 8
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Lenguajes de Programación
Universidad Técnica Federico Santa María
Ambigüedad
Otro ejemplo:
Dada la siguiente gramática:
• Para la misma expresión existen dos parse tree:
stmt
id
id
exp
:=
A
<if_stmt> ::=
if <condition> then <stmt>
| if <condition> then <stmt> else <stmt>
<stmt>
<if_stmt> | …
stmt
exp
+
exp
*
exp
id
id
C
A
exp
:=
exp
*
Reconocer:
::=
if (C1) then if (C2) then S1 else S2
exp
if_stmt
exp
id
exp
+
if
id
A
id
if_stmt
exp
then
condition
stmt
if
condition
then
if_stmt
A
B
if
II- 9
Departamento de Informática
condition
then
stmt
else
stmt
if
then
condition
RMA/2000
stmt
stmt
II- 10
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Resolución de Ambigüedad
Lenguajes de Programación
Extended BNF (EBNF)
• Caso de operadores:
• Elemento opcional se indica con [ …]
• Alternativa puede usar | dentro de una
regla
• Repetición de elementos se indican con
{…}
– Definir precedencia
– A igual precedencia, definir asociatividad por
izquierda o derecha
• Caso del if:
– Asociar el else con el último if
RMA/2000
else
if_stmt
C
B
RMA/2000
Universidad Técnica Federico Santa María
stmt
id
II- 11
RMA/2000
II- 12
Departamento de Informática
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Lenguajes de Programación
Universidad Técnica Federico Santa María
Ejemplos de EBNF
Grafos Sintácticos
<if_stmt> ::= if <condition> then <stmts> [ else <stmts>]
<if_stmt>
<identifier> ::= <letter> {<letter> | <digit> }
<else_if>
::=
if <condition> then <stmts> {<else_if> }
[ else <stmts> ] end if
::=
else_stmt
elseif <condition> then <stmts>
if
condition
then
stmts
end if
else_if
else_if
RMA/2000
II- 13
Departamento de Informática
then
stmts
RMA/2000
II- 14
Universidad Técnica Federico Santa María
Programa Fuente
Análisis Léxico
Léxico
Análisis
Tokens léxicos
Análisis Sintáctico
Sintáctico
Análisis
Parse tree
• Extensión a las Gramáticas Libre de Contexto, tal
como:
Reconocimiento
del programa
fuente
Análisis Semántico
Semántico
Análisis
Código intermedio
Generación de
de Código
Código
Generación
Programa Objeto
RMA/2000
Lenguajes de Programación
Gramáticas con Atributos y
Semántica Estática
Proceso de Compilación
Universidad Técnica Federico Santa María
– Compatibilidad de tipos
– Declaración de nombres de variables antes de su uso
• Estas reglas definen la Semántica Estática del
Lenguaje
• Normalmente se implementa asociando atributos a
cada nodo del parse tree
II- 15
Departamento de Informática
RMA/2000
II- 16
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Descripción de la
Semántica Dinámica
Lenguajes de Programación
Métodos Formales de
Descripción Semántica
• Se refiere al significado de las expresiones,
sentencias y unidades de programa
• Descripción (formal) permite precisar y
comprender mejor el comportamiento de los
programas
• Descripción formal es la base para probar la
correctitud de los programas
RMA/2000
condition
stmts
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Tabla de
símbolos
elseif
else
II- 17
• Semántica Operacional
– Describe las acciones del lenguaje en términos de
operaciones de una máquina existente o hipotética.
• Semántica Denotacional
– Se especifica la semántica en término de funciones
matemáticas y teoría de funciones para probar
propiedades
• Semántica Axiomática
– Basada en proposiciones lógicas que fijan condiciones
de inicio y término
RMA/2000
II- 18
Documentos relacionados
Descargar