Vous êtes sur la page 1sur 6

Sintaxis y semántica de los lenguajes

Sintaxis: Reglas gramaticales de un lenguaje. Es la construcción o forma de armar las frases u


oraciones.
Semántica: Significado, sentido o coherencia de una frase.
Lenguajes
 Naturales: Todo lenguaje hablado/escrito que es utilizado por los humanos para
comunicarse. Primero surge el lenguaje, luego las reglas. Evolucionan. Son ambiguos.
 Formales: Conjunto de cadenas de caracteres de un alfabeto dado. No tiene semántica,
solo sintaxis. No evolucionan. No son ambiguos.

Lenguajes Formales
Caracteres: Un carácter es una letra, número u otros símbolos.
Alfabeto (∑): Conjunto finito de caracteres sobre el cual aplicamos reglas para armar palabras. Su
longitud es la cantidad de caracteres que lo forman.
Ej.: ∑ = {a, b, c, rjk, him} Longitud = 5
 Caracteres unarios: a, b, c
 Caracteres indivisibles: rjk, him
Concatenación (a.b): Forma de relacionar, combinar o “enganchar” los caracteres. Podemos
concatenar todos los caracteres del alfabeto.
 Se asemeja (groseramente) a la multiplicación. La concatenación NO es conmutativa.
 La concatenación de palabras validas no necesariamente devuelve palabras válidas.
Palabra no valida: Cadena (conjunto de caracteres).
 La longitud de la palabra es la cantidad de concatenaciones que conlleva.
Ej: Palabra = arjk Longitud: 2
Potenciación: cn representa la repetición de c, n veces. S0 es ε para cualquier cadena.
Palabras: Conjuntos o cadenas de caracteres que surgen de la concatenación de los mismos
siguiendo las reglas del Lenguaje.
 Palabra vacía (ε): No contiene ningún carácter del alfabeto. La concatenación con ε con un
carácter va a devolver el carácter. ε.a = a.ε = a No forma parte de ningún alfabeto
No es una palabra por sí misma. L: {𝜀 𝑛 / n = 1} L1 {Ø} | 𝜀|=0 pero |L={ 𝜀}| = 1
 ***Palabra nula (λ): A diferencia de ε, debe pertenecer al alfabeto. La concatenación con
otro carácter va a devolver el carácter. λ.a =a. λ = a
Es una palabra por sí misma. L:{λ𝑛 / n = 1}  L1 {λ}
Lenguaje (L): Conjunto de palabras formadas por caracteres del alfabeto. No todas las
combinaciones pertenecen al lenguaje ya que algunas palabras no cumplen las reglas del lenguaje.
Ej: L: {a, ab, abc, arjk, chim} Ej2: ∑ = {a}  L = {a, .. , a(n)}
L= {𝑎𝑖 / i>= 1 }
L={a*}
 Infinitos: Pueden tener una cantidad infinita de palabras, aunque cada palabra debe tener
una longitud finita. No existen palabras con longitud infinita. L1 {𝑎𝑛 / n > 0}  L1 {a, aa,
aaa, … }
Ej: L= {An/n >= 1} Es cerrado bajo concatenación (concatenar dos palabras cuales
cualesquiera de L produce otra palabra de L).
 Finitos: Cantidad de palabras acotada. Se puede definir cuantas palabras tiene el lenguaje.
L2 {𝑎𝑛 / 1 <= n <= 0}  L1 {a, aa, aaa, aaaa}
Por extensión L={101,1001,10001,100001}
Por comprensión L={10n1/1 =< n =< 4}
Sublenguajes: Es un sublenguaje, un subconjunto de un lenguaje formal.
L1={a, ab, aab} =>sublenguaje S2={ab,aab} => S3{} sublenguaje vacio
Sublenguaje vacío: Ø, es un sublenguaje de cualquier lenguaje. |L={Ø}|= 0 |L={ 𝜀}| = 1
Lenguaje Universal sobre un alfabeto: Dado Σ (alfabeto), el Lenguaje Universal sobre Σ es un
lenguaje formal infinito, que consiste en todas las palabras que se pueden formar con Σ y la
palabra vacía. Se lo representa Σ* . Es cerrado bajo la concatenación.
Cualquier lenguaje L sobre el alfabeto Σ es un sublenguaje de Σ*. Existen infinitos L sobre un Σ
dado.
Propiedades de las palabras
La concatenación: A veces produce una cadena que no es palabra del lenguaje.

Gramáticas
Gramática formal (GF): conjunto de producciones que generan un lenguaje formal (LF). Genera
todas las palabras del LF pero a su vez, no genera cadenas que estén fuera del lenguaje.
G = (V, T, P, S)
 Variables o no terminales (V): Elementos que forman parte de la gramática, para poder
hacer la concatenación definitiva.
 Terminales (T): Elementos que finalizan la palabra (no generan producciones).
 Producciones (P): Reglas. Combinaciones de V y T que permiten formar las palabras del
alfabeto.
 Salida (S): Elemento que pertenece a V. Es el primer elemento (punto de partida) para
formar las palabras (axioma).
metasimbolos ( ->, |): símbolos que ayudan a representar las producciones de una GF.

Chomsky: Conjunto de reglas para clasificar un lenguaje en base a su dificultad.

Tipo de gramática Tipo de Lenguaje Tipo de Gram Reglas (P) Autómatas


Regulares (Tipo 3) Lenguaje Regular Gramática VVT|TV -Finito Determinístico (AFD)
Regular VT -Finito No Determinístico (AFND)
Independiente de Lenguaje indep Gram indep de V  (V | T)* -Autómata de Pila (ADP)
Contexto (Tipo 2) del contexto contexto (AF + PILA)
Sensibles al Lenguaje Sensible Gram Sensible (V | T)+  (V | T)* -No utiliza autómatas, utiliza
Contexto (Tipo 1) al Contexto al Contexto (α  β) |α|<=|β| máquina de Turing
Irrestrictas (Tipo 0) Lenguaje Gramática (V | T)*  (V | T)* “ “ “
Irrestricto Irrestricta

Gramáticas Regulares que generan Lenguajes Regulares Infinitos (GIC): Poseen producciones
recursivas (V que figura a la izquierda, también figura a la derecha). T -> aT.
El formato define si la cadena de produce de derecha a izquierda o al revés.
V -> t|Vt recursiva a izquierda (Produce de derecha a izquierda).
V -> t|tV recursiva a derecha (Produce de izquierda a derecha, suelen ser más complejas).
Gramática Quasi-Regular (GQR): Abrevia la escritura de una GR y siempre puede ser re-escrita
como una GR. Un conjunto de T es reemplazado por un NT en una o varias producciones
Ej: Gramática Regular: S -> a|b|c|aS|bS|cS
Gramática Quasi-Regular: S ->N|NS
N ->a|b|c
Dos GF son equivalentes si generan el mismo Lenguaje Formal

Gramática Independiente del Contexto: Toda GR es una GIC; la inversa no es cierta.

Proceso de derivación: Permite obtener las palabras de un LF a partir de un axioma de una GF,
aplicando las producciones convenientes de esa gramática. También sirve para saber si una
cadena es palabra del LF. Existen 3 formas de representar la derivación.
1- En forma horizontal, utilizando el símbolo => para relacionar un paso de la derivación con
el siguiente.
2- En forma vertical, reemplazando en cada paso un NT por su lado derecho.
 Derivación Vertical a izquierda: en cada paso se reemplaza el NT que se encuentra más
a la izquierda en la cadena de derivación.
 Derivación Vertical a derecha: en cada paso se reemplaza el NT que se encuentra más
a la derecha en la cadena de derivación.
 Si una palabra se puede obtener mediante una derivación vertical a izquierda, también
se puede obtener mediante una derivación vertical a derecha.
3- En forma de árbol, donde el axioma de la gramática es la raíz del árbol.

Proceso de evaluación: proceso inverso a la derivación hasta llegar hasta el axioma. Se corrobora
que la prioridad de los operadores este correctamente determinada por la gramática.
Si un lenguaje formal es finito, entonces es un LR.

Sintaxis y BNF de Lenguajes de programación (LP)

BNF: Metalenguaje diseñado para describir la sintaxis de los LPs. Conjunto de reglas que definen
con precisión (sin ambigüedades), la sintaxis de los componentes y estructuras de un LP dado
utilizando GICs e incorporando nuevos metasimbolos.
BNF: Compuesta por un conjunto de: No Terminales, Terminales, Metasimbolos (<>, ::=, :, |,uno
de, {}) y Producciones.
Cada regla BNF está compuesta por:
 Lado izquierdo (un solo no terminal)
 Lado derecho: Formado por terminales (caracteres del alfabeto o palabras del lenguaje,
una palabra reservada es un terminal) y no terminales.
 operador "es" (meta símbolo que vincula el lado izquierdo con el derecho)
Un LP está formado por un conjunto de LRs y LICs.
Categorías Léxicas o TOKENS: constituyen diferentes LRs.
Token: palabraReservada, identificador, constante, literalCadena, operador, carácterPuntación
 Palabras Reservadas: Tiene significado gramatical especial. C posee 32 (char, do, else, int, for,
if, void, etc.), no pueden ser utilizadas como identificador. LR finito.
 Identificadores: No pueden comenzar con un digito (si con _). main, variable, bool, nombre de
funciones. LR infinito.
 Constantes: Números o letras entre comillas simples. 'A', 0x23, 4 etc. LR Infinito.
 literalCadena: Todas las cadenas de caracteres que se pueden representar en C, como "abc".
 Operadores: ++ * + & ! sizeof / % < <= == != && || ?: = += LR finito.
 Caracteres de Puntuación: ( ) { } , ; [ ] LR finito.
Categorías Sintácticas: LICs, expresiones y sentencias de un LP. Como relacionar las categorias
lexicas para poder ser interpretado. Son generados por GICs.
Categorías Gramaticales: Expresiones, declaraciones y sentencias.
Identificador: Elemento más utilizado en todo LP. Secuencia de uno o más caracteres que nombra
diferentes entidades de un LP (variables, funciones, procedimientos, constantes, tipos, etc.).
Constituyen un LR infinito.
Lexema: Elementos que componen un LR. Puede ser tanto una palabra de un LR (token), como
puede ser una cadena que no pertenece a ningún LR.
Expresiones: Una GIC para expresiones no solo debe producir todas las expresiones validas, sino
que también debe preocuparse por la prioridad (o precedencia) y asociatividad de cada operador.
Cuanto más cerca del axioma, menor es la prioridad de un operador; cuanto más lejos, más alta.
Expresión -> Termino | Expresión + Termino ("+" tiene prioridad baja)
Termino -> Factor | Termino * Factor ("*" tiene prioridad media)
Factor -> Número | ( Expresión ) ("( )" tiene prioridad alta)
No solo se debe conocer la definición en BNF del constructo, sino también las RESTRICCIONES que
aparecen escritas en lenguaje natural. Ej.: en la sentencia "while" la expresión debe ser Bool. La
BNF permite generar un while con una expresión que no sea Bool, pero esto no es válido.
Expresiones: LIC. Es una secuencia de operandos y operadores más el posible uso de paréntesis.
 Objeto: Región de memoria compuesta por una secuencia de bytes consecutivos, que contiene
la representación de valores. (Ej.: una variable es un objeto, una expresión no).
 Lvalue: Una expresión que designa un objeto. La expresión a la izquierda del = debe ser un
Lvalue. Una constantes y un expresión aritmética no son Lvalues.
Declaraciones y Definiciones: Una definición es como una declaración, pero provoca una reserva
de memoria para el objeto o la función definidos.
int Mayor (int, int); Declaración de la función "Mayor".
int Mayor (int a, int b) { ... } Definición de la función "Mayor".
 Declaración y definición de una estructura en C:
typedef struct {
int a;
char vec[20+1]; Definición (estructura con 3 campos).
int mat [4] [18];
} REGISTRO;

int main (void) { Declaración (variable X de tipo REGISTRO).


REGISTRO X; ...
 Declaración y definición de variables:
Declaración: Tipo Nombres = 0;
Ej.: int a,b,c = 0; Es lo mismo que decir int a = 0; int b = 0; int c = 0;

Sentencias: Especifican las acciones que llevara a cabo la computadora en tiempo de ejecución.
o Sentencia compuesta (o bloque): Definida por las llaves y lo que ellas encierran.
o Sentencia expresión: Es una expresión que termina con un ";".

Lenguaje de programación:
BNF + Restricciones.
Lenguaje formal que no evoluciona, se mantiene igual en el tiempo.

Tipos de Datos Abstractos (TDA): Permite generar


 Set de objetos: Privada + Publica.
 Set de funciones: Primarias + Secundarias.
Categorías Sintácticas
Se evalúan una serie de criterios (Precedencias, Prioridades, Relaciones) sobre las expresiones,
sentencias y definiciones.

Lenguaje C
 Es un lenguaje de 4ta generación
 Es un lenguaje de alto nivel.
 Tiene un set de 32 palabras reservadas
 Trabaja con los bits de memoria.
Compilación Link

.C OBJ .EXE
o .C: Lenguaje de alto nivel desarrollado por el programador (código fuente).
o Compilación: Analiza la sintaxis y transforma a bajo nivel.
o Programa objeto: En hexadecimal.
o Linkedicion: Transforma el obj a lenguaje de máquina.
o .EXE: En lenguaje de máquina que será ejecutado.
Preprocesador
 Funciones con prioridades analizadas
 Bibliotecas:
o <STDIO.h>: Todas las funciones que ya están predefinidas.
o <MATH.h>: Permite modificar bibliotecas ya dadas para cambiar sus funciones.
o <MEM.h>
o <STRING.h>: Tratamiento de cadenas de caracteres.
o <Propia.h>
 Punteros/Pointer
Tipos conflictivos: Hay tipos de datos (string, arreglos, struct) que C no los reconoce, por lo que se
puede simular con las herramientas existentes. Ej.: Para un string un grupo de chars (vector de
caracteres).
Para utilizar estos tipos de datos
 string = char vec [5]; (long de pal + 1)
 arreglos = int vec [4];
struct alumno{ struct: puede crear "registros"
int legajo;
char nombre [8];
char apellido [8];
} UTN, UBA; Son variables que tienen forma del “alumno”

Manejador de archivos
C no puede trabajar con archivos, por lo que se utiliza un manejador de archivos. Este funciona
como intermediario entre C y los archivos.

Operadores Unarios
Tienen significado por si mismos:
 * : Indica que es un puntero. Int *a, b = 0. (a es un puntero, b es una variable).
 &: Toma el contenido de la posición de memoria.

Estructuras
 Condicional: if (condición) operación (condi…) { (Condi: >, <, >=, <=, ==) (oper: ||, &&)
then {…}  si condición V
else {…}  si condición F

 Iteración: switch (variable) {


case (algo): (…) si variable = algo
break;
default : si no cumple ningún case
break;
}

 Imperativa: for (i=0; (condición); i++){


}

do{
}while(condición);

Vous aimerez peut-être aussi