|1||Master||Computer Systems Engineering (Information Systems and Multimedia)||6 ects|
|Learning Period:||Language of Instruction:||Total Hours:|
|Learning Outcomes of the Curricular Unit:|
|This course aims to provide students with knowledge about the characteristics of existing programming languages and associated programming paradigms, as well as about tools and techniques for developing language translators. The main objectives are the identification and characterization of existing programming languages, the usage of compiler development tools and the study of specific languages to apply two different development paradigms. Students should be aware of the potentials of different programming languages, master development tools for generating translator modules (lexers and parsers), as well as being able to distinguish development concepts from imperative and declarative paradigms.|
|1. General concepts about programming languages (syntax e semantic)|
2. Object-oriented programming model
3. Functional programming model
|Demonstration of the Syllabus Coherence with the Curricular Unit's Objectives:|
|The contents are consistent with the learning objectives since they address the main issues related with the characterization of existing programming languages and associated programming paradigms that should be mastered by the students at the end of the course. In particular the course begins by addressing the fundamental concepts and features of existing programming languages as well as the development tools used for generating lexers and parsers, used in the development of language translators. In particular, the study is focused in two concrete programming languages, one object-oriented (Java) and other functional (Lisp). All topics covered are exemplified with the application of several practical exercises. The learning objectives are therefore aligned with the themes addressed both at theoretic-practical and practical levels, which are applied in various concrete examples both in classes and for homework.|
|Teaching Methodologies (Including Evaluation):|
|This course is organized into theoretic-practical (TP) and practical (PR) classes. The teaching methodology used within the TP classes is based on the oral presentation of the contents and the exemplification through concrete applications that demonstrate the topics discussed, particularly about the characteristics of existing programming languages and characterization of associated programing paradigms. In parallel, in the context of laboratory classes, students have the opportunity to apply and develop exercises that complement and enhance the learned concepts and increase the experience basis with the covered topics. The assessment is continuous, contemplating in equal parts the TP and PR components. The TP component is assessed by an exam during the semester. The PR component is assessed through practical projects whose requirements are proposed during the semester.|
|Demonstration of the Coherence between the Teaching Methodologies and the Learning Outcomes:|
|Teaching methodologies applied in this course seek to lead students to know the different aspects of existing programming languages, and the main features of the associated programming paradigms. Moreover, the students should develop practical skills in defining and generating language translators (cf. lexers and parsers) through the use of development tools that automate this task. The theoretic-practical classes, and in particular the laboratory classes allow permanent contact with the modeling and implementation aspects of programming languages, thus facilitating the gradual progress in understanding and characterizing existing programming paradigms. This experience and contact with concrete practical examples improves the knowledge about programming languages and about the tools that allow the automatic generation of translators, which is essential for the technical development and obtaining programming skills in this area.|
| Fischer, Alice, Grodzinsky, Frances, “The Anatomy of Programming Languages”, Prentice-Hall, 1993.|
 Appleby, Doris, “Programming Languages, Paradigm and Practices”, McGraw-Hill, 1991.
 Andre W. Appel, Modern Compiler Implementation in Java, 2nd Ed., Cambridge University Press 2004.
 Eckel, Bruce, “Thinking in Java”, President, MindView Inc., 1997, www.eckelobjects.com.
 Steel, Guy L. Jr., “Common Lisp”, 2nd Ed. (HTML Version: www.cs.virginia.edu/~vision/cltl2/clm/node1.html (Last visited 2012)).
 Moreira, Rui, Apontamentos de apoio às aulas de PP, UFP, 2009.