Theorethical and Lab hours: 6 ECTS, 1.5 theorethical hours and 1.5 practical hours each week.
Total learning time: 180 hours
PRERREQUISITES AND RECOMMENDED PREVIOUS KNOWLEDGE
- Programming Logic,
- Formal Languages and Automata Theory,
- Data Structures,
- Computer Theory.
GENERAL DESCRIPTION OF THE COURSE
In this course we are interested in introducing the main design practices and principles for the development of programming languages. The course covers the analysis and synthesis phases of a language processor: lexical analysis, syntax analysis (top-down
and bottom-up techniques), semantic analysis, runtime environments, error handling, intermediate code, code optimization, and final code generation.
The main objective of the course is to understand compilers and programming languages and become better programmers by means of:
- Understanding the code structure.
- Understanding the language semantics.
- Understanding the relation between source code and generated machine code.
OBJECTIVES: KNOWLEDGE AND SKILLS
The main cognitive, procedural objectives and specific competences of the course are:
- To describe the basic components of a compiler.
- To study the most commonly used techniques to develop a lexical analyzer.
- To analyze the most commonly used techniques of syntactic analysis.
- To create the analysis phase of a language compiler.
- To know the main differeces between top-down and bottom-up parsing techniques.
- To create the synthesis phase of a language compiler.
- To describe intermediate code generation.
- To analyze the main techniques for code optimization.
- To study the main applications of the compilation theory.
The general and attitudinal competences are:
- Ability to generate new ideas.
- Concern with quality.
- Motivation for success.
- Interest for investigating and finding solutions to new problems.
- Capacity of analysis and synthesis.
- Capacity to organize and plan.
- Problem solving.
- Capacity to apply theoretical concepts.
The course includes files with an explanation of the most important theoretical concepts, guided summaries with the main objectives of each unit, proposed exercises with the corresponding solutions, practical activities and lab sessions, and partial
and global assessments with solutions.
PRACTICAL ASSIGMENTS AND ASSESSMENT ACTIVITIES
Al the end of the course, you should be able to:
- Solve the proposed final exams in the specific time that it is indicated.
- Carry out the proposed practical and lab exercises for each one of the units.
- Complete the exercises assigned by the professors to be solved individually with the support of a Web-based learning support tool.
By means of the assessment activities and practical assignments, you should be able to:
- Develop a scanner for a given language.
- Write a grammar for a given language.
- Verify and modify a grammar fulfills some properties.
- Write a parser for a given language using diverse kinds of techniques.
- Verify the semantics of a given language.
- Implement different techniques for error detection and management.
- Generate intermediate/final code.