UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL
CUSCO
FACULTAD DE INGENIERIA ELÉCTRICA, ELECTRÓNICA,
INFORMÁTICA Y MECÁNICA
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE
SISTEMAS
Proyecto Compilador de lenguaje SQL en español
TRABAJO PRESENTADO POR:
CUSCO – PERÚ
Enero 2020
INDICE
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
INTRODUCCIÓN..............................................................................3
OBJETIVOS......................................................................................4
DESCRIPCIÓN DEL LÉXICO SQL EN ESPAÑOL..........................5
ANALIZADOR LÉXICO EN FLEX....................................................6
Descripción de las reglas léxicas.....................................................................6
DESCRIPCIÓN DE CONSTRUCCIONES VÁLIDAS........................8
b. Inserción de contenido en las tablas.................................................................8
c. Modificación de datos de una tabla....................................................................9
e. Consultas de datos............................................................................................10
f. Eliminación de tablas.........................................................................................10
GRAMÁTICAS LIBRES DE CONTEXTO PARA LAS
CONSTRUCCIONES DEL LENGUAJE..........................................11
Unsaac-2020 Página 2
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
INTRODUCCIÓN
El presente trabajo correspondiente al curso de Construcción de compiladores
busca dar a conocer los requisitos previos que se necesitan antes de elaborar
un compilador, es decir describir el lenguaje a ser procesado. El objeto de
estudio es el lenguaje estándar de manejo de base de datos SQL, pero el
léxico del lenguaje será elaborado en lenguaje español. Se darán a conocer los
requisitos previos como el léxico del lenguaje, los tipos de datos utilizados,
variables válidas, palabras reservadas, operadores y funciones que se
consideran primitivas.
Adicionalmente se describen las gramáticas regulares que corresponden al
lenguaje en estudio. Esto como parte del análisis sintáctico, con el cual
posteriormente se establecerán las relaciones coordinantes con el análisis
léxico previo.
La construcción de compiladores implica la culminación secuencial de etapas
de análisis, de modo que el lenguaje debe estar correctamente definido. En
busca de este objetivo se plantea en el siguiente informe las definiciones de las
gramáticas libres de contexto.
Unsaac-2020 Página 3
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
OBJETIVOS
El presente trabajo tiene como propósito los siguientes objetivos:
Describir el léxico del lenguaje SQL en español.
Describir las construcciones del lenguaje con una sintaxis válida.
Mostrar la implementación del analizador léxico en FLEX Y C.
Diseñar gramáticas libres de contexto para las construcciones del
lenguaje.
DESCRIPCIÓN DEL LÉXICO SQL EN ESPAÑOL
TOKENS TIPO DE CARÁCTER EJEMPLO
Delimitador Signos de puntuación. (.) punto y (,) coma
(caracteres).
Palabras Clave Cadenas de caracteres INSERTAR, ELIMINAR,
significativos SELECCIONAR,
Unsaac-2020 Página 4
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
ACTUALIZAR, CREAR,
MAX, MIN, PROM, EN,
CUANDO, PRIMARIO,
FIN, ORDENAR, CASO,
ENTONCES, DE.
Cadena Cadenas encerradas “1”, “A233-a” “jules”,
entre comillas. “22-Acacia Av.”
Identificador Cadenas sin comillas Id, aula, nombre,
que identifican nombres dirección
de columnas
Numero Entero Constante numérica 23, 3455, 2019, 12
entera
Numero Decimal Constante numérica 122.2 1416.3 45.6
decimal
Operador Operadores aritméticos +, - , * ,/ <, >
y relacionales
Fecha Almacenar una fecha Del 1 de enero de 0001
solamente. Del 1 de al 31 de diciembre de
enero de 0001 al 31 de 9999
diciembre de 9999
FUNCIONES PRIMITIVAS
MAXIMO(MAX) Devuelve el máximo Seleccionar
de un conjunto de MAX(GASTOS) COMO
valores contenidos en ElMAX de PEDIDOS
su campo especifico where pais = ‘España’;
de una consulta.
MINIMO(MIN) Devuelve el minimo de Seleccionar
un conjunto de valores MIN(GASTOS) COMO
contenidos en su campo Elmin de PEDIDOS
especifico de una where pais = ‘España’;
consulta.
PROMEDIO(PROM) Calcula la media Seleccionar
aritmética de un PROM(GASTOS) como
conjunto de valores PROM de PEDIDOS
contenidos en el campo donde GASTOS > 100;
especificado.
Unsaac-2020 Página 5
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
CONTAR(CONT) Calcula el nro de Seleccionar
registros devueltos por CONT(FechaEnvio y
una consulta. transporte) as Total de
Pedidos
Unsaac-2020 Página 6
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
ANALIZADOR LÉXICO EN FLEX
Unsaac-2020 Página 7
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
Descripción de las reglas léxicas.
PR: dentro de esta variable se establecen las palabras reservadas de las
instrucciones SQL definidas previamente. Así tenemos crear tabla, eliminar
tabla, actualizar, insertar en, seleccionar de, seleccionar en, seleccionar
valores, establecer, donde, eliminar de, y de las funciones primitivas
definidas previamente: min, max, prom.
ID: cadena de caracteres que realizan la función de identificadores para
realizar las instrucciones SQL.
TDN: representan los tipos de datos numéricos, los cuales llevan un rango.
TD: variable que representan los tipos de datos en general, salvo los que son
numéricos con rango.
LOOP: variable que enlaza variables con los tipos de datos respectivos.
Unsaac-2020 Página 8
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
En esta sección de código se realiza el emparejamiento entre la figura léxica
que representa cada token del código fuente del programa de SQL en español.
Unsaac-2020 Página 9
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
DESCRIPCIÓN DE CONSTRUCCIONES VÁLIDAS
a continuación, se indican las principales operaciones que se implementan a
través de sentencias SQL.
a. Creación de tablas
La sentencia CREAR TABLA permite definir una nueva tabla y la prepara para
aceptar datos. Su sintaxis es la siguiente:
CREAR TABLA nombre de tabla (definición de columnas)
Las columnas de la tabla recién creada se definen en el cuerpo de la sentencia
CREAR TABLA. Las definiciones de columnas aparecen en una lista separada
por comas y encerrada entre paréntesis. El orden de las definiciones de las
columnas determina el orden de izquierda a derecha de las columnas en la
tabla. Cada definición especifica el nombre de la columna y el tipo de datos que
la columna contiene.
b. Inserción de contenido en las tablas
Típicamente, una nueva fila de datos se añade a una base de datos relacional
cuando una nueva entidad representada por una fila aparece en el mundo
exterior. Una fila es la unidad de datos más pequeña que puede añadirse a una
tabla.
La sentencia INSERTAR permite añadir una nueva fila a una tabla. Su sintaxis
es:
INSERTAR EN nombre tabla (Lista de columnas)
VALORES (Lista de valores)
La cláusula INTO especifica la tabla que recibirá la nueva fila y las columnas
que almacenarán los datos Insertados. La cláusula VALUES especifica los
valores de los datos que la nueva fila contendrá. Los nombres de columna y los
valores de los datos se separan utilizando comas.
Unsaac-2020 Página 10
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
c. Modificación de datos de una tabla
Los valores de los datos almacenados en una base de datos se modifican
cuando se producen cambios correspondientes en el mundo exterior, de tal
forma que en todo momento la información almacenada en la base de datos
sea un modelo exacto del mundo real. La unidad más pequeña que puede
modificarse es una columna de una, única fila.
La sentencia ACTUALIZAR permite modificar los valores de una o más
columnas de las filas seleccionadas de una tabla. Debe respetarse la siguiente
sintaxis:
ACTUALIZAR nombre de tabla ESTABLECER nombre de
columna = expresión DONDE condición
El nombre de tabla identifica la tabla en que se realizará la actualización. La
condición que acompaña a la cláusula DONDE sirve para seleccionar las filas
de la tabla que serán modificadas. La cláusula ESTABLECER es una lista de
asignaciones separadas por comas. Cada asignación identifica una columna
destino a actualizar y especifica cómo calcular el nuevo valor para dicha
columna.
d. Supresión de datos de una tabla
Normalmente, una fila de datos se suprime de una tabla cuando la entidad
representada por la fila desaparece del mundo exterior. La unidad más
pequeña de datos que puede ser suprimida es una única fila.
La sentencia ELIMINAR permite eliminar filas seleccionadas de una sola tabla.
La sintaxis de la sentencia ELIMINAR es como sigue:
ELIMINAR DE nombre de tabla DONDE condición
La cláusula DE especifica el nombre de la tabla de la que se eliminarán filas. La
condición de la cláusula DONDE selecciona las filas que serán suprimidas.
Obviamente si ninguna de las filas satisface dicha condición, ninguna de ellas
será eliminada.
Unsaac-2020 Página 11
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
e. Consultas de datos
Las consultas de selección se utilizan para obtener información de las bases de
datos, esta información es devuelta en forma de conjunto de registros.
La sintaxis básica de una consulta de selección es la siguiente:
SELECCIONAR Lista de campos DE Nombre de tabla
DONDE Condición
En donde Lista de Campos es la relación de campos que se desean recuperar
y Nombre de Tabla identifica a la tabla, origen de los mismos.
El resultado de una consulta SQL es siempre una tabla de datos, semejante a
las tablas almacenadas en la base de datos. Generalmente los resultados de la
consulta generarán una tabla con varias columnas y varias filas. Las consultas
más sencillas solicitan columnas de datos de una única tabla en la base de
datos.
f. Eliminación de tablas
Cuando se quiere destruir una tabla existente que ya no es necesaria se debe
utilizar la sentencia ELIMINAR TABLA cuya sintaxis es:
ELIMINAR TABLA nombre de tabla
El nombre de la tabla en la sentencia identifica la tabla a eliminar.
Unsaac-2020 Página 12
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
GRAMÁTICAS LIBRES DE CONTEXTO PARA LAS CONSTRUCCIONES
DEL LENGUAJE
Para la construcción CREAR TABLA nombre tabla (identificador1 tipo de
dato1, identificador2 tipo de dato2, …..)
EJEMPLO 1.
G = ({A, B, C, D}, {pr,id,td,(,), , }, P, S)
Donde P:
S B
B pr A
C id td,C | id td,D | D
A (C) | E
D id td
EJEMPLO 2.
S prA
A idA | idB | S
B opeA | C
C pr | id
EJEMPLO 3.
S prA
A enteroA | prB
B opeB| idC
B opeS| ope
Unsaac-2020 Página 13
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS
Unsaac-2020 Página 14