500 likes | 622 Vues
INGENIERIA EN SISTEMAS DE INFORMACION SINTAXIS Y SEMANTICA DEL LENGUAJE. 2º AÑO Ing. JOSE MUGETTI. LENGUAJES DE PROGRAMACION EL PROCESO DE DESARROLLO DE SOFTWARE. 1.Análisis y Especificación de Requerimientos. 2.Diseño y Especificación del Software. 3.Implementación (Codificación).
E N D
INGENIERIA EN SISTEMAS DE INFORMACION SINTAXIS Y SEMANTICA DEL LENGUAJE 2º AÑO Ing. JOSE MUGETTI
LENGUAJES DE PROGRAMACIONEL PROCESO DE DESARROLLO DE SOFTWARE 1.Análisis y Especificación de Requerimientos. 2.Diseño y Especificación del Software. 3.Implementación (Codificación). 4.Prueba. 5.Mantenimiento.
METODOLOGIAS DE DESARROLLO SOFTWARE Y LENGUAJES DE PROGRAMACION • FORTRAN: NO FUE DISEÑADO PARA SOPORTAR CIERTAS • METODOLOGIAS DE DISEÑO. • Ausencia de estructuras de control de alto nivel en los primeros Fortran. • PASCAL: FUE DISEÑADO CON EL OBJETIVO DE SOPORTAR • DISEÑO `TOP DOWN` Y PROGRAMACION ESTRUCTURADA. -EMPLEO DEL CONCEPTO DE “OCULTAMIENTO DE INFORMACION” (información Hiding). -ABSTRACCION DE DATOS.
-Lenguajes orientados a la abstracción de datos: *SIMULA 67. “CLASS” *MESA. “MODULE” *CLU. “CLUSTER” *ADA. “PACKAGE” La elección del método de diseño del programa puede influir en el diseño de un lenguaje, así como en la elección del lenguaje a utilizar
ARQUITECTURAS DE COMPUTADORAS Y LENGUAJES DE PROGRAMACION Los lenguajes de Programación han sido restringidos a la arquitectura de Von Newman,la cual se basa en: -Una memoria que contiene datos. -Una unidad de Control (que toma una instrucción fuera de la memoria a la vez). -Una unidad de procesamiento. Arquitectura de Von Newman Lenguajes Convencionales. -Ejecución de instrucciones paso por paso. -Deposito modificable de datos (variables en el lenguaje, celda de memoria en la maquina -fundamento matemático del Paradigma. -Gran poder expresivo.
Existen diferentes estilos de programación: -Programación lógica. -Programación Funcional. -Programación Procedimental. -Programación Orientada a Objetos. OBJETIVOS EN EL DISEÑO DE LENGUAJES IMPUESTOS POR EL PROCESO DE DESARROLLO DE SOFTWARE. Las distintas metodologías de desarrollo de software tienen como objetivo generar sistemas con las siguientes caracteristicas: -Confiable. -Mantenible. -Ejecutable eficientemente. Confiabilidad: fuertemente vinculado con el requerimiento formal de corrección o exactitud. Mantenible: deberá ser sumamente sencillo introducir modificaciones al software. Ejecutable eficientemente: atributo vinculado tanto con el lenguaje empleado como con el algoritmo a ser usado para implementar la aplicación.
LENGUAJE Y CONFIABILIDAD -Gran poder expresivo: permite expresar el programa en una forma natural, de acuerdo a la naturaleza del problema. -Legitibilidad: hace sencillo seguir la lógica del programa y descubrir errores mediante la inspección del mismo. -Manejo de excepciones: Contribuye a la confiabilidad del software. El lenguaje debe poder manejar eventos no deseados, dando respuestas a cada uno de ellos. LENGUAJE Y MANTENIMIENTO La exigencia de mantenimiento impone al lenguaje requisitos de legitibilidad y modificabilidad. La característica que hace a los programas más fácilmente modificables es la posibilidad de factoreo (en el programa, la descripción de un determinado hecho se realiza en un solo lugar).
LENGUAJE Y EFICIENCIA Velocidad de ejecución. -Espacio requerido. -Fácil de escribir. -Mantenible. -Optimizable. La optimización implica la posibilidad de optimización automática. La preocupación por la optimización deberá eliminarse de las primeras etapas de la programación.
EVOLUCION DE LOS AMBIENTES DE APLICACIÓN DE LOS LENGUAJES DE PROGRAMACION *Solo fase de codificación. Primeras Etapas Un Programador *Aplicación Científica. *Aplicación bien comprendida. *No había mucha necesidad de Análisis, diseño y Mantenimiento. *Ambiente sofisticado. *Enfoque mas normal. Actualidad Equipo Programador *Necesidad de mantenimiento. (con comunicación) *Mayores requerimientos de confiabilidad. *Usuarios sin formación computacional. EVOLUCION ATADA AL COMPROMISO ENTRE : NECESIDAD DE EXPRESION DEL PROGRAMADOR RESTRICCION DEL HADWARE.
T.D.A(TIPO DE DATOS ABSTRACTOS) -proceso mental que se extraen rasgos esenciales para ser representados. -Técnica o metodología . Una estructura de datos puede implementarse en cualquier lenguaje y aplicarse en cualquier concepto. NIVELES DE LA ABSTRACCIÒN DE DATOS 1- Nivel lógico o abstracto. 2- Nivel Físico o de Implementación. 3- Nivel de aplicación o de uso.
ESPECIFICACION LOGICA DE UN T.D.A 1-Elementos que conforman la estructura de dato: Ejs: números- caracteres,etc. 2-Organización de los elementos: -Lineal
-Jerarquica -Red -Sin relaciones
3-Dominio *opcional y describe la capacidad 4-Descripción de las operaciones de la estructura.
EVOLUCION DE CONCEPTOS EN LOS LENGUAJES DE PROGRAMACION *ABSTRACCION DE DATOS: ABSTRACCION DE DATOS EN LOS LENGUAJES ANTIGUOS. El primer caso es para introducir abstracciones con datos fue dado en los lenguajes de programación tales como: -FORTRAN. -COBOL. -ALGOL 60. La información almacenada en memoria es vista no como una secuencia de bits sino como un valor entero, un booleano o cualquier otro tipo. -Las abstracciones de datos dependían del tipo de máquina y de la naturaleza de las aplicaciones. -Los lenguajes se tornaron no apropiados para todos los propósitos y el programador queda limitado por el poder expresivo del conjunto de abstracciones dadas por el lenguaje.
ABSTRACCION DE DATOS EN ALGOL 68, PASCAL Y SIMULA 67. -Se permite al programador definir nuevas abstracciones, y como consecuencia los programas se tornaron más fáciles de comprender y modificar. -Los programas tienen mayor disponibilidad de ser correctos. Algol 68 y Pascal brindan un conjunto de tipos ya definidos y constructores (arrays, records y otros) para definir nuevos tipos. Ejemplo:Pascal Type estudiante = Record nombre: array[1..10]of char; inicial:char; apellido:array [1…20]of estudiante end; curso= Record nro_de _estudiante:0…20; asistentes: array[1…20] of estudiante end; Var comisionA,comisionB, comisionC : curso
La variable comisionA puede verse como: Nro_de_estudiante asistentes Pablo A Pedroni Juan B Truco …….. ……… Mario C Lopez …….. ……… ……… 10
Una versión abstracta del programa que use tales estructuras de datos podría ser: For cada conjunto de fichas con datos de los estudiantes do sea I la identificación del estudiante y A el nombre del curso Insertar I en la tabla del curso A en el orden apropiado End_of_do; Imprimir la tabla de la comisión A: Imprimir la tabla de la comisión B: Imprimir la tabla de la comisión C: SIMULA 67: Proporciona una estructura (CLASS)que permite que la representación y las operaciones concretas puedan especificarse en una única unidad sintáctica. EJEMPLO SIMULA 67 Class complex (x,y): real r,y; Beginreal angle,radius: radius:= sqrt(x**2 + y**2); if abs(x)<epsilon end else angle:= arctan(y/x) end complex; Una declaración de clase (class) tiene la forma general: <class_heading>; <class_body>
-Las abstracciones de datos dependían del tipo de máquina y de la naturaleza de las aplicaciones.-Los lenguajes se tornaron no apropiados para todos los propósitos y el programador queda limitado por el poder expresivo del conjunto de abstracciones dadas por el lenguaje. FACILIDADES DE LOS TIPOS DE DATOS BSTRACTOS * Tipo predefinido integer * Tipo definido por el usuario curso Integer y curso son abstracciones construidas sobre una representación interna, una cadena de bits para integer y un registro(record) para curso. Integer y curso tienen asociado un conjunto de operaciones aritméticas, de comparación de un entero, inserción e impresión de un curso. Los tipos predefinidos difieren de los definidos por el usuario: En los primeros la representación interna no pueda manipularse directamente y por otra parte procedimientos tales como insertar e imprimir no son los únicos que pueden manipular un curso: Por ejemplo: comisionA.nro_de_estudiante:= 10
Características de un tipo de dato abstracto a)La asociación de una representación con sus operaciones concretas en una unidad del lenguaje que implementa el nuevo tipo. b)El ocultamiento de la representación del nuevo tipo para las unidades que lo van a usar. La propiedad a) hace que la versión final del programa refleje las abstracciones identificadas durante la etapa del diseño. La propiedad b) refuerza la distinción entre niveles de abstracción y favorece la modificabilidad. LOS TIPOS DEFINIDOS POR EL USUARIO QUE SATIFACEN LAS PROPIEDADES A) Y B) SE DENOMINAN TIPOS DE DATOS ABSTRACTOS. Lenguajes como CLU y ADA proveer facilidades para definir TDA que satisfacen las propiedades a) y b) Los tipos de datos abstractos esconden los detalles de la representación y orientan los accesos a los objetos abstractos a través de procedimientos.
ABSTRACCION DE CONTROL EVOLUCION DE LAS ESTRUCTURAS DE CONTROL Las estructuras de control describen el orden en el cual las sentencias o grupos de sentencias son ejecutadas. Clasificacion: *Estructuras de Control a Nivel de Sentencia. *Estructuras de Control a Nivel de Unidad. Las primeras ordenan la activación de sentencias individuales. Las segundas ordenan la activación de unidades de programa. ESTRUCTURAS DE CONTROL A NIVEL DE SENTENCIA Mecanismos para gobernar el flujo de control de las instrucciones individuales del hardware convencional: • “sequencing” (secuenciacion). • “branching”(salto). Secuencia: almacen en posiciones consecutivas de memoria las instrucciones a ser ejecutadas una después de otra. Ejemplo: trozo programa Pascal: …………….. Writeln(‘Listado ejemplo archivo Personas’); Writeln(‘----------------’); Cont:=; Assing(personas,’c:\personas’); Reset(personas); ……………….
Salto: permite realizar la transferencia de control a una posición especifica distinta de la siguiente en secuencia. El uso de estas estructuras produce programas difíciles de leer y de mantener. ejemplo: trozo de programa Cobol: ……….. Perform proceso until (fin=‘s’) or (contador>100) if fin=‘s’ go to final Else go to sigo. Proceso. ……… Sigo. …….. Final. Stop run. EVOLUCION DE LAS ESTRUCTURAS DE CONTROL A NIVEL DE UNIDADES SUBPROGRAMAS Y BLOQUES *poderosas herramientas para la programación estructurada. *permite agrupar sentencias que representen una acción abstracta en una adecuada unidad de programas(subprogramas). *un subprograma soporta la distinción entre la definición de una acción abstracta (el cuerpo del subprograma) y el uso de este (la llamada al subprograma).
Ejemplo: Declaración del subprograma: Llamada al subprograma : Subprograma S(P1,P2……Pn) call S(R1,R2……Rn) . … … … End s MANEJO DE EXCEPCIONES *eventos usuales o excepcionales. *Excepcionales: *division por cero. *un puntero sale de rango. *error de protocolo durante una transmision. *dividir el programa en multiples unidades para manejar los eventos normales y poderr detectar las anomalias o excepciones. *PL/I1er lenguaje de alto nivel que provee caracteristicas para el manejo de excepciones. *otros: Mesa,CLU,ADA.
CORRUTINAS Los subprogramas convencionales están subordinados a sus llamadores y cuando terminan retornan al llamador. Los subprogramas convencionales son pueden describirse como unidades que proceden concurrentemente (simulación discreta). Las corrutinas son unidades simétricas que activan explícitamente unas a otras y no devuelven el control sino que cada una reanuda a la siguiente. UNIDADES CONCURRENTES Las corrutinas son adecuadas para modelar actividades que van ocurriendo en forma intercalada. En muchas aplicaciones es necesario un conjunto de unidades, llamadas unidades concurrentes, cuyo flujo avanza en paralelo. La descripción de unidades concurrentes permite la abstracción del equipo en el cual se correrá el sistema, el cual puede ser un multiprocesador ejecutando las unidades independientemente o un monoprocesador con multiprogramación. Ejemplo de corrutina: Corrutina del jugador i
PROGRAMA CORRECTO UN PROGRAMA ES C ORRECTO SI CUMPLE SUS ESPECIFICACIONES La adopción de herramientas adecuadas y sistemáticas en la etapa del diseño ayuda a prevenir la aparición de errores. Las abstracciones de datos y de control son poderosos mecanismos que permiten dominar la complejidad del diseño de un programa. Existen dos enfoques distintos para la producción de programas correctos: • Corrección de errores. (modificar un programa ya escrito) • Prevención de errores ( desarrollar un programa correcto desde el primer momento) Los primeros lenguajes no reconocen la necesidad de características que soporten la corrección de los programas. Los lenguajes mas recientes han sido diseñados con el objetivo de soportarm comprobaciones exhaustivas.
LENGUAJE, SINTAXIS Y SEMÁNTICA LENGUAJE: Medio de comunicación entre los seres humanos. Español, Inglés, Chino, etc. Los lenguajes que usamos para instruir a los COMPUTADORES se denominan: LENGUAJES DE PROGRAMACIÓN FORTRAN, COBOL, PASCAL, C, LISP, PROLOG, SMALLTALK, ..., etc. LENGUAJE VOCABULARIO DE SÍMBOLOS REGLAS PARA FORMAR FRASES
Todos los Lenguajes tienen su SINTAXIS y su SEMÁNTICA. SINTAXIS: Se refiere a la FORMA del Lenguaje. SEMÁNTICA: se refiere al SIGNIFICADO de las oraciones (o sentencias) del lenguaje.
SINTAXIS La oración "YO VEO UNA CASA VERDE" es una oración gramaticalmente correcta en el lenguaje castellano y la oración "I seethegreenhouse" es gramaticalmente correcta en el lenguaje ingles. Las reglas de sintaxis definen cuales frases están bien formadas y cuales mal formadas. La oración "VERDE CASA UNA VEO YO" está gramaticalmente mal formada en el lenguaje castellano.
LENGUAJES DE PROGRAMACIÓN SÍMBOLOS DE UN LENGUAJE DE PROGRAMACIÓN. Palabras claves Identificadores Literales Operadores Signos de puntuación etc. Los símbolos permiten formar: Frases Expresiones Declaraciones Comandos Programas.
SEMÁNTICA CASA significa un tipo particular de construcciones VERDE significa un color particular ¿Cuál es el significado de "La casa verde" ? SEMÁNTICA DE LOS LP El significado de una frase en un programa es el cómputo que ésta describe. El significado de una expresión es el cómputo que produce un valor. El significado de un comando es el computo que modifica variables. El significado de una declaración es el cómputo que produce vinculación. Ejemplos: n+1 produce un valor m := n+1 modifica la variable const n = 5 produce vinculación
ESPECIFICACIÓN DE LOS LP La especificación define el conjunto de programas expresados en el lenguaje y el significado de cada programa. Existen métodos de especificación formales e informales de los Lenguajes de Programación. Especificación informal: expresadas en palabras, en lenguaje natural. Especificación formal: expresada en una notación especial cuyo significado se conoce de manera precisa, completa y sin ambigüedad.
ESPECIFICACIÓN DE LA SINTAXIS:BACKUS-NAUR FORM (BNF) El lenguaje de programación ALGOL 60 fue definido con una gramática libre de contexto desarrollada por John Backus. Este método conocido como BNF o LA FORMA BACKUS NAUR permite definir la sintaxis de un lenguaje de manera clara y compacta. Ejemplos While_Command::= While Expression do Command Identifier ::= Letter | Identifier Letter | Identifier _ Letter Operator ::= + | - | * | /
ESPECIFICACIÓN DE LA SEMÁNTICA Semántica Operacional del comando while en el Lenguaje Pascal: "While E do C " (1) Evalúa la expresión E, produciendo un valor de verdad. (2) si el valor de verdad es verdadero ejecuta el comando C; y luego repite desde (1). (3) si el valor de verdad es falso, termina.
- Semántica Denotacional del comando While en Pascal: execute [while E do C] = let execute_while env sto = if evaluate E env sto = Truth_value true then execute_while env (execute C env sto) else sto in execute_while La detonación del comando while es la función execute_while, la cual está definida recursivamente de la siguiente manera: - E es evaluado en sto, dando un valor de verdad. - si el valor de verdad es verdadero, C es ejecutado en sto, y execute_while es aplicado en el almacenamiento resultante. - si el valor de verdad es falso, execute_while da sto como resultado.
SINTAXIS - GRAMÁTICA FORMAL GRAMÁTICAS LIBRES DE CONTEXTO CONJUNTO DE SÍMBOLOS ALFABETO DEL LENGUAJE SENTENCIA STRING (CADENA) (Secuencia de símbolos) Una gramática satisfactorio para un Lenguaje de Programación debe permitirnos discernir por un procedimiento mecánico si una secuencia arbitraria de símbolos es un programa "bien conformado".
GRAMÁTICAS LIBRES DE CONTEXTO COMPONENTES FUNDAMENTALES • SÍMBOLOS TERMINALES • SÍMBOLOS NO TERMINALES • SÍMBOLO DE COMIENZO • REGLAS GRAMATICALES
Un ejemplo del lenguaje Inglés: una regla especifica como construir una oración de la siguiente manera: "I see the cat." Esta oración consiste de un sujeto, un verbo, un objeto y un punto. Símbolos terminales: cat I see the . Símbolos no terminales: Oración, Sujeto, Verbo, Objeto, Sustantivo. símbolo de comienzo: Oración Reglas de producción gramaticales. Oración ::= Sujeto Verbo Objeto . Sujeto::= I Objeto::= the Sustantivo Sustantivo::= cat Verbo::= see
La notación ::= se lee: "está definida como" Por lo tanto: Una oración está definida como un sujeto, seguido por un verbo, un objeto y un . (punto). "I see the cat."
Para formalizar la noción de gramática decimos que una gramática libre de contexto es una cuaterna G = (T, N, S, P) donde T: es un conjunto finito de símbolos terminales. N: es un conjunto finito de símbolos no terminales. S: es un símbolo de comienzo. P: es un conjunto finito de reglas de producción. Se requiere que: TN = y S N. Cada regla de producción en P es escrita en la forma N :: = , donde N N es un símbolo no terminal y (T N)* es una cadena de símbolos terminales y no terminales.
Si N :: = , N :: = , N::= usamos la notación N :: = | | donde la notación | es leída como "o". La gramática de un Lenguaje consiste en un conjunto de reglas tales que todo símbolo no terminal esté definido con otras reglas BNF, y todos los símbolos terminales sean símbolos validos del lenguaje.
Ejemplo: Calculadora de mano - comandos: ‘3 * 9 =’ , ‘40 - 3 * 9 =’ - expresiones: ‘3 * 9’, ‘40 - 3’, ‘40 -3 * 9’ - números: ‘3’, ‘40’ - dígitos simples: ‘0’, ‘1’, ....., ‘9’.
- Reglas de Producción: Comando ::= Expresión = Expresión ::= Número | Expresión + Número | Expresión - Número | Expresión * Número Número ::= Dígito | Número Dígito Dígito ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Tiras y Lenguajes Si tenemos un alfabeto de vocabularios (a,b), algunas tiras son: λ, a, b, ab, aaa, aab, aba, abb λ = tira nula Si x= abc y z= deac la concatenación xz = abcdeac λ x = x λ = x = abc Longitud de una tira | λ| = 0 | a| = 1 |abcd| = 4 Potencia de una tira x0 = λ x1 = abc x2 = abcabc Producto cartesiano AB = {xy / (x € A) and (y € B)} Si A = { a, b, ca} , B= { d, e} AB = { ad, ae, bd, be, cad, cae}
A . {λ} = {λ} . A = A A0 = {λ} A1 = A A2 = A . A Si A = { a, b} entonces: A0 = {λ} A1 = A = { a, b} A2 = A . A = {aa, ab, ba, bb} A3 = A . A . A = { aaa, aab, aba, abb, baa, bab, bba, bbb} A+ = A0 U A1 UA2 U A3UA4 … UAn (cierre transitivo) A* = A+ U A0 = A+U {λ} (cierre transitivo y reflexivo)
Descripción de un lenguaje L1 = { ab, ac, ba, ca} = enumeración L1 = { an | n € N} = Derivación algebraica L2 = { an bn | n € N+} Conjunto con una propiedad (Para decidir si una tira pertenece o no pertenece al lenguaje ejs V = { a, b, c, d} L1 { x | (|x| = 3) and ( x € V*)} Lenguaje definido con vocabulario “V” de tiras que tengan tres caracteres – algunas de ellas tiras son: aaa, aab, aba, abb, etc…
GRAMÁTICAS (N, T, P, S) G1 = ( { S} , { a, b} , P , S ) N T Reglas de derivación para lenguajes y algunas de ellas son: S -> ab S -> aSb
GRAMÁTICAS DE CONTEXTO LIBRE Derivación: L (G) = {x | ( S => * x ) and ( x € T*)} X = símbolos terminales o sentencias del lenguaje T* = todas las tiras posibles, incluyendo la nula S => *x = Derivaciones directa de S para llegar a x Ejs: G1 S => aSb -> aaSbb -> aaabbb Cumple axioma S -> * x Formas sentenciales Solo esta cumple X incluida T*
D (G) = α | (S => * α ) and € (N U T)* } -> formas sentenciales Al desaparfecer N en el “cierre transitivo reflexivo” T* = T + U λ solo quedan las cadenas de terminales Árboles de derivación derivación izquierda derivación derecha
ÁRBOLES DE SINTAXIS CONTINÚA EN MODULO 2