Professional Documents
Culture Documents
PRIMER PARCIAL
PRCTICA I
SINTAXIS
Conjunto de reglas que definen cmo componer letras, dgitos y otros caracteres para formar los
programas.
Un lenguaje, sea natural (como el espaol) o artificial (como Java) es un conjunto de cadenas de
caracteres provenientes de algn alfabeto. Las cadenas de un lenguaje son denominadas sentencias o
declaraciones. Las reglas sintcticas de un lenguaje especifican cules cadenas de caracteres de un
alfabeto estn en el lenguaje.
La sintaxis se describe por un conjunto de reglas que definen la forma del lenguaje: definen cmo las
sentencias deben ser formadas como secuencia de componentes bsicos llamados palabras. Usando
esas reglas, podemos decir si una sentencia es vlida o no. La sintaxis no debe contarnos nada sobre el
contenido (o significado) de la sentencia eso lo hace la semntica.
As, la sintaxis de un lenguaje es definida por dos conjuntos de reglas: las lxicas y las sintcticas. Las
lxicas especifican un conjunto de caracteres que constituyen el alfabeto del lenguaje y la manera en
que tales caracteres se pueden combinar para formar palabras vlidas.
La sintaxis de un lenguaje influye en cmo los programas son escritos por el programador, ledos por otro
programador y traducidos por el computador.
Elementos de la Sintaxis
Alfabeto o conjunto de caracteres: Tener en cuenta con qu conjunto de caracteres se trabaja
sobre todo por el orden a la hora de comparaciones. La secuencia de bits que compone cada carcter la
determina la implementacin.
Identificadores: Eleccin ms ampliamente utilizada: Cadena de letras y dgitos, que deben
comenzar con una letra. Si se restringe la longitud se pierde legibilidad
Operadores: Con los operadores de suma, resta, etc. la mayora de los lenguajes utilizan +, -. En
los otros operadores no hay tanta uniformidad.
Palabra clave y keywords: son palabras claves que tienen un significado dentro de un contexto.
Palabra reservada, son palabras claves que adems no pueden ser usadas por el programador
como identificador de otra entidad.
Comentarios y uso de blancos: Hacen los programas ms legibles.
Estructura sintctica
Vocabulario o words: Conjunto de caracteres y palabras necesarias para construir expresiones,
sentencias y programas. Ej: identificadores, operadores, palabras claves, etc. Las words no son
elementales se construyen a partir del alfabeto
Expresiones: Son funciones que a partir de un conjunto de datos devuelven un resultado. Son
bloques sintcticos bsicos a partir de los cuales se construyen las sentencias y programas
Sentencias: Componente sintctico ms importante. Tiene un fuerte impacto en la facilidad de
escritura y legibilidad Hay sentencias simples, estructuradas y anidadas.
REGLA LEXICOGRFICA Y REGLA SINTCTICA
Reglas lxicas: Conjunto de reglas para formar las word, a partir de los caracteres del alfabeto.
Diferencias entre maysculas y minsculas. Smbolo de distinto. En C != en Pascal <>
Reglas sintcticas: Conjunto de reglas que definen como formar las expresiones y sentencias. El If en
C no lleva then, en Pascal si.
La diferencia entre lxico y sintctico es arbitrario, dan la apariencia externa del lenguaje
TIPOS DE SINTXIS
ABSTRACTA: Se refiere bsicamente a la estructura
CONCRETA: Se refiere bsicamente a la parte lxica
PRAGMTICA: Se refiere bsicamente al uso prctico
While (c!=a){}; EN C
While (c<>a)begin end EN PASCAL
Son diferentes respecto a la sintaxis concreta, porque existen diferencias lxicas entre ellas.
Son iguales respecto a la sintxis abstracta, ya que ambas tienen la misma estructura
while condicin bloque
Ejemplo de sintxis pragmtica:
<> es mas legible que !=
En C y Pascal {} o begin-end pueden omitirse si el bloque esta compuesto por una sola sentencia.
Pragmticamente puede conducir a error ya que si se necesitara agregar una sentencia debe agregarse
el begin end o las {}.
LEXEMAS
Los lexemas de los lenguajes de programacin incluyen sus literales numricos, operadores, y palabras
especiales, entre otros. Uno puede pensar en programas como cadenas de lexemas en lugar de
caracteres. Son divididos en grupos, por ejemplo, nombres de variables, mtodos, clases, e
identificadores. Cada grupo es representado por un nombre o un token. As, un token de un lenguaje es
una categora de lexemas.
Ejemplo index=2*count+17;
Lexemes
Index
=
2
*
Count
+
17
;
tokens
identifier
equal_sign
int_ literal
mult_op
identifier
plus_op
int_literal
semicolon
RBOLES SINTCTICOS
Al compilar los programas la ejecucin de los mismos es ms rpida. Ej. de programas que se compilan:
C, Ada, Pascal, etc. Los compiladores pueden ejecutare en un solo paso o en dos pasos. En ambos
casos cumplen con varias etapas, las principales son
Anlisis
Anlisis lxico (Scanner): Es el que lleva ms tiempo. Hace el anlisis a nivel de palabra. Divide
el programa es sus elementos constitutivos: identificadores, delimitadores, smbolos especiales, nmeros,
palabras clave, delimitadores, comentarios, etc. Analiza el tipo de cada token. Filtra comentarios y
separadores como: espacios en blanco, tabulaciones, etc. Genera errores si la entrada no coincide con
ninguna categora lxica Convierte a representacin interna los nmeros en punto fijo o punto flotante.
Poner los identificadores en la tabla de smbolos. Reemplaza cada smbolo por su entrada en la tabla. El
resultado de este paso ser el descubrimiento de los items lxicos o tokens.
Anlisis sintctico (Parser): El anlisis se realiza a nivel de sentencia. Se identifican las
estructuras; sentencias, declaraciones, expresiones, etc. ayudndose con los tokens. El analizador
sintctico se alterna con el anlisis semntico. Usualmente se utilizan tcnicas basadas en gramticas
formales. Aplica una gramtica para construir el rbol sintctico del programa.
Anlisis semntico (Semntica esttica): Es la mas importante. Las estructuras sintcticas
reconocidas por el analizador sintctico son procesadas y la estructura del cdigo ejecutable toma forma.
Se realiza la comprobacin de tipos. Se agrega la informacin implcita (variables no declaradas). Se
agrega a la tabla de smbolos los descriptores de tipos, etc. a la vez que se hacen consultas para realizar
comprobaciones. Se hacen las comprobaciones de nombres. Ej: toda variable debe estar declarada. Es el
nexo entre el anlisis y la sntesis
Generacin de cdigo intermedio: Debe ser fcil de producir. Debe ser fcil de traducir al programa
objeto
Sntesis: En esta etapa se construye el programa ejecutable. Se genera el cdigo necesario y se
optimiza el programa generado. Si hay traduccin separada de mdulos, es en esta etapa cuando se
linkedita. Se realiza el proceso de optimizacin. Optativo
Optimizacin del cdigo
Generacin del cdigo
realizar la tarea tantas veces como sea requerido. La velocidad de proceso se puede ver
afectada
Compilador: No repetir lazos, se decodifica una sola vez
Eficiencia:
Intrprete: Ms lento en ejecucin
Compilador: Ms rpido desde el punto de vista del hard
Espacio ocupado:
Intrprete: Ocupa menos espacio, cada sentencia se deja en la forma original
Compilador: Una sentencia puede ocupar cientos de sentencias de mquina
Deteccin de errores:
Intrprete: Las sentencias del cdigo fuente pueden ser relacionadas directamente con la
que se esta ejecutando.
Compilador: Cualquier referencia al cdigo fuente se pierde en el cdigo objeto
Combinacin de ambas tcnicas: Los compiladores y los intrpretes se
diferencian en la forma que ellos reportan los errores de ejecucin. Algunos
ambientes de programacin contienen las dos versiones interpretacin y
compilacin.
Utilizan el intrprete en la etapa de desarrollo, facilitando el diagnstico de
errores. Luego que el programa ha sido validado se compila para generar cdigo
mas eficiente.
Otra forma de combinarlos: Traduccin a un cdigo intermedio que luego
se interpretar. Sirve para generar cdigo portable, es decir, cdigo fcil de
transferir a diferentes mquinas. Ejemplos: Java, genera un cdigo intermedio
llamado bytecodes, que luego es interpretado por la mquina cliente.
PRCTICA IV
SEMNTICA DE LOS LENGUAJES DE PROGRAMACIN
Una ligadura es esttica si se establece antes de la ejecucin y no se puede cambiar. El termino esttico
referencia al momento del binding y a su estabilidad.
Una ligadura es dinmica si se establece en el momento de la ejecucin y puede cambiarse de acuerdo
a alguna regla especfica del lenguaje. Excepcin: constantes
VARIABLES
Memoria principal: celdas elementales, identificadas por una
direccin. El contenido de una celda es una representacin
codificada de un valor
Las instrucciones del programa pueden manipular una variable a travs de su nombre dentro de su
alcance. Los diferentes lenguajes adoptan diferentes reglas para ligar un nombre a su alcance.
Alcance esttico: Llamado alcance lxico. Define el alcance en trminos de la estructura lxica del
programa. Puede ligarse estticamente a una declaracin (explcita o implcita) examinando el texto del
programa, sin necesidad de ejecutarlo. La mayora de los lenguajes adoptan reglas de ligadura de
alcance esttico.
Alcance dinmico: Define el alcance del nombre de la variable en trminos de la ejecucin del programa.
Cada declaracin de variable extiende su efecto sobre todas las instrucciones ejecutadas posteriormente,
hasta que una nueva declaracin para una variable con el mismo nombre es encontrado durante la
ejecucin. APL, Lisp (original), Afnix (llamado Aleph hasta el 2003), Tcl (Tool Command Language), Perl
10
Esttico Vs Dinmico
11
Las reglas dinmicas son ms fciles de implementar. Son menos claras en cuanto a disciplina
de programacin. El cdigo se hace ms difcil de leer.
Local: Son todas la referencias que se han creado dentro del programa o subprograma.
No Local: Son todas las referencias que se utilizan dentro del subprograma pero que no han sido
creadas en l.
Global: Son todas las referencias creadas en el programa principal
Espacios de nombres: Un espacio de nombre es una zona separada donde se pueden declarar
y definir objetos, funciones y en general, cualquier identificador de tipo, clase, estructura, etc.; al que se
asigna un nombre o identificador propio. Utilidad: Ayudan a evitar problemas con identificadores con el
mismo nombre en grandes proyectos o cuando se usan bibliotecas externas.
TIPO
Definicin
Conjunto de valores
Conjunto de las operaciones
Antes de que una variable pueda ser referenciada debe ligrsele un tipo. Protege a las variables de
operaciones no permitidas. Chequeo de tipos: verifica el uso correcto de las variables
Tipos
Predefinidos: Tipos base: Son los tipos base que estn descriptos en la definicin. Los valores se ligan
en la implementacin a representacin de maquina
Tipo Boolean valores: true, false; operaciones: and, or , not
Definidos por el usuario: Constructores: Los lenguajes permiten al programador mediante la declaracin
de tipos definir nuevos tipos a partir de los predefinidos y los constructores
TADs: No hay ligadura por defecto, el programador debe especificar la representacin y las operaciones
TAD. Estructura de datos que representan al nuevo tipo. Rutinas usadas para manipular los objetos de
este nuevo tipo
12
Momentos Esttico: (Pascal, Algol, Simula, ADA, C, C++, Java, etc) El tipo se liga en compilacin y no
puede ser cambiado. El chequeo de tipo tambin ser esttico. Pueden ser:
Explcito: La ligadura se establece mediante una declaracin
int x, y
bool z
y:= z ilegal
y:= not y ilegal
Implcito: La ligadura se deduce por reglas
Ej. Fortran: Si el nombre comienza con I a N es entera; si el nombre comienza con letra
A-H O- Z es real.
Semnticamente la explicita y la implcita son equivalentes, con respecto al tipado de las
variables, ambos son estticos. El momento en que se hace la ligadura y su estabilidad es el
mismo en los dos lenguajes.
Inferido: El tipo de una expresin se deduce de los tipos de sus componentes. Lenguaje
funcional. Ej. Lisp Si se tiene en un script doble x = 2 * x Si no est definido el tipo se infiere
doble : : num num
Momentos Dinmico: (APL, Snobol, Smalltalk, Python, Ruby, etc). El tipo se liga en ejecucin y puede
cambiarse. Ms flexible: programacin genrica. Ms costoso en ejecucin: mantenimiento de
descriptores. Variables polimrficas. Chequeo dinmico. Menor legibilidad
L-VALUE
rea de memoria ligada a la variable.
Tiempo de vida (lifetime) o extensin: Periodo de tiempo que existe la ligadura. El tiempo de vida es el
tiempo en que la variable est alocada en memoria
Alocacin: Momento que se reservar la memoria
Esttica: sensible a la historia
Dinmica
Automtica; cuando aparece la declaracin
Explcita: a travs de algn constructor
Persistente: su tiempo de vida no depende de la ejecucin: existe en el ambiente. Archivos - Bases de
datos
13
R-VALUE
Valor almacenado en el l-valor de la variable. Se interpreta de acuerdo al tipo de la variable
Momentos:
Dinmico: por naturaleza b := a se copia el r-valor de a en el l-valor de b
a :=17
Constantes: se congela el valorObjeto: (l-valor, r-valor)
Inicializacin
Cul es el r-valor luego de crearse la variable? Ignorar el problema: lo que haya en memoria. Estrategia
de inicializacin:
Inicializacin por defecto:
Enteros se inicializan en 0, los caracteres en blanco, etc.
Inicializacin en la declaracin:
14