UNIDAD VI.-Análisis semántico.


6.1.-Funciones del análisis semántico.

El analizador semántico detecta la validez semántica de las sentencias aceptadas por el analizador sintáctico. El analizador semántico suele trabajar simultáneamente al analizador sintáctico y en estrecha cooperación. Se entiende por semántica como el conjunto de reglas que especifican el significado de cualquier sentencia sintácticamente correcta y escrita en un determinado lenguaje.

Las rutinas semánticas deben realizar la evaluación de los atributos de las gramáticas siguiendo las reglas semánticas asociadas a cada producción de la gramática. El análisis sintáctico es la fase en la que se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre sí, etc. En definitiva, comprobará que el significado de lo que se va leyendo es válido.

La salida “teórica” de la fase de análisis semántico sería un árbol semántico. Consiste en un árbol sintáctico en el que cada una de sus ramas ha adquirido el significado que debe tener. 

En el caso de los operadores polimórficos (un único símbolo con varios significados), el 
análisis semántico determina cuál es el aplicable.

Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y preparar la generación de código. Las rutinas semánticas suelen hacer uso de una pila (la pila semántica) que contiene la información semántica asociada a los operandos (y a veces a los operadores) en forma de registros semánticos.

6.2.- Reglas semánticas.

Son el conjunto de normas y especificaciones que  definen al lenguaje de programación y están dadas por la sintaxis del lenguaje, las reglas semánticas asignan un significado lógico a ciertas expresiones definidas en la sintaxis del lenguaje.

La evaluación de las reglas semánticas define los valores de los atributos en los nodos del árbol de análisis sintáctico para la cadena de entrada.  Una regla semántica también puede tener efectos colaterales, por ejemplo, imprimir un valor o actualizar una variable global. 

6.3.- Compatibilidad de tipos.

Durante la fase de análisis semántico, el compilador debe verificar que los tipos y valores asociados a los objetos de un programa se utilizan de acuerdo con la especificación del lenguaje. Además debe detectar conversiones implícitas de tipos para efectuarlas o insertar el código apropiado para efectuarlas así como almacenar información relativa a los tipos de los objetos y aplicar las reglas de verificación de tipos.

La compatibilidad básica de tipos puede ser de la siguiente manera:

Equivalencia: determina cuándo dos objetos pueden considerarse del mismo tipo.

Compatibilidad: determina cuándo un objeto de cierto tipo puede ser usado en un cierto contexto.

Inferencia: derivación del tipo de un objeto a partir de sus componentes.

Conversión: permitir y efectuar un cambio de tipo.

Coerción: conversión automática de un tipo a otro.

Flujo de control: Las proposiciones que hacen que el flujo del control abandone una construcción deben tener algún lugar a dónde transferir el flujo de  control.

Nombres: en ocasiones, el mismo nombre debe aparecer dos o más veces en un mismo bloque de instrucciones, el compilador debe comprobar que se utilice el mismo nombre en ambos sitios.

6.4.- Sistemas de tipos.

Un sistema de tipos  es una serie de reglas para asignar expresiones de tipos a las distintas partes de un programa y verificar su corrección.  En concreto, formarán el sistema de tipos las definiciones y reglas que permiten comprobar cuál es el dominio asignado a una variable, y en qué contextos puede ser usada.  Un sistema de tipos puede tener comprobaciones tanto estáticas como dinámicas.

Los tipos básicos que están definidos en un sistema de tipos son:

Tipos primitivos: son todos aquellos que están definidos por el lenguaje y son las expresiones más simples que existen, dentro de estas se encuentran:

booleano: un byte, 0 (false), 1 (true)

carácter: un byte, ASCII Java: dos bytes, UNICODE

entero: dos bytes...

real: coma fija, coma flotante

Constructores: son construcciones de datos que permiten generar datos complejos en base a los tipos de datos primitivos.  Cada elemento construido debe ser independiente de los demás, deben poder usarse en cualquier combinación y deben tener coherencia y sentido. 

Algunos ejemplos de construcciones son:

enumerados: orden total

sub rangos: intervalos

registros: tuplas o filas de datos

vectores: secuencias de datos agrupadas en localidades de memoria adjuntas

conjuntos: selección de datos que forman parte de un todo

punteros: referencias a memoria.

listas: secuencias sin indexado

ficheros: secuencias de  código con posición.

funciones: genera un valor y realizan ciertas acciones dentro del programa.

6.5.- Comprobación estática y dinámica de tipos.

La comprobación sirve para manejar  y descubrir errores en el código y como resultado mínimo, se espera que  el compilador informe  la naturaleza y la posición del error.  Es mejor que el comprobador de tipos se recupere de los errores, para que pueda comprobar el resto de la entrada.  Como el manejo de errores afecta a las reglas de comprobación de tipos, tiene que diseñarse como parte del sistema de tipos desde el principio; las reglas tienen que servir para tratar los errores.

La inclusión del manejo de errores puede dar como resultado un sistema de tipos que vaya más allá del necesario para especificar programas correctos. Como ya se menciono puede ser de 2 tipos: estática y dinámica.

Comprobación estática: es  llevada a cabo durante la compilación y antes de la ejecución, para ello toda la información necesaria debe estar disponible al momento de la compilación, durante está etapa no se genera código.

Comprobación dinámica: es llevada a cabo durante la ejecución, por lo cual puede encontrar errores por referencia a variables que aún no tienen valor o por el uso de punteros NULL, los programas que implementan está técnica de comprobación generalmente son poco eficientes  y tardan más en  realizar su ejecución, esta comprobación es usada por  los intérpretes .

6.6.- Comprobación de tipos en expresiones, sentencias y funciones.

A partir de reglas semánticas se desarrolla la comprobación de tipos para expresiones, sentencias y funciones.  El comprobador de tipos es un esquema de traducción que sintetiza el tipo de cada expresión a partir de los tipos de las subexpresiones.  El comprobador de tipos puede manejar matrices, apuntadores, proposiciones y funciones.

6.7.- Conversiones de tipos, sobrecarga de funciones y operadores, funciones polimórficas.

Conversiones de tipos: se usan cuando los tipos de datos no coinciden entre si y se quiere hacer una operación entre ellos como una asignación o una suma, para ello el compilador válida los tipos de dato primero y después hace una conversión siempre que sea posible para poder  llevar a cabo la operación, en algunos lenguajes esto es conocido como “casting”.

Coerciones:  en este caso la conversión entre tipos está implícita si el compilador lo realiza automáticamente, esta condición limita a muchos lenguajes a situaciones donde en algunos casos no se pierde información pero en otros si, por ejemplo si es viable convertir un entero aun real pero no al contrario.

Sobrecarga de funciones y operadores: se origina cuando una variable, método o función tiene varios contextos o definiciones en  su contexto, por ejemplo cuando en un programa una variable es declarada global como doble y localmente como entero, o cuando una función tiene el mismo nombre (polimorfismo) pero recibe parámetros distintos y los valores que utiliza son también distintos. Este “problema” se resuelve asignando un solo valor y significado a cada variable.

Funciones polimórficas: es cuando una función es definida varias veces, pero en cada definición está posee diversos parámetros de diversos tipos, esto no solo se aplica a funciones, también a variables  y otras partes de código.

38 comentarios:

  1. Ayy me vengoooooo🥵🥵🥵

    ResponderEliminar
  2. Mi perro se vomitó, ya vengo...

    ResponderEliminar
  3. DIARREAAA EXPLOSIVAAA💩💨

    ResponderEliminar
  4. Puto el que lo lea😏

    ResponderEliminar
  5. tranquilo pana, ya sabemos que no te ama🫂🫂

    ResponderEliminar
  6. Necesito una paja

    Persona que me
    Ame mucho y
    Jamas me
    Abanone

    ResponderEliminar
  7. Estimados estudiantes,

    Estoy sumamente decepcionada y frustrada por el mal uso que están haciendo de la plataforma de comentarios. Es inaceptable ver cómo algunos de ustedes han optado por utilizarla para enviar mensajes irrespetuosos, ofensivos y fuera de lugar. Esta herramienta fue diseñada para fomentar un ambiente de aprendizaje colaborativo y respetuoso, y lo que estoy presenciando es totalmente contrario a eso.

    Como profesora, tengo la responsabilidad de asegurar que todos los alumnos se sientan seguros y respetados en este entorno educativo. No toleraré ningún tipo de acoso, burlas o discriminación en la plataforma, ni en ninguna otra parte del colegio.

    Les insto a reflexionar sobre sus acciones y recordar que cada palabra que escriben puede tener un impacto profundo en sus compañeros. No se trata solo de las consecuencias disciplinarias que puedan enfrentar, sino también del daño emocional que pueden causar a otros.

    A partir de ahora, habrá consecuencias más severas para aquellos que continúen utilizando la plataforma de comentarios de manera inapropiada. Quiero que sepan que estamos monitoreando de cerca sus interacciones en línea y que tomaremos las medidas necesarias para garantizar un ambiente de respeto y responsabilidad.

    Es responsabilidad de todos y cada uno de ustedes contribuir a un ambiente de aprendizaje seguro y positivo. Espero que reflexionen sobre sus acciones y tomen en serio esta advertencia.

    ResponderEliminar
    Respuestas
    1. Reflexiomene esta! 🖕🏼

      Eliminar
    2. Profe, mañana se puede venir con tanga o el uniforme es obligatorio?

      Eliminar
    3. El tanga está bien estudiante. Saludos

      Eliminar
  8. Y el corazón tucun tucun

    ResponderEliminar
  9. El gobierno de Federico era mejor, ahora la sociedad está perdida, que días más bellos con Juan Enrique de la Cruz Vega Acosta y su esposa María Teresa Leiva de los dolores Angulo, además una bendición para su hijo José José Jesus Sagrado Corazón de la Cruz Vega Angulo

    ResponderEliminar
    Respuestas
    1. Si, es indignante, Jose Rafael Gallegos Alvarado estuviera igualmente indignado mi estimado compatriota, opino que en estos tiempos hay que exterminar a toda la raza inferior que se opone al gobierno.

      Eliminar
  10. Que ganas de invadir Polonia

    ResponderEliminar
    Respuestas
    1. Jeśli bezbożnie najedziesz dupę swojej babci, ty brudna nazistowska kupo gówna, niech żyje Polska!

      Eliminar
  11. Las mujeres son geis porque les gustan los hombres

    ResponderEliminar
  12. Me cago en la madre de Rodrigo Alberto de Jesús Chaves Robles

    ResponderEliminar
  13. Creemos que la pobreza debe ser erradicada para poder desarrollar la economía.

    ResponderEliminar
    Respuestas
    1. ░█▀░░░░░░░░░░░▀▀███████░░░░
      ░░█▌░░░░░░░░░░░░░░░▀██████░░░
      ░█▌░░░░░░░░░░░░░░░░███████▌░░
      ░█░░░░░░░░░░░░░░░░░████████░░
      ▐▌░░░░░░░░░░░░░░░░░▀██████▌░░
      ░▌▄███▌░░░░▀████▄░░░░▀████▌░░
      ▐▀▀▄█▄░▌░░░▄██▄▄▄▀░░░░████▄▄░
      ▐░▀░░═▐░░░░░░══░░▀░░░░▐▀░▄▀▌▌
      ▐░░░░░▌░░░░░░░░░░░░░░░▀░▀░░▌▌
      ▐░░░▄▀░░░▀░▌░░░░░░░░░░░░▌█░▌▌
      ░▌░░▀▀▄▄▀▀▄▌▌░░░░░░░░░░▐░▀▐▐░
      ░▌░░▌░▄▄▄▄░░░▌░░░░░░░░▐░░▀▐░░
      ░█░▐▄██████▄░▐░░░░░░░░█▀▄▄▀░░
      ░▐░▌▌░░░░░░▀▀▄▐░░░░░░█▌░░░░░░
      ░░█░░▄▀▀▀▀▄░▄═╝▄░░░▄▀░▌░░░░░░
      ░░░▌▐░░░░░░▌░▀▀░░▄▀░░▐░░░░░░░
      ░░░▀▄░░░░░░░░░▄▀▀░░░░█░░░░░░░
      ░░░▄█▄▄▄▄▄▄▄▀▀░░░░░░░▌▌░░░░░░
      ░░▄▀▌▀▌░░░░░░░░░░░░░▄▀▀▄░░░░░
      ▄▀░░▌░▀▄░░░░░░░░░░▄▀░░▌░▀▄░░░
      ░░░░▌█▄▄▀▄░░░░░░▄▀░░░░▌░░░▌▄▄
      ░░░▄▐██████▄▄░▄▀░░▄▄▄▄▌░░░░▄░
      ░░▄▌████████▄▄▄███████▌░░░░░▄
      ░▄▀░██████████████████▌▀▄░░░░
      ▀░░░█████▀▀░░░▀███████░░░▀▄░░
      ░░░░▐█▀░░░▐░░░░░▀████▌░░░░▀▄░
      ░░░░░░▌░░░▐░░░░▐░░▀▀█░░░░░░░▀
      ░░░░░░▐░░░░▌░░░▐░░░░░▌░░░░░░░
      ░╔╗║░╔═╗░═╦═░░░░░╔╗░░╔═╗░╦═╗░
      ░║║║░║░║░░║░░░░░░╠╩╗░╠═╣░║░║░
      ░║╚╝░╚═╝░░║░░░░░░╚═╝░║░║░╩═╝░

      Eliminar
  14. Muerte a la homosexualidad de mierda, arriba ESPAÑA OSTIA!!!

    ResponderEliminar