You are on page 1of 14

Lenguaje de Programación

Un lenguaje de programación se puede definir de distintas formas:

• Es una notación formal para describir algoritmos o funciones que serán


ejecutadas por un ordenador.

• Es un lenguaje para de comunicar instrucciones al ordenador.

• Es una convención para escribir descripciones que puedan ser evaluadas.

Los lenguajes de programación se pueden clasificar desde distintos puntos


de vista:

• Según su grado de independencia de la máquina

• Según la forma de sus instrucciones

• Por generaciones
Los lenguajes de programación se pueden clasificar desde
distintos puntos de vista:

• Según su grado de independencia de la máquina

• Según la forma de sus instrucciones

• Por generaciones

• Según su grado de independencia de la máquina


 
Los lenguajes se pueden clasificar según su grado de independencia de la máquina en
que se ejecutan en cinco grupos:
§ Lenguaje máquina
§ Lenguaje ensamblador (en inglés assembly)
§ Lenguajes de medio nivel
§ Lenguajes de alto nivel o lenguajes orientados a usuarios
§ Lenguajes orientados a problemas concretos
La evolución de los lenguajes de programación

Según la forma de sus instrucciones


Los lenguajes se pueden clasificar según la forma de sus instrucciones o según los
distintos paradigmas de programación:

§ Lenguajes imperativos o procedimentales


§ Lenguajes declarativos: lógicos y funcionales
§ Lenguajes concurrentes
§ Lenguajes orientados a objetos
• Por generaciones

La Informática es una ciencia joven, nació en los años cuarenta, y tomó su


carácter de disciplina académica en los años sesenta con la creación de los
primeros centros de Cálculo en la Universidades. La evolución de los lenguajes de
programación ha ido, en cierta medida, paralelo al desarrollo de la Informática. Los
lenguajes se pueden clasificar según generaciones en:

§ Primera generación
§ Segunda generación
§ Tercera generación
§ Cuarta generación
§ Quinta generación
§ Generación orientada a objetos
§ Generación visual
§ Generación internet
Procesadores de lenguaje es el nombre genérico que reciben todas las
aplicaciones informáticas en las cuales uno de los datos fundamentales de
entrada es un lenguaje. La definición anterior afecta a una gran variedad de
herramientas software, algunas de ellas son las siguientes (expresando entre
paréntesis el término equivalente en lengua inglesa):
• Traductores (translators)
• Compiladores (compilers)
• Ensambladores (assemblers)
• Montadores de enlaces o enlazadores (linkers)
• Cargadores (loaders)
• Intérpretes (interpreters)
• Desensambladores (dissemblers)
• Decompiladores (decompilers)
• Depuradores (debuggers)
• Analizadores de rendimiento (profilers)
• Optimizadores de código (code optimizers)
• Compresores (compressors)
• Preprocesadores (preprocessors)
• Formateadores (formatters)
• Editores (editors)
Compiladores
Un traductor que transforma textos fuente de lenguajes de alto
nivel a lenguajes de bajo nivel se le denomina compilador (en
inglés compiler).
El tiempo que se necesita para traducir un lenguaje de alto nivel
a lenguaje objeto se denomina tiempo de compilación
(compilation time). El tiempo que tarda en ejecutarse un
programa objeto se denomina tiempo de ejecución (run time).

Programa fuente COMPILADOR Programa objeto

tiempo de compilación
LÉXI
CO
El léxico de un lenguaje natural está constituido por todas las palabras y
símbolos que lo componen. Para un lenguaje de programación u otro lenguaje
usado en Informática la definición anterior también es válida.

En los lenguajes de programación el léxico lo constituyen todos los


elementos individuales del lenguaje, denominados fre- cuentemente en inglés
tokens. Así son tokens: las palabras reservadas del lenguaje, los símbolos que
denotan los distintos tipos de operadores, identificadores (de variables, de
funciones, de procedimientos, de tipos, etc...), separadores de sentencias y
otros símbolos empleados en las distintas construcciones de un lenguaje.
El programa fuente se trata inicialmente con el analizador léxico (en inglés
scanner) con el proposito de agrupar el texto en grupos de caracteres con
entidad propia llamados tokens, unidades sintácticas o componentes
léxicos, tales como constantes, iden- tificadores (de variables, de funciones, de
procedimientos, de tipos, de clases), palabras reservadas, y operadores.
IF cuenta = sueldo THEN jefe := justo ;
el analizador léxico la separa en la siguiente secuencia de tokens:

IF cuenta = sueldo THEN jefe := justo ;


y les asigna su atributo, habitualmente por medio de un código numérico cuyo
significado se ha definido previamente.
token Atributo Observaciones
IF 20 Palabra reservada
cuenta 1 Identificador
= 15 Operador de comparación
sueldo 1 Identificador Palabra
THEN 21 reservada
jefe Identificador
1
:= Asignación
10
justo Identificador
1
; Separador de
27
sentencias
SINTA
XIS

En lingüística, sintaxis es el estudio de la función que desempeña cada palabra


en el entorno de una frase. Mientras que semántica es el estudio del significado de
una palabra tanto a nivel individual como en el contexto de una frase.

En los lenguajes de programación, sintaxis es un conjunto de reglas formales


que especifican la composición de los programas a base de letras, dígitos y otros
caracteres. Por ejemplo, las reglas de sintaxis especifican en Pascal que dos
sentencias deben ir separadas por un ";" o que la declaración de tipos debe ir
antes que la de variables.
Por ejemplo el análisis sintáctico de la siguiente expresión:
(A+B)*(C+D)

<expresión> ::= <término> <más terminos>


<más términos> ::= + <término> <más términos>
| - <término> <más términos>
| <vacío>
<término> ::= <factor> <más factores>
<más factores> ::= * <factor> <más factores>
| / <factor> <más factores>
| <vacío>

<factor> ::= ( <expresión> ) | <variable> | <constante>


SEMÁNTICA
La semántica en lingüística es el estudio del significado de una palabra tanto a
nivel individual como en el contexto de una frase. Semántica en los lenguajes de
programación es el conjunto de reglas que especifican el significado de cualquier
sentencia,

sintácticamente correcta y escrita en un determinado lenguaje. Por ejemplo en el


lenguaje Pascal la sentencia :

suma := 27 / lado

es sintácticamente correcta, ya que a la izquierda del símbolo de asignación hay un


identificador, y a la derecha una expresión. Pero para que sea semánticamente
correcta hay que comprobar:

- lado debe ser compatible con el operador "/" y con el operando 27.

- suma debe ser un tipo compatible con el resultado de la operación.


Generación de código intermedio

La tarea de síntesis suele comenzar generando un código intermedio. El


código intermedio no es el lenguaje de programación de ninguna máquina real,
sino que corresponde a una máquina abstracta, que se debe de definir lo más
general posible, de forma que sea posible traducir este código intermedio a
cualquier máquina real. El objetivo del código intermedio es reducir el número de
programas necesarios para construir traductores, y permitir más facilmente la
transportabilidad de unas máquinas a otras. Supóngase que se tienen n
lenguajes, y se desea construir traductores entre ellos.
Optimización de código

La finalidad de la optimización de código es producir un código objeto lo más


eficiente posible. En algunos casos también se realiza una optimización del
código intermedio. Algunas optimizaciones que se pueden realizar son la
evaluación de expresiones constantes, el uso de ciertas propiedades de los
operadores, tales como la asociativa, conmutativa, y distributiva; así como la
reducción de expresiones comunes.

Generación de código

Una vez que se ha obtenido el código intermedio se pasa ensamblador o a código


máquina, de una máquina real, en el caso de un compilador, o a otro lenguaje de
programación en el caso de un traductor
Administración de la Tabla de símbolos
La tabla de símbolos es una estructura de datos que contiene toda la información relativa a cada
identificador que aparece en el programa fuente. Los identificadores pueden ser de variables, tipos de
datos, funciones, procedimientos, etc... Evidentemente cada lenguaje de programación tiene unas
características propias que se reflejan en la tabla de símbolos.
Los atributos habituales son:

• Especificación del identificador: variable, tipo de datos, función, procedimiento, etc...

• Tipo: en el caso de variables será el identificador de tipo (real, entero, carácter, cadena de caracteres, o
un tipo definido previamente). En el caso de las funciones puede ser el tipo devuelto por la función. Los
procedimientos se pueden marcar como funciones que no devuelven nada (void).

• Dimensión o tamaño. Puede utilizarse el tamaño total que ocupa una variable en bytes, o las
dimensiones. Así en el caso de variables simples se coloca la dimensión cero, para los arrays la dimensión
del array, en el caso de estructuras (struct) o registros (record) el número de campos o miembros, en el
caso de funciones o procedimientos se puede almacenar el número de parámetros, etc...

• Dirección de comienzo para generar el código objeto. En el código máquina no hay nombre de
identificadores, tan sólo direcciones de memoria para datos (static, stack, y heap) o para código (usadas por
los procedimientos y funciones).

• Listas de información adicional. Contienen información de tamaño variable, por ejemplo: los tipos de los
campos o miembros de las estructuras o registros, los tipos de los parámetros de estructuras o uniones.

You might also like