P ocesado del lenguaje SQL en P olog pa a
DES
SQL language p ocesso o DES
T abajo de Fin de G ado
Cu so 2022–2023
Au o
Long Lin
Di ec o
Fe nando Sáenz Pé ez
G ado en Ingenie ía In o má ica
Facul ad de In o má ica
Uni e sidad Complu ense de Mad id
P ocesado del lenguaje SQL en P olog pa a
DES
SQL language p ocesso o DES
T abajo de Fin de G ado en Ingenie ía In o má ica
Au o
Long Lin
Di ec o
Fe nando Sáenz Pé ez
Con oca o ia: Sep iemb e 2023
G ado en Ingenie ía In o má ica
Facul ad de In o má ica
Uni e sidad Complu ense de Mad id
27 de agos o de 2023
Ag adecimien os
No pod ía culmina es e p oyec o sin dedica un since o ag adecimien o a mi di ec o ,
el p o eso Fe nando Sáenz Pé ez. Su ines imable ayuda, dedicación y comp omiso con el
p oyec o han sido esenciales pa a su desa ollo. Ag adezco p o undamen e su p on i ud
al esponde co eos, lo que no solo e idencia su p o esionalismo, sino ambién su in e és
genuino en el a ance y mejo a con inua de mi abajo. Además, quie o esal a la gene o-
sidad con la que compa ió ma e iales y ecu sos, que han sido pila es en la consolidación
de es e T abajo de Fin de G ado.
Resumen
En es e abajo se abo da el diseño e implemen ación de un p ocesado de lenguaje
SQL en P olog con el obje i o de mejo a la e iciencia y endimien o del sis ema de bases
de da os deduc i as DES. Se iden i ica on y supe a on a ias limi aciones del p ocesado
an e io . Pa a supe a es as limi aciones, se p opuso un diseño que sepa a la ase de
análisis léxico de la ase sin ác ica, o eciendo así mayo lexibilidad pa a inco po a
nue as uncionalidades y una es uc u a mejo de inida que acili a la depu ación. Si
bien DES admi e di e sos lenguajes de consul a, es e p oyec o se cen a especí icamen e
en SQL. La decisión de en oca se únicamen e en SQL pa a es e p oyec o se debe a que
ue lle ado a cabo po un solo alumno, lo que de e minó cie as limi aciones en cuan o a
su alcance.
Palab as cla e
P olog, SQL, P ocesado de Lenguaje, Sis ema de Bases de Da os Deduc i as, DES,
Análisis Léxico, Análisis Sin ác ico.
ii
Abs ac
In his wo k, he design and implemen a ion o an SQL language p ocesso in P olog
is add essed, wi h he aim o imp o ing he e iciency and pe o mance o he deduc i e
da abase sys em DES. Se e al limi a ions o he p e ious p ocesso we e iden i ied and
o e come. To add ess hese limi a ions, a design was p oposed ha sepa a es he lexical
analysis phase om he syn ac ic phase, hus o e ing g ea e lexibili y o inco po a e
new unc ionali ies and a be e -de ined s uc u e ha acili a es debugging. While DES
suppo s a ious que y languages, his p ojec speci ically ocuses on SQL. The decision
o ocus solely on SQL o his p ojec is due o i being unde aken by a single s uden ,
which se ce ain bounda ies ega ding i s scope.
Keywo ds
P olog, SQL, Language P ocesso , Deduc i e Da abase Sys em, DES, Lexical Analysis,
Syn ac ic Analysis.
ix
Índice de lis ados
3.1. Ca ac e esin isibles ............................. 8
3.2. Esundígi odecimal ............................. 9
3.3. Reconocimien o de una columna con DCG . . . . . . . . . . . . . . . . . 10
3.4. Reconocimien o de una columna sin DCG . . . . . . . . . . . . . . . . . 11
5.1. Decla acióndeEDCG ............................ 15
5.2. Ac ualización de posiciones de okens . . . . . . . . . . . . . . . . . . . . 16
5.3. Tokeniza (I) ................................. 17
5.4. Tokeniza (II)................................. 17
5.5. Reconocimiendo de las palab as cla es . . . . . . . . . . . . . . . . . . . 21
5.6. En ada (lexe ) (Ejemplo I) . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.7. Salida (lexe ) (Ejemplo I) . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.8. En ada (lexe ) (Ejemplo II) . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.9. Salida (lexe ) (Ejemplo II) . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.10. En ada (lexe ) (Ejemplo III) . . . . . . . . . . . . . . . . . . . . . . . . 26
5.11. Salida (lexe ) (Ejemplo III) . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.1. P edicado s a emen en el analizado sin ác ico . . . . . . . . . . . . . . 29
6.2. Reconocimien o de sen encia de SHOW TABLES . . . . . . . . . . . . . 34
6.3. Reconocimien o de sen encia de ROLLBACK TO SAVEPOINT . . . . . 35
6.4. Reconocimien o de sen encia de SELECT . . . . . . . . . . . . . . . . . . 39
6.5. Reconocimien o de sen encia de CREATE TABLE AS . . . . . . . . . . . 44
6.6. Reconocimien o de sen encia de INSERT INTO Table(Columns) . . . . . 47
7.1. Ges ión de e o es en analizado sin ác ico . . . . . . . . . . . . . . . . . 50
8.1. Analizado sin ác ico en la e sión 6.7 de DES . . . . . . . . . . . . . . . 55
8.2. P edicado pa a analiza sen encias DQL en e sion 6.7 de DES . . . . . . 56
8.3. P edicado b_DQL en la nue a implemen ación . . . . . . . . . . . . . . 58
B.1. Gene ación de código P olog pa a de ección de comandos . . . . . . . . . 77
B.2. Plan illa de gene ación de código P olog pa a unciones . . . . . . . . . . 77
C.1. En ada (lexe ) (Ejemplo IV) . . . . . . . . . . . . . . . . . . . . . . . . 79
C.2. Salida (lexe ) (Ejemplo IV) . . . . . . . . . . . . . . . . . . . . . . . . . 79
C.3. En ada (lexe ) (Ejemplo V) . . . . . . . . . . . . . . . . . . . . . . . . . 79
C.4. Salida (lexe ) (Ejemplo V) . . . . . . . . . . . . . . . . . . . . . . . . . . 80
x ii
Cap´
ı ulo 1
In oducción
En la ac ualidad, los sis emas de bases de da os, siendo componen es esenciales de la
in o má ica, se han in il ado en odos los aspec os de nues a ida, desde las comp as en
línea, los egis os médicos has a las edes sociales. Todo es o depende del espaldo de las
bases de da os. DES (h p://des.sou ce o ge.ne /), como un sis ema de bases de da os
deduc i as. Puede ealiza in e encias complejas en da os elacionales y admi e múl iples
lenguajes de consul a.
1.1. Mo i ación
Den o de la emá ica de p ocesado es de lenguajes se explo an di e sas écnicas y
he amien as, en e las más clásicas se encuen an el uso de au óma as ini os, g amá icas
lib es de con ex o, analizado es léxicos y sin ác icos, en e o os. Es as me odologías han
demos ado se e icien es en el p ocesamien o de una amplia a iedad de lenguajes de
p og amación ( éase la sección 3.1).
Den o de es as me odologías, las g amá icas de cláusulas de inidas (DCG - De ini e
Clause G amma s) de P olog han eme gido como una he amien a esencial, sob e odo
en sis emas como DES. Las DCG son he amien as u ilizadas comúnmen e en P olog
pa a el p ocesamien o de lenguajes. A di e encia de las écnicas adicionales, las DCG
o ecen una ep esen ación decla a i a de las g amá icas, pe mi iendo una de inición más
in ui i a y concisa ( éase el uncionamien o de las DCG en la sección 3.2.3).
Sin emba go, a pesa de la en aja que supone el uso de DCG en DES, hay ma gen
pa a mejo as adicionales. Con el c ecimien o cons an e en olumen y complejidad de
los da os, la e iciencia de la consul a de bases de da os se ha con e ido en un pun o
ocal. Aunque DES iene una en aja en el apoyo a a ios lenguajes de consul a, su
p ocesado de lenguaje puede en en a cuellos de bo ella en el endimien o al maneja
algunas consul as complejas. Op imiza su p ocesado de lenguaje es undamen al pa a
ap o echa al máximo el po encial de DES.
1.2. Obje i os
Es e p oyec o se cen a en examina y mejo a el p ocesado ac ual de DES. Nues os
p incipales obje i os son:
1
2Capí ulo 1. In oducción
El obje i o es diseña y desa olla un nue o p ocesado pa a SQL en P olog. Al
lle a a cabo el análisis léxico y el análisis sin ác ico de mane a sepa ada pa a el
lenguaje SQL, no solo se busca un endimien o excepcional, sino ambién un código
más o ganizado. Es a es uc u ación sepa ada acili a cambios u u os, depu ación
y la inco po ación de nue as uncionalidades, al p opo ciona una cla a dis inción
en e las dis in as ases del análisis.
Desa olla un ma co de p ueba que pe mi a compa a el endimien o en e el p o-
cesado an iguo y el ecién desa ollado. Es a compa a i a asegu a á que los esul-
ados p oducidos po el nue o p ocesado sean consis en es y equi alen es a los del
p ocesado an e io , alidando así su co ec a uncionalidad.
1.3. Plan de abajo
Du an e el desa ollo del p oyec o, u iliza emos SWI-P olog, una implemen ación po-
pula del lenguaje de p og amación P olog ( éase la sección 2.2). A con inuación, se
p esen a un plan de abajo de allado:
1. Familia ización con he amien as y écnicas:
a) Familia iza se con DES: Un sis ema de bases de da os deduc i as que pe mi e
in e encias en da os elacionales y admi e a ios lenguajes de consul a ( éase
la sección 2.1).
b) Explo a la pla a o ma SWI-P olog: Familia iza se con el en o no de desa ollo,
su sin axis y ca ac e ís icas cla e ( éase la sección 2.2).
c) Ap ende P olog y DCG: Adqui i habilidades de p og amación en P olog y
uso de DCG (De ini e Clause G amma ) ( éase la sección 3.2.3).
2. Diseño del p ocesado :
a) Diseña el análisis léxico (lexe ): Desa olla el analizado léxico enca gado de
okeniza la en ada.
b) Diseña el análisis sin ác ico (pa se ): C ea el analizado sin ác ico que cons-
ui á el á bol de sin axis abs ac o.
c) Ajus a el análisis léxico (lexe ): Realiza ajus es y mejo as en el análisis léxico
basados en el analizado sin ác ico desa ollado.
3. P ueba y ges ión de e o es:
a) P oba el analizado léxico (lexe ): Valida la uncionalidad del análisis léxico.
b) P oba el analizado sin ác ico (pa se ): Valida la uncionalidad del análisis
sin ác ico.
4. P uebas:
a) Realiza p uebas gene ales: Compa a los esul ados del nue o p ocesado con
el sis ema ac ual de DES.
1.4. Es uc u a de la memo ia 3
b) Compa a iempos de ejecución: E alua la e iciencia del nue o p ocesado en
compa ación con el p ocesado ac ual.
5. Documen ación:
a) Elabo a la memo ia del p oyec o.
Diag ama de Gan
ene o eb e o ma zo ab il mayo
DES
SWI-P olog
P olog y DCG
Análisis léxico
P oba el lexe
mayo junio julio agos o
Análisis sin ác ico
P oba el pa se
Ajus a el lexe
P uebas
Compa a iempos
Documen ación
1.4. Es uc u a de la memo ia
En es e T abajo de Fin de G ado (TFG) se p esen an los siguien es capí ulos que se
desc iben a con inuación:
Capí ulo 2: Es ado de la cues ión. En es e capí ulo se o ece una e isión de
los abajos e in es igaciones p e ias elacionados con el DES, la pla a o ma donde
p og amamos con P olog (SWI-P olog), y la impo ancia de SQL.
Capí ulo 3: Concep os p e ios. Se in oducen concep os undamen ales pa a
en ende el abajo desa ollado.
•P ocesado es de lenguajes: La unción de los p ocesado es de lenguajes y las
ases a segui .
•P olog y p og amación lógica: Se o ece una in oducción a P olog, desc ibiendo
de mane a b e e sus componen es básicos, uncionamien o y su aplicación en
el p ocesamien o de lenguajes.
4Capí ulo 1. In oducción
Capí ulo 4: Es uc u a gene al del p oyec o. Es e capí ulo de alla la a qui ec-
u a del p oyec o, desc ibiendo cada uno de los a chi os .pl gene ados y su unción
especí ica den o del análisis de SQL usando P olog.
Capí ulo 5: Análisis léxico. Se abo da el p ime ni el de análisis, el léxico,
explicando su es uc u a y las ca ego ías léxicas que se conside an en SQL. Además,
se discu en las di icul ades encon adas y los esul ados ob enidos de es e análisis.
Capí ulo 6: Análisis sin ác ico. En es e capí ulo se desglosa el análisis sin ác-
ico, explicando cómo se p ocesan di e en es sen encias y es uc u as de SQL. Se
discu e la iden i icación de di e sos componen es, como ipos de da os, cons an es
y condiciones, en e o os. También se abo dan las di icul ades y esul ados del
análisis sin ác ico.
Capí ulo 7: Ges ión de e o es. Se desc ibe cómo se ealiza la ges ión de e o es
den o del p oceso de análisis, de allando cómo se de ec an y cómo se in o man al
usua io.
Capí ulo 8: P uebas y compa aciones. En es e capí ulo se p esen an las p ue-
bas ealizadas y se compa a el iempo de ejecución en e di e en es en oques o
e siones.
Capí ulo 9: Conclusiones y abajo u u o. Se esume el abajo ealizado, se
p esen an las conclusiones y se sugie en líneas de abajo u u as.
Apéndices:
•A. Palab as cla es en DES: Enume ación de las palab as cla e u ilizadas
en DES.
◦A.1. Comandos: Lis ado de comandos disponibles.
◦A.2. Funciones: Las unciones u ilizadas.
◦A.3. Ope ado es: Los ope ado es (Ope ado es simbólicos, Ope ado es de
compa ación y Ope ado es ex uales).
◦A.4. Símbolos de pun uación: Signos de pun uación.
•B. Gene ación de código P olog pa a de ección de palab as cla es
en el analizado léxico (Py hon): Explicación del p oceso de gene ación
de código pa a la de ección de palab as cla e en el analizado léxico u ilizando
Py hon.
•C. Más ejemplos de análisis léxico: Conjun o ampliado de ejemplos ela-
cionados con el análisis léxico.
•D. G amá ica SQL de DES V6.7: Desc ipción de allada de la g amá ica
SQL especí ica pa a la e sión V6.7 de DES.
•E. Más ejemplos de ges ión de e o es en el analizado sin ác ico:
P esen ación ex endida de ejemplos que ilus an el manejo de e o es en el
análisis sin ác ico.
Cap´
ı ulo 2
Es ado de la cues ión
Es e capí ulo explo a he amien as y lenguajes undamen ales en el ámbi o de las
bases de da os deduc i as. Se de alla á el sis ema educa i o DES, la implemen ación
SWI-P olog y el lenguaje SQL.
2.1. El sis ema educa i o DES
El sis ema educa i o DES, es un sis ema de bases de da os deduc i as que p opo ciona
un amplio ango de lenguajes de consul a sob e un modelo elacional de da os. Es os
lenguajes incluyen Da alog, SQL, Álgeb a Relacional, Cálculo Relacional de Tuplas (TRC
- Tuple Rela ional Calculus) y Cálculo Relacional de Dominios (DRC - Domain Rela ional
Calculus). (DES, 2023).
DES iene las siguien es ca ac e ís icas:
Es un so wa e g a ui o y de código abie o bajo la licencia LGPL.
Mul ipla a o ma, lo que acili a su po abilidad y adap abilidad a di e en es sis e-
mas ope a i os.
Sopo a la deducción en Da alog con es a i icación y negación.
P opo ciona sopo e comple o pa a SQL, incluyendo ca ac e ís icas a anzadas como
euniones ex e nas y unciones de ag egación.
Con iene ca ac e ís icas a anzadas como ipos de da os, es icciones de in eg idad,
azonamien o hipo é ico y azonamien o di uso.
Inco po a he amien as de depu ación decla a i a y azado es g á icos pa a acili a
el desa ollo y la depu ación.
Pe mi e la gene ación de casos de p ueba pa a SQL, asegu ando la calidad y obus-
ez del so wa e desa ollado.
O ece una API ex ual que acili a la in eg ación con o os sis emas y he amien as.
Es á equipado con una comple a a i mé ica y comp obación semán ica pa a SQL.
5
6Capí ulo 2. Es ado de la cues ión
2.2. SWI-P olog
SWI-P olog es una implemen ación popula y g a ui a del lenguaje de p og amación
P olog, ampliamen e u ilizada en la academia y la indus ia. Es á o ien ada especialmen e
hacia la cons ucción de aplicaciones del mundo eal, como sis emas de bases de da os,
in e aces g á icas y aplicaciones web. La pla a o ma p opo ciona una ex ensa biblio eca
es ánda y paque es adicionales, lo que la con ie e en una elección p e e ida pa a el
desa ollo en P olog (SWI, 2023).
En SWI-P olog, se puede ap o echa el sis ema de módulos pa a es uc u a y en-
capsula el código. Un módulo es una unidad de o ganización que pe mi e encapsula
p edicados elacionados, pe mi iendo una o ganización lógica del código y p e iniendo
la colisión de nomb es en e p edicados. Cada módulo en SWI-P olog iene su p opio
espacio de nomb es, los p edicados con el mismo nomb e, pe o en di e en es módulos, no
in e ie en en e sí. Es e sis ema de módulos es i al cuando se a a de p oyec os más
g andes y que pe mi e una es uc u a cla a.
SWI-P olog des aca po su:
Escalabilidad y e iciencia en el manejo de g andes conjun os de da os.
Rico conjun o de biblio ecas in eg adas y módulos adicionales.
Fácil in eg ación con o os lenguajes y he amien as, como C, C++, y Ja a.
He amien as de depu ación y azado a anzadas que simpli ican el p oceso de de-
sa ollo.
Capacidad pa a abaja con a chi os de ex o, incluido el o ma o ASCII y o as
codi icaciones popula es como UTF-8.
2.3. SQL
SQL (S uc u ed Que y Language), o lenguaje de consul a es uc u ada es un lenguaje
de p og amación diseñado pa a ges iona y manipula bases de da os elacionales. Desde
su o igen en la década de 1970, SQL se ha consolidado como el es ánda pa a in e ac ua
con bases de da os elacionales (Mel on y Simon, 2002).
DES, siendo un sis ema educa i o de bases de da os elacionales, emplea SQL como
uno de sus p incipales lenguajes de consul a. Es a adopción no solo sub aya la ele ancia
de SQL en el ámbi o educa i o, sino ambién en la indus ia de bases de da os en gene al.
La e iciencia en el p ocesamien o de consul as SQL den o de DES es esencial. Po ello,
la impe an e necesidad de con a con un analizado sin ác ico op imizado jus i ica el
p incipal obje i o de es e TFG.
Cap´
ı ulo 3
Concep os p e ios
Es e capí ulo se cen a en los concep os undamen ales que se án la base de nues o
p oyec o.
3.1. P ocesado es de lenguajes
Los p ocesado es de lenguaje si en pa a aduci o in e p e a ex o esc i o en un
lenguaje de p og amación a un o ma o que una compu ado a puede en ende y ejecu a .
Un p ocesado de lenguajes en gene al puede di idi en a ios pasos pa a lle a al
cabo esa a ea:
Análisis léxico: T ans o ma oma el p og ama uen e como en ada y lo di ide en
unidades léxicas o okens, como una palab a cla e, un iden i icado , un ope ado ,
e c. (Aho e al., 2006).
Análisis sin ác ico: En es a e apa, el p ocesado de lenguajes e i ica que la se-
cuencia de okens cumpla con las eglas sin ác icas del lenguaje de p og amación y
cons uye un á bol de sin axis abs ac a (AST) que e leja la es uc u a g ama ical
del p og ama (Sco , 2009).
Análisis semán ico: Ve i ica la cohe encia y alidez del p og ama, asegu ando que
cumpla con las eglas semán icas del lenguaje. Es o puede inclui la e i icación de
ipos y la esolución de nomb es, en e o as a eas.
Gene ación de código: En es a e apa, el p ocesado de lenguajes con ie e la
ep esen ación es uc u ada del p og ama en un código ejecu able o in e p e able.
La ejecución e icien e de es as e apas es c ucial pa a el endimien o gene al de los
p og amas esc i os en el lenguaje de p og amación.
En DES se combinan el análisis léxico y el análisis sin ác ico en una única pasada,
p ocediendo al análisis semán ico inmedia amen e después. Sin emba go, en la nue a
implemen ación se hace po sepa ado las dos p ime as ases del análisis con el obje i o
de op imiza cada una de ellas.
Es impo an e des aca que, du an e la ase de análisis sin ác ico se lle an a cabo
cie os chequeos semán icos con el obje i o de op imiza el endimien o del p ocesado .
Po ejemplo: la e i icación de la exis encia de una abla o columna cuando se econoce la
7
14 Capí ulo 4. Es uc u a gene al del p oyec o
4. des.pl y u ils.pl
Es os a chi os con ienen p edicados esenciales de la e sión ac ual de DES que ue-
on u ilizados en pa se .pl pa a acili a la cons ucción del analizado sin ác ico
(pa se ).
Al igual que con des_da a.pl, no es necesa io in eg a es os módulos en DES.
No se hicie on cambios en los p edicados de es os módulos, asegu ando así una
inco po ación sin complicaciones en DES.
5. e o _.pl
En es e a chi o se ges ionan los e o es an o del analizado léxico (lexe ) como del
analizado sin ác ico (pa se ). El manejo y ges ión de es os e o es se explican con
mayo de alle en el capí ulo 7.
6. es .pl
El a chi o es .pl se enca ga de la ges ión de p uebas. Nos ayudan a asegu a que
nues o código uncione co ec amen e y a iden i ica cualquie p oblema o e o
que pueda su gi .
Tes .pl es á diseñado pa a p oba el lexe y el pa se . Pa a cada módulo, se ealizan
una se ie de p uebas, con nomb es de la o ma es XXX, donde XXX es un núme o
con ce os a la izquie da. Se puede ejecu a uno en conc e o o odas las p uebas de
un módulo en o den.
El p oceso de p uebas es bas an e sencillo: cuando se llama a el p edicado lexe : es
o pa se : es , se inician las p uebas pa a el módulo especi icado. La unción i á
buscando y ejecu ando cada p ueba en el módulo, empezando po es 001, luego
es 002, y así sucesi amen e. Si alguna p ueba alla, se de iene la ejecución. Si odas
las p uebas pasan con éxi o, se mues a un mensaje de éxi o. Pa a eso enemos
la unción es (Module, GoalName, Inpu , Expec ed). Es a unción oma un
módulo, el nomb e de una unción a p oba , una en ada pa a esa unción y el
esul ado espe ado. En onces, ejecu a la unción con la en ada dada y compa a el
esul ado con el esul ado espe ado. Si coinciden, la p ueba ha pasado. Si no, se
conside a que la p ueba ha allado y mues a la di e encia en e el esul ado y el
esul ado espe ado.
También es posible ac i a una p ueba especí ica u ilizando los comandos lexe :
es XXX opa se : es XXX, donde XXX es un núme o complemen ado con ce os a
la izquie da.
7. Ca pe a es
La ca pe a es con iene una se ie de a chi os con ex ensión .sql diseñados pa a
e alua el uncionamien o del analizado léxico y del analizado sin ác ico. En su
conjun o, la ca pe a iene 31 a chi os dis in os. Algunos de es os a chi os es án
des inados solo pa a las p uebas del lexe , o os se u ilizan pa a e alua an o el
analizado léxico como el analizado sin ác ico.
Cap´
ı ulo 5
Análisis léxico
En es e capí ulo se de allan los p ocedimien os asociados al análisis léxico del p oyec o.
An es de en a nos en los de alles del análisis léxico, se hace imp escindible p esen a las
he amien as que undamen an es a e apa. Especí icamen e se in oduce el concep o de
Ex ended De ini e Clause G amma s (EDCG) en P olog.
5.1. DCG ex endidas (EDCG)
Las Ex ended De ini e Clause G amma s (EDCG) son una ex ensión de De ini e Clau-
se G amma s (DCG) de P olog. La ex ensión EDCG pe mi e ocul a múl iples a gumen-
os, en luga de solo dos que se ocul an en las DCG es ánda . Es a capacidad de maneja
múl iples acumulado es o ece una lexibilidad adicional, lo que ha esul ado se esencial
en aplicaciones a anzadas (Van Roy, 1990).
Las DCG es ánda u ilizan dos a gumen os implíci os pa a ep esen a la en ada y
salida de una lis a. Las EDCG, po o o lado, pe mi en añadi a gumen os adicionales,
denominados acumulado es pa a man ene un es ado a lo la go de la ejecución. El uso de
acumulado es acili a la cons ucción de un analizado sin ác ico más complejo.
La no ación de EDCG se u iliza -->> en luga del --> usado en DCG es ánda .
edcg :acc_in o (posi ion , X, In , Ou , acc_pos (X, In , Ou )).
Lis ado 5.1: Decla ación de EDCG
A con inuación oy a explica qué signi ica cada a gumen o de edcg:acc_in o/5 en
el lis ado 5.1, que es la decla ación de EDCG en la ase de análisis léxico del p oyec o.
posi ion: Es e es el nomb e del acumulado . Es e acumulado se enca ga de man-
ene un egis o de la posición ac ual en la en ada, es deci , las coo denadas línea
y columna en el ex o uen e que se es á analizando.
La posición se ep esen a median e el é mino pos(Line, Column).
X: Es una a iable que ep esen a á una ope ación o acción que que emos eali-
za en el acumulado . Exis en a ios p edicados elacionados con posi ion como
inc_line,inc_col,add_col, y ge _pos que in e ac úan di ec amen e con el acu-
mulado posi ion ( éase el lis ado 5.2).
15
16 Capí ulo 5. Análisis léxico
In y Ou : Es as a iables ep esen an el alo del acumulado posi ion an es y
después de la ope ación, espec i amen e.
acc_pos(X, In, Ou ): Es a es la acción que se lle a á a cabo cuando se encuen e
la ope ación Xen el ex o de en ada.
En esumen, es a de inición exp esa: cuando se encuen e una ope ación X elacionada
con el acumulado posi ion, se debe u iliza el p edicado acc_pos/3 pa a modi ica ese
acumulado .
inc_line -->>
[ add_line (1)]: posi ion .
inc_col -->>
[ add_col (1)]: posi ion .
add_col (N) -->>
[ add_col (N )]: posi ion .
ge _pos ( Posi ion ) -->>
[ ge _pos ( Posi ion )]: posi ion .
acc_pos ( add_col (I), pos (L , C), pos(L , C1 )) :-
C1 is C+I,
!.
acc_pos ( add_line (I), pos(L, _C), pos(L1 , 1)) :-
L1 is L+I,
!.
acc_pos ( ge _pos ( Posi ion ), Posi ion , Posi ion ).
Lis ado 5.2: Ac ualización de posiciones de okens
Es e código de lis ado 5.2 desc ibe el manejo y ac ualización de la posición (línea y
columna) en un ex o.
inc_line: Es a egla se u iliza pa a inc emen a el núme o de línea en la posi-
ción ac ual po una unidad. El é mino [add_line(1)]:posi ion indica que es a
ope ación modi ica el acumulado posi ion. Se usa cuando de ec a un sal o de
línea.
inc_col: Simila a inc_line, es a egla inc emen a el con ado de columna po
una unidad, indicando que se ha a anzado un ca ác e en la línea ac ual.
add_col(N): Inc emen a la columna en N unidades.
ge _pos(Posi ion): Es a egla pe mi e ob ene la posición ac ual en el ex o.
[ge _pos(Posi ion)]:posi ion indica que es a ope ación consul a el alo ac ual
del acumulado posi ion y lo uni ica con el a gumen o Posi ion.
acc_pos(add_col(I), pos(L, C), pos(L, C1)):
•En ada: posición ac ual pos(L, C) y el inc emen o I.
5.2. Es uc u a gene al del analizado léxico 17
•Salida: la nue a posición pos(L, C1).
•Funcionalidad: Inc emen a la columna Cen Iunidades pa a ob ene C1.
acc_pos(add_line(I), pos(L, _C), pos(L1, 1)):
•En ada: posición ac ual pos(L, _C) y el inc emen o I.
•Salida: la nue a posición pos(L1, 1).
•Funcionalidad: Inc emen a la línea Len Iunidades pa a ob ene L1 y einicia
el con ado de columna a 1, ya que se ha a anzado a una nue a línea.
acc_pos(ge _pos(Posi ion), Posi ion, Posi ion):
•En ada y Salida: la posición ac ual Posi ion.
•Funcionalidad: De uel e la posición ac ual.
El uso del co e (!) en las p ime as dos cláusulas de acc_pos/3 asegu a que, una ez
que se ha elegido una cláusula pa icula pa a maneja una ope ación, no se e ocede á
y se p oba án o as cláusulas.
En la siguien e sección se empiezan con la es uc u a gene al del análisis léxico.
5.2. Es uc u a gene al del analizado léxico
El p ime paso que ealiza el analizado léxico (lexe ) es es ablece odos los e o es.
A con inuación, se in oca al p edicado lex_codes/2 ( éase el lis ado 5.3) con el p opósi o
de okeniza la lis a que se ha leído de la en ada es ánda o de un a chi o.
lex_codes (Codes , Tokens ) :-
oken_pos_lis (Tokens , pos (1 ,1) , _Pos , Codes , []) ,
!.
Lis ado 5.3: Tokeniza (I)
En oken_pos_lis ( e 5.4), el p ime paso es sepa a o s_s a , que de ec a ce o o
más sepa ado es (como espacio, sal o de línea, inal de a chi o, e c.). Luego, ge _pos(TokPos)
ob iene la posición ac ual del oken (inicialmen e 1,1). A con inuación, se in oca a
oken(Token) pa a ob ene el p óximo oken y ge _pos(Nx Pos) pa a de e mina la po-
sición después de econoce dicho oken. El p edicado sepa a o (Token, Nex Token)
decide, basándose en el oken ac ual, si exis e un oken consecu i o (sin espacios) que
deba se iden i icado. Si Nex Token es "no", añade únicamen e el oken ac ual a la lis a.
En caso con a io, añade an o el oken ac ual como el Nex Token a la lis a. Después,
in en a okeniza de mane a ecu si a el es o de la en ada.
El úl imo caso de oken_pos_lis ges iona el inal de la en ada.
oken_pos_lis ( TokenPosLis ) -->>
sepa a o s_s a ,
ge _pos ( TokPos ): posi ion ,
oken ( Token ),
ge _pos ( Nx Pos ): posi ion ,
18 Capí ulo 5. Análisis léxico
sepa a o ( Token , Nex Token ),
!,
{( Nex Token == no
-> TokenPosLis = [ Token : TokPos | RemainingTokenPosLis ]
; TokenPosLis = [ Token :TokPos ,
Nex Token : Nx Pos | RemainingTokenPosLis ])} ,
oken_pos_lis ( RemainingTokenPosLis ).
oken_pos_lis ([]) -->>
sepa a o s_s a .
Lis ado 5.4: Tokeniza (II)
Den o de la egla oken_pos_lis , se usa el acumulado posi ion con el p edicado
ge _pos/1 pa a ob ene la posición de TokPos yNx Pos de los okens de ec ados.
Cada oken econocido se ep esen a en el o ma o:
ipoDeToken(Token):pos(Fila,Columna).
En la siguien e sección se especi ican los ipos de okens pa a el análisis léxico.
5.3. Ca ego ías léxicas
A con inuación se p esen an los okens econocidos siguiendo el lujo del p og ama en
P olog. Es impo an e ene en cuen a el o den, ya que as el econocimien o de cada
oken iene un co e (!).
5.3.1. Núme os
Reconocen los núme os posi i os. Los núme os nega i os se de ec an como un oken
op(-) seguido de un oken de ipo núme o, ya que ‘-’ puede se in e p e ado como un
signo nega i o o como una ope ación de es a.
In :
•Reconoce: Núme os en e os posi i os.
•De uel e: El oken in (In ege ) donde In ege es el núme o en e o posi i o
econocido.
•Ejemplos:
◦1⇒in (1).
◦10 ⇒in (10).
F ac ional:
•Reconoce: Núme os decimales posi i os de la o ma pa eEn e a.pa eDecimal.
•De uel e: El oken ac(In ege , F ac ional) donde In ege es la pa e
en e a y F ac ional la pa e decimal.
•Ejemplos:
5.3. Ca ego ías léxicas 19
◦3.14 ⇒ ac(3,14).
◦.1 ⇒ ac(0,1).
Floa :
•Reconoce: Núme os posi i os en o ma o exponencial, de la o ma:
◦Nume oEn e oPosi i o [e|E]Nume oEn e o.
◦Nume oF accionalPosi i o [e|E]Nume oEn e o.
•De uel e: El oken loa (In ege , F ac ional, Exponen ) donde In ege
es la pa e en e a, F ac ional es la pa e decimal y Exponen es la pa e ex-
ponencial.
•Ejemplos:
◦1e+1 ⇒ loa (1,0,1).
◦1.1e-1 ⇒ loa (1,1,-1).
5.3.2. S ings
Reconoce: Las cadenas de ex o (s ings) delimi adas po comillas simples ('). Pa a
escapa una comilla simple den o de la cadena se puede u iliza o duplicando la
comilla simple.
De uel e: El oken s (S ing) donde S ing es la cadena econocida.
Ejemplos:
• '2'⇒s ('2').
• 'ab'⇒s ('ab').
• 'O''Connell'⇒s ('O 'Connell').
5.3.3. Iden i icado es delimi ados
Reconoce: Iden i icado es delimi ados, i.e., las palab as ence adas po dis in os
delimi ado es y que empiezan po una le a: comillas dobles ("), comillas in e idas
(`), y co che es ([ ]). Como en el caso de las cadenas de ex o, pe mi e escapa el
delimi ado u ilizando o duplicándolo. Los delimi ado es pueden a ia según el
SGBD (Sis ema de Ges ión de Base de Da os). Po ejemplo, en MySQL se usan las
comillas in e idas (`), mien as que en Access se u ilizan co che es ([ ]).
De uel e: El oken delimi ed_id(Iden i ie ) donde Iden i ie es el iden i i-
cado econocido.
Ejemplos:
•"nOmb e" (Es ánda SQL, O acle, SQL Se e ) ⇒delimi ed_id(nOmb e).
•`nOmb e`(MySQL) ⇒delimi ed_id(nOmb e).
•[nOmb e] (Access) ⇒delimi ed_id(nOmb e).
•` `` (MySQL) ⇒delimi ed_id(‘ `’).
•[ +1] (Access) ⇒delimi ed_id(‘ +1’).
20 Capí ulo 5. Análisis léxico
5.3.4. Comen a ios de SQL
De ec a los comen a ios de SQL.
Una línea
•Reconoce: Los comen a ios de una línea en SQL, los que comienzan con dos
guiones -- y se ex ienden has a el inal de la línea.
•De uel e: El oken commen (Commen ), donde Commen es el con enido del
comen a io de esa línea.
•Ejemplos:
◦-- comen a io ⇒commen (comen a io).
◦-- selec -- Es e * es + un_ "comen a io" 'de'una linea ⇒
commen (selec -- Es e * es + un_ "comen a io" 'de'una linea).
Va ias líneas
•Reconoce: Los comen a ios de a ias líneas en SQL que es án ence ados en e
/* y*/. También se admi e la anidación de comen a ios.
•De uel e: El oken commen (Commen ), donde Commen es el con enido del
comen a io.
•Ejemplo:
◦
/*
Comen a io
/*de*/
a ias lineas
*/
⇒commen (‘ nComen a io nde n a ias lineas n’).
5.3.5. Delimi ado es
Ope ado es simbólicos
•Reconoce: Los ope ado es simbólicos. La lis a de ope ado es simbólicos es a en
el apéndice (A.3.1)
•De uel e: El oken op(Delimi e ) donde Delimi e es el ope ado simbólicos
econocido.
•Ejemplos:
◦-⇒op(-).
◦>> ⇒op(> >).
Ope ado es de compa ación
•Reconoce: Los ope ado es de compa ación. Los ope ado es de compa ación en
SQL de DES incluyen los siguien es:
!= y<>: No es igual a.
=: Es igual a.
>=: Es mayo o igual a.
5.3. Ca ego ías léxicas 21
<=: Es meno o igual a.
>: Es mayo que.
<: Es meno que.
Es impo an e el o den de de ección de es os ope ado es, ya que se ealiza un
co e después de econoce cada oken. Si se econocen >o<an es que >=,<>
o<=, se puede ob ene un esul ado inco ec o, in e p e ando <> como <y>,
que signi ican meno y mayo espec i amen e, en luga de "no es igual a".
•De uel e: El oken compa ison_op(Delimi e ) donde Delimi e es el ope-
ado de compa ación econocido.
•Ejemplo:
◦<⇒compa ison_op(<).
Pun uaciones
•Reconoce: Las pun uaciones como po ejemplo pa én esis ‘(’ y‘)’, odas los
posibles pun uaciones es án en el apéndice A.4.
•De uel e: El oken punc (Delimi e ) donde Delimi e es la pun uación e-
conocida.
•Ejemplos:
◦Sal o de línea ⇒punc (nl).
◦,⇒punc (‘,’).
5.3.6. Palab as cla es
Las palab as cla e son las que ienen uncionalidades especí icas en el lenguaje, como,
po ejemplo: c ea e,a g,and, e c... Es as palab as se econocen independien emen e
de si es án en mayúscula o minúscula. Todas ellas e o nan Lc_palab a, que ep esen a
la palab a cla e en minúscula pa a acili a su econocimien o en el analizado sin ác ico.
Además, e o nan O iginal, que es la palab a en su o ma o o iginal. Es o es ú il pa a
de ol e la en la salida del analizado sin ác ico cuando se de ec a como un iden i icado
(como nomb e de columna, is a, abla, e c.). Es impo an e menciona que los iden i i-
cado es de SQL en el DES pueden coincidi con una palab a cla e de SQL y son sensibles
a la dis inción en e mayúsculas y minúsculas. Finalmen e, es e o ma o es ú il pa a e-
i ica si la p ime a le a es minúscula en caso de a a se de un símbolo (u ilizado pa a
analiza cons an es, unciones y elaciones, o p edicados, de Da alog) en la cláusula INTO
den o de sen encias del lenguaje de consul a de da os (DQL - Da a Que y Language) de
SQL.
Es as palab as cla e se econocen usando los pa ones que apa ecen en el lis ado 5.5:
command (‘ selec ’/ O iginal ) -->>
lc(" selec ", O iginal ), no _mo e_cha , !, add_col (6).
unc ion (‘ conca ’/ O iginal ) -->>
lc(" conca ", O iginal ), no _mo e_cha , !, add_col (6).
ex ual_ope a o (‘ xo ’/ O iginal ) -->>
lc (" xo ", O iginal ), no _mo e_cha , !, add_col (3).
Lis ado 5.5: Reconocimiendo de las palab as cla es
22 Capí ulo 5. Análisis léxico
Pa a cada comando, unción y ope ado ex ual, llamamos al p edicado lc, pasando co-
mo en ada la palab a en minúscula, y comp obamos si coincide con la palab a cla e
que es amos analizando. Al mismo iempo, almacenamos la palab a en su o ma o o i-
ginal. Luego, no _mo e_cha e i ica que no haya más le as, núme os o guiones bajos
(_). Después del co e, ac ualizamos la posición ac ual del oken econocido u ilizando
add_col sumando al con ado de columnas el amaño de la palab a econocida. Dado
que los pa ones pa a cada comando, unción y ope ado ex ual son bas an e simila es,
u ilicé Py hon pa a gene a au omá icamen e es e código pa a cada uno de ellos ( éase
el apéndice B).
Comandos
•Reconoce: Las palab as cla es de SQL, como po ejemplo las más usuales se-
lec , om,g oup,by, e c... la lis a comple a es á en el apéndice A.1.
•De uel e: El oken cmd(Command/O iginal) donde Command es el comando
con le as en minúscula y O iginal se gua da la palab a o iginal.
•Ejemplos:
◦dele e ⇒cmd(dele e/dele e).
◦d OP ⇒cmd(d op/d OP).
◦CREATE ⇒cmd(c ea e/‘CREATE’).
Funciones
•Reconoce: Las palab as cla es que se a a como unciones, como po ejemplo
a g,coun ,conca ,sq , e c... la lis a comple a es á en el apéndice A.2.
•De uel e: El oken n(Func ion/O iginal) donde Func ion es el nomb e de
la unción con le as en minúscula y O iginal se gua da la palab a o iginal
como lo que lee en la en ada.
•Ejemplos:
◦sin ⇒ n(sin/sin).
◦MIN ⇒ n(min/‘MIN’).
Ope ado es ex uales
•Reconoce: Los ope ado es ex uales. La lis a comple a es á en el apéndice
A.3.3.
•De uel e: El oken ex ual_op(Ope a o /O iginal) donde Ope a o es el
ope ado con odas las le as en minúscula y O iginal ídem como comandos
y unciones.
•Ejemplos:
◦o ⇒ ex ual_op(o /o ).
◦No ⇒ ex ual_op(no /‘No ’).
5.3. Ca ego ías léxicas 23
5.3.7. Iden i icado es
Reconoce: Los es os de palab a que empieza po una le a seguidos de ca ac e es
al anumé icos o guiones y las palab as que empieza po $seguidos del p ime caso
(le a +al anumé icas o guiones), que en es e caso son los iden i icado es gene ado
po el sis ema. Todos ellos son sensibles a mayúsculas y minúsculas.
De uel e: El oken id(Iden i ie /Case) donde Iden i ie es el iden i icado
econocido y Case puede se uol, donde lindica que empieza po una le a
minúscula y uen o os caso ($o mayúscula).
La dis inción dada po Case iene ele ancia en el con ex o de los iden i icado es
de Da alog, al como se discu ió en la sección de palab as cla es (5.3.6)
Ejemplos:
•P ecio ⇒id(‘P ecio’/u).
•uno_ ⇒id(uno_/l).
•$Valo ⇒id(‘$Valo ’/u).
5.3.8. Algunas excepciones en analizado léxico
Mod: Podía se ope ado ex ual( ex ual_op) o uncion( n). Al inal lo a amos
como n.
O : Podía se ope a o ex ual( ex ual_op) o comando(cmd). Al inal lo a a-
mos como ex ual_op ya que así c ea menos di icul ad en el analizado sin ác ico
(pa se ).
Replace,le , igh y loa : Es os cua os pueden se comandos(cmd) o uncio-
nes( n). Al inal lo a amos como n ya que así c ea menos di icul ad en el anali-
zado sin ác ico (pa se ).
El comando Sa epoin : Du an e el análisis sin ác ico, obse amos que después
de la palab a cla e sa epoin sigue el é mino Filename. Es e úl imo puede se
cualquie palab a que no con enga el ca ác e pun o y coma (;) o una cadena
ence ada en e comillas simples sin que con enga comillas simples en su in e io . Al
p incipio mi idea es econoce Filename como o a ca ego ía nue a de oken después
de econoce Iden i icado ya que si econozco an es de Iden i icado ya no
pod é sepa a los Iden i icado con los Filename po que los Iden i icado es
es un subconjun o de Filename. Aún así sigue eniendo dos p oblemas: p ime o
engo que sepa a la de ección de S ing en dos ipos: una que no iene comillas
simples escapadas y o a que sí las iene. La segunda complicación es que de ec a
oken que en la mayo ía de con ex os esul aban innecesa ios, como se mencionó
an e io men e, Filename solo es ele an e cuando se encuen a después del comando
Sa epoin , y es os p oblemas hacen que el p og ama sea menos e icien e.
Pa a esol e es os p oblemas, decidí a a a Filename como un delimi ado del
comando Sa epoin . De es a mane a, Filename solo se de ec a cuando el oken
an e io es cmd(sa epoin /_).
30 Capí ulo 6. Análisis sin ác ico
s a emen _ ype(ddlS m ).
s a emen _ ype(islS m ).
s a emen _ ype( mlS m ).
Lis ado 6.1: P edicado s a emen en el analizado sin ác ico
En DES, el sis ema se enca ga de aisla cada ins ucción con ead_inpu /3. Además,
en DES se econocen dos modalidades de en ada: la en ada en una única línea y la
en ada en múl iples líneas, iden i icadas como mul iline o ymul iline on, espec-
i amen e. En el modo "mul iline o ", el pun o y coma (;) es opcional y si e pa a indica
el inal de una sen encia SQL. Sin emba go, en el modo "mul iline on", el uso del pun o
y coma (;) es obliga o io. En la e sión que implemen é, odas las en adas son a adas
como si es u ie an en modo "mul iline on", es deci , es obliga o io u iliza el pun o y
coma (;) pa a delimi a las sen encias, sal o si es solo una sen encia.
El esul ado inal del analizado sin ác ico es una lis a que ep esen an la es uc u a
de la en ada. Es a lis a es ú il pa a las e apas pos e io es del p ocesamien o, como la
in e p e ación o la compilación.
An es de abo da en de alle las cinco ca ego ías de sen encias clasi icadas en DES,
p ime o se examina án los ipos de da os, las cons an es, los condiciones, las exp esiones,
los iden i icado es y las es icciones de columnas y ablas en SQL.
6.2. Reconocimien o de ipos de da os en SQL
El sis ema econoce una amplia a iedad de ipos de da os SQL, que se pueden clasi-
ica en las siguien es ca ego ías:
1. Tipos de Ca ac e es: Es os incluyen cha (n), a cha (n),s ing, y o as a-
ian es. La longi ud puede se ija o a iable.
2. Tipos Numé icos:
En e os: Se iden i ican po é minos como in ege ,in ysmallin .
Pun o Flo an e y Real: Rep esen ados p incipalmen e po loa , eal, y
es uc u as nume ic con especi icaciones opcionales de p ecisión.
3. Tipos de Fecha y Ho a: Aba can desde simples da e y ime has a combinaciones
más comple as como imes amp.
Cabe des aca que, en algunos casos, hay sinónimos (po ejemplo, a cha 2 y ex
pa a a cha ).
6.3. Reconocimien o de cons an es en SQL
Los cons an es en las sen encias SQL pueden se de:
Núme o: Reconoce un alo numé ico. in (), ac() o loa () de ol iendo
c e(C,numbe (N)), donde Ces el alo de ese núme o y Nes el ipo, en caso de que
sea “Floa ” se pone loa en o os caso se queda sin uni ica .
6.4. Reconocimien o de condiciones en SQL 31
Cadena de ca ac e es: Iden i ica una cadena de ex o. s (S ing), de ol iendo
c e(C,s ing(_S)) donde Ces la cadena de ex o.
De aul : Reconoce la palab a cla e de aul , de uel e de aul .
Valo nulo: De ec a la palab a cla e null y gene a un iden i icado pa a ese alo
nulo.
Cons an e de echa: Regla que iden i ica cons an es de ipo echa. Que pueden se
c e(D,da e ime(da e)),c e(D,da e ime( ime)) yc e(D,da e ime(da e ime))
donde Des el alo .
6.4. Reconocimien o de condiciones en SQL
El sis ema iene la capacidad de p ocesa y analiza condiciones SQL, Es as condicio-
nes son i ales, especialmen e en cláusulas WHERE,ON,HAVING, ya que son componen es
esenciales pa a il a y selecciona in o mación especí ica en una base de da os. Las
condiciones pueden a ia desde simples compa aciones en e alo es has a condiciones
compues as que in oluc an múl iples exp esiones y ope ado es.
6.4.1. Condiciones gene ales (sql_condi ion)
El sis ema abo da las condiciones desde un en oque gene al que puede descompone se
en a ios ac o es condicionales y ope ado es lógicos como AND,OR, en e o os. Ca ac e-
ís icas des acadas incluyen:
Manejo de ope ado es an o en o ma o p e ix como in ix.
Capacidad pa a ag upa condiciones usando pa én esis, pe mi iendo es uc u a
lógicas complejas con di e en es p io idades.
De inición de ope ado es lógicos.
6.4.2. Fac o es de condición (cond_ ac o )
Es as ep esen an las condiciones a ómicas que, al combina se, o man las condiciones
gene ales. Los ac o es pueden se :
Valo es Booleanos ( ue o alse), is_null(R) ois_no _null(R),EXISTS,BETWEEN,
NOT BETWEEN,IN yNOT IN,LIKE ... [ESCAPE] yNOT LIKE ... [ESCAPE] o usando
ope ado es básicos como =,<,>, e c.
Adicionalmen e, el sis ema ealiza chequeos de ipos de da os pa a asegu a cohe encia
en las ope aciones. Po ejemplo, en usos del ope ado LIKE, e i ica que las exp esiones
sean cadenas.
6.5. Análisis de iden i icado es en SQL
Las consul as SQL a menudo in oluc an múl iples e e encias a ablas, columnas y
is as. Las siguien es eglas desc iben cómo se p ocesan es os iden i icado es en un ana-
lizado sin ác ico pa a SQL en DES:
32 Capí ulo 6. Análisis sin ác ico
un yped_column: Se enca ga de iden i ica una columna sin especi ica un ipo
asociado, edi igiendo simplemen e al nomb e de la columna.
p_ en_ ablename y en_ ablename: Es as eglas manejan nomb es de ablas,
posiblemen e con un alias (indicado opcionalmen e con as seguido de un iden i ica-
do ).
column: Iden i ica una columna que puede es a p e ijada con el nomb e de una
abla o elación (po ejemplo, abla.columna).
ablename, iewname, colname, elname: Es as eglas econocen iden i icado-
es gené icos (sql_use _iden i ie ) que ep esen an nomb es de ablas, is as,
columnas y elaciones, espec i amen e.
sql_use _iden i ie : Reconoce di e sos ipos de iden i icado es (delimi ados po
comillas dobles, co che es, comillas in e idas, iden i icado es no delimi ados, un-
ciones, comandos o ope ado es ex uales). Es impo an e menciona que se excluye
explíci amen e la palab a cla e no de ex ual_op como iden i icado .
6.6. Análisis de las exp esiones SQL en P olog
El análisis de exp esiones SQL consis e en di idi la exp esión SQL en sus componen es
básicos.
1. Exp esión SQL básica: Una exp esión SQL puede empeza con un ac o seguido
de o a exp esión SQL. También puede es a ence ada en e pa én esis o puede
comenza con ope ado es como op, ex ual_op o n(mod).
2. Exp esión SQL ecu si a: Desc ibe cómo las ope aciones bina ias (in ix) se ma-
nejan en una exp esión SQL. Las ope aciones pueden inclui ope ado es como op,
ex ual_op o n(mod).
3. Fac o SQL: De ine cómo se analizan los componen es básicos de una exp esión
SQL. Puede se una de las siguien es:
Una exp esión ence ada en e pa én esis.
Una sen encia del lenguaje de consul a de da os (DQL - Da a Que y Language)
( éase la sección 6.10).
Funciones ag egadas especiales: Algunas unciones son a adas de mane a es-
pecial en SQL, po ejemplo, la unción COUNT(*) y las unciones de ag egación
que u ilizan DISTINCT. También e i ica que no se combine DISTINCT con un-
ciones como MIN oMAX.
Funciones con a gumen os. Po ejemplo: conca /2, imes/1, ound/1, ound/2,
e c.
Función ex ac que se u iliza pa a ex ae campos de echa y ho a.
Función cas pa a con e i un ipo de da o a o o.
Funciones coalesce,g ea es ,leas eii que oman múl iples a gumen os.
6.7. Análisis de es icciones de columnas y ablas en SQL 33
Función case. Es as son es uc u as condicionales en SQL i - hen-else, dis-
inguiendo en e las o mas CASE-WHEN-THEN yCASE-VALUE-WHEN-THEN.
Cons an es ( éase la sección 6.3).
Funciones sin a gumen os. Po ejemplo: pi,e, and.
Columnas ( éase la sección 6.5).
6.7. Análisis de es icciones de columnas y ablas en
SQL
El sis ema ambién se enca ga de analiza las es icciones que se pueden aplica an o
a columnas indi iduales o a ablas.
Res icciones de Columna
Las eglas de column_cons ain manejan las siguien es es icciones pa a las co-
lumnas:
Pueden se NOT NULL (no _nullables), NULL ( ue), PRIMARY KEY
(p ima y_key), UNIQUE o CANDIDATE KEY (candida e_key), REFE-
RENCES ( o eign_key), DEFAULT (de aul ), CHECK (CheckC ) y DE-
TERMINED ( d).
Res icciones de Tabla
Las eglas de able_cons ain manejan las es icciones aplicadas a ni el de
abla:
Pueden se NOT NULL (no _nullables), PRIMARY KEY (p ima y_key),
UNIQUE o CANDIDATE KEY (candida e_key), FOREIGN KEY ... RE-
FERENCES ( o eign_key), CHECK (CheckC ).
En las siguien es secciones se explica cada uno los cinco ipos de sen encias como
ue on clasi icadas en DES.
6.8. Sen encias del lenguaje del esquema de in o ma-
ción (ISL - In o ma ion Schema Language)
Empezamos con las sen encias ISL ya que son los más áciles de econoce .
Son u ilizada pa a consul a la in o mación del esquema en DES. (Sáenz-Pé ez, 2021a)
Den o de DES, se implemen an cua os decla aciones p incipales de ISL. La g amá-
ica en sin axis simila a EBNF se mues a de alladamen e en el apéndice D:
1. SHOW TABLES
Sin axis EBNF:SHOW TABLES.
De uel e:show_ ables
Ejemplo:show ables ⇒show_ ables
34 Capí ulo 6. Análisis sin ác ico
2. SHOW VIEWS
Sin axis EBNF:SHOW VIEWS.
De uel e:show_ iews
Ejemplo:show Views ⇒show_ iews
3. SHOW DATABASES
Sin axis EBNF:SHOW DATABASES.
De uel e:show_da abases
Ejemplo:SHOW da abases ⇒show_da abases
4. DESCRIBE
Sin axis EBNF:DESCRIBE [TableName|ViewName].
De uel e:desc ibe(Name) donde el Name es el nomb e de la abla o is a.
Ejemplo:DESCRIBE ⇒desc ibe( )
1islS m ([ show_ ables | STs ]/ STs ) -->
2[cmd( show/_):_],
3([ cmd ( ables /_):_] -> { ue } ; se _e o (‘ Syn ax ’, ‘
TABLES , VIEWS o DATABASES ’)).
Lis ado 6.2: Reconocimien o de sen encia de SHOW TABLES
El código del lis ado 6.2 p ime o econoce el oken cmd(show/_):_ y después el o-
ken cmd( ables/_):_ Si no econoce el oken ables, se ac ualiza el e o sin ác ico
indicando que se espe a la palab a ables, iews o da abases.
6.9. Sen encias del lenguaje de ges ión de ansacciones
(TML - T ansac ion Managemen Language)
Las sen encias TML son esenciales pa a ges iona ansacciones den o de una base
de da os (Sáenz-Pé ez, 2021a). Una ansacción se puede conside a como una se ie de
ope aciones que ac úan como una única unidad de abajo. Su obje i o p incipal es ga-
an iza la in eg idad de la base de da os, incluso si se p oduce un allo en alguna de las
ope aciones.
Den o de DES se implemen an es decla aciones p incipales de TML. La g amá ica
en sin axis simila a EBNF se mues a de alladamen e en el apéndice D:
1. COMMIT
Sin axis EBNF:COMMIT [WORK].
De uel e:commi .
Ejemplo:commi wo k ⇒commi
2. ROLLBACK
6.9. Sen encias del lenguaje de ges ión de ansacciones (TML - T ansac ion
Managemen Language) 35
Sin axis EBNF:ROLLBACK [WORK] [TO SAVEPOINT Sa epoin Name].
De uel e: ollback([SP]) o simplemen e ollback([]), donde SP es el nom-
b e del iche o.
Ejemplo: ollback o sa epoin ⇒ ollback([sp1])
3. SAVEPOINT
Sin axis EBNF:SAVEPOINT Sa epoin Name.
De uel e:sa epoin ([SP]), donde SP es el nomb e del iche o con ex ensión
.ddb.
Ejemplo:SAVEPOINT sp1 ⇒sa epoin ([‘sp1.ddb’])
A con inuación se p esen a en el lis ado 6.3 un agmen o de código que de alla cómo
se econoce la sen encia ROLLBACK TO SAVEPOINT en P olog:
1% ROLLBACK TO SAVEPOINT
2 mlS m ([ ollback ([ SP ])|STs ]/ STs ) -->
3[cmd( ollback /_):_],
4op ional_cmd(wo k),
5cmd( o/_) # ‘TO ’,
6cmd ( sa epoin /_) # ‘ SAVEPOINT ’,
7 ilename ( SP) # ‘ sa epoin name (id wi hou
semicolon o quo ed id wi hou unescaped quo es ) ’.
8
9% ROLLBACK wi hou speci ying SAVEPOINT
10 mlS m ([ ollback ([]) |STs ]/ STs) -->
11 [cmd( ollback /_):_],
12 op ional_cmd(wo k).
13
14 ilename ( FileName ) -->
15 [ ilename ( FileName ): _Pos ].
Lis ado 6.3: Reconocimien o de sen encia de ROLLBACK TO SAVEPOINT
Es e agmen o de ine dos eglas: la p ime a a a el caso en que se especi ica un
SAVEPOINT, y la segunda maneja el caso en que se u iliza ROLLBACK sin especi ica un
SAVEPOINT.
La p ime a egla busca, en secuencia, oken cmd( ollback/_):_, un oken opcional
wo k, seguido de los okens o ysa epoin . Finalmen e, busca un oken que ep esen e
el nomb e del pun o de gua dado, deno ado po deno ado po el oken ilename. Y
u ilizamos #pa a ges iona los e o es, indicando lo úl imo que se espe a. Véase el capí ulo
7 pa a el de alle de la ges ión de los e o es.
La segunda egla, po o o lado, simplemen e busca el oken cmd( ollback/_):_ y
el oken opcional wo k.
36 Capí ulo 6. Análisis sin ác ico
6.10. Sen encias del lenguaje de consul a de da os (DQL
- Da a Que y Language)
La sen encia p incipal de DQL es la consul a SELECT, que se cen a en la ecupe a-
ción de da os de la base de da os basándose en c i e ios especí icos, ales como condiciones,
ag upaciones y o denamien os.
La g amá ica en sin axis simila a EBNF pa a las sen encias DQL se desc ibe de a-
lladamen e en el apéndice D.
1. SELECT
Sin axis EBNF:
SELECT [TOP In ege [[ALL|DISTINCT]] Selec Exp essionLis
[INTO Selec Ta ge Lis ] [FROM Rels [WHERE Whe eCondi ion] [GROUP BY
A s] [HAVING Ha ingCondi ion] [ORDER BY O de Desc ip ion] [OFFSET
In ege [LIMIT In ege ]] [FETCH FIRST In ege ROWS ONLY]]
De uel e:
(selec (Dis inc All,TopN,O se ,P ojLis ,Ta ge Lis , om(Rela ions),
whe e(Whe eCondi ion), g oup_by(G oupLis ), ha ing(Ha ingCondi ion),
o de _by(O de A gs,O de Specs)),_AS)
•Dis inc All: dis inc o all( alo po de ec o). La cláusula DISTINCT ase-
gu a que el conjun o de esul ados con enga solo ilas únicas, excluyendo
las duplicadas.
•TopN: La can idad de las p ime as ilas que se quie en ecupe a .
•O se : Especi ica cuán os egis os se deben sal a .
•P ojLis : Es la lis a de columnas o exp esiones que se quie e selecciona .
•Ta ge Lis : Es una lis a de nomb es de a iables del sis ema o del usua io
que eciben alo es de P ojLis .
• om(Rela ions): Rep esen a la cláusula FROM en SQL y las elaciones o
ablas de las cuales se ex ae án los da os.
•whe e(Whe eCondi ion): Rep esen a la cláusula WHERE. Se u iliza pa a
il a egis os basándose en una o más condiciones.
•g oup_by(G oupLis ): Rep esen a la cláusula GROUP BY. Se u iliza pa-
a ag upa egis os que ienen los mismos alo es en columnas especí icas.
•ha ing(Ha ingCondi ion): Rep esen a la cláusula HAVING, que se u ili-
za pa a il a el esul ado después de un GROUP BY basado en condiciones
ag egadas.
•o de _by(O de A gs,O de Specs): Rep esen a la cláusula ORDER BY
en SQL, que se u iliza pa a o dena el conjun o de esul ados. O de A gs
la lis a de columnas po las cuales o dena y O de Specs indica si el
o denamien o es ascenden e o descenden e.
Ejemplo:
•En ada:
SELECT a FROM a as GROUP BY a HAVING sum(b)=1
6.10. Sen encias del lenguaje de consul a de da os (DQL - Da a Que y Language)37
•Salida:
(selec (all, op(all),no_o se ,[exp (a (_,a,_),_,_)],
[], om([( a as,_)]),whe e( ue),g oup_by([exp (a (
_,a,_),_,_)]),ha ing(sum(a (_,b,_))=c e(1,
numbe (_))),o de _by([],[])),_)
2. SELECT sin FROM
Sin axis EBNF:
SELECT [TOP In ege Exp ession] [[ALL|DISTINCT]]
Selec Exp essionLis [INTO Selec Ta ge Lis ]
De uel e:
(selec (Dis inc All,TopN,no_o se ,P ojLis ,Ta ge Lis ,
om([(dual,_Ren)]),whe e( ue),g oup_by([]),ha ing( ue),
o de _by([],[])),_AS)
Ejemplo:
•En ada:
SELECT 1 a, a+1
•Salida:
(selec (all, op(all),no_o se ,[exp (c e(1,numbe (N)),
a,numbe (N)),exp (a (_,a,_)+c e(1,numbe (_)),_,
numbe (_))],[], om([(dual,_)]),whe e( ue),
g oup_by([]),ha ing( ue),o de _by([],[])),_)
3. UNION
Sin axis EBNF:DQLs m UNION [ALL] DQLs m
De uel e:(union(D,R1,R2),_AS)
•D: dis inc ( alo po de ec o) o all.
•R1: P ime a sen encia de DQL.
•R2: Segunda sen encia de DQL.
Ejemplo:
•En ada:
SELECT * FROM a union selec * om b
•Salida:
(union(dis inc ,(selec (all, op(all),no_o se ,*,[],
om([(a,_)]),whe e( ue),g oup_by([]),ha ing( ue),
o de _by([],[])),_),(selec (all, op(all),no_o se ,
*,[], om([(b,_)]),whe e( ue),g oup_by([]),
ha ing( ue),o de _by([],[])),_)),_)
4. EXCEPT/MINUS
Sin axis EBNF:DQLs m [EXCEPT|MINUS] [ALL] DQLs m
De uel e:(excep (D,R1,R2),_AS)
•D: dis inc ( alo po de ec o) o all.
38 Capí ulo 6. Análisis sin ác ico
•R1: P ime a sen encia de DQL.
•R2: Segunda sen encia de DQL.
Ejemplo:
SELECT * FROM a
MINUS
selec * om b;
⇒Ídem que union,
solo cambiando union po excep .
5. INTERSECT
Sin axis EBNF:DQLs m INTERSECT [ALL] DQLs m
De uel e:(in e sec (D,R1,R2),_AS)
•D: dis inc ( alo po de ec o) o all.
•R1: P ime a sen encia de DQL.
•R2: Segunda sen encia de DQL.
Ejemplo:
SELECT * FROM a
In e sec
selec * om b;
⇒Ídem que union,
solo cambiando union po in e sec .
6. WITH
Sin axis EBNF:
WITH LocalViewDe ini ion {,LocalViewDe ini ion} DQLs m
De uel e:(wi h(SQLs ,SQLs s),_AS)
•SQLs : La consul a p incipal que sigue a la cláusula.
•SQLs s: Una lis a de de iniciones de is as empo ales.
Ejemplo:
•En ada:
wi h p(a) as selec 1 union selec a+1 om p selec op 10 a
om p;
•Salida:
(wi h((selec (all, op(exp (10,_,numbe (in ))),no_o se ,
[exp (a (_,a,_),_,_)],[], om([(p,_)]),whe e( ue),
g oup_by([]),ha ing( ue),o de _by([],[])),_),[(union(
dis inc ,(selec (all, op(all),no_o se ,[exp (c e(1,
numbe (A)),_,numbe (A))],[], om([(dual,_)]),whe e( ue),
g oup_by([]),ha ing( ue),o de _by([],[])),_),(selec (all,
op(all),no_o se ,[exp (a (_,a,_)+c e(1,numbe (_)),_,
numbe (_))],[], om([(p,_)]),whe e( ue),g oup_by([]),
ha ing( ue),o de _by([],[])),_)),p(a:_))]),_)
7. ASSUME
Sin axis EBNF:ASSUME LocalAssump ion {,LocalAssump ion} DQLs m
De uel e:(wi h(SQLs ,SQLs s),_AS)
•SQLs : La consul a p incipal que sigue a la cláusula.
6.10. Sen encias del lenguaje de consul a de da os (DQL - Da a Que y Language)39
•SQLs s: Una lis a de de iniciones de is as suposiciones.
Ejemplo:
•En ada:
assume selec 1 in l(a) selec * om l;
•Salida:
(wi h((selec (all, op(all),no_o se ,*,[], om([(l,_)]),
whe e( ue),g oup_by([]),ha ing( ue),o de _by([],[])),_),
[(selec (all, op(all),no_o se ,[exp (c e(1,numbe (A)),_,
numbe (A))],[], om([(dual,_)]),whe e( ue),g oup_by([]),
ha ing( ue),o de _by([],[])),l(a:_))]),_)
1% SELECT
2selec _DQL ([( selec ( Dis inc All ,TopN , O se ,
3P ojLis ,Ta ge Lis ,
4 om ( Rela ions ) ,
5whe e(Whe eCondi ion),
6g oup_by ( G oupLis ),
7ha ing ( Ha ingCondi ion ),
8o de _by ( O de A gs , O de Specs )),
9_AS)| STs ]/ STs) -->
10 selec _s m ( Dis inc All ,TopN ),
11 p ojec ion_lis ( P ojLis ),
12 a ge _clause ( Ta ge Lis ) ,
13 cmd( om/_) # ‘a alid FROM clause ’,
14 {!} ,
15 opening_pa en heses_s a (N),
16 ela ions ( Rela ions ) # ‘a alid FROM clause ’,
17 whe e_clause_wi h_cu ( Whe eCondi ion ),
18 g oup_by_clause ( G oupLis ),
19 ha ing_clause ( Ha ingCondi ion ),
20 o de _by_clause ( O de A gs , O de Specs ),
21 op ional_o se _limi (O se ),
22 op ional_ e ch_ i s (TopN),
23 closing_pa en heses_s a (N),
24 { se _ opN_de aul ( TopN)}.
Lis ado 6.4: Reconocimien o de sen encia de SELECT
La egla selec _DQL/3 del lis ado 6.4 in en a analiza una consul a SQL SELECT.
El agmen o de código que sigue a la egla desc ibe los componen es de una consul a
SELECT.
1. selec _s m (Dis inc All,TopN): Analiza las pa es SELECT DISTINCT y el nú-
me o de ilas a selecciona .
2. p ojec ion_lis (P ojLis ): Analiza la lis a de columnas o exp esiones a selec-
ciona .
3. a ge _clause(Ta ge Lis ): Analiza la cláusula de des ino.
46 Capí ulo 6. Análisis sin ác ico
•Salida:
inse _in o( 2,[a2,b2],[[de aul ,de aul ]])
3. INSERT INTO(III)
Sin axis EBNF:INSERT INTO TableName[(A {,A })] DQLs m .
De uel e: Ídem a INSERT INTO(I).
Ejemplo:
•En ada:
inse in o 2 selec a.a,b.b om a,b whe e a.a=b.b
•Salida:
inse _in o( 2,[a2,b2],(selec (all, op(all),no_o se ,
[exp (a (a,a,_),_,_),exp (a (b,b,_),_,_)],[],
om([(a,_),(b,_)]),whe e(a (a,a,_)=a (b,b,_)),
g oup_by([]),ha ing( ue),o de _by([],[])),_))
4. DELETE FROM
Sin axis EBNF:
DELETE FROM TableName [[AS] Iden i ie ] [WHERE Condi ion].
De uel e:dele e_ om(Table,Whe eCondi ion)
•Table: Nomb e de la abla pa a elimina .
•Whe eCondi ion: Condición que se debe cumpli pa a elimina , ue si
no se especi ica ( éase la sección 6.4).
Ejemplo:
•En ada:
dele e om whe e b='a1'
•Salida:
dele e_ om(( ,_),a (_,b,_)=c e(a1,s ing(_)))
5. UPDATE
Sin axis EBNF:UPDATE TableName [[AS] Iden i ie ] SET A =Exp
{,A =Exp } [WHERE Condi ion].
De uel e:upda e(Table,Assignmen s,Whe eCondi ion)
•Table: Nomb e de la abla pa a ac ualiza .
•Assignmen s: De o ma exp (ColumnName,_,s ing),Exp ession don-
de ColumnName es el nomb e de la columna a ac ualiza y Exp ession es
la exp esión pa a la ac ualización.
•Whe eCondi ion: Condición que se debe cumpli pa a ac ualiza , ue
si no se especi ica ( éase la sección 6.4).
Ejemplo:
•En ada:
upda e 1 se a=1
6.12. Sen encias del lenguaje de manipulación de da os (DML - Da a Manipula ion
Language) 47
•Salida:
upda e(( 1,_),[exp (a,_,s ing),
exp (c e(1,numbe (A)),_,numbe (A))], ue))
1dmlS m ([ inse _in o ( TableName , Colnames ,Vs)| STs ]/ STs) -->
2[ cmd ( inse /_):_],
3cmd(in o/_) # ‘INTO ’,
4 ablename ( TableName ) # ‘ able name ’,
5cu en _posi ion ( Posi ion ),
6punc (‘( ’) # ‘opening pa en hesis ‘‘( ’’
o DEFAULT’,
7column_name_lis ( Colnames ) # ‘a sequence o columns
be ween pa en heses ’,
8punc (‘) ’) # ‘comma o closing
pa en hesis ‘‘)’’’,
9{ my_ emo e_duplica es ( Colnames , Colnames ) -> ue ;
10 se _e o _wi h_pa ame e (‘ Seman ic ’, ‘Column names mus
be di e en in ~w ’ , [ Colnames ], Posi ion )},
11 { leng h ( Colnames ,L)},
12 inse _ alues_sql (L,Vs) # ‘VALUES , selec s a emen ,
o DEFAULT VALUES ’,
13 se _e o _no_ ail (‘ Syn ax ’, ‘end o s a emen ’).
Lis ado 6.6: Reconocimien o de sen encia de INSERT INTO Table(Columns)
El agmen o de código 6.6 ilus a cómo se analiza y se in e p e a la sen encia SQL
INSERT INTO Table(Columns).
1. [cmd(inse /_):_] ycmd(in o/_): Es as eglas econoce el comando INSERT y
la palab a cla e INTO.
2. ablename(TableName): Es a egla de ec a y cap u a el nomb e de la abla en la
que se inse a án los da os.
3. cu en _posi ion(Posi ion): Ob iene la posición ac ual en la sen encia SQL pa a
señala la ubicación exac a de un posible e o .
4. punc (’(’) y punc (’)’): Es as eglas iden i ican los pa én esis que encie an la
lis a de nomb es de columnas.
5. column_name_lis (Colnames): Analiza la lis a de nomb es de columnas en las que
se inse a án los alo es. La lis a es á delimi ada po pa én esis y los nomb es es án
sepa ados po comas.
6. El siguien e bloque e i ica la unicidad de los nomb es de las columnas:
{ my_ emo e_duplica es ( Colnames , Colnames ) -> ue ;
se _e o _wi h_pa ame e (‘ Seman ic ’, ‘Column names mus
be di e en in ~w ’, [ Colnames ], Posi ion )}
Si hay columnas duplicadas, se gene a un e o semán ico.
48 Capí ulo 6. Análisis sin ác ico
7. leng h(Colnames,L): Calcula y cap u a la can idad de columnas especi icadas.
8. inse _ alues_sql(L,Vs): Reconoce los alo es que se inse a án en la abla. Es a
egla se adap a al núme o de columnas especi icadas y e i ica que la can idad de
alo es coincida con el núme o de columnas.
9. se _e o _no_ ail(‘Syn ax’, ‘end o s a emen ’): Es a egla es ablece un
mensaje de e o sin hace que el p oceso de análisis comple o alle.
6.13. Di icul ades y desa íos del analizado sin ác ico
Co e: El uso y ubicación de los co es ha sido esencial pa a asegu a la e iciencia
del análisis sin ác ico. Cualquie co e mal ubicado pod ía pe judica la unciona-
lidad del sis ema o hace que pie da algunas soluciones posibles que debe ían se
conside adas.
O den de econocimien o de las sen encias: Si se econoce una egla an es
que o a, debido a los co es, el esul ado pod ía a ia signi ica i amen e. Es im-
p escindible que algunas sen encias se econozcan después de o as pa a ga an iza
que el analizado sin ác ico (pa se ) uncione adecuadamen e.
Sen encias DQL: El análisis de las sen encias DQL ha p esen ado di icul ades,
especialmen e po que depende de nume osos p edicados. En la cláusula FROM, es
necesa io hace una p e isualización de los okens siguien es pa a iden i ica pala-
b as cla e elacionadas con JOIN. De no hace lo, el p og ama en a ía en un bucle
in ini o.
Ges ión de e o es: Es imposible p e e odos los e o es que un usua io pod ía
encon a al usa el sis ema. Como se ha mencionado an e io men e, los co es com-
plican la a ea de iden i ica qué se espe a en cada momen o. Además, no siemp e se
espe a un único esul ado; en ocasiones hay a ias opciones posibles y es necesa io
conside a odas ellas.
Cap´
ı ulo 7
Ges ión de e o es
En es e capí ulo se abo da la ges ión de e o es que se lle a a cabo du an e las e apas
de análisis léxico y sin ác ico del p oyec o.
7.1. Ges ión de e o es en el analizado léxico
A con inuación se p esen an algunos de los e o es jun o con ejemplos ilus a i os:
ac ional: Es e e o ocu e cuando la acción de un núme o no es á co ec a-
men e es uc u ada.
Ejemplo: -1.a ⇒Lexical E o : Inco ec ac ional a Line 1, Column 4.
exponen : Es e e o se p esen a cuando el exponen e de un núme o no sigue la
es uc u a co ec a.
Ejemplo: 0.1E++2 ⇒Lexical E o : Inco ec exponen a Line 1, Column 5.
unclosed delimi ed ID, sepa a o , o un ecognized oken: Es e ipo de e o
se gene a cuando hay un iden i icado delimi ado no ce ado, un sepa ado inco-
ec o o un oken no econocido.
Ejemplos:
[ ⇒Lexical E o : Unclosed delimi ed ID o inco ec sepa a o o un ecognized
oken a Line 1, Column 1.
[⇒Lexical E o : Unclosed delimi ed ID o inco ec sepa a o o un ecognized
oken a Line 1, Column 2.
1a ⇒Lexical E o : Unclosed delimi ed ID o inco ec sepa a o o un ecognized
oken a Line 1, Column 2.
7.2. Ges ión de e o es en el analizado sin ác ico
La ges ión de e o es en el analizado sin ác ico se ealiza median e el uso del ope ado
#. El ope ando a la izquie da de es e ope ado ep esen a el p edicado (Goal) o oken
e minal, mien as que el ope ando a la de echa especi ica lo que se espe a en la sen en-
cia(po ejemplo que después de econoce el oken cmd(c ea e/_) se espe a TABLE oVIEW
49
50 Capí ulo 7. Ges ión de e o es
oOR REPLACE oDATABASE). Si se encuen a un oken e minal, el analizado sin ác ico
e i ica si coincide con el oken ac ual. En caso de coincidencia, con inúa p ocesando el
es o de la sen encia SQL. Si no coincide, busca al e na i as median e la uel a a ás. Si
no se encuen a ningún camino exi oso, se mues a el e o que alcanzó la posición más
a anzada en la en ada ( éase el lis ado 7.1).
Po ejemplo:
cmd(se /_) # ‘SET’: Aquí se espe a el oken cmd(se /_). Si no se encuen a, el
sis ema llama á al mecanismo de manejo de e o es, ep esen ado po # ‘SET’, pa a
ac ualiza el mensaje de e o co espondien e.
p_ en_ ablename(Table) # ‘ able name’: En es e caso, se espe a encon a una
de inición álida pa a un nomb e de abla. Se in oca al mecanismo Goal # E o
pa a ac ualiza el mensaje de e o y luego se con inúa con la ejecución de p_ en_
ablename(Table).
1% +Token # + E o //
2% Se e o s o expec ed okens
3Token # E o -->
4{ e minal ( Token ),
5!},
6[ Cu en Token : Posi ion ],
7{ se _e o (‘ Syn ax ’, E o , Posi ion ),
8Token = Cu en Token },
9!.
10 Goal # E o -->
11 cu en _posi ion ( Posi ion ),
12 { se _e o (‘ Syn ax ’, E o , Posi ion )},
13 Goal .
Lis ado 7.1: Ges ión de e o es en analizado sin ác ico
Los e o es se indican de o ma:
Syn ax E o :El ERROR DETECTADO a Line L, Column C.1
Syn ax E o :El ERROR DETECTADO a he end o he p og am. Si el e o ocu-
e al inal del p og ama.
En ada Syn ax E o : Expec ed ... a Posición
(Line, Column)
DESCRIBE 2 able name o iew name 1, 10
show TABLES, VIEWS o
DATABASES
1, 6
Tabla 7.1: E o es sin ác icos en consul as ISL
1En los ejemplos, odas las sen encias es án en una única línea, po lo que siemp e es la línea 1 donde
ocu e el e o .
7.2. Ges ión de e o es en el analizado sin ác ico 51
En ada Syn ax E o : Expec ed ... a Posición
(Line, Column)
ROLLBACK WORK TO
poin sp1
SAVEPOINT 1, 13
ROLLBACK TO
SAVEPOINT "s""p1"
sa epoin name(id wi hou
semicolon o quo ed id wi hou
escaped quo es)
1, 23
Tabla 7.2: E o es sin ác icos en consul as TML
En ada Syn ax E o : Expec ed ... a Posición
(Line, Column)
selec 2 1 om comma o FROM clause o end
o SELECT s a emen
1, 10
SELECT * FROM
WHERE a
a compa ison ope a o he end o he
p og am
selec * om 1 igh join
2
a alid FROM clause 1, 15
selec * om a union b SELECT s a emen 1, 23
wi h (a) selec 1 selec *
om
AS 1, 11
wi h 2 selec 1 selec *
om
assume/wi h schema 1, 6
Tabla 7.3: E o es sin ác icos en consul as DQL
52 Capí ulo 7. Ges ión de e o es
En ada Syn ax E o : Expec ed ... a Posición
(Line, Column)
c ea e o able (a in ) REPLACE 1, 11
c ea e o eplace able (a
in )
TABLE o VIEW 1, 19
c ea e able ('a'in ige ) LIKE o AS o column name 1, 16
c ea e able opening pa en hesis ( o LIKE o
AS o column name
1, 14
c ea e o eplace able (a
in p ima y kye)
KEY 1, 41
c ea e o eplace able (a
in , unique s,)
alid able cons ain (NOT,
PRIMARY, UNIQUE,
FOREIGN, CHECK,
CANDIDATE)
1, 43
c ea e able like 2 able name 1, 21
c ea e iew iew schema he end o he
p og am
Tabla 7.4: E o es sin ác icos en consul as CREATE de DDL
En ada Syn ax E o : Expec ed ... a Posición
(Line, Column)
al e 1 add cons ain
p ima y key(a)
TABLE a e ALTER 1, 7
al e able 1 ad a in ALTER, ADD o DROP 1, 16
al e able 1 al e column
a1 e da a ype
a cha (10)
SET 1, 32
al e able 1 al e column
a1 se a a ype
a cha (10)
DATA TYPE o TYPE 1, 36
ename able (a) o s TO 1, 15
d op TABLE o VIEW o
DATABASE
1, 6
d op able i exis EXISTS a e IF 1, 15
d op iew 2 iew name o op ional d op iew
clauses(IF EXISTS, CASCADE)
1, 11
Tabla 7.5: E o es sin ác icos en o as consul as DDL
7.2. Ges ión de e o es en el analizado sin ác ico 53
En ada Syn ax E o : Expec ed ... a Posición
(Line, Column)
inse in o 1 de aul VALUES a e DEFAULT 1, 24
inse in o () a sequence o columns be ween
pa en heses
1, 15
inse in o VALUES, selec s a emen , o
DEFAULT VALUES
he end o he
p og am
dele e * om FROM 1, 8
upda e a=1 SET 1, 10
upda e se sequence o column assignmen s
Col=Exp
he end o he
p og am
Tabla 7.6: E o es sin ác icos en consul as DML
En ada Seman ic E o a Posición
(Line, Column)
al e able d op a Unknown able 1, 13
al e able al e column
a1 se da a ype
a cha (10)
unknown_column( , a1) 1, 28
al e able 1 al e column
a s ing de aul ''
unknown_column( 1, a) 1, 29
selec op 1 dis inc *
om e ch i s 1 ows
only
Only one TOP/LIMIT/FETCH
speci ica ion is allowed
oid, oid2
inse in o 3(a2,a3)
alues (1,2, 'a')
Unma ching numbe o alues =>
3 (mus be 2)
1, 30
inse in o 2(a3,b3,a3)
alues (1,2,'a')
Column names mus be di e en
in [a3,b3,a3]
1, 15
2En es e caso especial de análisis sin ác ico, no indica la posición exac a donde se
p oduce al usua io.
Tabla 7.7: E o es semán icos en el p oceso de analizado sin ác ico
Cap´
ı ulo 8
P uebas y compa aciones
8.1. Me odología de p ueba
Pa a la p ueba, como se mencionó en el apa ado 6, po cada cambio que se ha
ealizado en el lexe .pl o pa se .pl, se ejecu a lexe : es (35 es s) y pa se : es (141 es s)
pa a asegu a nos de que la salida es lo que se espe a. Es os casos de p ueba se de i a on
di ec amen e del a chi o de es s p esen e en DES.
8.2. Compa aciones de esul ados
El p incipal obje i o de las compa aciones es asegu a que la salida del analizado sin-
ác ico de nues a nue a implemen ación y la salida ac ual de DES p oduzcan esul ados
idén icos, acili ando así la in eg ación del nue o analizado sin ác ico en DES pa a los
p ocesos subsiguien es elacionados con el lenguaje SQL. Además, es esencial la impo an-
cia de e alua la mejo a en é minos de iempo de ejecución que la nue a implemen ación
apo a.
En gene al, pa a las sen encias DML,DDL,ISL yTML, ambos sis emas p oducen esul a-
dos en un iempo in e io a 5ms, sin p esen a di e encias signi ica i as. Sin emba go, las
sen encias que in oluc an DQL mues an una disc epancia no able a medida de que la con-
sul a sea más compleja. Po ejemplo, pa a la sen encia SELECT i s _name, las _name
FROM employees WHERE depa men _id = 10;, DES a da ap oximadamen e 8ms, mien-
as que nues a nue a implemen ación lo ealiza en 2ms.
A con inuación, se mos a án unos agmen os de código del analizado sin ác ico
del sis ema ac ual de DES, y pos e io men e se de alla án las di e encias con la nue a
implemen ación.
1pa se_sql_que y ( SQLs ) -->
2my_sql_blanks_s a , % The ODBC d i e may e u n blanks
3{ ese _seman ic_e o ,
4my_ e ac _all_ ac s ( dic iona y (_)) ,
5asse z ( dic iona y ([]) )}, % WARNING : ONLY FOR TEST CASE
GENERATION
6push_syn ax_e o ([‘ Expec ed alid SQL s a emen (SELECT ,
CREATE , DELETE , INSERT , UPDATE , DROP , RENAME , ALTER ,
SHOW , DESCRIBE , WITH , ASSUME , COMMIT , ROLLBACK ,
55
62 Capí ulo 9. Conclusiones y abajo u u o
Nue a implemen ación:
•Ven ajas: Indica con p ecisión la línea y columna donde se encuen a el e o ,
acili ando su iden i icación, especialmen e si la sen encia p o enga de un i-
che o.
•Des en ajas: Si la sen encia es ing esada di ec amen e, puede se más di ícil
iden i ica la ubicación exac a del e o , hab á que con a la columna has a
donde es á el e o .
Sis ema ac ual:
•Ven ajas: Al mos a la sen encia has a el pun o donde pod ía su gi el e o ,
es más ácil de iden i ica en caso de que la sen encia se esc ibe di ec amen e
po en ada.
•Des en ajas: La combinación de e o es léxicos y sin ác icos en un solo men-
saje puede gene a con usión. Además, si se manejan muchas sen encias simul-
áneamen e, puede complica se la iden i icación del e o especí ico.
Implemen ación de p edicados: Las unciones como syn ax_check_ ede ,syn ax
_check_same_ ypes,allowed_wi h_schemas yc ea e_o _ eplace _ iew() ya
es án p esen es en DES. Sin emba go, no se han incluido en la nue a implemen ación
po que no a ec an di ec amen e la salida del paso de análisis sin ác ico.
Ges ión de cons an es empo ales: DES cuen a con un sis ema de allado pa a
ges iona cons an es elacionadas con el iempo (DATE,TIME,DATETIME yTIMESTAMP),
que a a di e en es o ma os y con e siones. Se ha implemen ado una e sión sim-
pli icada, se á necesa io eemplaza la po la que se encuen a en DES.
A ibu os exis _a y exis _ able: Aunque es os a ibu os ya es án in eg a-
dos, se á necesa io eemplaza los po las e siones que ya exis en en DES. Es os
a ibu os, que indican la exis encia de un a ibu o o abla, son undamen ales pa a
ga an iza la in eg idad de las consul as y p e eni e o es de e e encia.
Sepa ación de sen encias: Como se mencionó an e io men e en sección 6.1, DES
posee dos modos de en ada: mul iline_on ymul iline_o . En la ac ualidad,
se asume que odas las en adas es án en el modo mul iline_on. Po an o, se
il an p ime o los okens(sal os de línea y comen a ios) y, pos e io men e, se se-
pa an las en adas po el oken punc (‘;’). Pa a in eg a en DES, en el caso del
modo mul iline_o , p ime o se debe ía di idi la lis a de okens po el ca ác e
punc (nl) y, después, ealiza el il o.
Implemen ación de nue o analizado sin ác ico pa a o os lenguajes: En
u u os abajos, uno de los obje i os p incipales se á abo da la implemen ación
sepa ada del análisis léxico y sin ác ico pa a los o os lenguajes que DES sopo a.
Adap ación pa a SICS us P olog: Asegu a que odas las mejo as y modi ica-
ciones implemen adas en es e TFG sean plenamen e ope a i as en SICS us P olog.
Es a adap ación pe mi i á a DES ope a sob e di e en es pla a o mas de P olog.
63
Es e p oyec o ha sido un es ue zo signi ica i o en la búsqueda de op imiza el en-
dimien o de DES, un sis ema de bases de da os deduc i as ya de po sí pode oso. Las
mejo as que hemos log ado con nues a nue a implemen ación ienen el po encial de ene
un impac o sus ancial en la e iciencia y la capacidad del sis ema pa a maneja consul as
complejas.
In oduc ion
Nowadays, da abase sys ems, as essen ial componen s o compu ing, ha e pe mea ed
e e y aspec o ou li es, om online shopping, medical eco ds, o social ne wo ks.
All o hese ely on he backbone o da abases. DES (h p://des.sou ce o ge.ne /), as
a deduc i e da abase sys em, can pe o m complex in e ences on ela ional da a and
suppo s mul iple que y languages.
9.1. Mo i a ion
Wi hin he heme o language p ocesso s, a ious echniques and ools a e explo ed.
Among he mos classic a e he use o ini e au oma a, con ex - ee g amma s, lexical
and syn ac ic analyze s, among o he s. These me hodologies ha e p o en e icien in
p ocessing a wide a ie y o p og amming languages (see sec ion 3.1).
Wi hin hese me hodologies, P olog’s De ini e Clause G amma s (DCG) ha e eme ged
as an essen ial ool, especially in sys ems like DES. DCGs a e ools commonly used in
P olog o language p ocessing. Unlike adi ional echniques, DCGs p o ide a decla a i e
ep esen a ion o g amma s, allowing o a mo e in ui i e and concise de ini ion (see he
ope a ion o DCGs in sec ion 3.2.3).
Howe e , despi e he ad an age o using DCG in DES, he e’s oom o u he im-
p o emen s. Wi h he cons an g ow h in olume and complexi y o da a, da abase que y
e iciency has become a ocal poin . E en hough DES has an edge in suppo ing mul i-
ple que y languages, i s language p ocesso migh ace bo lenecks in pe o mance when
handling some complex que ies. Op imizing i s language p ocesso is essen ial o ully
ha ness he po en ial o DES.
9.2. Objec i es
This p ojec ocuses on examining and imp o ing DES’s cu en p ocesso . Ou main
objec i es a e:
Design and de elop a new SQL p ocesso in P olog ha is no only mo e e icien
bu also mo e s uc u ed and main ainable. By ca ying ou he lexical analysis and
syn ac ic analysis sepa a ely o he SQL language, he aim is no only excep ional
pe o mance bu also mo e o ganized code. This sepa a e s uc u ing acili a es
u u e changes, debugging, and he inco po a ion o new ea u es, by p o iding a
clea dis inc ion be ween he di e en phases o analysis.
65
66 Capí ulo 9. Conclusiones y abajo u u o
De elop a es amewo k ha allows compa ing pe o mance be ween he old p o-
cesso and he newly de eloped one. This compa ison will ensu e ha he esul s
p oduced by he new p ocesso a e consis en and equi alen o hose o he p e ious
p ocesso , hus alida ing i s p ope unc ionali y.
9.3. Wo k Plan
Du ing he p ojec de elopmen , we will use SWI-P olog, a popula implemen a ion
o he P olog p og amming language (see sec ion 2.2). Below is a de ailed wo k plan:
1. Familia iza ion wi h ools and echniques:
a) Ge amilia wi h DES: A deduc i e da abase sys em ha allows in e ences on
ela ional da a and suppo s mul iple que y languages (see sec ion 2.1).
b) Explo e he SWI-P olog pla o m: Familia ize onesel wi h he de elopmen
en i onmen , i s syn ax, and key ea u es (see sec ion 2.2).
c) Lea n P olog and DCG: Acqui e p og amming skills in P olog and use o DCG
(De ini e Clause G amma ) (see sec ion 3.2.3).
2. P ocesso Design:
a) Design he lexical analysis (lexe ): De elop he lexical analyze esponsible o
okenizing he inpu .
b) Design he syn ac ic analysis (pa se ): C ea e he syn ac ic analyze ha will
cons uc he abs ac syn ax ee.
c) Adjus he lexical analysis (lexe ): Make adjus men s and imp o emen s o
he lexical analysis based on he de eloped syn ac ic analyze .
3. Tes ing and e o managemen :
a) Tes he lexical analyze (lexe ): Valida e he unc ionali y o he lexical anal-
ysis.
b) Tes he syn ac ic analyze (pa se ): Valida e he unc ionali y o he syn ac ic
analysis.
4. Tes ing:
a) Conduc gene al es s: Compa e he esul s o he new p ocesso wi h DES’s
cu en sys em.
b) Compa e execu ion imes: Assess he e iciency o he new p ocesso in com-
pa ison wi h he cu en p ocesso .
5. Documen a ion:
a) Compile he p ojec epo .
9.4. S uc u e o he Repo 67
9.4. S uc u e o he Repo
In his Bachelo ’s Thesis (TFG), he ollowing chap e s a e p esen ed and desc ibed
below:
S a e o he A : This chap e p o ides a e iew o p e ious wo ks and esea ch
ela ed o DES, he pla o m whe e we p og am wi h P olog (SWI-P olog), and he
impo ance o SQL.
P elimina y Concep s: Fundamen al concep s a e in oduced o unde s and he
de eloped wo k.
•Language P ocesso s: The unc ion o language p ocesso s, and he phases o
ollow.
•P olog and Logical P og amming: An in oduc ion o P olog is o e ed, b ie ly
desc ibing i s basic componen s, ope a ion, and i s applica ion in language
p ocessing.
Gene al P ojec S uc u e: This chap e de ails he p ojec ’s a chi ec u e, de-
sc ibing each o he gene a ed .pl iles and hei speci ic unc ion wi hin SQL analysis
using P olog.
Lexical Analysis: The i s le el o analysis, he lexical, is ackled, explaining
i s s uc u e and he lexical ca ego ies conside ed in SQL. Fu he mo e, challenges
encoun e ed and he esul s ob ained om his analysis a e discussed.
Syn ac ic Analysis: This chap e b eaks down syn ac ic analysis, explaining how
di e en SQL s a emen s and s uc u es a e p ocessed. The iden i ica ion o a -
ious componen s, such as da a ypes, cons an s, and condi ions, among o he s, is
discussed. Challenges and esul s o syn ac ic analysis a e also add essed.
E o Managemen : This chap e desc ibes how e o managemen is conduc ed
du ing he analysis p ocess, how e o s a e de ec ed, and how hey a e epo ed o
he use .
Tes s and Compa isons: This chap e p esen s he es s conduc ed and he
compa ison o execu ion imes.
Conclusions and Fu u e Wo k: The wo k ca ied ou is summa ized, conclusions
a e p esen ed, and po en ial u u e wo k is sugges ed.
Appendices:
•A. Keywo ds in DES: Enume a ion o he keywo ds used in DES.
◦A.1. Commands: Lis ing o a ailable commands.
◦A.2. Func ions: The unc ions used.
◦A.3. Ope a o s: The ope a o s (Symbolic Ope a o s, Compa ison Ope a-
o s, and Tex Ope a o s).
◦A.4. Punc ua ion Symbols: Punc ua ion signs.
68 Capí ulo 9. Conclusiones y abajo u u o
•B. P olog code gene a ion o keywo d de ec ion in he lexical an-
alyze (Py hon): Explana ion o he code gene a ion p ocess o keywo d
de ec ion in he lexical analyze using Py hon.
•C. Mo e examples o lexical analysis: An expanded se o examples e-
la ed o lexical analysis.
•D. DES V6.7 SQL G amma : De ailed desc ip ion o he speci ic SQL
g amma o e sion V6.7 o DES.
•E. Mo e examples o e o managemen in he syn ac ic analyze : Ex-
ended p esen a ion o examples illus a ing e o handling in syn ac ic anal-
ysis.
Conclusions and u u e wo k
Table 8.1 showcases he subs an ial e iciency imp o emen s o e ed by he new imple-
men a ion compa ed o DES’s cu en sys em. As SQL s a emen s become mo e in ica e,
he di e ence in p ocessing imes u he widens, decisi ely a o ing ou new solu ion.
In pe o mance e ms, he new implemen a ion ou pe o ms he cu en sys em, pa ic-
ula ly when handling complex SQL s a emen s. The decision o sepa a e lexical om
syn ac ic analysis has b ough cla i y and o ganiza ion o he p ojec , simpli ying u u e
modi ica ions and adjus men s.
While all he an icipa ed objec i es o he p ojec ha e been achie ed, addi ional
asks ha e been iden i ied o u u e conside a ion. Fo upcoming wo k, he in eg a-
ion o he new implemen a ion in o DES is planned, along wi h he ollowing p oposed
modi ica ions and addi ions:
E o managemen : Adjus men s in e o handling a e needed since DES al eady
has an e o managemen sys em ha di e s om ou ecen implemen a ion. Be-
sides SQL, DES also p ocesses o he que y languages, equi ing he conside a ion o
language-speci ic e o s. Fu he mo e, he seman ic e o s ha migh a ise du ing
syn ac ic analysis a e handled di e en ly in DES, making i essen ial o add ess
hem accu a ely.
Conside he ollowing example:
selec 2 1 om
Ou new implemen a ion’s esponse would be:
Syn ax E o : Expec ed comma o FROM clause o end o SELECT s a emen
a Line 1, Column 10.
In con as , he cu en sys em would p o ide:
E o : (SQL) Expec ed comma o (SQL) Expec ed FROM clause o (SQL)
Expec ed end o SELECT s a emen o (RA) Expec ed NOT o (RA) Expec ed
s ing ype in 2 o (RA) Expec ed compa ison ope a o nea "selec 2 "
A i s glance, he new implemen a ion p ecisely indica es he line and column o
he e o , ocusing solely on po en ial SQL e o s. Con e sely, he cu en sys em
me ges lexical and syn ac ic e o s in o one message and also displays he s a emen
up o whe e he e o migh a ise.
New implemen a ion:
69
70 Capí ulo 9. Conclusiones y abajo u u o
•Ad an ages: Clea ly indica es he e o ’s line and column, easing i s iden i-
ica ion, especially i he s a emen comes om a ile.
•Disad an ages: I he s a emen is inpu di ec ly, pinpoin ing he exac e o
loca ion migh be challenging, equi ing column coun ing o ind he e o .
Cu en sys em:
•Ad an ages: Displaying he s a emen up o he e o poin aids iden i ica-
ion when he s a emen is di ec ly en e ed.
•Disad an ages: Me ging lexical and syn ac ic e o s in o one message can
be con using. Handling mul iple s a emen s can u he obscu e speci ic e o
iden i ica ion.
Implemen a ion o p edica es: Func ions like syn ax_check_ ede ,syn ax
_check_same_ ypes,allowed_wi h_schemas, and c ea e_o _ eplace_ iew() a e
al eady p esen in DES. They ha en’ been included in he new implemen a ion
since hey don’ di ec ly impac he syn ac ic analysis ou pu .
Tempo al cons an s managemen : DES has a de ailed sys em o managing
ime- ela ed cons an s (DATE,TIME,DATETIME, and TIMESTAMP), which deals wi h
a ious o ma s and con e sions. A simpli ied e sion has been implemen ed, ne-
cessi a ing i s eplacemen wi h DES’s e sion.
A ibu es exis _a and exis _ able: While hese a ibu es a e in eg a ed,
hey need eplacemen wi h he e sions a ailable in DES. These a ibu es, indi-
ca ing he exis ence o an a ibu e o able, a e i al o ensu ing que y in eg i y
and p e en ing e e ence e o s.
S a emen sepa a ion: As p e iously men ioned in sec ion 6.1, DES has wo
inpu modes: mul iline_on and mul iline_o . Cu en ly, all inpu s a e assumed
o be in he mul iline_on mode. Thus, okens (line b eaks and commen s) a e
il e ed i s , and inpu s a e hen sepa a ed by he punc (‘;’) oken. Fo DES
in eg a ion, in he mul iline_o mode, he oken lis should i s be spli by he
punc (nl) cha ac e , ollowed by il e ing.
Implemen a ion o a new syn ac ic analyze o o he languages: In u u e
wo k, one o he main objec i es will be o add ess he sepa a e implemen a ion o
lexical and syn ac ic analysis o he o he languages ha DES suppo s.
Adap a ion o SICS us P olog: Ensu e ha all enhancemen s and modi i-
ca ions implemen ed in his TFG a e ully ope a ional in SICS us P olog. This
adap a ion will allow DES o ope a e on di e en P olog pla o ms.
This p ojec has been a conside able endea o owa ds enhancing DES’s pe o mance,
an inhe en ly po en deduc i e da abase sys em. The ad ancemen s achie ed wi h ou
new implemen a ion ha e he po en ial o conside ably impac he sys em’s e iciency
and i s capabili y o manage in ica e que ies.
Bibliog a ía
Da alog educa ional sys em (des). h ps://des.sou ce o ge.io/index.h ml, 2023.
Accedido el 26-07-2023.
Swi-p olog. h ps://www.swi-p olog.o g/, 2023. Accedido el 27-07-2023.
Aho, A. V.,Lam, M. S.,Se hi, R. yUllman, J. D. Compile s: p inciples, echniques,
and ools. Addison-Wesley, 2006.
Ap , K. R. F om Logic P og amming o P olog. P en ice Hall, 1s edición, 1996. ISBN
9780132303682. A unique publica ion ha p o ides an in oduc ion o he heo y o
logic p og amming and i s applica ion o P olog p og ams. Co e s p og amming issues
such as e mina ion, occu -check eedom, pa ial co ec ness and absence o un ime
e o s.
B a ko, I. P olog p og amming o a i icial in elligence (4 h edi ion). Pea son, 2011.
Mel on, J. ySimon, A. SQL:1999: Unde s anding Rela ional Language Componen s.
Mo gan Kau mann, 2002.
O’Kee e, R. A. The C a o P olog. MIT P ess, 1990.
Pe ei a, F. C. N. yShiebe , S. M. P olog and Na u al-Language Analysis. Mic o-
ome, digi al edi ion, e ision o oc obe 5, 2005 edición, 2005. Ha dbound edi ion
a ailable wi h ISBN 0-9719777-0-4.
Sco , M. L. P og amming language p agma ics. Mo gan Kau mann, 2009.
S e ling, L. yShapi o, E. Y. The A o P olog (2nd Edi ion): Ad anced P og am-
ming Techniques. The MIT P ess, 1994.
Sáenz-Pé ez, F. Da alog Educa ional Sys em V6.7: Use ’s Manual. Fo mal Analysis
and Design o So wa e Sys ems (FADoSS), Depa amen o de Ingenie ía del So wa e
e In eligencia A i icial (DISIA), Uni e sidad Complu ense de Mad id (UCM), 2021a.
Sección 4.2 SQL.
Sáenz-Pé ez, F. Da alog Educa ional Sys em V6.7: Use ’s Manual. Fo mal Analysis
and Design o So wa e Sys ems (FADoSS), Depa amen o de Ingenie ía del So wa e
e In eligencia A i icial (DISIA), Uni e sidad Complu ense de Mad id (UCM), 2021b.
Sección 4.2.13 SQL G amma .
71
Ap´
endice C
Más ejemplos de análisis léxico
Ejemplo IV
1INSERT INTO 2 VALUES ( TIME '12:00:01', -2.5)
Lis ado C.1: En ada (lexe ) (Ejemplo IV)
[ cmd ( inse /‘ INSERT ’): pos (1 ,1) ,
cmd (in o /‘ INTO ’): pos (1 ,8) ,
id( 2/l):pos (1 ,13) ,
cmd ( alues /‘ VALUES ’): pos (1 ,16) ,
punc (‘(’): pos (1 ,23) ,
cmd( ime/‘TIME ’):pos (1 ,24) ,
s ( ‘12:00:01 ’): pos (1 ,29) ,
punc (‘,’): pos (1 ,39) ,
op(-): pos (1 ,41) ,
ac (2 ,5): pos (1 ,42) ,
punc (‘)’): pos (1 ,45) ]
Lis ado C.2: Salida (lexe ) (Ejemplo IV)
Ejemplo V
1Selec coun (*) om g oup by a
Lis ado C.3: En ada (lexe ) (Ejemplo V)
79
80 Apéndice C. Más ejemplos de análisis léxico
[ cmd ( selec /‘ Selec ’): pos (1 ,1) ,
n( coun / coun ): pos (1 ,8) ,
punc (‘(’): pos (1 ,13) ,
op (*) :pos (1 ,14) ,
punc (‘)’): pos (1 ,15) ,
cmd( om / om ): pos (1 ,17) ,
id( /l):pos (1 ,22) ,
cmd(g oup/g oup):pos (1 ,24) ,
cmd(by/by):pos (1 ,30) ,
id(a/l):pos (1 ,33)]
Lis ado C.4: Salida (lexe ) (Ejemplo V)
Ap´
endice D
G amá ica SQL de DES V6.7
Es a g amá ica sigue una sin axis de ipo EBNF. (Sáenz-Pé ez, 2021b)
SQLs m ::=
DDLs m [;]
|
DMLs m [;]
|
DQLs m [;]
|
ISLs m [;]
|
TMLs m [;]
1. Sen encias DDL(Lenguaje de De inición de Da os)
DDLs m ::=
CREATE [OR REPLACE ] TABLE Comple eCons ainedSchema
|
CREATE [OR REPLACE ] TABLE TableName [(] LIKE TableName [) ]
|
CREATE [OR REPLACE ] TABLE TableName [(] AS DQLs m [)]
|
CREATE [OR REPLACE ] VIEW Schema AS DQLs m
|
CREATE DATABASE Da abaseName % Unsuppo ed up o now
|
ALTER TABLE TableName [ ADD|DROP] | [[ COLUMN ] A |
CONSTRAINT
[Cons ain Name] TableCons ain ]
|
ALTER TABLE TableName ALTER [COLUMN ] A [ A De ini ion |
SET
[DATA ] TYPE Type]
|
RENAME TABLE TableName TO TableName
81
82 Apéndice D. G amá ica SQL de DES V6.7
|
RENAME VIEW ViewName TO ViewName
|
DROP TABLE D opTableClauses TableName {, TableName }
D opTableClauses % Ex ended syn ax ollowing MySQL , SQL
Se e and o he s
|
DROP VIEW D opViewClauses ViewName D opViewClauses
|
DROP DATABASE [ Da abaseName ]
|
Comple eSchema := DQLs m % Addi ion o suppo HR - SQL
syn ax
D opTableClauses ::=
[IF EXISTS ] [ CASCADE [ CONSTRAINTS ]]
D opViewClauses ::=
[IF EXISTS ] [ CASCADE ]
Schema ::=
Rela ionName
|
Rela ionName (A ,... , A )
Comple eCons ainedSchema ::=
Rela ionName ( A De ini ion {, A De ini ion } [,
TableCons ain De ini ions])
A De ini ion ::=
A Type [ ColumnCons ain De ini ion { ColumnCons ain }]
Comple eSchema ::=
Rela ionName (A Type { ,... , A Type })
Type ::=
CHAR (n) % Fixed - leng h s ing o n cha ac e s
|
CHARACTER (n) % Equi alen o CHAR (n)
|
CHAR % Fixed - leng h s ing o 1 cha ac e
|
VARCHAR (n) % Va iable - leng h s ing o up o n cha ac e s
|
VARCHAR2 (n) % O acle ’s a iable - leng h s ing o up o n
cha ac e s
|
TEXT (n) % MS Access ’ a iable - leng h s ing o up o n
cha ac e s
|
VARCHAR % Va iable - leng h s ing o up o he maximum leng h
o he unde lying P olog a om
83
|
STRING % Equi alen o VARCHAR
|
% CHARACTER VARYING (n) % Equi alen o he o me
% |
INT
|
INTEGER % Equi alen o INT
|
SMALLINT
|
NUMERIC (p,d) % A o al o p digi s , whe e d o hose a e in
he decimal place
|
NUMERIC (p) % An in ege wi h a o al o p digi s
|
NUMERIC % An in ege
|
DECIMAL (p,d) % Synonymous o NUMERIC
|
DECIMAL (p) % Synonymous o NUMERIC
|
DECIMAL % Synonymous o NUMERIC
|
NUMBER (p,d) % Synonymous o NUMERIC . Fo suppo ing O acle
NUMBER
|
NUMBER (p) % Synonymous o NUMERIC
|
NUMBER % Synonymous o NUMERIC
|
REAL
|
FLOAT % Synonymous o REAL
% |
% DOUBLE PRECISION % Equi alen o FLOAT
% |
FLOAT (p) % FLOAT wi h p ecision o a leas p digi s
|
DECIMAL % Synonymous o REAL (added o suppo DECIMAL
LogiQL
Type ). No SQL s anda d
|
DATE % Yea , mon h and day
|
TIME % Hou s , minu es and seconds
|
TIMESTAMP % Combina ion o da e and ime
84 Apéndice D. G amá ica SQL de DES V6.7
Cons ain NameDe ini ion ::=
CONSTRAINT Cons ain Name
ColumnCons ain De ini ion ::=
[ Cons ain NameDe ini ion ] ColumnCons ain
ColumnCons ain ::=
[NOT] NULL % NULL is no in he s anda d
|
PRIMARY KEY
|
UNIQUE
|
CANDIDATE KEY % No in he s anda d , bu
suppo ed in DB2 o unc ional dependencies
|
REFERENCES TableName [( A )]
|
DEFAULT Exp ession
|
CHECK CheckCons ain
TableCons ain De ini ions ::=
TableCons ain De ini ion{,TableCons ain De ini ion}
TableCons ain De ini ion ::=
[ Cons ain NameDe ini ion ] TableCons ain
TableCons ain ::=
NOT NULL A % No in he s anda d
|
UNIQUE ( A {, A })
|
CANDIDATE KEY (A {, A }) % No in he s anda d
|
PRIMARY KEY (A {, A })
|
FOREIGN KEY (A {, A }) REFERENCES TableName [( A {, A })]
|
CHECK CheckCons ain
CheckCons ain ::=
Whe eCondi ion
|
(A {,A }) DETERMINED BY (A {,A }) % No in he
s anda d , bu suppo ed in DB2 o unc ional
dependencies
Rela ionName is a use iden i ie o naming ables , iews
and aliases
TableName is a use iden i ie o naming ables
ViewName is a use iden i ie o naming iews
A is a use iden i ie o naming ela ion a ibu es
85
2. Sen encias DML(Lenguaje de Manipulación de Da os)
DMLs m ::=
INSERT INTO TableName [( A {, A })] VALUES ( Exp De
{,Exp De }) {, (Exp De {,Exp De })}
|
INSERT INTO TableName DEFAULT VALUES
|
INSERT INTO TableName [( A {, A })] DQLs m
|
DELETE FROM TableName [[ AS] Iden i ie ] [ WHERE Condi ion ]
|
UPDATE TableName [[ AS] Iden i ie ] SET A =Exp {,A =Exp }
[ WHERE Condi ion ]
% Exp De is ei he a cons an o he keywo d DEFAULT
3. Sen encias DQL(Lenguaje de Consul a de Da os)
DQLs m ::=
(DQLs m )
|
UBSQL
UBSQL ::=
SELECTs m
|
DQLs m UNION [ ALL | DISTINCT ] DQLs m
|
DQLs m EXCEPT [ALL | DISTINCT ] DQLs m
|
DQLs m MINUS [ ALL | DISTINCT ] DQLs m
|
DQLs m INTERSECT [ALL| DISTINCT ] DQLs m
|
WITH LocalViewDe ini ion {, LocalViewDe ini ion } DQLs m
|
ASSUME LocalAssump ion {, LocalAssump ion } DQLs m % No in
he s anda d
LocalViewDe ini ion ::=
[ RECURSIVE ] Schema AS DQLs m
|
[ RECURSIVE ] DQLs m NOT IN Schema
LocalAssump ion ::=
DQLs m [NOT] IN Schema
SELECTs m ::=
SELECT [TOP In ege ] [[ ALL| DISTINCT ]] Selec Exp essionLis
[INTO Selec Ta ge Lis ]
[FROM Rels
[WHERE Whe eCondi ion]
86 Apéndice D. G amá ica SQL de DES V6.7
[GROUP BY A s]
[ HAVING Ha ingCondi ion ]
[ ORDER BY O de Desc ip ion ]
[ OFFSET In ege [ LIMIT In ege ]]
[FETCH FIRST In ege ROWS ONLY ]]
A s ::=
A {,A }
O de Desc ip ion ::=
A [O de Di ec ion] {,A [O de Di ec ion]}
O de Di ec ion ::=
ASC |DESC | ASCENDING | DESCENDING
Selec Exp essionLis ::=
*
|
Selec Exp ession {,Selec Exp ession}
Selec Exp ession ::=
Un enamedSelec Exp ession
|
RenamedExp ession
Un enamedSelec Exp ession ::=
A
|
Rela ionName.A
|
Rela ionName.*
|
Exp ession
|
DQLs m
RenamedExp ession ::=
Un enamedExp ession [AS] Iden i ie
Exp ession ::=
Op1 Exp ession
|
Exp ession Op2 Exp ession
|
Func ion ( Exp ession {, Exp ession })
|
A
|
Rela ionName.A
|
C e
|
DQLs m
Op1 ::=
- |
Op2 ::=
87
^ | ** | * | / | // | em | / | # | + | - | / | << | >> |
di
Func ion ::=
sq /1 | ln/1 | log /1 | log /2 | sin /1 | cos /1 | an /1 | co
/1 | asin /1 | acos /1 | a an /1 | aco /1 | abs /1 | powe /2
| exp /1 | loa /1 | in ege /1 | sign /1 | gcd /2 | min /2 |
max /2 | mod /2 | unc /1 | unca e /1 | unc /2 | unca e
/2 | loa _in ege _pa /1 | loa _ ac ional_pa /1 |
ound /1 | ound /2 | loo /1 | ceiling /1 | and /1 | and /2
| conca /2 | leng h /1 | like - escape | lowe /1 | lpad /2 |
lpad /3 | pad /2 | pad /3 | ins /2 | eplace /3 | e e se
/1 | subs /3 | uppe /1 | le /2 | l im /1 | im /1 |
im /1 | epea /2 | igh /2 | space /1 | yea /1 | mon h /1
| day /1 | hou /1 | minu e /1 | second /1 | da e ime_add /2 |
da e ime_sub /2 | add_mon hs /2 | cu en _ ime /0 |
cu en _da e /0 | cu en _da e ime /0 | sysda e /0 | ex ac
- om | o_cha /1 | o_cha /2 | o_da e/1 | o_da e/2 |
cas /2 | coalesce /N | g ea es /N | ii /3 | leas /N | n l
/2 | n l2 /3 | nulli /2 | case -when - hen -end
Selec Ta ge Lis ::=
Hos Va iable {, Hos Va iable}
% Agg ega e Func ions :
% The a gumen may include a p e ix " dis inc " o all bu "
min" and " max ":
% a g /1 | coun /1 | coun /0 | max /1 | min /1 | sum /1 | imes /1
A i hme icCons an ::=
pi | e
Rels ::=
Rel {,Rel}
Rel ::=
Un enamedRel
|
RenamedRel
Un enamedRel ::=
TableName
|
ViewName
|
DQLs m
|
JoinRel
|
Di Rel
RenamedRel ::=
Un enamedRel [AS] Iden i ie
JoinRel ::=
Rel [ NATURAL ] JoinOp Rel [ JoinCondi ion ]
JoinOp ::=