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