SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
Unidad V Análisis Semántico

  M.C. Juan Carlos Olivares Rojas
Agenda
5.1 Analizador semántico
5.2 Verificación de tipos en expresiones.
5.3 Conversión de tipos.
5.4 Acciones agregadas en un analizador
   sintáctico descendente (top-down).
5.5 Pila semántica en un analizador sintáctico
   ascendente (bottom-up).
5.6 Administración de la tabla de símbolos.
5.7 Manejo de errores semánticos.
5.1 Analizador semántico
• Ajuste significativo

• Comprobación de tipos: operandos-operadores

• Comprobación del flujo de control:
for(;;)
{
  …
  break;
  w= a+2;
}
Analizador semántico
• Comprobación de unicidad

• int a;
• char a; //una sola vez

• Comprobación relacionadas con nombres
Analizador semántico
• Tabla de símbolos:
  – Estructura en memoria
  – Almacena información sobre los tipos


• Sistemas de tipo:

• Tipo básico: entero, carácter, real, lógico
• Nombres de tipo
Analizador semántico
• Constructores de tipo: estructuras, uniones,
  objetos
• Apuntadores: referencias a tipos
• Funciones a=suma();

• Sistema de tipos: conjunto de reglas que
  determinan     el criterio  para    asignar
  expresiones de tipo a las diferentes partes
  del código fuente
Analizador semántico
• Cada analizador semántico implementa un
  sistema de tipos

• Comprobación dinámica y estática

• Estática: compilación
• Dinámica: Ejecución
char a[5]; strcpy(a, “abcdefghijk”);
Analizador semántico
• Fuertemente tipificado
• Débilmente tipificado

Símbolo
{
  nombre;
  tipo;
  ámbito;
}
5.2 Verificación de tipos en
           expresiones

• La verificación de los tipos de datos se hace
  asignando el valor de tipo de cada una de los
  componentes léxicos.

• Estos valores se comparan para verificar que
  los tipos de datos coincidan y sean
  congruentes, de lo contrario no se pueden
  realizar los cálculos.
5.3 Conversión de tipos
• Hay situaciones en las cuales se tiene un
  valor de un tipo dado y se desea almacenar
  ese valor en una variable de un tipo
  diferente.

• En algunos tipos es posible almacenar
  simplemente el valor sin una conversión de
  tipos; lo que se denomina conversión
  automática.
Conversión de tipos
• Esto sólo es posible en algún lenguaje de
  programación, si el compilador reconoce que
  la variable destino tiene la suficiente
  precisión para contener el valor origen.

• En Java se puede almacenar un valor byte
  en una variable int, dado que este tipo de
  datos es de mayor precisión que el primero.
Conversión de tipos
• A esto se le llama ensanchamiento o promoción,
  dado que el tipo más pequeño se ensancha o
  promociona al tipo compatible más grande. Si por
  el contrario, se desea asignar un valor de variable
  int a una variable byte se necesita realizar una
  conversión de tipos explícita.

• En algunos casos se puede realizar la conversión
  pero se pueden perder datos, como por ejemplo al
  pasar un valor flotante a un entero.
Conversión de tipos
• A esto se le llama estrechamiento, dado que
  se estrecha explícitamente el valor para que
  quepa en el destino.

• La conversión de un tipo se realiza poniendo
  delante un nombre de tipo entre paréntesis,
  por ejemplo, (tipo) valor.

• byte a; int b; a=(byte) b;
Comprobación de tipos
• Existen dos tipos de comprobación: estática
  y dinámica.

• La comprobación ayuda a evitar la mayoría
  de los errores de programación. Ejemplos:

• Comprobación de tipos. Para saber si el
  operador aplicado a los operadores es
  correcto
Comprobación de tipos
• Comprobación de flujo de control. Se debe verificar
  que las instrucciones que cambia el flujo de un
  programa sean válidos. Ejemplo: break, goto.

• Comprobación de unicidad: definir un objeto una
  sola vez.

• Comprobación relacionadas con nombres. El
  mismo nombre debe aparecer dos veces. Variables
  que se declaran pero no utilizan
Comprobación de tipos
• La comprobación de tipos es la más
  complicada. Las demás comprobaciones son
  rutinarias.

• El operador % ocupa que los dos operandos
  sean enteros.

• + es una función suma(a,b) que está
  sobrecargada para distintos tipos de datos
Comprobación de tipos
• Siempre se diseñan reglas de tipos como los
  valores numéricos se convierten al de mayor
  jerarquía o el tipo de datos punteros sólo
  apunta al tipo de datos declarado.

• Algunos lenguajes revisan el tamaño de los
  arreglos (Java) de manera estática otros lo
  hacen de manera dinámica (en tiempo de
  ejecución).
Comprobación de tipos
• Diferenciar el uso de +, * enteros que con punteros
  (aritmética de punteros)

• Al conjunto de reglas que se definen para la
  comprobación de los tipos de datos se denomina
  sistema de tipos

• La mayoría de veces la recuperación de errores se
  suele omitir ya que el programa no finaliza pero tal
  vez no obtenga los valores deseados
Comprobación de tipos
• Generalmente en la etapa de análisis
  sintáctico se suelen agregar los tipos a la
  tabla de símbolos.

• Se revisa el árbol sintáctico para comprobar
  los tipos asignados.
Comprobación de tipos
• Existen conversiones explícitas en las cuales el
  usuario indica el tipo de datos

• a = (int)(23.3/18.2);

• Las conversiones implícitas requieren de mayor
  tiempo de ejecución.

• Un ciclo de 1 a N tardó 5.4 y 48.4 nanosegundos
  utilizando conversiones implicitas.
Comprobación de tipos
• Polimorfismo: una función puede tener el
  mismo nombre con diferentes elementos. El
  tipo de datos debe ser diferente.

• Un ejemplo de polimorfismo son las plantillas
  en algún lenguaje de programación.

• Se debe considerar el ámbito de las
  variables (locales y globales).
5.4 Acciones agregadas en un
analizador sintáctico descendente
            (top-down)

• Muchas de las actividades que realiza un
  analizador semántico no son estándares,
  dependerán del objetivo del lenguaje de
  programación; por ejemplo, en algunas
  aplicaciones es interesante conocer que los
  datos estén en algún rango válido o que
  ciertos valores se utilicen para uso reservado
Acciones agregadas a un analizador
            semántico

• En algunas ocasiones nos interesa conocer el
  significado de las palabras de algún lenguaje
  dependiendo del contexto (gramáticas de tipo 1)
  para diferenciar palabras polisemánticas.

• La Web es una base de datos en la mayoría de los
  casos sin sentidos por lo que la tercera generación
  de la Web será la llamada Web semántica.
5.5 Pila semántica en un
analizador sintáctico ascendente
          (bottom-up).

• El diseño ascendente se refiere a la
  identificación de aquellos procesos que
  necesitan computarizarse con forme vayan
  apareciendo, su análisis como sistema y su
  codificación, o bien, la adquisición de
  paquetes de software para satisfacer el
  problema inmediato.
Pila semántica
• Los problemas de integración entre los
  subsistemas son sumamente costosos y
  muchos de ellos no se solucionan hasta que
  la programación alcanza la fecha limite para
  la integración total del sistema.

• Se necesita una memoria auxiliar que nos
  permita guardar los datos intermedios para
  poder hacer la comparación.
5.6 Administración de la tabla de
           símbolos

• La tabla de símbolos también recibe el
  nombre de ambiente. Un ambiente contiene
  un conjunto de parámetros que sólo son
  visibles en ese ambiente.

• La tabla de símbolos se mantiene durante
  todo el proceso de traducción agregando
  elementos específicos en cada paso.
Operaciones sobre la tabla de
              símbolos
• Inserta(símbolo)
• Existe(nombre)
• Tipo(nombre)

• Declaración         TIPO {tipo=obtengo(yytext());}
  listavar PYC
• Listavar         var {inserta(símbolo);} | var
  {inserta(simbolo);}
• Var        ID {simbolo=yytext; símbolo.tipo=tipo;
  simbolo.amb=ambito;}
Operaciones sobre la tabla de
             símbolos
• Exprlog PI exprlog {A=A;} PD
•          |NOT exprlog {A=A;}
•          |exprlog {A1=A;} OPLOG exprlog
  {A2=A
• If(A1==INT && A2==INT)
• A=INT;
• Else
• A=ERROR_TIPO;}
5.7 Manejo de errores semánticos

• Los errores semánticos son pocos y los que
  existen no se pueden detectar tan fácilmente.

• Hasta esta etapa los errores son mostrados
  a los usuarios. Los demás errores ya son
  muy difíciles de detectar y generalmente se
  dan en tiempo de ejecución
Manejo de errores semánticos
• Algunos problemas se presentan durante la
  fase de gestión de memoria al pasar
  argumentos o al crear la pila semántica.

• Muchos errores se generan durante la etapa
  del enlazador, al tratar de obtener código
  existente de algunas funciones/métodos ya
  implementadas en bibliotecas/APIs
¿Preguntas?

Más contenido relacionado

Destacado (20)

Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semantico
 
Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
 
Poocpp2
Poocpp2Poocpp2
Poocpp2
 
análisis sintactico semántico sobre MEMs
análisis sintactico semántico sobre MEMsanálisis sintactico semántico sobre MEMs
análisis sintactico semántico sobre MEMs
 
Apuntes01
Apuntes01Apuntes01
Apuntes01
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
Clase15
Clase15Clase15
Clase15
 
Download.php
Download.phpDownload.php
Download.php
 
Analizador sintáctico
Analizador sintácticoAnalizador sintáctico
Analizador sintáctico
 
Programación Funcional con Scheme
Programación Funcional con SchemeProgramación Funcional con Scheme
Programación Funcional con Scheme
 
Numeros Pseudoaleatorios
Numeros PseudoaleatoriosNumeros Pseudoaleatorios
Numeros Pseudoaleatorios
 
Semántica de la oración
Semántica de la oraciónSemántica de la oración
Semántica de la oración
 
Análisis Sintáctico
Análisis SintácticoAnálisis Sintáctico
Análisis Sintáctico
 
Etapas de compilacion
Etapas de compilacionEtapas de compilacion
Etapas de compilacion
 
SIMULACION UNIDAD II
SIMULACION UNIDAD IISIMULACION UNIDAD II
SIMULACION UNIDAD II
 
cuadro resumen oración simple
cuadro resumen oración simplecuadro resumen oración simple
cuadro resumen oración simple
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Esquema oración simple (análisis sintáctico). Presentación con esquema senci...
Esquema oración simple (análisis sintáctico).  Presentación con esquema senci...Esquema oración simple (análisis sintáctico).  Presentación con esquema senci...
Esquema oración simple (análisis sintáctico). Presentación con esquema senci...
 
Hardware Y Software
Hardware Y SoftwareHardware Y Software
Hardware Y Software
 

Similar a Ps2 u5

Introduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdfIntroduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdfFranciaMascarell
 
Unidad 2 programación estructurada
Unidad 2 programación estructuradaUnidad 2 programación estructurada
Unidad 2 programación estructuradaRoberth Camana
 
Unidad 1 algoritmos y programas
Unidad 1 algoritmos y programasUnidad 1 algoritmos y programas
Unidad 1 algoritmos y programasRoberth Camana
 
Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_Jennybeatriz1
 
Elementos basicos de un programa
Elementos basicos de un programaElementos basicos de un programa
Elementos basicos de un programanelson_lino
 
C curso intr
C curso intr C curso intr
C curso intr leo24012
 
Actividad 2 programacion de sistemas
Actividad 2 programacion de sistemasActividad 2 programacion de sistemas
Actividad 2 programacion de sistemasJESSIKADG86
 
Proceso de Compilacion
Proceso de CompilacionProceso de Compilacion
Proceso de Compilacionguest9a91e2
 
Clase 2 Variables Entorno y Pseudocodigo.pptx
Clase 2 Variables Entorno y Pseudocodigo.pptxClase 2 Variables Entorno y Pseudocodigo.pptx
Clase 2 Variables Entorno y Pseudocodigo.pptxLuisAlberto353863
 
Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Maztherprozh
 
Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Maztherprozh
 
Programación Algoritmos - Tipos de Datos y Estructuras de Control Básicas
Programación Algoritmos - Tipos de Datos y Estructuras de Control BásicasProgramación Algoritmos - Tipos de Datos y Estructuras de Control Básicas
Programación Algoritmos - Tipos de Datos y Estructuras de Control Básicasaveas01
 
Pteg g-grupo 6-lista33-visita3-expo cap 5 tema algoritmos
Pteg g-grupo 6-lista33-visita3-expo cap 5 tema algoritmosPteg g-grupo 6-lista33-visita3-expo cap 5 tema algoritmos
Pteg g-grupo 6-lista33-visita3-expo cap 5 tema algoritmosOdair Josue Ordoñez Alcerro
 
2rias5me
2rias5me2rias5me
2rias5mehtmrk
 

Similar a Ps2 u5 (20)

Recuperacin 333333
Recuperacin 333333Recuperacin 333333
Recuperacin 333333
 
Introduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdfIntroduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdf
 
Unidad 2 programación estructurada
Unidad 2 programación estructuradaUnidad 2 programación estructurada
Unidad 2 programación estructurada
 
Unidad 1 algoritmos y programas
Unidad 1 algoritmos y programasUnidad 1 algoritmos y programas
Unidad 1 algoritmos y programas
 
Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_
 
Elementos basicos de un programa
Elementos basicos de un programaElementos basicos de un programa
Elementos basicos de un programa
 
C curso intr
C curso intr C curso intr
C curso intr
 
Progamacion
ProgamacionProgamacion
Progamacion
 
Actividad 2 programacion de sistemas
Actividad 2 programacion de sistemasActividad 2 programacion de sistemas
Actividad 2 programacion de sistemas
 
Variables1
Variables1Variables1
Variables1
 
Proceso de Compilacion
Proceso de CompilacionProceso de Compilacion
Proceso de Compilacion
 
Clase 2 Variables Entorno y Pseudocodigo.pptx
Clase 2 Variables Entorno y Pseudocodigo.pptxClase 2 Variables Entorno y Pseudocodigo.pptx
Clase 2 Variables Entorno y Pseudocodigo.pptx
 
Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_
 
Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)
 
Unidad 2 Principios de programación
Unidad 2 Principios de programaciónUnidad 2 Principios de programación
Unidad 2 Principios de programación
 
Programación Algoritmos - Tipos de Datos y Estructuras de Control Básicas
Programación Algoritmos - Tipos de Datos y Estructuras de Control BásicasProgramación Algoritmos - Tipos de Datos y Estructuras de Control Básicas
Programación Algoritmos - Tipos de Datos y Estructuras de Control Básicas
 
Programacion
ProgramacionProgramacion
Programacion
 
Tabla De Simbolos
Tabla De SimbolosTabla De Simbolos
Tabla De Simbolos
 
Pteg g-grupo 6-lista33-visita3-expo cap 5 tema algoritmos
Pteg g-grupo 6-lista33-visita3-expo cap 5 tema algoritmosPteg g-grupo 6-lista33-visita3-expo cap 5 tema algoritmos
Pteg g-grupo 6-lista33-visita3-expo cap 5 tema algoritmos
 
2rias5me
2rias5me2rias5me
2rias5me
 

Ps2 u5

  • 1. Unidad V Análisis Semántico M.C. Juan Carlos Olivares Rojas
  • 2. Agenda 5.1 Analizador semántico 5.2 Verificación de tipos en expresiones. 5.3 Conversión de tipos. 5.4 Acciones agregadas en un analizador sintáctico descendente (top-down). 5.5 Pila semántica en un analizador sintáctico ascendente (bottom-up). 5.6 Administración de la tabla de símbolos. 5.7 Manejo de errores semánticos.
  • 3. 5.1 Analizador semántico • Ajuste significativo • Comprobación de tipos: operandos-operadores • Comprobación del flujo de control: for(;;) { … break; w= a+2; }
  • 4. Analizador semántico • Comprobación de unicidad • int a; • char a; //una sola vez • Comprobación relacionadas con nombres
  • 5. Analizador semántico • Tabla de símbolos: – Estructura en memoria – Almacena información sobre los tipos • Sistemas de tipo: • Tipo básico: entero, carácter, real, lógico • Nombres de tipo
  • 6. Analizador semántico • Constructores de tipo: estructuras, uniones, objetos • Apuntadores: referencias a tipos • Funciones a=suma(); • Sistema de tipos: conjunto de reglas que determinan el criterio para asignar expresiones de tipo a las diferentes partes del código fuente
  • 7. Analizador semántico • Cada analizador semántico implementa un sistema de tipos • Comprobación dinámica y estática • Estática: compilación • Dinámica: Ejecución char a[5]; strcpy(a, “abcdefghijk”);
  • 8. Analizador semántico • Fuertemente tipificado • Débilmente tipificado Símbolo { nombre; tipo; ámbito; }
  • 9. 5.2 Verificación de tipos en expresiones • La verificación de los tipos de datos se hace asignando el valor de tipo de cada una de los componentes léxicos. • Estos valores se comparan para verificar que los tipos de datos coincidan y sean congruentes, de lo contrario no se pueden realizar los cálculos.
  • 10. 5.3 Conversión de tipos • Hay situaciones en las cuales se tiene un valor de un tipo dado y se desea almacenar ese valor en una variable de un tipo diferente. • En algunos tipos es posible almacenar simplemente el valor sin una conversión de tipos; lo que se denomina conversión automática.
  • 11. Conversión de tipos • Esto sólo es posible en algún lenguaje de programación, si el compilador reconoce que la variable destino tiene la suficiente precisión para contener el valor origen. • En Java se puede almacenar un valor byte en una variable int, dado que este tipo de datos es de mayor precisión que el primero.
  • 12. Conversión de tipos • A esto se le llama ensanchamiento o promoción, dado que el tipo más pequeño se ensancha o promociona al tipo compatible más grande. Si por el contrario, se desea asignar un valor de variable int a una variable byte se necesita realizar una conversión de tipos explícita. • En algunos casos se puede realizar la conversión pero se pueden perder datos, como por ejemplo al pasar un valor flotante a un entero.
  • 13. Conversión de tipos • A esto se le llama estrechamiento, dado que se estrecha explícitamente el valor para que quepa en el destino. • La conversión de un tipo se realiza poniendo delante un nombre de tipo entre paréntesis, por ejemplo, (tipo) valor. • byte a; int b; a=(byte) b;
  • 14. Comprobación de tipos • Existen dos tipos de comprobación: estática y dinámica. • La comprobación ayuda a evitar la mayoría de los errores de programación. Ejemplos: • Comprobación de tipos. Para saber si el operador aplicado a los operadores es correcto
  • 15. Comprobación de tipos • Comprobación de flujo de control. Se debe verificar que las instrucciones que cambia el flujo de un programa sean válidos. Ejemplo: break, goto. • Comprobación de unicidad: definir un objeto una sola vez. • Comprobación relacionadas con nombres. El mismo nombre debe aparecer dos veces. Variables que se declaran pero no utilizan
  • 16. Comprobación de tipos • La comprobación de tipos es la más complicada. Las demás comprobaciones son rutinarias. • El operador % ocupa que los dos operandos sean enteros. • + es una función suma(a,b) que está sobrecargada para distintos tipos de datos
  • 17. Comprobación de tipos • Siempre se diseñan reglas de tipos como los valores numéricos se convierten al de mayor jerarquía o el tipo de datos punteros sólo apunta al tipo de datos declarado. • Algunos lenguajes revisan el tamaño de los arreglos (Java) de manera estática otros lo hacen de manera dinámica (en tiempo de ejecución).
  • 18. Comprobación de tipos • Diferenciar el uso de +, * enteros que con punteros (aritmética de punteros) • Al conjunto de reglas que se definen para la comprobación de los tipos de datos se denomina sistema de tipos • La mayoría de veces la recuperación de errores se suele omitir ya que el programa no finaliza pero tal vez no obtenga los valores deseados
  • 19. Comprobación de tipos • Generalmente en la etapa de análisis sintáctico se suelen agregar los tipos a la tabla de símbolos. • Se revisa el árbol sintáctico para comprobar los tipos asignados.
  • 20. Comprobación de tipos • Existen conversiones explícitas en las cuales el usuario indica el tipo de datos • a = (int)(23.3/18.2); • Las conversiones implícitas requieren de mayor tiempo de ejecución. • Un ciclo de 1 a N tardó 5.4 y 48.4 nanosegundos utilizando conversiones implicitas.
  • 21. Comprobación de tipos • Polimorfismo: una función puede tener el mismo nombre con diferentes elementos. El tipo de datos debe ser diferente. • Un ejemplo de polimorfismo son las plantillas en algún lenguaje de programación. • Se debe considerar el ámbito de las variables (locales y globales).
  • 22. 5.4 Acciones agregadas en un analizador sintáctico descendente (top-down) • Muchas de las actividades que realiza un analizador semántico no son estándares, dependerán del objetivo del lenguaje de programación; por ejemplo, en algunas aplicaciones es interesante conocer que los datos estén en algún rango válido o que ciertos valores se utilicen para uso reservado
  • 23. Acciones agregadas a un analizador semántico • En algunas ocasiones nos interesa conocer el significado de las palabras de algún lenguaje dependiendo del contexto (gramáticas de tipo 1) para diferenciar palabras polisemánticas. • La Web es una base de datos en la mayoría de los casos sin sentidos por lo que la tercera generación de la Web será la llamada Web semántica.
  • 24. 5.5 Pila semántica en un analizador sintáctico ascendente (bottom-up). • El diseño ascendente se refiere a la identificación de aquellos procesos que necesitan computarizarse con forme vayan apareciendo, su análisis como sistema y su codificación, o bien, la adquisición de paquetes de software para satisfacer el problema inmediato.
  • 25. Pila semántica • Los problemas de integración entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programación alcanza la fecha limite para la integración total del sistema. • Se necesita una memoria auxiliar que nos permita guardar los datos intermedios para poder hacer la comparación.
  • 26. 5.6 Administración de la tabla de símbolos • La tabla de símbolos también recibe el nombre de ambiente. Un ambiente contiene un conjunto de parámetros que sólo son visibles en ese ambiente. • La tabla de símbolos se mantiene durante todo el proceso de traducción agregando elementos específicos en cada paso.
  • 27. Operaciones sobre la tabla de símbolos • Inserta(símbolo) • Existe(nombre) • Tipo(nombre) • Declaración TIPO {tipo=obtengo(yytext());} listavar PYC • Listavar var {inserta(símbolo);} | var {inserta(simbolo);} • Var ID {simbolo=yytext; símbolo.tipo=tipo; simbolo.amb=ambito;}
  • 28. Operaciones sobre la tabla de símbolos • Exprlog PI exprlog {A=A;} PD • |NOT exprlog {A=A;} • |exprlog {A1=A;} OPLOG exprlog {A2=A • If(A1==INT && A2==INT) • A=INT; • Else • A=ERROR_TIPO;}
  • 29. 5.7 Manejo de errores semánticos • Los errores semánticos son pocos y los que existen no se pueden detectar tan fácilmente. • Hasta esta etapa los errores son mostrados a los usuarios. Los demás errores ya son muy difíciles de detectar y generalmente se dan en tiempo de ejecución
  • 30. Manejo de errores semánticos • Algunos problemas se presentan durante la fase de gestión de memoria al pasar argumentos o al crear la pila semántica. • Muchos errores se generan durante la etapa del enlazador, al tratar de obtener código existente de algunas funciones/métodos ya implementadas en bibliotecas/APIs