Disciplina Discipline MAC5754
Conceitos de Linguagens de Programação

Programming Languages Concepts

Área de Concentração: 45134

Concentration area: 45134

Criação: 22/06/2023

Creation: 22/06/2023

Ativação: 22/06/2023

Activation: 22/06/2023

Nr. de Créditos: 8

Credits: 8

Carga Horária:

Workload:

Teórica

(por semana)

Theory

(weekly)

Prática

(por semana)

Practice

(weekly)

Estudos

(por semana)

Study

(weekly)

Duração Duration Total Total
4 2 4 12 semanas 12 weeks 120 horas 120 hours

Docentes Responsáveis:

Professors:

Alan Mitchell Durham

Ana Cristina Vieira de Melo

Objetivos:

O objetivo principal deste curso é introduzir ao aluno os principais paradigmas de linguagens de programação e os conceitos fundamentais a eles relacionados, bem como introduzir algumas técnicas de implementação desses conceitos.

Objectives:

This course's major goal is to introduce students to the underlying paradigms and principles of programming languages, as well as some techniques for implementing these concepts.

Justificativa:

Com a proliferação das linguagens de programação torna-se essencial ao Cientista da Computação uma compreensão dos vários princípios envolvidos no uso e na implementação de linguagens. Uma abordagem mais abstrata, procurando os aspectos comuns entre os diversos grupos de linguagens, possibilita uma melhor compreensão das linguagens atuais, bem como das que estão por ser lançadas.

Rationale:

With the increasing number of programming languages, it becomes more essential for computer scientists to comprehend the numerous principles involved in languages use and implementation. A more abstract approach, looking for connections between distinct groups of languages, allows for a better understanding of both existing and future languages.

Conteúdo:

Conceitos fundamentais de linguagens de programação: valores, tipos e variáveis, vinculação e verificação de tipos, expressões, comandos e abstrações. Definição de linguagens: sintaxe e semântica. Linguagens funcionais. Funções como valores de primeira ordem, poliformismo e avaliação de funções. Linguagens orientadas a objetos. Linguagens lógicas: predicados, cláusulas e o modelo de unificação. Implementação dos vários paradigmas em um interpretador, compilação vs interpretação. Administração de memória; pilha vs. heap, coleta de lixo. Estratégias para a avaliação de expressões e parâmetros: execução adiada e continuações.

Content:

Fundamental concepts of programming languages: values, types and variables, binding and type checking, expressions, commands and abstractions. Definition of languages: syntax and semantics. Functional languages. Functions such as first-order values, polymorphism, and function evaluation. Object-oriented languages. Logical languages: predicates, clauses and the unification model. Implementation of the various paradigms in an interpreter. Memory management; heap vs heap, garbage collection. Strategies for evaluating expressions and parameters.

Forma de Avaliação:

A avaliação será realizada através de seminários, projetos e provas. A nota final será calculada pela média obtida pelo aluno nos instrumentos de avaliação. Nas duas primeiras semanas de aula o docente fixará as datas e o número de provas, projetos e seminários, assim como o critério de atribuição do conceito final.

Type of Assessment:

The evaluation will be carried out through seminars, projects and tests. The final grade will be calculated by mean obtained by the student in the assessment instrument. In the first two weeks of class, the teacher will set the dates and number of tests, projects and seminars, as well as the criteria for attributing the final letter grade.

Bibliografia:

1 Ana C. V. de Melo, Flávio Soares Corrêa da Silva. 2003. Princípios de Linguagens de Programação. São Paulo: Edgard Blücher 2 Shriram Krishnamurthi. 2007. Programming Languages: Application and Interpretation Creative Commons Attribution-NonCommercial-ShareAlike 3.0 United States License Version 2007-04-26 3 Samuel Kamin, 1990. Programming Languages: an Interpreter-Based Approach, Addison-Wesley. 4 David A Watt. 2004. Programming Language Design Concepts. John Wiley & Sons. 5 David A Watt and Deryck F Brown, 2000. Programming Language Processors in Java: Compilers and Interpreters. Prentice Hall. 6 H. Abelson and J. Sussman, 1996. Structure and Interpretation of Computer Programs, McGraw-Hill, MIT Press, 2nd Edition. 7 R. Sethi, 1995. Programing Languages: Concepts and Constructs, Addison-Wesley. 2nd Edition. 8 David A. Schmidt. 1986. Denotational Semantics: a Methodology for Language Development. William C. Brown Publishers, Dubuque, IA, USA. 9 Simon Thompson. 1991. Type Theory and Functional Programming. Addison-Wesley.

Bibliography:

1 Ana C. V. de Melo, Flávio Soares Corrêa da Silva. 2003. Princípios de Linguagens de Programação. São Paulo: Edgard Blücher 2 Shriram Krishnamurthi. 2007. Programming Languages: Application and Interpretation Creative Commons Attribution-NonCommercial-ShareAlike 3.0 United States License Version 2007-04-26 3 Samuel Kamin, 1990. Programming Languages: an Interpreter-Based Approach, Addison-Wesley. 4 David A Watt. 2004. Programming Language Design Concepts. John Wiley & Sons. 5 David A Watt and Deryck F Brown, 2000. Programming Language Processors in Java: Compilers and Interpreters. Prentice Hall. 6 H. Abelson and J. Sussman, 1996. Structure and Interpretation of Computer Programs, McGraw-Hill, MIT Press, 2nd Edition. 7 R. Sethi, 1995. Programing Languages: Concepts and Constructs, Addison-Wesley. 2nd Edition. 8 David A. Schmidt. 1986. Denotational Semantics: a Methodology for Language Development. William C. Brown Publishers, Dubuque, IA, USA. 9 Simon Thompson. 1991. Type Theory and Functional Programming. Addison-Wesley.

Tipo de oferecimento da disciplina:

Presencial

Class type:

Presencial