Evaluacion minima teorica1 cpclp Flashcards
preguntas de repaso para la primera evaluacion teorica de cplp
¿Cuáles son los objetivos de diseño?
-Simplicidad y legibilidad
-Claridad en los bindings
-Confiabilidad
-Soporte
-Abstracción
-Ortogonalidad
-Eficiencia
¿Qué significa que un lenguaje sea simple y legible?
Para decir que un lenguaje es simple y legible debe ser fácil de escribir, leer, aprender y enseñarlo.
-Tiene pocos componentes elementales( sino solo se utiliza un subconjunto de estos componentes).
-Un concepto semántico, uno o pocas notaciones sintácticas ( por ejemplo, si se puede incrementar el valor de una variable A de muchas formas, atenta contra la legibilidad).
-Una notación sintáctica, un conceptos semántico( por ejemplo que el “()” sirva solo para encerrar a los parámetros de una función)
¿Qué significa que haya claridad en los bindings?
Significa que el lenguaje indica en que momento se realiza la ligadura el elemento con su contenido, ya sea en tiempo de compilación, ejecución, etc.
Si no es claro el binding entonces se dice que es ambiguo y que el elemento puede cambiar dependiendo de donde se ejecute( por ejemplo, un if el cual no se especifique como se cierra o que tenga varias alternativas y no se sepa como actuara el programa)
Que significa que tenga confiabilidad?
Relacionada con la seguridad, debe realizar chequeo de tipos y manejos de excepciones
¿Qué significa que un lenguaje tenga soporte?
-Accesible(el compilador o interprete de dominio publico)
-Multiplataforma
-Fácil familiarización con el lenguaje
¿Qué significa un lenguaje tenga abstracción?
Que sea capaz de definir y usar estructuras y operaciones sin complicarse la vida
Que significa que un lenguaje tenga ortogonalidad?
Significa que el lenguaje debe presentar varios elementos con los cuales se puedan combinar y que el lenguaje aun así pueda entenderlo y sean legales
¿Qué significa que un lenguaje sea eficiente?
-Tiempo y espacio
-Esfuerzo humano
-Optimizable
¿Qué es la sintaxis?
Es el conjunto de reglas que indican como se debe escribir las instrucciones en el programa
Establece un conjunto de reglas que sirven para que el programador se comunique con el procesador. Además define como deben combinarse las componentes básicas (words) para formas sentencias y programas
¿Qué es la semántica?
Es el conjunto de reglas que le dan un significado a los programas sintácticamente validos
¿Cuáles son las características de la sintaxis?
-Legibilidad
-Verificabilidad
-Traducción
-Falta de ambigüedad
¿Cuáles son los elementos de la sintaxis?
-Alfabeto o conjunto de caracteres
-Identificadores
-Operadores
-Palabras clave y palabras reservadas
-Comentarios y uso de blancos
¿ Que es una palabra clave?
Son palabras que tienen un significado dentro de un contexto del lenguaje
¿Qué es una palabra reservada?
Es una palabra clave que el lenguaje restringe para darle un único propósito a dicha palabra y no pueden ser usadas como variable
¿Cuáles son los elementos de la estructura sintáctica?
-Vocabularios o words(conjunto de caracteres y palabras para armar expresiones sentencias y programas, ej identificadores, operadores)
-Expresiones(operaciones que dan un resultado ,ej int y = 2 * (3 + 4))
-Sentencia(instrucción que realizan una acción, ej int x = 10)
¿Qué son las reglas léxicas?
Conjunto de reglas que dictaminan como armar las palabras (ej camel case)
¿Cuáles son los tipos de sintaxis?
-Abstracta(se fija en las reglas sintácticas)
-Concreta(se fija en las reglas léxicas)
-Pragmática( se fija en como es mas cómodo para escribir?)
¿Cómo se puede definir la sintaxis?
(como dar una descripción finita para definir un conjunto infinito)
-Lenguaje natural (PD: resulto ser un toque ambiguo y se dejo de usar tanto)
-Gramática libre de contexto, definida por Backus y Naun: BNF, EBNF
-Diagramas sintácticos equivalentes
¿Que es BNF?
-Es una notación formal para describir la sintaxis
-Es un metalenguaje( metalenguaje: lenguaje que define lenguajes)
-Utiliza metasimbolos
-Define reglas mediante producciones
¿Qué es la gramática?
Es el conjunto de reglas finita que define un conjunto infinito de posibles sentencias validas, esta conformado por N(conjunto de símbolos no terminales), T(conjunto de símbolos terminales),S(símbolo distinguido de la gramática que pertenece a N, es como el punto de partida),P(conjunto de producciones, que van a describir las reglas para N )
¿Qué es un árbol sintáctico?
Es una técnica que permite determinar si una sentencia dada es valido o no
Puede ser construido de 2 maneras
botton-up(abajo pa arriba)
top-down (de arriba pa abajo)
ambas maneras se puede hacer de derecha a izquierda o izquierda a derecha
¿Qué es una producción recursiva?
Son producciones que hacen que el conjunto de sentencias descripto sea infinito, en otras palabras, utilizo la propia definición de la sentencia para definirla (explota la cabeza)
<numero>::=<numero><digito>|<digito>
Una producción recursiva describe un lenguaje infinito
No puede estar dos veces por izquierda y por derecha la parte recursiva, sino seria ambiguo
</digito></digito></numero></numero>
¿Qué es una sub-gramática?
Es una gramática a bajo nivel, se utilizan para definir identificadores, etc. Son gramáticas ez
¿Qué son las gramáticas libres de contexto y sensibles al contexto?
Como lo dice su nombre una gramática libre de contexto es aquella que no realiza un análisis del contexto, puede ser que las sentencias dentro de un código sean sintácticamente validas pero no semánticamente
Aquellas gramáticas sensibles al contexto si ;)
Recite la principal diferencia entre BNF y EBNF
BNF utiliza recursión
EBNF utiliza opcionales
¿Qué es un diagrama sintáctico(CONWAY)?
Es una forma de representar gráficamente las producciones
¿Cuál es la diferencia entre semántica estática y dinámica?
La semántica estática se realiza antes de la ejecución y la dinámica durante
¿Qué es la semántica estática?
Es el análisis semántico que se realiza en tiempo de compilación que verifica las formas validas, se realiza entre el análisis sintáctico y la semántica dinámica. Sirve para detectar los errores antes y que no aborte el programa, utiliza la gramática sensible al contexto. La usan los compiladores
¿Qué es la gramática de atributos?
Es una forma de evaluar las reglas de las semántica estática, A las construcciones del lenguaje se les asocia información a través de “atributos” asociados a los símbolos de la gramática (terminales o no terminales), que sirven para detectar errores.
Un atributo puede ser: el valor de una variable, el tipo de una variable o expresión, lugar que ocupa una variable en la memoria, dígitos significativos de un número, etc.
Los valores de los atributos se obtienen mediante las llamadas “ecuaciones o reglas semánticas” asociadas a las producciones gramaticales. Con esto se pueden hacer arbolitos sintácticos de atributos donde se entiende un toque mas
¿Qué es la semántica dinámica?
Es el análisis del significado de ejecutar las diferentes construcciones del lenguaje de programación
Esta se realiza después del análisis sintáctico y la semántica estática
¿Cómo se define la semántica dinámica?
En síntesis, se puede definir la semántica dinámica con
-Semántica axiomática (tipo: formal y compleja)
-Semántica denotacional(tipo: formal y compleja)
-Semántica operacional(tipo: informal)
Sirven para comprobar la ejecución, la exactitud de un lenguaje, comparar funcionalidades de distintos programas, se pueden usar combinados y no todos sirven para todos los tipos de lenguaje, por eso es complicada de definir
¿Qué es la semántica axiomática?
Es una manera formal y compleja de definir la semántica dinámica
Se le dice axiomática porque se parte desde un axioma( algo verdadero) y de ahí se prueban estados y condiciones
Un estado es un predicado, un predicado son los valores de las variables en ese estado, existe un estado anterior y posterior a la ejecución del constructor
Cada sentencia se precede y se continúa con una expresión lógica que describe las restricciones y relaciones entre los datos.
Precondición (condiciones de estado previo)
Poscondición (condiciones de estado posterior)
¿Qué es la semántica denotaciones?
Es una manera formal y compleja de definir la semántica dinámica
Se basa en la teoría de funciones recursivas y modelos matemáticos, es más exacto para obtener y verificar resultados, pero es más
difícil de leer ,funciona como una maquina de estados y realiza las comprobaciones mediante funciones.
En otras palabras, utiliza funciones para verificar que las expresiones estén dando bien
¿Qué es la semántica operacional?
Es una manera no formal (no formal porque puede conducir a errores) de definir la semántica dinámica
Se utiliza un lenguaje de bajo nivel para explicar las sentencias de otro lenguaje
¿Qué es un código mnemotécnico?
una abreviatura de una instrucción
¿Cuáles eran los problemas de que cada maquina o familia de procesadores tenia su propio juego de instrucciones?
-Imposible intercambiar programas entre distintas maquinas
-Diferentes versiones de una misma CPU podían tener instrucciones incompatibles
-Los modelos evolucionados podían incorporar instrucciones nuevas
¿Cómo los programas escritos en lenguajes de alto nivel pueden ser ejecutados sobre una computadora cuyo lenguaje es diferente y de bajo nivel?
Con programas de traducción:
-Interpretación
-Compilación
¿Qué es la interpretación?
Es un programa de traducción, el cual consta de un lenguaje de programación interpretado y un interprete que realiza la traducción, este lee, analiza, decodifica y ejecuta (evidentemente, este proceso se realiza en run time y se hace cada vez que se ejecuta)
También el interprete tiene subprogramas, que son estos llamados en secuencia los que realizan la interpretación
Sigue el orden lógico del programa, por lo que puede ahorrarse pasar por código
¿Qué es la compilación?
Es un programa de traducción que genera un código compilado (lenguaje objeto)antes de ser ejecutado, el código queda guardadito, sigue el orden físico del código (todo el código)
El lenguaje objeto puede ser un lenguaje de maquina o lenguaje ensamblador
El interprete es mas lento que el compilador al ejecutar
V o F
V
si se habla de ejecución, el compilador es mas rápido ya que preparo el código ejecutable con anterioridad, en cambio el interprete debe realizar todo el proceso en ejecución
El compilador debe realizar el proceso de compilación tantas veces como sea requerido
V o F
F
El compilador solo compila una vez, una vez generado el lenguaje fuente, se utiliza este y no se vuelve a compilar
El Interprete detecta mas errores que el compilador
V o F
F
El compilador detectó más errores al pasar por todas las sentencias
El interprete ocupa menos espacio en memoria que el compilador
V o F
V
Cada sentencia se deja en la forma original y las instrucciones interpretadas necesarias para ejecutarlas se almacenan en subprogramas del interprete en memoria, solo se generan las tablas de símbolos, variables y otras cosas cuando se usan en forma dinámica
El compilador genera TODO, por lo que ocupa mas espacio, además cada instrucción puede convertirse en muchas sentencias
Es mas fácil detectar el origen los errores con el compilador que con el interprete
V o F
F
Se puede relacionar directamente el error con la sentencia en ejecución, en cambio en compilación se pierde la referencia del código fuente con el código objeto, por ende es casi imposible encontrar el error, se deben usar otras técnicas(semántica dinámica)
¿Cuál es la ventaja de interpretar y luego compilar y viceversa?
Primero Interpreto y luego Compilo:
-facilita el diagnostico de errores
-se genera un código objeto mas eficiente
Primero Compilo y luego Interpreto:
-se puede generar un código portable a distintas maquinas y arquitecturas
Describa las etapas de la compilación
1)Etapa de Análisis
1.1 Análisis léxico
1.2 Análisis sintáctico(Parser)
1.3 Análisis semántico
2)Etapa de síntesis
2.1 Optimización del código
2.2 Generación del código final
¿Qué hace el compilador en el análisis léxico?
Hace el análisis a nivel de palabra
Divide el programa en sus elementos/
categorías
Analiza el tipo de cada uno para ver si son
TOKENS válidos
Filtra comentarios y separadores
En taka taka, descompone todo y luego verifica que cada componente este en una categoría
¿Qué hace el compilador en el análisis sintáctico?
Se identifican las estructuras ayudándose con los tokens
Se arma un arbolito sintáctico del programa y compara con los arboles de derivación para ver que lo que entra es correcto
¿Qué hace el compilador en el análisis semántico?
-Realiza la comprobación de tipos
-Realiza comprobaciones de duplicados
-Realiza comprobaciones de nombres(toda variable debe estar declarada en su entorno, variables no declaradas)
El código objeto es dependiente de la maquina
V o F
V, e así papito
¿Qué hace el compilador en la etapa de síntesis?
-Construye el programa ejecutable y genera el
código necesario
-Se genera el módulo de carga. Programa objeto completo
-Se realiza el proceso de optimización. (Optativo)
-El cargador Loader (Programa) lo carga en memoria
¿Qué es el descriptor?
Es el lugar( repositorio) donde se guarda la relación entre las entidades y los atributos
¿Cuál es el concepto de binding(ligadura)?
Es el momento en el que el atributo se asocia con un valor
¿Cuáles son las diferencias que se presentan en la ligadura en distintos lenguajes?
-El número de entidades
-El número de atributos que se les pueden ligar
-El momento de la ligadura
-La estabilidad de la ligadura
¿Cuáles son los tipos de ligadura?
-Estática
-Dinámica
¿Cuál es la diferencia entre ligadura estática y ligadura dinámica?
La ligadura estática se establece antes de la ejecución y no se puede modificar, mientras que la dinámica se establece durante la ejecución y si se pueden modificar (excepto las constantes)
¿En que momentos se puede establecer la ligadura?
La estática en:
-Definición del lenguaje
-Implementación del lenguaje
-Compilación/traducción
La dinámica:
-En ejecución
¿Cuáles son los atributos de una variable?
-Nombre(String de caracteres para referenciarla)
-Alcance(lugar donde es conocida la variable)
-Tipo(valores y operaciones permitidas)
-Lvalor(el área de memoria ligada a la variable)
-Rvalor(valor almacenado en el l-valor de la variable
¿Cuáles son los aspectos de diseño del nombre? (atributos)
-La longitud máxima según el lenguaje
-Caracteres aceptados
-Sensitivo a mayúsculas
-Palabras reservadas
-Palabras clave
¿Cuáles son los tipos de ligadura de alcance?
-Ligadura de alcance estático(alcance léxico, se define dentro de una estructura léxica)
-Ligadura de alcance dinámico
El alcance de la variable se extiende hasta el resto del código o cuando hay una variable con el mismo nombre
Luego además, estas se pueden combinar con las siguientes características:
Global: referencias a variables creadas por el programa principal
Local: referencias a variables creadas dentro de una unidad (subprograma)
No local: referencias a variables utilizadas en un subprograma pero no creadas en un subprograma
¿En que ayuda el tipo de una variable?
-Proteger a las variables de operaciones no
permitidas
-Chequear tipos
-Verificar el uso correcto de las variables
Ayuda a a detectar errores en forma temprana y a la confiabilidad del código
¿Cuáles son las clases de tipos?
-Predefinidos por el lenguaje(boolean,int,etc)
-Definidos por el usuario( nuevos tipos creados por el usuario, permiten crear abstracciones, escapsular lógica y datos, reutilizar código y mejorar la claridad y legibilidad del código)
¿Qué es un tipo de dato abstracto(TAD)?
Son estructuras de datos que representan un nuevo tipo de abstracto, están compuestas por una colección de operaciones, no hay una ligadura por defecto, el programador la establece
(son las listas, vectores, grafos de toda la vida)
¿Cómo se puede realizar la ligadura estática?
-Explicita( la ligadura se establece mediante una declaración, mas claridad y fiabilidad)
-Implícita(la ligadura se establece mediante reglas del lenguaje)
-Inferida(la ligadura se establece por intuición de su contenido)
Describa la ligadura dinámica
Ligadura dinámica:
Se liga en ejecución y puede cambiarse cuando se le asigna un valor en una sentencia de asignación(mas costosa, chequeo dinámico, menor legibilidad y errores
¿Cómo esta compuesto el L-valor?
-Periodo de vida(periodo en el que existe la ligadura)
-Alocación(Momento en que se reserva la memoria para una variable)
(todo esto es en runtime)
¿Cuáles son los tipos de alocación?
-Estática(en compilación, se guarda en zona de datos y perdura hasta el fin de la ejecución)
-Dinámica(1Automatica:cuando aparece una declaración en ejecucion,2Implicita: con la creación de una sentencia)
-Persistente(son aquellos que persisten mas allá de la memoria ej: archivos)
¿Cuándo se realiza la ligadura de la variable a su valor? (concretamente el r-valor)
Binding dinamico de una variable a su valor:
El valor (r-valor) puede cambiar durante la ejecución con una asignación, pero no se puede cambiar si es una constante
el binding dinámico puede cambiar dependiendo del lenguaje
¿Qué son los punteros?
Puntero: variable que sirve para señalar la posición de la memoria en que se encuentra otro dato almacenando como valor, con la dirección de ese dato.
¿Qué es el alias?
Es una técnica que permite que haya quevariables comparten un objeto en el mismo entorno de referencia, y sus caminos de acceso conducen al mismo objeto.
¿Cuáles son las ventajas y desventajas del alias?
Ventaja:
-Compartir objetos se utiliza para mejorar la eficiencia.
Desventajas
-Generar programas que sean difíciles de leer
-Generar errores porque el valor de una variable se puede modificar incluso cuando no se utiliza su nombre.
¿Cuándo se dice que un nombre esta sobrecargado?
Un nombre esta sobrecargado si en un momento referencia más de una entidad
¿Cuál es la principal diferencia entre alias y sobrecarga?
El alias es muchos nombres que referencian a una entidad, y la sobrecarga es un nombre que referencia múltiples entidades
Lo mejor seria que no haya ambigüedad
1 elemento -> 1 entidad
Las variables contantes tienen alcance todo el programa
V o F
F
Un error de tipo semántico siempre es provocado por un error de tipo sintáctico
V o F
F
En muchos lenguajes, una variable puede aparecer del lado derecho de la asignación sin habérsele asignado, a través de una sentencia, un valor previamente
V o F
V
El r-valor de un puntero es el l-valor del objeto que quiere representar
V o F
F
Un error de tipo sintáctico siempre provoca un error de tipo semántico
V o F
F
Los errores de semántica estática son aquellos que se detectan cuando el programa pasa a ejecución
V o F
F