You are on page 1of 19

Definicion Programacion De Sistemas

¿QUE ES?
Un sistema es un conjunto de componentes que interaccionan entre si para lograr un
objetivo común. Las personas se comunican con el lenguaje, que es un sistema muy
desarrollado formado por palabras y símbolos que tienen significado para el que
habla y para quienes lo escuchan, lo mismo es para las computadoras las cuales tienen
sistemas y se comunican por medio de computadoras.
La programación es el proceso de convertir las especificaciones a grandes rasgos de
los sistemas en instrucciones de maquina que produzcan los resultados deseados.
¿QUE ESTUDIA?
El trabajo de un programador de sistemas es seleccionar, modificar y mantener el
complejo software del sistema operativo. Por lo tanto, los programadores de sistemas
desempeñan una función de apoyo al mantener el ambiente del software del sistema
operativo en el que trabajan los programadores de aplicaciones y los operadores de
las computadoras. También participan en las decisiones relativas a reducciones o
ampliaciones de hardware y/o software. Programación de Sistemas Conceptos y
Aplicaciones Se entiende por programación de sistemas el conjunto de programas
necesario para que una computadora de una imagen coherente y monolítica ante sus
usuarios. Es un área especializada dentro de las ciencias de la computación. Así,
mediante la programación de sistemas, no solo se manejan las computadoras por
medio del lenguaje maquina (0 y 1) sino por otros sistemas operativos, sin lo cual sería
muy difícil la interacción con la maquina.
El estudio de la programación de sistemas
En esta área se estudia la teoría de máquinas y su aplicación en el diseño de sistemas
digitales y de arquitectura de computadoras.Áreas específicas: Sistemas digitales para
arquitecturas paralelas y control de procesos y sistemas reconfigurables.
Inteligencia artificial aplicada a trabajo cooperativo En las aplicaciones cooperativas
realizadas en el entorno Web, es viable hacer uso de las herramientas de inteligencia
artificial. Se están diseñando y construyendo herramientas para elaborar un sistema
sin costura que opere en Web con la finalidad de proporcionar a un grupo de
coautores el soporte necesario para producir conjunta y simultáneamente un mismo
documento. La plataforma, denominada PINAS, es un sistema de edición cooperativa
(Alliance Web) y un sistema de notaciones sobre documentos complejos (COARSY)
los cuales podrán permitir a coautores o revisores distribuidos en diferentes sitios del
mundo, compartir y anotar observaciones sobre documentos complejos tales como
capítulos de libro, artículos, reportes, expedientes médicos, etc.
Sistemas para arquitecturas paralelas y distribuidas
Diseño de sistemas operativos para arquitecturas paralelas y sistemas distribuidos,
particularmente en lo que se refiere a manejo de memoria y calendarización de
procesos. Redes y protocolos, programación distribuida, diseño y evaluación de
“middleware” enfocados a aplicaciones de minería de datos y multimedia. Diseño de
algoritmos paralelos y distribuidos. Herramientas para programación paralela y
distribuida.
Sistemas de tiempo real
Relacionados con diversos aspectos de la planificación de los sistemas de tiempo real
entre los cuales se encuentran los siguientes: planificación tolerante a fallas en
sistemas de tiempo real, planificación de tiempo real en situaciones de sobrecarga,
esto es en aplicaciones en donde se demande del procesador más del 100% de su
capacidad, y planificación de sistemas de tiempo real aplicada al control de procesos y
técnicas de planificación de tareas de tiempo real con restricciones de consumo de
poder.
Diseño y programación de sistemas grandes
Los sistemas empotrados suelen ser grandes y complejos, formados por subsistemas
relacionados, pero relativamente independientes. Algunos lenguajes ignoran el hecho
de que los programas se construyen por partes, cada una de ellas compilada por
separado y todas ellas enlazadas en una aplicación final. El resultado se convierte en
aplicaciones monolíticas difíciles de mantener. Otros lenguajes, en contraste, parten
del concepto de módulo y proporcionan mecanismos de encapsulamiento y
abstracción que ayudan a programar sistemas grandes, ya que el trabajo del equipo
de programación y posterior mantenimiento del sistema se ve facilitado. Uno de estos
lenguajes es Ada, que está fuertemente fundamentado en la disciplina de la ingeniería
del software por lo que es el lenguaje más apropiado en la programación de sistemas
empotrados industriales grandes.Ada asume la necesidad de la compilación separada
y proporciona dos mecanismos para realizarla, uno ascendente y otro descendente:
o El mecanismo descendente (descomposición): consiste en dividir un sistema
complejo en componentes más sencillos. Es apropiado para el desarrollo de grandes
programas coherentes que, son divididos en varias subunidades que pueden
compilarse por separado. Las subunidades se compilan después que la unidad de la
que forman parte.
o El mecanismo ascendente (abstracción): consiste en la especificación de los aspectos
esenciales de un componente, posponiendo su diseño detallado. Es apropiado para la
creación de bibliotecas de programa en las que las unidades se escriben para uso
general y, consecuentemente, se escriben antes que los programas que las vayan a
utilizar. El diseño de sistemas mediante módulos permite encapsular partes del
sistema mediante interfaces bien definidas y permiten utilizar técnicas que facilitan el
desarrollo de sistemas grandes como:
- Ocultación de información.
- Tipos abstractos de datos.
- Compilación separada.
Las unidades de programa en Ada son las siguientes:
- Subprograma que define los algoritmos ejecutables. Los procedimientos y las
funciones son subprogramas.
- Paquete: define una colección de entidades. Los paquetes son el principal mecanismo
de agrupación de Ada.
- Tarea: define una computación que puede llevarse a cabo en paralelo con otras
computaciones.
- Unidades Genéricas: ayudan a realizar código reutilizable. Pueden ser
subprogramas o paquetes.
- Unidad Protegida: puede coordinar el acceso a datos compartidos en el
procesamiento paralelo. Aparece en el estándar Ada 95.
En Ada, las unidades de compilación pueden ser:
o Especificaciones de subprogramas o Especificaciones de paquetes o Cuerpos de
subprogramas o paquetes
Algunos compiladores pueden establecer ciertos requisitos para las unidades de
compilación. Por ejemplo, GNAT en su configuración predefinida exige que cada
unidad esté definida en un fichero, con el nombre de la unidad y la extensión .ads para
especificaciones y .adb para cuerpos. El guión “-“ se ha de utilizar en sustitución del
punto “.” para unidades hijas y subunidades. Referencias: La Programacion de
Sistemas es la accion de resolver eficientemente una necesidad mediante un codigo
hecho programa que se comunican para satisfacer dicha necesidad en un ambiente
amigable y facil de manejar para el usuario final.
Se entiende por programación de sistemas el conjunto de programas necesario para
que una computadora de una imagen coherente y monolítica ante sus usuarios. Es un
área especializada dentro de las ciencias de la computación. Así, mediante la
programación de sistemas, no solo se manejan las computadoras por medio del
lenguaje maquina (0 y 1) sino por otros sistemas operativos, sin lo cual sería muy
difícil la interacción con la maquina.
Toda accion que codificada resuelva una necesidad o problema sistematizadamente.

Herramientas Desarrolladas Con Teoria


De Programacion De Sistemas
1.2 Herramientas Desarrolladas Con Teoría De La Programación De Sistemas
Las herramientas de programación, son aquellas que permiten realizar aplicativos,
programas, rutinas, utilitarios y sistemas para que la parte fisica del computador u
ordenador, funcione y pueda producir resultados.
Hoy dia existen múltiples herramientas de programación en el mercado, tanto para
analistas expertos como para analistas inexpertos.
Las herramientas de programación más comunes del mercado, cuentan hoy dia con
programas de depuración o debugger, que son utilitarios que nos permiten detectar
los posibles errores en tiempo de ejecución o corrida de rutinas y programas.
Muchas herramientas de software que manipulan programas fuente realizan primero
algún tipo de análisis. Algunos ejemplos de tales herramientas son:
• 1. Editores de estructuras: Un editor de estructuras toma como entrada una
secuencia de órdenes para construir un programa fuente. El editor de
estructuras no sólo realiza las funciones de creación y modificación de textos de
un editor de textos ordinario, sino que también analiza el texto del programa,
imponiendo al programa fuente una estructura jerárquica apropiada. De esa
manera, el editor de estructuras puede realizar tareas adicionales útiles para la
preparación de programas. Por ejemplo, puede comprobar si la entrada está
formada correctamente, puede proporcionar palabras clave de manera
automática (por ejemplo, cuando el usuario escribe while, el editor
proporciona el correspondiente do y le recuerda al usuario que entre las dos
palabras
debe ir un condicional) y puede saltar desde un begin o un paréntesis izquierdo hasta
su correspondiente end o paréntesis derecho. Además, la salida de tal editor suele ser
similar a la salida de la fase de análisis de un compilador.
• 2. Impresoras estéticas: Una impresora estética analiza un programa y lo
imprime de forma que la estructura del programa resulte claramente visible.
Por ejemplo, los comentarios pueden aparecer con un tipo de letra especial, y
las proposiciones pueden aparecer con una indentación proporcional a la
profundidad de su anidamiento en la organización jerárquica de las
proposiciones.
• 3. Verificadores estáticos: Un verificador estático lee un programa, lo analiza e
intenta descubrir errores potenciales sin ejecutar el programa. La parte de
análisis a menudo es similar a la que se encuentra en los compiladores de
optimización. Así, un verificador estático puede detectar si hay partes de un
programa que nunca se podrán ejecutar o si cierta variable se usa antes de ser
definida. Además, puede detectar errores de lógica, como intentar utilizar una
variable real como apuntador, empleando las técnicas de verificación de tipos.
• 4. Intérpretes: En lugar de producir un programa objeto como resultado de
una traducción, un intérprete realiza las operaciones que implica el programa
fuente. Para una proposición de asignación, por ejemplo, un intérprete podría
construir un árbol como el de la figura 1 y después efectuar las operaciones de
los nodos conforme “recorre” el árbol. En la raíz descubriría que tiene que
realizar una asignación, y llamaría a una rutina para evaluar la expresión de la
derecha y después almacenaría el valor resultante en la localidad de memoria
asociada con el identificador posición. En el hijo derecho de la raíz, la rutina
descubriría que tiene que calcular la suma de dos expresiones. Se llamaría a sí
misma de manera recursiva para calcular el valor de la expresión
velocidad*60. Después sumaría ese valor de la variable inicial. Muchas veces
los intérpretes se usan para ejecutar lenguajes de órdenes, pues cada operador
que se ejecuta en un lenguaje de órdenes suele ser una invocación de una
rutina compleja, como un editor o un compilador. Del mismo modo algunos
lenguajes de “muy alto nivel”, normalmente son interpretados, porque hay
muchas cosas sobre los datos, como el tamaño y la forma de las matrices, que
no se pueden deducir en el momento de la compilación.
• 5. Compiladores: Tradicionalmente, se concibe un compilador como un
programa que traduce un programa fuente, como FORTRAN, al lenguaje
ensamblador o de máquina de algún computador. Sin embargo, hay lugares, al
parecer, no relacionados donde la tecnología de los compiladores se usa con
regularidad. La parte de análisis de cada uno de los siguientes ejemplos es
parecida a la de un compilador convencional.
a) Formadores de textos. Un formador de textos toma como entrada una cadena de
caracteres, la mayor parte de la cual es texto para componer, pero alguna incluye
órdenes para indicar párrafos, figuras o estructuras matemáticas, como subíndices o
superíndices.
b) Compiladores de circuitos de silicio. Un compilador de circuitos de silicio tiene un
lenguaje fuente similar o idéntico a un lenguaje de programación convencional. Sin
embargo las variables del lenguaje no representan localidades de memoria, sino
señales lógicas (0 o 1) o grupos de señales en un circuito de conmutación. La salida es
el diseño de un circuito en un lenguaje apropiado.
c) Intérpretes de consultas. Un intérprete de consultas traduce un predicado que
contiene operadores relacionales y boléanos a órdenes para buscar en una base de
datos registros que satisfagan ese predicado.

Lenguajes
Se llama lenguaje a cualquier tipo de código semiótico estructurado, para el que existe
un contexto de uso y ciertos principios combinatorios formales. Existen muchos
contextos tanto naturales como artificiales donde aparecen lenguajes.
El lenguaje humano se basa en la capacidad de los seres humanos para
comunicarse mediante de signos. Principalmente lo hacemos
utilizando el signo lingüístico. Aún así, hay diversos tipos de lenguaje.
El lenguaje humano puede estudiarse en cuanto a su desarrollo desde
dos puntos de vista complementarios: la ontogenia, que remite al
proceso de adquisición del lenguaje por el ser humano, y la filogenia
El lenguaje animal se basa en el uso de señales sonoras, visuales y
olfativas a modo de signos para referirse a un referente o un
significado diferente de dichas señales. Dentro del lenguaje animal
están los gritos de alarma, el lenguaje de las abejas, etc. Los
lenguajes formales son construcciones artificiales humanas, que se
usan en matemática y otras disciplinas formales, incluyendo lenguajes
de programación. Estas construcciones tienen estructuras internas
que comparten con el lenguaje humano natural, por lo que pueden ser
en parte analizados con los mismos conceptos que éste.

Lenguajes Naturales
Este tipo de lenguaje es el que nos permite el designar las cosas
actuales y razonar a cerca de ellas, fue desarrollado y organizado a
partir de la experiencia humana y puede ser utilizado para analizar
situaciones altamente complejas y razonar muy sutilmente.
La riqueza de sus componentes semánticos da a los lenguajes naturales su gran poder
expresivo y su valor como una herramienta para razonamiento sutil. Por otro lado la
sintaxis de un LN puede ser modelada fácilmente por un lenguaje formal, similar a los
utilizados en las matemáticas y la lógica. Otra propiedad de los lenguajes naturales es
la polisemantica, es decir la posibilidad de que una palabra en una oración tenga
diversos significados.
En un primer resumen, los lenguajes naturales se caracterizan por las siguientes
propiedades:
Desarrollados por enriquecimiento progresivo antes de cualquier intento de
formación de una teoría.
La importancia de su carácter expresivo debido grandemente a la riqueza del
componente semántico(polisemantica).
Dificultad o imposibilidad de una formalización completa.

Lenguajes Artificiales
El lenguaje nos permite hacer la abstracion y conceptualizacion de
ideas y por medio de este comunicarnos. En las distintas ramas de la
ciencia nos encontramos con lenguajes artificiales o mejor conocidos
como lenguajes formales que limitan su alcance a su materia de estudio.
Concretamamente y despues de esta breve introduccion, en la actualidad nos
encontramos con distintos lenguajes para para programar y tambien los campos de
aplicacion son variados y completamente distintos. De acuerdo a la complejidad del
problema a resolver sera necesario hacer una seleccion adecuada del lenguaje de
programacion (incluso se puede generar el lenguaje de programacion propio) que
permita resolver de manera eficiente el problema.
Hasta hace pocos años, el software de desarrollo se basaba fundamentalmente en
Lenguajes Artificiales (Basic, C, Cobol, Pascal…) para “explicar” a la computadora
las acciones a realizar. Por el contrario, los “Orientados a Objetos” permiten que el
programador ignore el lenguaje comprensible para la máquina poniendo a su
disposión una serie de objetos preprogramados. De este modo la tarea se simplifica
enormemente y se reduce a disponer,dentro de la ventana de programa y en la
secuencia adecuada, los programas y funciones de los que nos provee.

Proceso De La Comunicacion
La comunicación es un fenómeno inherente a la relación grupal de los seres vivos por
medio del cual éstos obtienen información acerca de su entorno y de otros entornos y
son capaces de compartirla haciendo partícipes a otros de esa información. La
comunicación es de suma importancia para la supervivencia de especies gregarias,
pues la información que ésta extrae de su medio ambiente y su facultad de transmitir
mensajes serán claves para sacar ventaja del modo de vida gregario.
Etimológicamente, la palabra comunicación deriva del latín “commūnicāre”, que
puede traducirse como “poner en común, compartir algo”. Se considera una categoría
polisémica en tanto su utilización no es exclusiva de una ciencia social en particular,
teniendo connotaciones propias de la ciencia social de que se trate.
Proceso de transmisión de información de un emisor (A) a un receptor (B) a través de
un medio ©. En la transmisión y la recepción de esa información se utiliza un código
específico que debe ser “codificado”, por el emisor y “decodificado” por el receptor”.
Elementos del Proceso de la comunicación
Los elementos de la comunicación humana son: fuente, emisor o codificador, código
(reglas del signo, símbolo), mensaje primario (bajo un código), receptor o
decodificador, canal, ruido (barreras o interferencias) y la retroalimentación o
realimentación (feed-back, mensaje de retorno o mensaje secundario).
• Fuente: Es el lugar de donde emana la información, los datos, el contenido que se
enviará, en conclusión: de donde nace el mensaje primario.
• Emisor o codificador: Es el punto (persona, organización…) que elige y selecciona
los signos adecuados para transmitir su mensaje; es decir, los codifica para poder
llevarlo de manera entendible al receptor. En el emisor se inicia el proceso
comunicativo.
• Receptor o decodificador: Es el punto (persona, organización…) al que se destina el
mensaje, realiza un proceso inverso al del emisor ya que en él está el descifrar e
interpretar lo que el emisor quiere dar a conocer. Existen dos tipos de receptor, el
pasivo que es el que sólo recibe el mensaje, y el receptor activo o perceptor ya que es
la persona que no sólo recibe el mensaje sino que lo percibe y lo almacena. El mensaje
es recibido tal como el emisor quiso decir, en este tipo de receptor se realiza lo que
comúnmente denominamos el feed-back o retroalimentación.
• Código: Es el conjunto de reglas propias de cada sistema de signos y símbolos que el
emisor utilizará para trasmitir su mensaje, para combinarlos de manera arbitraria
porque tiene que estar de una manera adecuada para que el receptor pueda captarlo.
Un ejemplo claro es el código que utilizan los marinos para poder comunicarse; la
gramática de algún idioma; los algoritmos en la informática…, todo lo que nos rodea
son códigos.
• Mensaje: Es el contenido de la información (contenido enviado): el conjunto de
ideas, sentimientos, acontecimientos expresados por el emisor y que desea trasmitir al
receptor para que sean captados de la manera que desea el emisor. El mensaje es la
información.
• Canal: Es el medio a través del cual se transmite la información-comunicación,
estableciendo una conexión entre el emisor y el receptor. Mejor conocido como el
soporte material o espacial por el que circula el mensaje. Ejemplos: el aire, en el caso
de la voz; el hilo telefónico, en el caso de una conversación telefónica.
• Referente: Realidad que es percibida gracias al mensaje. Comprende todo aquello
que es descrito por el mensaje.
• Situación: Es el tiempo y el lugar en que se realiza el acto comunicativo.
• Interferencia o barrera: Cualquier perturbación que sufre la señal en el proceso
comunicativo, se puede dar en cualquiera de sus elementos. Son las distorsiones del
sonido en la conversación, o la distorsión de la imagen de la televisión, la alteración de
la escritura en un viaje, la afonía del hablante, la sordera del oyente, la ortografía
defectuosa, la distracción del receptor, el alumno que no atiende aunque esté en
silencio.
• Retroalimentación o realimentación (mensaje de retorno): Es la condición necesaria
para la interactividad del proceso comunicativo, siempre y cuando se reciba una
respuesta (actitud, conducta…) sea deseada o no. Logrando la interacción entre el
emisor y el receptor. Puede ser positiva (cuando fomenta la comunicación) o negativa
(cuando se busca cambiar el tema o terminar la comunicación). Si no hay
realimentación, entonces solo hay información más no comunicación.

Traductor Y Su Estructura
Traductor: En un sentido orientado hacia la computación, un traductor, de manera
general, es un software que toma como entrada un programa escrito en un código
llamado fuente y genera como salida otro programa en un código llamado objeto.
Algunos ejemplos de traductores son los compiladores (toma como entrada código en
alto nivel y genera como salida código en bajo nivel), los interpretes (toma como
entrada código en alto nivel y genera como salida un código intermedio), los
preprocesadores (toma como entrada código en alto nivel y genera como salida código
en alto nivel) y el ensamblador (toma como entrada código en ensamblador y genera
como salida código en bajo nivel).
Su estructura podria ser expresada de la siguiente manera:
código fuente -→>> traductor -→> código objeto
Intérpretes o Traductores
Definición. Un intérprete es un programa que ejecuta un programa escrito en un
determinado lenguaje examinando y ejecutando cada sentencia del programa una a
una, por separado y sin realizar un proceso de compilación previo.
Al contrario de lo que se podría pensar el intérprete NO traduce la sentencia a código
máquina antes de ejecutarla. En su lugar, identifica el tipo de sentencia y la ejecuta
directamente. El código para ejecutar la sentencia está contenido dentro del intérprete
que contendrá rutinas para: evaluar una expresión, almacenar información en
memoria, recuperar datos de memoria, etc. El intérprete contendrá el número de
rutinas necesarias para poder ejecutar cualquier sentencia del lenguaje que está
interpretando.
Ejemplo: C := A + B
1. El intérprete lee la sentencia y determina que es una asignación.
2. Llamará a una de sus rutinas para evaluar la expresión a la derecha de la
asignación.
3. Esta rutina toma los símbolos A y B, determina donde están almacenados, obtiene
sus valores actuales y los suma.
4. El intérprete toma el valor calculado y lo almacena en la dirección de memoria a la
que hace referencia el símbolo C. Al igual que un compilador para llevar a cabo su
tarea el intérprete usará un analizador léxico-gráfico y guardará la información
necesaria para la traducción en una tabla de símbolos.
Interpretar una sentencia es relativamente complejo, al tener que ser escaneada y
analizada, los símbolos tienen que ser buscados, hay que llevar a cabo lo indicado por
la sentencia, etc. Esto significa que el número de instrucciones máquinas a ejecutar
para interpretar una sentencia puede ser mucho mayor que el código generado por un
compilador. Además, cada sentencia tendrá que ser interpretada cada vez que
aparezca, por lo que una sentencia en un bucle sería interpretada varias veces.
Además de elegir entre compilar o interpretar un programa, otra opción es combinar
ambos procesos de traducción. En este caso, se realiza una compilación “parcial” a un
código intermedio que es seguida de un proceso de interpretación. Uno de los
lenguajes más utilizados hoy en día, sobre todo para el desarrollo de aplicaciones para
la Web, que sigue esta propuesta es el lenguaje Java.
En el lenguaje Java el código primero se compila con el compilador de Java javac.
Este compilador genera un código virtual llamado Byte Code. Este código es luego
interpretado por una Máquina Virtual de Java (o JVM de Java Virtual Machine) que
debe estar instalada y ejecutándose en la máquina en la que se desee ejecutar el código
compilado con javac.
Comparación entre compiladores e intérpretes
Históricamente, debido a la escasez de memoria de los primeros ordenadores, se puso
de moda el uso de intérpretes frente a los compiladores, pues el programa fuente sin
traducir y el intérprete juntos requerían una cantidad de memoria menor que la del
compilador. Por ello, los primeros ordenadores personales (Spectrum, Commodore
VIC-20, PC XT de IBM, etc.) iban siempre acompañados de un intérprete de BASIC.
La mejor información sobre los errores por parte del compilador así como una mayor
velocidad de ejecución del código resultante hizo que poco a poco se impusieran los
compiladores. Hoy en día, y con el problema de la memoria prácticamente resuelto, se
puede hablar de un gran predominio de los compiladores frente a los intérpretes,
aunque intérpretes como los incluidos en los navegadores de Internet para Java son la
gran excepción.
Algunas de las ventajas de compilar frente a interpretar son:
• Se compila una vez; se ejecuta muchas veces
• La ejecución del programa objeto es mucho más rápida que si se interpreta el
programa fuente.
• El compilador tiene una visión global del programa, por lo que la información de
mensajes de error es más detallada.
Por otro lado, algunas de las ventajas de interpretar frente a compilar son:
• Un intérprete necesita menos memoria que un compilador.
• Permiten una mayor interactividad con el código en tiempo de desarrollo.
• En algunos lenguajes (Smalltalk, Prolog, LISP, Java) está permitido y es frecuente
añadir código según se ejecuta otro código, y esta característica solamente es posible
implementarla en un intérprete.
Lenguajes Ensambladores
Lenguajes Compiladores
COMPILADORES
Un compilador acepta programas escritos en un lenguaje de alto nivel y los traduce a
otro lenguaje, generando un programa equivalente independiente, que puede
ejecutarse tantas veces como se quiera. Este proceso de traducción se conoce como
compilación.
• el de los programas de partida (LA)
• el de los programas equivalentes traducidos (LB), normalmente el lenguaje de
máquina
• el lenguaje en que está escrito el propio compilador (LC), que puede ser igual o
diferente a LA. Aumenta la portabilidad del compilador si está escrito en el mismo
lenguaje, es decir, se puede compilar a sí mismo.
Los programas interpretados suelen ser más lentos que los compilados, pero los
intérpretes son más flexibles como entornos de programación y depuración.
Comparando su actuación con la de un ser humano, un compilador equivale a un
traductor profesional que, a partir de un texto, prepara otro independiente traducido
a otra lengua, mientras que un intérprete informático corresponde al intérprete
humano, que traduce de viva voz las palabras que oye, sin dejar
Partes de un compilador
Normalmente los compiladores están divididos en dos partes:
• Front End: es la parte que analiza el código fuente, comprueba su validez, genera el
árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser
independiente de la plataforma o sistema para el cual se vaya a compilar.
• Back End: es la parte que genera el código máquina, específico de una plataforma, a
partir de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el código
máquina de varios lenguajes de programación distintos y que el mismo Front End que
sirve para analizar el código fuente de un lenguaje de programación concreto sirva
para la generación de código máquina en varias plataformas distintas.
El código que genera el Back End normalmente no se puede ejecutar directamente,
sino que necesita ser enlazado por un programa enlazador (linker).
Tipos de compiladores
Esta taxonomía de los tipos de compiladores no es excluyente, por lo que
puede haber compiladores que se adscriban a varias categorías:
• Compiladores cruzados: generan código para un sistema distinto del que están
funcionando.
• Compiladores optimizadores: realizan cambios en el código para mejorar su
eficiencia, pero manteniendo la funcionalidad del programa original.
• Compiladores de una sola pasada: generan el código máquina a partir de una única
lectura del código fuente.
• Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de
poder producir el código máquina.
• Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes
del código según se necesitan.
Pauta de creación de un compilador: En las primeras épocas de la informática, el
software de los compiladores era considerado como uno de los más complejos
existentes.
Los primeros compiladores se realizaron programándolos directamente en lenguaje
máquina o en ensamblador. Una vez que se dispone de un compilador, se pueden
escribir nuevas versiones del compilador (u otros compiladores distintos) en el
lenguaje que compila ese compilador.
Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó
intérpretes informáticos. Estas herramientas permiten generar el esqueleto del
analizador sintáctico a partir de una definición formal del lenguaje de partida,
especificada normalmente mediante una gramática formal y barata, dejando
únicamente al programador del compilador la tarea de programar las acciones
semánticas asociadas.

Lenguajes Interpretes
INTÉRPRETES.
Un intérprete es un traductor que toma un programa fuente, lo traduce y a
continuación lo ejecuta. BASIC es un lenguaje interpretado.
Se trata de traductores-ejecutores ya que con cada instrucción realizan un proceso
triple de lectura-traducción-ejecución.
Son relativamente lentos, pero muy buenos para la depuración de programas.
Se puede también utilizar una alternativa diferente de los compiladores para traducir
lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma
permanente el código objeto que se produce durante la corrida de compilación para
utilizarlo en una corrida de producción futura, el programador sólo carga el
programa fuente en la computadora junto con los datos que se van a procesar. A
continuación, un programa intérprete, almacenado en el sistema operativo del disco, o
incluido de manera permanente dentro de la máquina, convierte cada proposición del
programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el
proceso de los datos. No se graba el código objeto para utilizarlo posteriormente.
La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y
traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los
pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada
vez que se ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de
ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido
en tiempo de diseño (porque no se tiene que estar compilando a cada momento el
código completo). El intérprete elimina la necesidad de realizar una corrida de
compilación después de cada modificación del programa cuando se quiere agregar
funciones o corregir errores; pero es obvio que un programa objeto compilado con
antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe
interpretar a cada paso durante una corrida de producción.

Lenguajes Generadores De Codigo Para


Compiladores
GENERACION DE CÓDIGO
Aquí se hablará de las herramientas generadoras automáticas de código para un
compilador. Estas herramientas trabajan basadas en un conjunto de reglas; estas
reglas definen la traducción de las instrucciones del lenguaje intermedio al lenguaje
de máquina.
Para a generación de código, se busca en las reglas establecidas la proposición que
coincida con la entrada actual; la entrada actual proviene de un árbol. Un ejemplo de
esto seria
Entonces el compilador recibe una entrada de caracteres, por lo general escrita por el
programador; el compilador realiza los análisis: léxico, sintáctico y semántico, para
generar seguidamente el código intermedio, el código intermedio se genera con
principios de búsqueda de patrones y aplicación de reglas. Después se hace la
optimización del código intermedio; seguidamente se realiza la generación de código
objeto en lenguaje de máquina.
En sintesis para crear un generador de código se deben hacer muchas de las tareas
que realizan los compiladores; algunas de estas tareas son: la busqueda de patrones,la
escritura de código, el analisis sintactico, el analisis lexico y la optimización de código.
Estas tareas las realiza el desarrollador una vez para una arquitectura especifica.
METACOMPILADOR: Es Sinónimo De compilador de compiladores y se refiere a un
programa que recibe como entrada las especificaciones del lenguaje para el que se
desea obtener un compilador y genera como salida el compilador para ese lenguaje. El
desarrollo de los metacompiladores se encuentra con la dificultad de unir la
generación de código con la parte de análisis. Lo que sí se han desarrollado son
generadores de analizadores léxicos y sintácticos.
Por ejemplo, los conocidos:
• generador de analizadores léxicos LEX.
• generador de YACC: analizadores sintácticos desarrollados para UNIX.
Los inconvenientes que tienen son que los analizadores que generan no son muy
eficientes.
Unidad 2

Consideraciones Preliminares Diseño


Lenguajes De Programacion
2.2 Consideraciones preliminares
• Debemos tomar en cuenta las palabras reservadas del lenguaje, los operadores, los
tipos de datos.
• Debemos considerar el objetivo del lenguaje, si es un lenguaje de enseñanza, si es un
lenguaje para profesionales, si el código desarrollado va a ser mejor.
EFICIENCIA DE LOS LENGUAJES DE PROGRAMACION
Compilación rápida del código fuente y ejecución rápida del código objeto.
Los factores fundamentales en la calidad del software son: la eficiencia, la
portabilidad, la verificabilidad, la integridad, la facilidad de uso, la exactitud, la
robustez, la extensibilidad, la compatibilidad y la reutilización. En términos generales,
estos factores pueden describirse de la siguiente forma:
La eficiencia: capacidad para el aprovechamiento óptimo de los recursos que emplea.
Los lenguajes OOP arrastraron en un principio la reputación de ser ineficaces. Esto se
debía en gran medida a que los primeros lenguajes (como Smalltalk) eran
interpretados y no compilados. La existencia de compiladores permite a los
desarrolladores ganar rapidez. Actualmente, usando un buen lenguaje orientado a
objetos como C++, Java, etc. Junto con las librerías apropiadas para la realización de
un programa, puede que se ejecute más rápidamente que el mismo programa
compilado con un lenguaje procedural
La portabilidad: facilidad para ser ejecutados en distintos entornos lógicos o físicos .
La verificabilidad: capacidad para soportar procedimientos de pruebas, test o
ensayos.
La integridad: nivel de protección frente a procesos que traten de alterarlo.
La facilidad de uso: comodidad y claridad en la interacción con el usuario.
La exactitud: nivel de precisión que alcanzan los resultados obtenidos.
La robustez: capacidad para funcionar correctamente en situaciones extremas.
La extensibilidad: capacidad para adaptar su funcionamiento al incremento en sus
objetivos.
La compatibilidad: facilidad de poder ser aplicados en conjunción con otros
programas.
La reutilización: posibilidad de utilizarlos (total o parcialmente) en nuevos contextos.
INDEPENDENCIA DE LA MÁQUINA
Independencia de la máquina: Puesto que diferentes usuarios utilizan diferentes
ordenadores, el sistema debe ser accesible por todos ellos sin merma de prestaciones,
especialmente por las plataformas mayoritarias: Windows, MacOS? y Unix.
Los programas Windows son independientes de la máquina en la que se ejecutan (o al
menos deberían serlo), el acceso a los dispositivos físicos se hace a través de interfaces,
y nunca se accede directamente a ellos. Esta es una de las principales ventajas para el
programador, ya que no hay que preocuparse por el modelo de tarjeta gráfica o de
impresora, la aplicación funcionará con todas, y será el sistema operativo el que se
encargue de que así sea.
A la hora de explotar un gran número de bases de datos de diferentes editores nos
encontramos ante un doble problema. Por una parte, la citada falta de homogeneidad
de los sistemas informáticos de los usuarios; por otra parte, cada una de las bases de
datos suele tener su propio programa de consulta, de modo que nos encontramos
multitud de programas diferentes que deberán conocer los usuarios. Dichos
programas están en su mayor parte diseñados para ordenadores tipo PC con sistema
operativo Windows. Teniendo en cuenta todo lo anterior, podemos ver que el sistema
ha de permitir acceder a multitud de máquinas diferentes a una serie de programas
en muchos casos incompatibles con ellas.
Los servidores de aplicaciones son la base de programas informáticos diseñados para
ser ejecutados desde ordenadores personales a través de Navegadores de Internet
convencionales.
Con ello se consigue independencia de la máquina (los programas funcionan en
cualquier ordenador), independencia de ubicación (es posible utilizar los programas
desde cualquier lugar) y una administración ligera y centralizada (mantenimiento
cero de los programas de los ordenadores de los usuarios al residir éstos en el
servidor).
SIMPLICIDAD
Un lenguaje debe ser tan simple como sea posible. Debe haber un número mínimo de
conceptos con reglas simples para su combinación. Un lenguaje de programación debe
esforzarse en la simplicidad sintáctica y semántica. Simplicidad en la semántica
implica que el lenguaje contiene un mínimo número de conceptos y estructuras. Estos
conceptos deben ser naturales, rápidamente aprendidos, y fácilmente entendidos. with
little danger of misinterpretation.
La simplicidad requiere que un idioma incorpore tan pocos conceptos como sean
posibles. El lenguaje debe ser una ayuda para el programador antes de que alcance el
estado real de codificación en programación. Debe darle un conjunto de conceptos
claro, simple y unificado para que pueda usarlos como primarios en el desarrollo de
lenguajes. Para ello es deseable tener un número mínimo de conceptos diferentes, con
las reglas de su combinación lo más simples y regulares posibles. Esta claridad
semántica y de conceptos es el factor determinante del valor de un lenguaje.
La simplicidad sintáctica requiere que la sintaxis represente cada concepto en una y
una única forma y que ésta interpretación es tan legible como sea posible. Esto no
necesariamente implica que la sintaxis es tan concisa como sea posible, desde que la
concisión es a menudo contraproducente a la legibilidad. Excluye múltiples
representaciones de la misma semántica conceptual y representaciones sintácticas que
son fácilmente confusas.
UNIFORMIDAD
Ya que la representación de los objetos lleva implica tanto el análisis como el diseño y
la codificación de los mismos.
La estructura lógica de la BD definida mediante el LDD debe ser uniforme y acorde al
modelo de datos del SGBD, para facilitar la manipulación de esta estructura. En el
caso específico del LDD, el lenguaje del SGBD debe ser capaz de definir la estructura
lógica de la BD, sin entrar en detalles de implementación ni mecanismos en que se
accede a los datos de la BD.
La forma idónea de realizar lo anterior es mediante un lenguaje declarativo, el cual
permite declarar la estructura del modelo de acuerdo al modelo de datos que utiliza el
SGBD.
Para el caso del LMD, el lenguaje del SGBD debe incluir formas de especificar qué se
desea hacer con los datos (insertar, recuperar, modificar o borrar datos), sin entrar en
detalles acerca de cómo se realizan estas operaciones.
Igual que en el caso anterior, la mejor manera de realizar esto es mediante un
lenguaje declarativo que permita especificar la estructura de la operación a realizar,
de acuerdo siempre con el modelo de datos utilizado por el SGBD.
Generalización y especialización
– – La generalización dice que algo similar también es correcto, pero es difícil de
implementar.
– – Hay que especializar para facilitar la implementación sin perder la utilidad del
lenguaje.
Resumen:
Para el diseño de lenguajes de Programación se debe considerar varios aspectos, entre
ellos las tareas que se desean realizar y los datos a manejar. Generalmente diseñamos
un lenguaje porque necesitamos comunicarnos con algo de manera fácil y rápida, por
ejemplo un archivo, un hardware, una base de dato; ependiendo de la tarea que se
quiera realizar entonces diseñamos.
Una forma de como hacerla y como podemos relacionarlo con otras tareas para
permitir que esa relación pueda ser automatizada. Además de las tareas que se van a
realizar tambien se debe pensar en los tipos de datos que se van a manejar, por
ejemplo números, cadenas, ya que si se van a realizar operaciones, hay que pensar en
que espacio de memoria se van a almacenar. Otras cosas a considerar son como se va
a manejar la memoria, y a que tipo de computadoras estarán enfocados.
Objetivos Filosofias Diseño Lenguajes De
Programacion
El principal objetivo del lenguaje es, por supuesto, servir de apoyo didáctico en una
materia de lenguajes de programación, intérpretes y compiladores. Derivado de la
persecución de este objetivo surgen varias metas específicas y objetivos particulares:
• La apreciación del desarrollo e implementación de un lenguaje de programación.
• La comprensión del procedimiento seguido en la formación de un conjunto de reglas
gramaticales que permiten identificar y nombrar sin ambigüedad acciones y
secuencias ordenadas de acciones sobre el contexto específico de un problema en
particular.
• Proporcionar un medio de familiarización con la realización de operaciones
aritméticas usando una pila y su posterior extensión para la manipulación de otros
datos.
• La clara especificación y adecuada documentación del proceso de creación o
extensión de un lenguaje y sus resultados.
En el diseño de Stop se ha tratado de seguir muchos de los principios usados en los
modernos lenguajes de programación hasta el punto donde su implementación no sea
demasiado complicada para el desarrollo de un proyecto semestral. Principalmente se
ha buscado que sea regular, modular y estructurado.
FILOSOFÍA DE DISEÑO DEL LENGUAJE
El lenguaje de programación esta pensado para la programación evolutiva. Esta
consiste en un método de programación basado en un ciclo de prueba y error donde se
refina un programa hasta conseguir que haga lo que queremos. Esta forma de
programar se aplica a problemas donde se desconoce que algoritmo nos llevará a la
solución. Esta situación se da en investigación y en la creación de prototipos donde
hay que realizar muchas pruebas hasta dar con la solución más apropiada. Para estos
casos, es más apropiado el uso de un interprete que un compilador, ya que de esta
forma se reduce el tiempo invertido en cada prueba.
Para que un lenguaje sea efectivo en programación evolutiva tiene que facilitar: la
interacción, la modificación del programa y aportar instrucciones de alto nivel
cercanas al problema. Estos tres punto se consiguen cuando el lenguaje tiene las
siguientes características:
Estado de Interacción. Entre prueba y prueba es interesante guardar el estado de
ejecución. De esta forma se evita repetir la ejecución de las instrucciones necesarias
para llegar al estado de ejecución donde queremos realizar pruebas. Los programas
implementa esta característica mediante un ámbito global dinámico que guarda
funciones y variables mientras se utiliza el intérprete.
Sintaxis Cercana al Problema. Es más efectivo escribir en una notación cercana al
problema que adaptarse a la sintaxis de un lenguaje de programación. De esta forma
se evita el paso de traducción que tiene que realizar el programador antes de escribir
una nueva sentencia del programa.
DISEÑO DEL LENGUAJE
Hasta el momento, lo que se ha visto ha sido una serie de operaciones aritméticas y de
manipulación de la pila. Todas éstas indicadas de manera implícita a través de una
serie de términos y convenciones que es necesario definir de forma más precisa antes
de continuar con otra cosa.
Existen dos formas en las que puede representarse una pila y su funcionamiento; de
ésta dependerá la terminología que se emplee. Nosotros hemos venido usando una
representación que conceptualiza a la pila como un arreglo que “crece” o es utilizado
desde su base (el primer nivel) hacia arriba. Los datos entran y se toman de la base y
desplazan o “empujan” a los elementos, que ya pudieran estar introducidos en la pila,
hacia arriba. Identificaremos a los diversos elementos involucrados acorde al siguiente
diagrama:
Ingreso
Llamaremos nivel a cada una de las localidades con que cuente la pila y los
enumeraremos a partir de 1. La base es el primer nivel. El tope de la pila lo
identificaremos como el nivel en el que se encuentre el elemento con ingreso más
antiguo. Representaremos con una elipsis (…) el resto de las localidades o elementos
en la pila. Por último, mientras que nos hemos limitado a usar números en la
representación de elementos que pueden ser introducidos en la pila, no estamos
restringidos a esto. Dependiendo de su implementación una pila puede albergar más
que números. De forma genérica nos referiremos a estos elementos como objetos.
Los diagramas que se han usado para ilustrar el contenido de la pila antes y después
de la aplicación de una instrucción (que aparece como una operación, función,
operador o nombre en el código del programa) serán identificados como diagramas de
pila. En estos diagramas la elipsis se incluirá sólo cuando sea necesario recalcar la
existencia del resto de la pila o su contenido; mientras no se indique lo contrario,
siempre debe considerarse a la pila de Stop como infinita y factible de tener un
contenido.
Adicionalmente, en la presente descripción:
Las palabras clave de Stop se escriben en mayúsculas, aunque el lenguaje no es
sensible a altas o bajas (lo que en otros ambientes es lo que se denomina case
insensitive). Palabras clave de Stop se escriben usando un font no proporcional.
• • Elementos a substituir por otro valor se ilustran en itálicas.
• • Conceptos y acciones a resaltar se subrayan.
• • En las descripciones sintácticas, elementos repetitivos se denotan por el
seguimiento de una elipsis.
• • Salidas en pantalla se muestran en negritas.
COMUNICACIÓN HUMANA
Las teorías de la comunicación representan un punto de partida indispensable no sólo
para el estudio y la investigación de la comunicación, sino para el quehacer
profesional práctico. El curso discute las aportaciones conceptuales de las perspectivas
teóricas más recientes para el análisis de la comunicación masiva contemporánea.
Comunicación interpersonal e intercultural, así como las habilidades interactivas
necesarias para gerentes.
Análisis de las capacidades de transmisión de información de fibras ópticas, tomando
en cuenta los sistemas transmisores, los sistemas receptores y los requerimientos de
acoplamiento óptico. Comportamiento de ondas electromagnéticas en el interior de las
fibras ópticas. Receptores óptimos, transmisión coherente, amplificación óptica,
multicanalización por división de longitud de onda, redes ópticas, SONET, ATM.
La computadora, a diferencia de otras herramientas que en general apoyan el
esfuerzo físico de los humanos, fue inventada para facilitar el trabajo intelectual. Si el
hombre tiene algún problema, por ejemplo “sumar dos y dos”, el diseñador define el
algoritmo que resuelve el problema, el programador lo codifica en un lenguaje de
programación, el cual la computadora es capaz de “entender”, luego la computadora
ejecuta el algorítmo expresado como programa en el lenguaje de programación en
cuestión, y listo. La máquina le entrega al hombre la respuesta “4″, sin que éste
tuviera que esforzar sus neuronas.
• Se busca una comunicación eficiente entre el programador y el ordenador.
• Un buen nivel de comunicación se da cuando los programas son leíbles.No ha de ser
necesaria una documentación externa al programa (minimizar). Es más importante
que un programa sea leíble que escribible. Un programa se escribe una vez, pero se lee
muchas durante su depuración, documentación y mantenimiento. Tendencia actual a
separar la interfaz de la implementación de un módulo.
• La sintaxis ha de reflejar la semántica.
Reducir las manipulaciones implícitas.
Coerciones (coerciones de PL/I o C).
ON de BASIC para eventos o excepciones.
Constructores y destructores de C++ (necesarios, pero complican el seguimiento del
flujo de ejecución).
• El lenguaje ha de representar los patrones de pensamiento humanos. No hay que
crear una sintaxis pensada exclusivamente para un modelo de cómputo teórico (l-
calculus).
un conjunto de instrucciones de la máquina
facilitar la compilación (forth).
• El programador no es un ordenador. Que el compilador entienda una estructura es
posible que el programador no.
Evitar incluso la posibilidad de escribirlas
Reducir el conocimiento contextual.
El programador no funciona con una pila como el programa compilado.
PREVENCIÓN Y DETECCION DE ERRORES
Tener una serie de defensas tal que si un error no es detectado por uno, este
probablemente sea detectado por otro.
Los errores deben ser detectados por el compilador, si un mecanismo no es capaz de
detectar un error es necesario implementar otro que lo detecte, pero nunca ignorarlo.
A continuación se presentan prevencion y tolerancia de errores y fallos
Prevencion de errores
• El programador comete errores. Hay que prevenir los errores
• El programador es su fuente. El programador no sabe lo que hace y el compilador
ha de limitar sus acciones (EUCLID, PASCAL). Hacer imposible cierto tipo de
errores.
Ejecutar datos → control de flujo limitado
Errores en el uso de datos → Tipado fuerte
Apuntadores erróneos → Gestión de memoria implícita (LISP, PROLOG, ML, etc).
Hay que facilitar su detección, identificación y corrección. Tener que declarar antes
de utilizar. Evitar coerciones inductoras de errores.
• float a int por su perdida de precisión.
• Comprobaciones en tiempo de ejecución. Índice de array fuera de limites. Control
sobre los apuntadores a NULL.
Prevención y tolerancia de fallos
• Hay dos formas de aumentar la fiabilidad de un sistema:
Prevención de fallos: Se trata de evitar que se introduzcan fallos en el sistema antes de
que entre en funcionamiento
Prevención de fallos
Se realiza en dos etapas:
• Evitación de fallos
– – Se trata de impedir que se introduzcan fallos durante la construcción del sistema
• Eliminación de fallos
– – Consiste en encontrar y eliminar los fallos que se producen en el sistema una vez
construido
Tolerancia de fallos: Se trata de conseguir que el sistema continúe funcionando
aunque produzcan fallos
En ambos casos el objetivo es desarrollar sistemas con modos de fallo bien definidos.
Detección de errores
• Por el entorno de ejecución
hardware (p.ej.. instrucción ilegal)
ºnúcleo o sistema operativo (p.ej. puntero nulo)
• Por el software de aplicación
Duplicación (redundancia con dos versiones)
Comprobaciones de tiempo
Inversión de funciones
Códigos detectores de error
Validación de estado
Validación estructural

Diseño Detallado Lenguajes De


Programacion
El diseño detallado tiene que ver con la especificación de detalles algorítmicos,
representaciones concretas de datos, interconexiones entre funciones y estructuras de
datos, y empaque del producto de programación. El diseño detallado está fuertemente
influenciado por el lenguaje de instrumentación, pero no es lo mismo que la
instrumentación; el diseño detallado tiene que ver más con aspectos semánticos y
menos con detalles sintácticos que es la instrumentación.
El punto de inicio para el diseño detallado es una estructura arquitectónica a la que se
le van a proporcionar los detalles algorítmicos y las representaciones concretas de
datos. Mientras que hay una fuerte tentación para proceder directamente de la
estructura arquitectónica a la instrumentación, hay varias ventajas que pueden
lograrse en el nivel intermedio de detalle proporcionado por el diseño detallado.
La instrumentación comunica los aspectos de la sintaxis del lenguaje de
programación, el estilo de codificación la documentación interna, y la inserción de
pruebas y depuraciones al código. Las dificultades que se encuentran durante la
instrumentación casi siempre se deben al hecho de que el instrumentador
simultáneamente está realizando análisis, diseño y actividades de codificación
mientras intenta expresar el resultado final en un lenguaje de instrumentación. El
diseño detallado permite el diseño de algoritmos y representaciones de datos en un
nivel más alto de abstracción y notación que el que proporciona el lenguaje de
instrumentación .
El diseño detallado separa la actividad de diseño a bajo nivel de la instrumentación,
igual que las actividades de análisis y diseño aislan las consideraciones de lo que se
desea de la estructura que logrará los resultados deseados. Una especificación
adecuada de diseño detallado minimiza el número de sorpresas durante la
instrumentación del producto.

Caso De Estudio
2.5 Caso de estudio
Explicar el lenguaje que se va a desarrollar en el curso:
 ¿Por qué se va a desarrollar (problemática)?
 Vocabulario del lenguaje (léxico palabras clases que hacen)
 Reglas de estructura (gramática, sintaxis)
 Semántica
 Si existe código intermedio
 Si se mejora ese código
 El código objeto final
Principio del formulario
partner-pub-8555 ISO-8859-1
Final del formulario

de los seres humanos para comunicarse mediante de signos. Principalmente lo hacemos utilizando el signo
lingüístico. Aún así, hay diversos tipos de lenguaje. El lenguaje humano puede estudiarse en cuanto a su desarrollo
desde dos puntos de vista complementarios: la ontogenia, que remite al proceso de adquisición del lenguaje por el
ser humano, y la filogenia El lenguaje animal se basa en el uso de señales sonoras, visuales y olfativas a modo de
signos para referirse a un referente o un significado diferente de dichas señales. Dentro del lenguaje animal están
los gritos de alarma, el lenguaje de las abejas, etc. Los lenguajes formales son construcciones artificiales
humanas, que se usan en matemática y otras disciplinas formales, incluyendo lenguajes de programación. Estas
construcciones tienen estructuras internas que comparten con el lenguaje humano natural, por lo que pueden ser
en parte analizados con los mismos conceptos que éste.de los seres humanos para comunicarse mediante de
signos. Principalmente lo hacemos utilizando el signo lingüístico. Aún así, hay diversos tipos de lenguaje. El
lenguaje humano puede estudiarse en cuanto a su desarrollo desde dos puntos de vista complementarios: la
ontogenia, que remite al proceso de adquisición del lenguaje por el ser humano, y la filogenia El lenguaje animal se
basa en el uso de señales sonoras, visuales y olfativas a modo de signos para referirse a un referente o un
significado diferente de dichas señales. Dentro del lenguaje animal están los gritos de alarma, el lenguaje de las
abejas, etc. Los lenguajes formales son construcciones artificiales humanas, que se usan en matemática y otras
disciplinas formales, incluyendo lenguajes de programación. Estas construcciones tienen estructuras internas que
comparten con el lenguaje humano natural, por lo que pueden ser en parte analizados con los mismos conceptos
que éste.de los seres humanos para comunicarse mediante de signos. Principalmente lo hacemos utilizando el
signo lingüístico. Aún así, hay diversos tipos de lenguaje. El lenguaje humano puede estudiarse en cuanto a su
desarrollo desde dos puntos de vista complementarios: la ontogenia, que remite al proceso de adquisición del
lenguaje por el ser humano, y la filogenia El lenguaje animal se basa en el uso de señales sonoras, visuales y
olfativas a modo de signos para referirse a un referente o un significado diferente de dichas señales. Dentro del
lenguaje animal están los gritos de alarma, el lenguaje de las abejas, etc. Los lenguajes formales son
construcciones artificiales humanas, que se usan en matemática y otras disciplinas formales, incluyendo lenguajes
de programación. Estas construcciones tienen estructuras internas que comparten con el lenguaje humano natural,
por lo que pueden ser en parte analizados con los mismos conceptos que éste.de los seres humanos para
comunicarse mediante de signos. Principalmente lo hacemos utilizando el signo lingüístico. Aún así, hay diversos
tipos de lenguaje. El lenguaje humano puede estudiarse en cuanto a su desarrollo desde dos puntos de vista
complementarios: la ontogenia, que remite al proceso de adquisición del lenguaje por el ser humano, y la filogenia
El lenguaje animal se basa en el uso de señales sonoras, visuales y olfativas a modo de signos para referirse a un
referente o un significado diferente de dichas señales. Dentro del lenguaje animal están los gritos de alarma, el
lenguaje de las abejas, etc. Los lenguajes formales son construcciones artificiales humanas, que se usan en
matemática y otras disciplinas formales, incluyendo lenguajes de programación. Estas construcciones tienen
estructuras internas que comparten con el lenguaje humano natural, por lo que pueden ser en parte analizados con
los mismos conceptos que éste.de los seres humanos para comunicarse mediante de signos. Principalmente lo
hacemos utilizando el signo lingüístico. Aún así, hay diversos tipos de lenguaje. El lenguaje humano puede
estudiarse en cuanto a su desarrollo desde dos puntos de vista complementarios: la ontogenia, que remite al
proceso de adquisición del lenguaje por el ser humano, y la filogenia El lenguaje animal se basa en el uso de
señales sonoras, visuales y olfativas a modo de signos para referirse a un referente o un significado diferente de
dichas señales. Dentro del lenguaje animal están los gritos de alarma, el lenguaje de las abejas, etc. Los lenguajes
formales son construcciones artificiales humanas, que se usan en matemática y otras disciplinas formales,
incluyendo lenguajes de programación. Estas construcciones tienen estructuras internas que comparten con el
lenguaje humano natural, por lo que pueden ser en parte analizados con los mismos conceptos que éste.Principio
del formulario
Final del formulario