DEFINICIÓN DE COMPILADOR

Los compiladores son programas de computadora que
traducen de un lenguaje a otro. Un compilador toma como su
entrada un programa escrito en lenguaje fuente y produce un
programa equivalente escrito en lenguaje objeto.

Generalmente al lenguaje fuente se le asocia como lenguaje
de alto nivel, mientras al lenguaje objeto se le conoce como
código objeto (código de maquina) escrito específicamente para
una maquina objeto. A lo largo del proceso de traducción el
compilador debe informar la presencia de errores en el lenguaje
fuente.
Diseñar y desarrollar un compilador, no es tarea fácil, y quizás
pocos profesionales de la computación se vean involucrados en
esta tarea. No obstante, los compiladores se utilizan en casi todas
las formas de la computación y cualquiera involucrado en esta
área debería conocer la organización y el funcionamiento básico
de un compilador.

FASES DE UN COMPILADOR
Un compilador se compone internamente de varias etapas, o
fases, que realizan operaciones lógicas. Es útil pensar en estas fases
como piezas separadas dentro del compilador, y pueden en
realidad escribirse como operaciones codificadas separadamente
aunque en la práctica a menudo se integran.

 Analizador Léxico: lee la secuencia de caracteres de
izquierda a derecha del programa fuente y agrupa las secuencias
de caracteres en unidades con significado propio (componentes
léxicos o “tokens” en ingles). Las palabras claves son:
identificadores, operadores, constantes numéricas, signos de
puntuación como separadores de sentencias, llaves, paréntesis,
entre otros, son diversas clasificaciones de componentes léxicos. La
estructura léxica la modelaremos mediante expresiones regulares.
Por ejemplo la siguiente instrucción en código C: a [indice] = 4
+ 2

 Análisis Sintáctico: determina si la secuencia de
componentes léxicos sigue la sintaxis del lenguaje y obtiene la
estructura jerárquica del programa en forma de árbol, donde los
nodos son las construcciones de alto nivel del lenguaje. Se
determinan las relaciones estructurales entre los componentes
léxicos, esto es semejante a realizar el análisis gramatical sobre una
frase en lenguaje natural. La estructura sintáctica la definiremos
mediante las gramáticas independientes del contexto.

Como ejemplo consideremos la línea de código C anterior.
Representa un elemento estructural denominado expresión, la cual
es una expresión de asignación compuesta de una expresión de
subíndice a la izquierda y una expresión aritmética a la derecha
(árbol de análisis gramatical).

 Análisis Semántico: realiza las comprobaciones necesarias
sobre el árbol sintáctico para determinar el correcto significado del
programa. Las tareas básicas a realizar son: La verificación e
inferencia de tipos en asignaciones y expresiones, la declaración
del tipo de variables y funciones antes de su uso, el correcto uso
de operadores, el ámbito de las variables y la correcta llamada a
funciones.
Nos limitaremos al análisis semántico estático (en tiempo de
compilación), donde es necesario hacer uso de la Tabla de
símbolos, como estructura de datos para almacenar información
sobre los identificadores que van surgiendo a lo largo del
programa. El análisis semántico suele agregar atributos (como tipos
de datos) a la estructura del árbol semántico.

 Generación y Optimización de Código Intermedio: la
optimización consiste en la calibración del árbol sintáctico donde
ya no aparecen construcciones de alto nivel. Generando un
código mejorado, ya no estructurado, más fácil de traducir
directamente a código ensamblador o máquina, compuesto de un
código de tres direcciones (cada instrucción tiene un operador, y
la dirección de dos operándoos y un lugar donde guardar el
resultado), también conocida como código intermedio.
La etapa de optimización sólo dependen del lenguaje
fuente (y no de la máquina), se busca principalmente: eliminar sub-
expresiones comunes, identificar código muerto, sustituir
operaciones aritméticas, cálculo previo de constantes, variables de
inducción, propagación de copias o código inalcanzable. Suele
ser una fase lenta y compleja.

 Generación de Código Objeto: toma como entrada la
representación intermedia y genera el código objeto. La
optimización depende de la máquina, es necesario conocer el
conjunto de instrucciones, la representación de los datos (número
de bytes), modos de direccionamiento, número y propósito de
registros, jerarquía de memoria, encauzamientos, entre otros.
Suelen implementarse a mano, y son complejos porque la
generación de un buen código objeto requiere la consideración
de muchos casos particulares.
También se está investigando la creación de generadores de
código automáticos. a idea es automáticamente hacer
corresponder una representación intermedia a plantillas de
instrucciones objeto. Permitiendo generar fácilmente el código
objeto para una nueva máquina objeto, cambiando el conjunto
de plantillas. Por ejemplo GNU GCC posee plantillas para mas de
10 arquitecturas más habituales de ordenadores.

 Tabla de Símbolos: Es una estructura tipo diccionario con
operaciones de inserción, borrado y búsqueda, que almacena
información sobre los símbolos que van apareciendo a lo largo del
programa como son: los identificadores (variables y funciones),
etiquetas, tipos definidos por el usuario (arreglos, registros, entre
otro.) Además almacena el tipo de dato, método de paso de
parámetros, tipo de retorno y de argumentos de una función, el
ámbito de referencia de identificadores y la dirección de memoria.
Interacciona tanto con el analizador léxico, sintáctico y semántico
que introducen información conforme se procesa la entrada. La
fase de generación de código y optimización también la usan.

 Gestor De Errores: detecta e informa de errores que se
produzcan durante la fase de análisis. Debe generar mensajes
significativos y reanudar la traducción. Encuentra errores: en
tiempo de compilación: errores léxicos (ortográficos), sintácticos
(construcciones incorrectas) y semánticos (por ejemplo errores de
tipo), en tiempo de ejecución: direccionamiento de vectores fuera
de rango, divisiones por cero, entre otros; de especificación/diseño:
compilan correctamente pero no realizan lo que el programador
desea. Se trataran sólo errores estáticos (en tiempo de
compilación). Respecto a los errores en tiempo de ejecución, es
necesario que el traductor genere código para la comprobación
de errores específicos, su adecuado tratamiento y los mecanismos
de tratamiento de excepciones para que el programa se continúe
ejecutando.
ESTRUCTURAS DE DATOS EMPLEADAS

 Componentes Léxicos: estructura tipo registro con dos
campos, componente léxico representado por una enumeración y
el lexema con una cadena de caracteres.

 Árbol Sintáctico: es una representación de árbol de la
estructura sin táctica abstracta del código fuente escrito en cierto
lenguaje de programación. Cada nodo del árbol denota una
construcción que ocurre en el código fuente.

 Tabla de Símbolos: contiene información sobre los
identificadores, funciones, variables, ámbito de referencia de
identificadores, constantes numéricas y literales, tipos de datos, o
incluso la dirección de memoria (tabla Hash).


 Código intermedio: se implementa como una lista de
registros, donde cada registro tiene cuatro campos (operador, la
dirección de los operándoos y del resultado). Es eficiente para
mover código para el proceso de optimización posterior.

AGRUPAMIENTO DE FASES
En el modelo de análisis y síntesis las operaciones del
compilador que analizan el programa fuente y calculan sus
propiedades se clasifican como análisis del compilador, mientras
que las operaciones involucradas con la traducción a código
objeto se conoce como síntesis del compilador.

1. Etapa de Análisis:

Análisis léxico
Análisis Sintáctico
Análisis Semántica

2. Etapa de Síntesis:

Optimización y generación de código intermedio
Generación de código objeto
La intención de separar las etapas de análisis y síntesis, es
principalmente para realizar mantenimientos y actualizaciones
eficientes.

DEFINICIÓN DE OSCILADOR
Un oscilador es un sistema capaz de crear perturbaciones o
cambios periódicos en un medio, ya sea un medio material
(sonido) o un campo electromagnético (ondas de radio,
microondas, infrarrojo, luz visible, rayos X, rayos gamma, rayos
cósmicos). En electrónica un oscilador es un circuito que es capaz
de convertir la corriente continua en una corriente que varía de
forma periódica en el tiempo (corriente periódica); estas
oscilaciones pueden ser senoidales, cuadradas, triangulares, etc.,
dependiendo de la forma que tenga la onda producida.
Un oscilador de onda cuadrada suele denominarse
multivibrador. Por lo general, se les llama osciladores sólo a los que
funcionan en base al principio de oscilación natural que se
constituyen por una bobina L (inductancia) y un condensador C
(Capacitancia), mientras que a los demás se le asignan nombres
especiales. Un oscilador electrónico es fundamentalmente un
amplificador cuya señal de entrada se toma de su propia salida a
través de un circuito de realimentación.

PARÁMETROS DEL OSCILADOR
 Frecuencia: es la frecuencia del modo fundamental

 Margen de sintonía, para los de frecuencia ajustable, es el
rango de ajuste

 Potencia de salida y rendimiento. El rendimiento es el
cociente entre la potencia de la señal de salida y la potencia de
alimentación que consume

 Nivel de armónicos: potencia del armónico referida a la
potencia del fundamental, en dB.

 Pulling: variación de frecuencia del oscilador al variar la
carga

 Pushing: variación de frecuencia del oscilador al variar la
tensión de alimentación

 Deriva con la temperatura: variación de frecuencia del
oscilador al variar la temperatura
 Ruido de fase o derivas instantáneas de la frecuencia
 Estabilidad de la frecuencia a largo plazo, durante la vida
del oscilador

TIPOS DE OSCILADORES
El tipo de oscilador dependerá de la precisión, velocidad y
potencia que requiramos; por otro lado, el coste también es una
aspecto a tener en cuenta a la hora de elegir un oscilador u otro.
Podemos hacer uso de 4 tipos diferentes de osciladores:

1. Oscilador tipo "XT" (XTal) para frecuencias no mayores de 4
Mhz.

2. Oscilador tipo "LP" (Low Power) para frecuencias entre 32 y
200 Khz.Este oscilador es igual que el anterior, con la diferencia de
que el PIC trabaja de una manera distinta. Este modo está
destinado para trabajar con un cristal de menor frecuencia, que,
como consecuencia, hará que el PIC consuma menos corriente.

3. Oscilador tipo "HS" (High Speed) para frecuencias
comprendidas entre 4 y 20 MHz.Habremos de usar esta
configuración cuando usemos cristales mayores de 4 MHz. La
conexión es la misma que la de un cristal normal, a no ser que
usemos un circuito oscilador como el relatado unas líneas más
abajo, en la sección de Otras configuración

4. Oscilador tipo "RC" (Resistor/Capacitor) para frecuencias no
mayores de 5.5 Mhz. Por último tenemos el oscilador tipo RC que es
el más económico por que tan solo se utiliza un condensador no
polarizado y una resistencia. Este tipo de oscilador proporciona una
estabilidad mediocre en la frecuencia generada y podrá ser
utilizado para aquellos proyectos que no requieran precisión.


¿CÓMO FUNCIONA UN OSCILADOR?
Los osciladores son importantes en muchos tipos diferentes
de equipos electrónicos. Por ejemplo, un reloj de cuarzo usa un
oscilador de cuarzo para mantener un seguimiento de la hora que
es. Un radio transmisor AM usa un oscilador para crear la onda
portadora para la estación, y la radio receptora AM usa un
oscilador especial llamado resonador para poder sintonizar. Existen
osciladores en ordenadores, detectores de metales, o incluso en
ciertos tipos de armamento. Para entender como funcionan los
osciladores en formato electrónico, es aconsejable ver ejemplos
del mundo real, lo cual podremos ver a continuación.

CONCEPTOS BÁSICOS
Uno de los osciladores más comúnmente usados es el
péndulo de un reloj. Si empujas un péndulo para que empiece a
moverse, oscilará hacia delante a una cierta frecuencia, y a
continuación volverá hacía atrás de nuevo y así sucesivamente
varias veces por segundo. La longitud del péndulo es el principal
factor que controla la frecuencia.
Para que algo oscile, la energía debe ir adelante y atrás en
dos formas. Por ejemplo, en un péndulo, la energía se mueve entre
la energía potencial y la energía cinética. Cuando el péndulo está
en uno de los puntos finales de su viaje, su energía es toda
potencial y está preparada para caer. Cuando está en la mitad de
su ciclo, toda esa energía potencial se convierte en energía
cinética, y el péndulo se está moviendo lo más rápido que puede.
Según el péndulo se mueve al final de su movimiento, toda esa
energía cinética se vuelve a convertir en energía potencial. Este
movimiento de energía entre las dos formas es lo que causa la
oscilación.
Eventualmente, cualquier oscilador físico se para de mover
debido a la fricción. Para mantenerlo, se debe añadir un poco de
energía en cada ciclo. En un péndulo de reloj, la energía que
mantiene al péndulo moviéndose es el muelle. Recibe un pequeño
empuje en cada vuelta para compensar la energía que pierde
debido a la fricción. Un oscilador electrónico trabaja sobre el
mismo principio.

OSCILADORES ELECTRÓNICOS
La energía se debe mover entre dos formas continuamente
para que un oscilador funcione correctamente. Puedes crear un
simple oscilador conectando juntos un capacitador y un inductor.
Estos dos dispositivos tienen la capacidad de almacenar energía.
Un capacitador almacena energía en la forma de un campo
electroestático, mientras que un inductor usa un campo
magnético.
Si cargas el capacitador con una batería, y luego insertas el
inductor en el mismo circuito en el que se encuentra el
capacitador, ocurrirá que:
El capacitador empezará a descargarse a través del
inductor. Según lo haga, el inductor creará un campo magnético.
Una vez que el capacitador se descarga, el inductor
intentará mantener la corriente moviéndose por el circuito lo cual
cargará el otro extremo del capacitador.
Una vez que el campo del inductor desaparece, el
capacitador volverá a estar cargado (pero con distinta polaridad),
por lo que se descargará de nuevo por el inductor.
Esta oscilación continuará hasta que el circuito se quede sin
energía debido a la resistencia del cable. Oscilará a una
frecuencia que dependerá del tamaño del inductor y el
capacitador.

AMPLIFICADORES
Son circuitos integrados con un nivel de componentes y
estructura interna complicada por lo que los vamos a estudiar
desde fuera como cajas negras.
La alimentación del circuito se realiza por medio de dos
fuentes de alimentación (alimentación simétrica); el terminal de
referencia de tensiones (masa) no está conectado directamente al
amplificador operacional. La referencia de tensiones debe
realizarse a través de elementos externos al operacional tales como
resistencias.
Tienen dos entradas la - que se denomina “inversora” y la + que
se denomina “no inversora” y una salida Vo. Se alimentan a través
de dos terminales uno con tensión positiva +V y otro con tensión
negativa -V. Adicionalmente pueden tener otros terminales
específicos para compensación de frecuencia, corrección de
derivas de corriente continua entre otros.
Se encuentran integrados de forma que en una pastilla
puede haber 1, 2 ó 4 OP (amplificadores operacionales). En el caso
de 4 el número de patillas mínimo es 3x4(I/O)+2(alim)=14.
Los amplificadores operacionales, también llamados Op Amp
por sus siglas en inglés, son dispositivos electrónicos capaces de
realizar una gran cantidad de funciones dentro de un circuito
electrónico , dependiendo de la como se coloque dentro del
mismo.
El amplificador operacional posee 5 patas, las cuales poseen
distintas funciones:


Terminal Descripción
- input Entrada Inversora
+ input Entrada no inversora
Output Salida
+Vss Alimentación Positiva
-Vss Alimentación Negativa
En los amplificadores operacionales se cumplen algunas
condiciones:
La impedancia entre las entradas inversora y no inversora es
infinita, por lo que no hay corriente de entrada. La diferencia de
potencial entre las terminales inversora y no inversora es, o debe ser
nula. No hay corriente entrando o saliendo de las patas inversora y
no inversora. Con dichas condiciones basta para conocer el
funcionamiento de los amplificadores operacionales.
El símbolo del amplificador operacional es el de un triángulo
en cuya base de colocan las patas inversora y no inversora. En el
vértice superior se coloca la salida. En los lados del triángulo se
colocan las entradas del voltaje que se necesita para hacer
efectiva la amplificación.

USOS DEL AMPLIFICADOR OPERACIONAL
Como su nombre lo indica, el amplificador operacional es un
dispositivo que puede aumentar cualquier tipo de señal, sea de
voltaje o de corriente, de corriente alterna o de corriente directa.
Ahora vamos a ver como es que se da este proceso y las diferentes
configuraciones con las que puede trabajar este dispositivo.

ALIMENTACION DEL AMPLIFICADOR OPERACIONAL
Al menos es necesario aplicar una fuente de alimentación
continua, pudiendo ser las dos fuentes de tensión iguales pero de
signo contrario respecto a masa (alimentación simétrica), o
diferentes (alimentación
asimétrica).
La selección de los valores de tensión de alimentación y el tipo
de alimentación depende de la aplicación en la que deba
trabajar.
Las dos alimentaciones representan los límites del
Departamento de Ingeniería de la Información y Comunicaciones.
Las dos alimentaciones representan los límites del rango de
valores posibles de la tensión de salida del amplificador
operacional, es decir, nunca la salida podrá alcanzar el valor de
tensión dado por la fuente de alimentación.
Se debe tener en cuenta que muchas veces no se muestran
explícitamente las conexiones con las fuentes de alimentación en
los esquemas de circuitos electrónicos.




TIPOS DE AMPLIFICADORES

 Amplificadores de sonido: Los amplificadores de sonido,
de uso común en radios, televisiones y grabadoras de cintas, suelen
funcionar a frecuencias entre 2 y 20 kiloherz (1 kHz = 1.000 ciclos por
segundo). Amplifican la señal eléctrica que, a continuación, se
convierte en sonido con un altavoz. Los amplificadores operativos,
incorporados en circuitos integrados y formados por amplificadores
lineales multifásicos acoplados a la corriente continua, son muy
populares como amplificadores de sonido.


 Amplificadores de vídeo: Los amplificadores de vídeo se
utilizan principalmente para señales con un rango de frecuencias
de hasta 6 megaherz (1 MHz = 1 millón de ciclos por segundo). La
señal generada por el amplificador se convierte en la información
visual por ejemplo la que aparece en la pantalla de televisión, y la
amplitud de señal regula el brillo de los puntos que forman la
imagen. Para realizar esta función, un amplificador de vídeo debe
funcionar en una banda ancha y amplificar de igual manera todas
las señales, con baja distorsión.

 Amplificadores de radiofrecuencia: Estos amplificadores
aumentan el nivel de señal de los sistemas de comunicaciones de
radio o televisión. Por lo general, sus frecuencias van desde 100 kHz
hasta 1 gigaherz (1 GHz = 1.000 millones de ciclos por segundo), y
pueden llegar incluso al rango de frecuencias de microondas.



















República Bolivariana de Venezuela
Ministerio del Popular para la Educación Superior
Convenio Uni-Ojeda
Cabimas-Zulia






Compiladores,
Osciladores,
Amplificadores

Realizado por:
Liliana Gomez