Tipus A
|
Codi |
Competències Específiques |
|
Recerca |
|
AR6 |
Aplicar metodologies per a l'enginyeria del software. |
|
AR13 |
Analitzar, dissenyar i desenvolupar eines de programació |
Tipus B
|
Codi |
Competències Transversals |
|
Comú |
|
BC1 |
Creativitat. Desenvolupar idees i projectes originals |
|
BC2 |
Treballar autònomament amb iniciativa |
|
BC3 |
Flexibilitat. Disponibilitat per a l’adaptació en ambients canviants |
|
BC5 |
Transferibilitat. Aplicar coneixements i habilitats en entorns nous o no familiars i en contextos multidisciplinars relatius a la seva àrea específica |
|
BC14 |
Planificació i organització. |
Tipus C
|
Codi |
Competències Nuclears |
|
Comú |
|
CC5 |
Gestió del temps per al desenvolupament acadèmic i professional |
Objectius |
Competències |
Adquirir una visió global del procés de traducció (compilació) dels llenguatges de programació imperatius. |
AR6 AR13
|
|
|
Comprendre el funcionament d'un analitzador lèxic, sintàctic i la funció d'una taula de símbols en el procés de compilació. |
AR6
|
|
|
Adquirir una formació teòrica básica en les técniques de definició i d'implementació dels llenguatges de programació imperatius. |
AR6 AR13
|
|
|
Uitilitzar l'eina de generació d'analitzadors lèxics lex i l'eina de generació d'analitzadors sintàctics yacc, per tal de dissenyar i construir la part frontal d'un compilador. |
|
BC1 BC2 BC3 BC5 BC14
|
|
Crear un document describint el disseny y la construcció de la part frontal d'un compilador. |
AR6 AR13
|
BC1 BC2 BC3 BC5 BC14
|
CC5
|
Tema |
Subtema |
Introducció |
1 Llenguatges
1.1 Divisió dels llenguatges de programació
1.2 Classificaci´o dels llenguatges de programació
2 Nocions bàsiques
3 Context d’un compilador
3.1 Preprocessador
3.2 Enllaçador
3.3 Depurador (debugger)
3.4 Assemblador
4 Estructura bàsica d’un compilador
4.1 Anàlisi lèxica
4.2 Anàlisi sintàctica
4.3 Anàlisi semàntica
4.4 Generador de codi intermedi
4.5 Optimitzador de codi
4.6 Generador de codi
4.7 Tractament d’errors
4.8 Gestor de la Taula de Símbols
4.9 Exemple
5 Construcció d’un compilador
5.1 Àmbits d’aplicació
5.2 Diagrames de Tombstone
5.3 Compilador enllaçador
5.4 Compilador creuat
5.5 Bootstrapping
5.6 Compilador interpretatiu |
Anàlisi lèxica |
1 Organització
1.1 Funcionament de l’analitzador lèxic
2 Construcció de l’analitzador lèxic
3 Especificació d’un analitzador lèxic
3.1 Tractament de les paraules clau (reservades)
4 Tractament d’errors
5 El sistema d’entrada
5.1 Mètode de la parella
5.2 Mètode del sentinella
5.3 Sistema d’entrada del LEX
6 La taula de símbols (TS)
6.1 Operacions
6.2 Organització de la TS
6.3 Definició d’un node |
Anàlisi sintàctica |
1 Introducció
2 Conceptes generals
2.1 Forma de Backus-Naur estesa (BNF)
2.2 Disseny de gramàtiques per a llenguatges de programaci´o
3 Anàlisi sintàctica descendent
3.1 Eliminació de la recursivitat per l’esquerra
3.2 Analitzador descendent recursiu
3.3 Anàlisi descendent predictiva
4 Anàlisi sintàctica ascendent
4.1 Gramàtiques LR(k)
4.2 Anàlisi SLR(1) |
Anàlisi semàntica |
1 Introducció
2 Anàlisi semàntica
2.1 Gramàtiques atribuïdes
3 Generació de codi intermedi
3.1 Representacions intermèdies
3.2 Notació postordre
3.3 Codi de tres adreces
3.4 Comparació de la implantació amb triples i quadruples. |
Lex - Lexical Analyzer Generation - (Laboratori) |
1 Esquema d’una especificació LEX
1.1 Declaracions
1.2 Regles
2 Expressions regulars LEX
2.1 Operadors
2.2 Funcions dels operadors
3 Secció de declaracions
3.1 Definicions
3.2 Condicions inicials
3.3 Altres declaracions
4 Accions
4.1 Variables
4.2 Funcions
4.3 MACROS
5 Ambigüitat de regles
6 Funcionament intern i utilització amb Bison
7 Generació d’un analitzador amb les eines FLEX i BISON |
BISON - GNU parser generator - (Laboratori) |
1 Introducció
2 Esquema d’una especificació BISON (YACC)
2.1 Declaracions
2.2 Regles
2.3 Procediments auxiliars
3 Accions semàntiques
4 L’analiltzdor sintàctic
5 Gramàtiques ambigües. Conflictes.
6 Precedència i associabilitat.
7 Mecanismes de recuperació d’errors.
8 Interacció analitzador lèxic/ analitzador sintàtic
8.1 Tipus de valors arbitraris
8.2 Nom dels arxius |
SYMTAB - Taula de símbols - (Laboratori) |
1 Introducció
2 Conceptes previs
3 Fitxers
4 Estructures de dades
4.1 Valors
4.2 Noms
4.3 Àmbit global
4.4 Àmbit imbricat
5 Funcions
5.1 Afegir entrades a la TS
5.2 Cercar entrades a la TS
5.3 Eliminar entreades a la TS
5.4 Àmbits imbricat: tractament
5.5 Optimitzacions |
Metodologies :: Proves |
|
Competències |
(*) Hores a classe |
Hores fora de classe |
(**) Hores totals |
Activitats Introductòries |
|
2 |
0 |
2 |
|
Sessió Magistral |
|
25 |
37.5 |
62.5 |
Pràctiques a laboratoris |
|
12 |
9 |
21 |
Treballs |
|
0 |
24 |
24 |
|
Atenció personalitzada |
|
2 |
0 |
2 |
|
Proves de desenvolupament |
|
2 |
0 |
2 |
|
(*) En el cas de docència no presencial, són les hores de treball amb suport vitual del professor. (**) Les dades que apareixen a la taula de planificació són de caràcter orientatiu, considerant l’heterogeneïtat de l’alumnat |
Metodologies
|
Descripció |
Activitats Introductòries |
Presentació de l'assignatura, on es descriuran els punts següents:
Objectius de l'assignatura
Continguts de l'assignatura
Bibliografia recomanada
Metodologia de treball
Treballs que es realitzaran al llarg del curs
Avaluació |
Sessió Magistral |
La major part de les classes seran magistrals.
En elles, el professor explicarà conceptes teòrics de l'assignatura. |
Pràctiques a laboratoris |
Cada dues setmanes els alumnes tindran una sessió de dues hores de laboratori.
En aquestes sessions s'introduiran les eines que s'utilitzaran durant el curs és a dir, flex i bison.
Els treballs a realitzar per part dels alumnes s'explicaran i comentaran a les classes de laboratori.
Els alumnes disposaran de les sessions de laboratori per avançar en la realització dels treballs. |
Treballs |
Durant el curs es realitzaran tres treballs:
Utilizació de l'eina de generació automàtica flex.
Utilització de l'eina de generació automàtica d'analitzadors sintàctics bison.
Construcció de la part frontal del compilador.
Els treballs es realitzaran en grups de dues persones.
|
|
Atenció personalitzada |
Treballs |
Sessió Magistral |
Pràctiques a laboratoris |
|
Descripció |
En les sessions magistrals els estudiants podran comentar els dubtes de l'assignatura durant els descans de les classes o un cop finalitzada la sessió.
A les práctiques de laboratori els estudiants podran comentar els problemes sorgits durant les pràctiques.
Si els estudiants tenen un dubte durant la realització dels treballs podran enviar un correu electrònic al professor per tal de comentar-li el problema. El professor respondrà el correu amb una possible solució o demanant als estudiants que passin pel seu despatx per resoldre el dubte.
El professor es trobarà durant les hores de consulta al despatx 147 o al Laboratori 131. |
|
|
Descripció |
Pes |
Treballs |
Els estudiants han de lliurar tres treballs per tal de superar l'assignatura. El no lliurament d'un dels treballs suposarà no superar l'assignatura.
El treballs són els següents:
Utilització de l'eina de generació automàtica flex.
Utilització de l'eina de generació automàtica d'analitzadors sintàctics bison.
Construcció de la part frontal del compilador.
En cada lliurament del treball es realitzarà una entrevista. Si l'entrevista no es favorable el treball es considerarà no superat. |
15% primer treball
15% segon treball
50% tercer treball |
Proves de desenvolupament |
Examen dels conceptes teòrics explicats a les classes magistrals |
20% |
Altres |
L'evaluació de la segona convocatoria es realitzarà mitjançant un examen de teoria i l'entrega dels treballs requerits a la part de pràctiques |
|
|
Altres comentaris i segona convocatòria |
|
Bàsica |
Aho, A.; Sethi, R.; Ullman, J., Compiladores: Principios, técnicas y herramientas, Addison-Wesley Iberoamericana, 1990
Mason, T.; Brown, D., Lex & Yacc, O'Reilly & Associates, 1990
Codina i Banti, J.; Mejías i Jiménez, D.; Minguillón i Alfonso, J., Compiladors I, Barcelona UOC, 2002
|
|
Complementària |
Fischer, C. N.; LeBlanc, R. J., Crafting a Compiler with C, Benjamin/Cummings, 1991
Pyster, A.B., Compiler Design and Construction. Tools and Techniques, Van Nostrand Reinhold, 1988
Schreiner, A.T.; Friedman, H.G., Introduction to Compiler Construction with Unix, Prentice-Hall, Inc., 1985
Holub, A.I., Compiler Design in C, Prentice-Hall International, 1990
Watt, D.A., Programming Language Processors, Prentice-Hall International Series in Computer Science, 1993
Waite, W.M.; Goos, G., Compiler Construction, Springer-Verlag, 1984
Fisher, C.N.; LeBlanc, R.J., Creating a Compiler, The Benjamin/Cummings Publishing Company, 1988
Gough, K.J., Syntax Analysis and Software Tools, International Computer Science Series. Addison-Wesley, 1988
Bennett, J.P., Introduction to Compiling Techniques. A First Course using ANSI C, LEX and YACC., Series in Software Engineering. McGraw-Hill International, 1990
Aho, A.; Ullman J.D., The theory of parsing, translations and compiling, volume I, Aho, A.; Ullman J.D., 1972
Tremblay, J.P.; Sorenson, P.G., The Theory and Practice of Compiler Writing, McGraw-Hill Computer Science Series, 1985
|
|
Assignatures que en continuen el temari |
|
|
Altres comentaris |
Es recomana haver cursat prèviament l'assignatura:
Llenguatges, gramàtiques i autòmats |
(*)La Guia docent és el document on es visualitza la proposta acadèmica de la URV. Aquest document és públic i no es pot modificar, llevat de casos excepcionals revisats per l'òrgan competent/ o degudament revisats d'acord amb la normativa vigent |
|