Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Conceptos y Lenguaje Imperativo
AYUDANTÍA 1 Conceptos y Lenguaje Imperativo
2
Sintaxis y Semántica Sintaxis: Palabras claves y símbolos reservados que pertenecen al lenguaje (parentesis, comentarios, delimitadores). Semántica: Significado de expresiones y sentencias (puede variar de acuerdo al lenguaje).
3
Gramática Métodos formales de descripcion: Backus Naur Form (BNF) Extended BNF (EBNF). Ejemplo: while_stmt ::= “while” <condición> “:” <sentencias> [“else” “:” <sentencias>]
4
Ejemplo (EBNF)->Parse tree
<switch_stmt>::= switch <identifier> {<case_stnt>}[<default_stmt>] <case_stmt>::= case <value>: {<stmts>} break; <default_stmt>::= default: {<stmts>} <identifier>::= <leter>{<leter>|<digit>} switch(T){ case 1: func1(); break; case 2: func2(); break; default: salir(); }
5
switch_stmt switch T default_stmt case_stmt case_stmt default: salir(); case 1: func1(); break; case 2: func2(); break;
6
Eliminar Ambigüedades
Agrupación (), []. Precedencia. Orden sintáctico (izquierda a derecha). Anidación.
7
Proceso de Compilación
Programa fuente (código). Análisis Léxico (Tokens léxicos). Análisis Sintáctico (Parse tree). Análisis Semántico (Código intermedio). Generación de código (Programa objeto).
8
Conceptos Nombres: Identificador que designa el lenguaje
Variables: Representación de un objeto de memoria Identificador Dirección Contenido Tipo de dato (determina operaciones válidas) Tiempo de vida (cuando se crea y destruye) Ámbito (donde se puede referenciar).
9
Memoria Al ejecutar un programa, el Sistema Operativo carga el código ejecutable en una zona de memoria. Zonas de memoria: Memoria Global: Aquí se almacenan el bloque de código main() y las funciones. Ej: Variables estáticas (static int x = 1024;). Stack: Se utiliza como una pila. Ej: Variables que no sean estáticas ni direcciones de memoria (int y = 512;). Heap: Se utiliza cuando es necesario y de manera aleatoria (la memoria no se asigna en un orden particular). Ej: int *x; (dirección de memoria en Stack). x = (int *)malloc(sizeof(int)); (apunta al heap). *x = 16; (guarda el valor en el heap).
10
Ligado y Memoria Asociación de un atributo a una entidad del lenguaje. La variable debe ser “ligada” para que pueda ser usada. Ligado Estático: Declaración de variables. Ligado Dinámico: Se realiza al momento de asignar una variable. Es importante que una variable tenga un “tiempo de vida”. Liberación Implícita: Garbage Colector (JVM). Liberación Explícita: free(...);
11
Ligado de Variables Variables Estáticas: Son ligadas antes de la ejecución. Ej: static float pi = 3,14; Variables Dinámicas de Stack: Son ligadas en el momento en que la ejecución alcanza el código asociado. Ej: int mil = 1000; (al darse cuenta que es int, le asigna el espacio de memoria necesario para un int). Variables Dinámicas de Heap: Son ligadas explícitamente (reservando memoria). malloc( ), free( ).
12
Tipos de Datos Primitivos:
Enteros: signed, unsinged, char, short, int, long, long long. Punto flotante: float, double y long double. Booleano (ocupa un byte). Carácter: char. Arreglos: Secuencia de elementos que se identifican por su posición mediante un índice. Almacenados contiguos en memoria. DIR(Array[x]) = DIR(Array[0]) + x*sizeof(tipo). Arreglos Multidimensionales: DIR(Array[x][y]) = DIR(Array[0][0])+(y * MAXx + x) * sizeof(tipo). Arreglos Asociativos (Python): Arr = {key1:value1, ... , keyN:valueN} (foreach). Hashing: ARI.
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.