DADES IDENTIFICATIVES 2013_14
Assignatura (*) COMPILADORS I Codi 17012011
Ensenyament
Enginyeria Informàtica (1997)
Cicle 2n
Descriptors Crèd. Crèd. teoria Crèd. pràctics Tipus Curs Període
4.5 3 1.5 Troncal Segon Primer
Llengua d'impartició
Català
Departament Enginyeria Informàtica i Matemàtiques
Coordinador/a
GÓMEZ JIMÉNEZ, SERGIO
Adreça electrònica jordi.pujol@urv.cat
sergio.gomez@urv.cat
Professors/es
PUJOL AHULLÓ, JORDI
GÓMEZ JIMÉNEZ, SERGIO
Web http://moodle.urv.net/moodle/course/view.php?id=7034
Descripció general i informació rellevant L'objectiu docent de l'assignatura és doble. Per una banda, pretén que l'alumne adquireixi una formació básica en les tècniques de definició i d'implementació dels llenguatges de programació imperatius i, per una altra, que aquest sigui capaç d'aplicar-los al disseny, implementació i validació de sistemes de traducció de llenguatges concrets.

Competències
Codi  
A5 Capacitat de comprendre i avaluar especificacions internes i externes.
A17 Analitzar, dissenyar i desenvolupar programari.
B1 Aprendre a aprendre.
B2 Resoldre problemes de forma efectiva.
B3 Aplicar pensament crític, lògic i creatiu.
B5 Treballar de forma col·laborativa.
B14 Capacitat d'anàlisi i síntesi.
C5 Expressar-se correctament(tant de forma oral com escrita) en la llengua pròpia.

Objectius d'aprenentatge
Objectius Competències
Adquirir una visió global del procés de traducció (compilació) dels llenguatges de programació imperatius. A5
A17
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ó. A5
Adquirir una formació teòrica básica en les técniques de definició i d'implementació dels llenguatges de programació imperatius. A5
A17
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. B1
B2
B3
B5
B14
Crear un document describint el disseny y la construcció de la part frontal d'un compilador. A5
A17
B1
B2
B3
B5
B14
C5

Continguts
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

Planificació
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
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

Atenció personalitzada
 
Sessió Magistral
Pràctiques a laboratoris
Treballs
Atenció personalitzada
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 242 o al Laboratori 131.

Avaluació
  Descripció Pes
Treballs Els estudiants han de lliurar dos 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 y 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

45% segon treball
Proves de desenvolupament Examen dels conceptes teòrics explicats a les classes magistrals 40%
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

Fonts d'informació

Bàsica Aho, A.; Sethi, R.; Ullman, J., Compiladores: Principios, técnicas y herramientas, Addison-Wesley Iberoamericana, 1990
Codina i Banti, J.; Mejías i Jiménez, D.; Minguillón i Alfonso, J., Compiladors I, Barcelona UOC, 2002
Mason, T.; Brown, D., Lex & Yacc, O'Reilly & Associates, 1990

Complementària Waite, W.M.; Goos, G., Compiler Construction, Springer-Verlag, 1984
Pyster, A.B., Compiler Design and Construction. Tools and Techniques, Van Nostrand Reinhold, 1988
Holub, A.I., Compiler Design in C, Prentice-Hall International, 1990
Fischer, C. N.; LeBlanc, R. J., Crafting a Compiler with C, Benjamin/Cummings, 1991
Fisher, C.N.; LeBlanc, R.J., Creating a Compiler, The Benjamin/Cummings Publishing Company, 1988
Schreiner, A.T.; Friedman, H.G., Introduction to Compiler Construction with Unix, Prentice-Hall, Inc., 1985
Bennett, J.P., Introduction to Compiling Techniques. A First Course using ANSI C, LEX and YACC., Series in Software Engineering. McGraw-Hill International, 1990
Watt, D.A., Programming Language Processors, Prentice-Hall International Series in Computer Science, 1993
Gough, K.J., Syntax Analysis and Software Tools, International Computer Science Series. Addison-Wesley, 1988
Tremblay, J.P.; Sorenson, P.G., The Theory and Practice of Compiler Writing, McGraw-Hill Computer Science Series, 1985
Aho, A.; Ullman J.D., The theory of parsing, translations and compiling, volume I, Aho, A.; Ullman J.D., 1972

Recomanacions

Assignatures que en continuen el temari
COMPILADORS II/17012012


 
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