← Tema 1.2.4 UABC · FCITEC > PARADIGMAS_PROGRAMACION > UNIDAD_I > 1.2.4_COMPILADORES_INTERPRETES --:--:--
UNIDAD I · LENGUAJES DE PROGRAMACIÓN — SUBTEMA 1.2.4

Compiladores e Intérpretes

Todo programa que escribes tiene que atravesar una frontera: la que separa el texto que tú entiendes del código que la máquina ejecuta. Esta sesión desarma esa frontera pieza por pieza — vas a ver, en vivo, cómo un compilador desmonta tu código en fases y cómo un intérprete lo ejecuta línea por línea, con un motor de análisis real corriendo en esta misma página.

Competencia: comparar traducción vs. ejecución directa Duración: 1 sesión · 2 h Prerrequisito: 1.2.1–1.2.3
1.2.1 Léxico/Sintaxis› 1.2.2 Semántica› 1.2.3 Pragmática› 1.2.4 Compiladores/Intérpretes
Docente: Dr. Jose Manuel Muñoz Contreras Facultad: Facultad de Ciencias de la Ingeniería y Tecnología, Unidad Valle de las Palmas (FCITEC) — UABC Programa: Ingeniería en Desarrollo de Software y Tecnologías Emergentes — Plan de Estudios 2021-2 Asignatura / Grupo: Paradigmas de Programación — Grupo 544, Subgrupo 0
Tus apuntes en Obsidian: este material desarrolla y anima el contenido que ya redactaste en 01-Unidad-I-Lenguajes-Sesion2.md (guion de la Sesión 2) y respeta la numeración de Unidad I - Lenguajes de programación.md. Complementa, sin sustituir, tu nota interactiva de scroll vertical ya generada para este mismo subtema.
01Fundamentos · traducción vs. ejecución

¿Qué problema resuelven ambos?

Un programa fuente, por sí solo, no significa nada para el hardware. Alguien —compilador o intérprete— tiene que tender el puente entre lo que escribiste y lo que la máquina puede ejecutar. La diferencia entre ambos no es qué hacen, sino cuándo y cómo lo hacen.

Definición Traducir es convertir código fuente a otra representación (código máquina, bytecode, árbol intermedio). Ejecutar es llevar a cabo esas instrucciones sobre un procesador, real o virtual. Un compilador separa ambas tareas en el tiempo; un intérprete las entrelaza.

Compilador — traductor de libro completo

El libro entero se traduce antes de entregarse al lector

Un traductor editorial recibe el manuscrito completo, lo traduce de principio a fin, revisa consistencia terminológica, y entrega un libro ya terminado. Nadie lee mientras se traduce. Así trabaja un compilador: procesa todo el programa antes de que corra una sola instrucción.

Intérprete — intérprete simultáneo en vivo

🗣 → 👂 frase por frase, sin pausa entre traducir y transmitir

Un intérprete de conferencia no espera a que el orador termine el discurso: traduce y transmite frase por frase, en tiempo real. Si el orador dice algo ambiguo, el error de traducción aparece en el momento, no antes. Así trabaja un intérprete de código: traduce y ejecuta cada instrucción, una tras otra.

AspectoCompiladorIntérprete
¿Cuándo traduce?Todo el programa, antes de ejecutarCada instrucción, en el momento de ejecutarla
¿Qué entrega?Un ejecutable independienteNingún archivo nuevo — ejecuta directo
EjemplosC, C++, Rust, GoPython (CPython), Ruby, PHP
Error común Pensar que "compilado" es sinónimo de "rápido" y "peor lenguaje" es igual a "interpretado". La velocidad depende de la implementación completa (optimizaciones, gestión de memoria, JIT), no solo de la estrategia de traducción — lo verás con detalle en la diapositiva de híbridos.
02Animación principal · pipeline de compilación

Las seis fases del compilador

Vas a ver total = precio * cantidad + descuento —tu ejemplo de 01-Unidad-I-Lenguajes-Sesion2.md— atravesar las seis fases reales de un compilador. Cada fase es clickeable: al seleccionarla, el panel de abajo ejecuta esa etapa con un motor de análisis léxico/sintáctico/semántico escrito para esta página.

Fase 1 / 6
Tip Las fases 1–3 (léxico, sintáctico, semántico) son exactamente los mismos análisis de 1.2.1–1.2.3. El compilador no inventa un proceso nuevo: retoma esos niveles de descripción y les agrega generación y optimización de código.
03Animación principal · ciclo leer-analizar-ejecutar

El ciclo del intérprete

Edita el programa de abajo (lenguaje reducido: asignaciones y print) y pulsa «Ejecutar siguiente línea». Cada línea se lee, se analiza y se ejecuta de inmediato con un intérprete real construido en JavaScript para esta página — sin fase de generación de código final separada.

fuente.plang — editable
Línea 0 / 0
Gramática soportada: variable = expresión y print(variable), con + - * / y paréntesis.
estado de ejecución
VariableValor
// la salida aparecerá aquí
Error común Creer que el intérprete "no analiza nada". Sí analiza —léxico, sintáctico y semántico— pero lo hace instrucción por instrucción, en el instante de ejecutarla, no sobre el programa completo por adelantado. Por eso un error en la línea 40 no se detecta hasta que el flujo llega ahí.
04Casos reales · bytecode + máquina virtual

Cuando la frontera no es tajante

La mayoría del software que usas hoy no es "puramente" compilado ni "puramente" interpretado. Java, C# y Python combinan ambas estrategias: compilan a un código intermedio portable (bytecode) que una máquina virtual interpreta o compila just-in-time (JIT).

flujo JVM (Java) — animado
Código fuente
.java
Compilador
javac
Bytecode
.class
JVM
intérprete + JIT
Ejecución
LenguajeCompila aEjecuta conEstrategia
Javajavac → bytecode .classJVM (intérprete + JIT HotSpot)Híbrido
C#CIL (Common Intermediate Language)CLR (.NET)Híbrido
Pythonbytecode .pycMáquina virtual de CPythonHíbrido
CCódigo máquina nativoHardware directamenteCompilado puro
Ruby (clásico)—Intérprete línea a líneaInterpretado puro

Práctica: ordena las fases del compilador

Arrastra los elementos (o usa las flechas ▲▼ si usas teclado o pantalla táctil) hasta que queden en el orden correcto de ejecución.

    05Síntesis · criterios de elección

    Comparativa final: ¿cuándo conviene cada uno?

    favorece compilar
    • Máximo rendimiento en producción (embebidos, videojuegos, HPC)
    • Entorno de despliegue estable y conocido
    • Detectar errores antes de entregar el software al usuario final
    favorece interpretar
    • Velocidad de desarrollo e iteración (prototipado, scripting)
    • Portabilidad sin recompilar para cada sistema operativo
    • Entornos interactivos: REPL, notebooks, exploración de datos

    Quiz rápido de comparación

    06Laboratorio libre

    Área de experimentación

    Escribe tu propio fragmento (misma gramática reducida) y observa el pipeline completo del compilador reaccionar a tu código real — tokens, árbol, chequeo de tipos, código intermedio, optimización y código final generados por el mismo motor que usa esta página, no una animación pregrabada.

    simulador de compilación — entrada libre
    simulador de intérprete — ejecución en vivo

    Usa el mismo panel de la diapositiva 03:

    07Evaluación final

    Cuestionario de cierre

    10 preguntas. Si fallas en el primer intento verás una pista antes de la respuesta correcta — la retroalimentación siempre explica el concepto, no solo si acertaste.

    08Cierre y recursos

    Resumen, glosario y siguiente paso

    Para recordar Compilar = traducir todo antes de ejecutar. Interpretar = traducir y ejecutar entrelazados, línea por línea. Híbrido = compilar a un código intermedio portable que una máquina virtual interpreta o compila JIT.

    Mapa conceptual

    Traducción y ejecución de programas
    Compilador Intérprete Híbrido (bytecode + VM)
    C, C++, Rust Ruby, PHP Java, C#, Python

    Glosario técnico

    Recursos de tu bóveda: 01-Unidad-I-Lenguajes-Sesion2.md (guion de clase original), Unidad I - Lenguajes de programación.md (nota conectora, numeración 1.2.4), 1.2.4-Compiladores-e-Interpretes.html (versión scroll vertical, paleta institucional — recurso hermano de esta presentación). Lecturas: Sebesta, R. (2015). Concepts of Programming Languages (11.ª ed.), cap. 1. Pearson. Scott, M. (2015). Programming Language Pragmatics (4.ª ed.), cap. 1–2. Morgan Kaufmann.
    Reto integrador opcional

    Describe, con tus propias palabras, qué sucede internamente al compilar este fragmento: promedio = (nota1 + nota2 + nota3) / 3. Menciona explícitamente qué hace cada una de las seis fases con este fragmento.

    ✓ guardado localmente
    01 / 09