Repositório da disciplina no semestre 2021-2

Overview

Avisos!

  • Nenhum aviso!

Compiladores 1

Este é o Git da disciplina Compiladores 1. Aqui ficará o material produzido em sala de aula assim como tarefas, wiki e discussões. Este arquivo contêm informações básicas sobre a disciplina e o plano de ensino do semestre.

Informações básicas

Curso:
Engenharia de Software
Professor:
Fábio Macêdo Mendes
Disciplina:
Compiladores 1
Semestre/ano:
02/2020
Carga horária:
60 h
Créditos:
04

Ementa

  • Introdução
  • Autômatos
  • Organização e estrutura de compiladores e interpretadores.
  • Análise léxica.
  • Expressões Regulares
  • Análise sintática.
  • Gramáticas Regulares e Livres de Contexto
  • Estruturas de Dados e representação interna de código-fonte.
  • Análise semântica.
  • Geração de código.
  • Máquinas abstratas e ambientes de tempo de execução.
  • Projeto de Compiladores.
  • Compiladores, Interpretadores e Parsers na Engenharia de Software.

Horário das aulas e atendimento

Aulas teóricas e de exercícios: quartas e sextas-feiras às 14h Atendimento: realizado de forma assíncrona no grupo de Telegram da disciplina

Informações importantes

Este curso utiliza Telegram + GitHub + Microsoft Teams para gerenciar o curso. A comunicação com a turma é feita através do Telegram e os encontros presenciais no Microsoft Teams. Habilite a funcionalidade "Watch" no repositório para receber notificações sobre atualizações.

Github:
https://github.com/compiladores-fga/2021-2
Telegram:
(oculto, enviado por e-mail)
Teams:
(oculto, disponível no grupo de Telegram)

Critérios de avaliação

A avaliação será feita usando um critério de avaliação baseado em capacidades e competências complementada por um mecanismo de avaliação competitiva.

Avaliação por capacidades e competências

A avaliação é baseada no domínio de diversas competências e obtenção de medalhas relacionadas ao conteúdo do curso. A lista de competências está no arquivo COMPETENCIAS.md e a de medalhas em MEDALHAS.md

Cada competência é avaliada com uma nota numérica, onde a pontuação pode ser obtida por vários meios (provas, trabalhos, tutoriais, entre outros). O aluno precisa de uma nota numérica maior ou igual a 10 para ser considerado proficiente em cada uma destas competências.

As competências são itens considerados essenciais para a compreensão da disciplina e todos alunos precisam demonstrar proficiência em todas estas competências para serem aprovados.

Medalhas representam feitos que demonstram conhecimento mais aprofundado sobre os assuntos abordados no curso, além de habilitarem menções mais altas.

A menção final é calculada da seguinte maneira:

  • MI: Obteve pelo menos metade das competências básicas
  • MM: Obteve todas as competências básicas menos uma.
  • MS: Obteve todas as competências básicas e pelo menos 15 medalhas.
  • SS: Obteve todas as competências básicas e pelo menos 30 medalhas.

Código de ética e conduta

Algumas avaliações serão realizadas com auxílio do computador no laboratório de informática. Todas as submissões serão processadas por um programa de detecção de plágio. Qualquer atividade onde for detectada a presença de plágio será anulada sem a possibilidade de substituição. Não será feita qualquer distinção entre o aluno que forneceu a resposta para cópia e o aluno que obteve a mesma.

As mesmas considerações também se aplicam às provas teóricas e atividades entregues no papel.

Prepare-se

O curso utiliza alguns pacotes e ferramentas para os quais cada estudante deverá providenciar a instalação o mais cedo o possível. O curso requer Python 3.6+ com alguns pacotes instalados:

  • Pip: Gerenciador de pacotes do Python (sudo apt-get install python3-pip)
  • Jupyter notebook/nteract/Google colab: Ambiente de programação científica (https://nteract.io)
  • Lark (pip3 install lark-parser --user): Biblioteca de parsing para Python. (note a ausência do sudo no comando!)
  • Docker: cria ambientes completamente isolados para teste e validação (sudo apt-get install docker.io)

Já que vamos utilizar o Python, vale a pena instalar as seguintes ferramentas:

  • virtualenvwrapper: isola ambientes de desenvolvimento
  • flake8: busca erros de estilo e programação no seu código
  • black: formatador de código de acordo com o guia de estilo do Python
  • pytest, pytest-cov: criação de testes unitários
  • hypothesis: auxilia na criação de testes unitários parametrizados.
  • Editores de código/IDE: Utilize o seu favorito. Caso precise de uma recomendação, seguem algumas: * PyCharm Educacional - IDE com ótimos recursos de introspecção e refatoração e que adora memória RAM. Possui uma versão livre e uma versão profissional paga, mas que é gratuita para estudantes. * VSCode - um bom meio termo entre uma IDE e um editor de código leve. Criado para Javascript, mas possui bons plugins para Python e várias outras linguagens. * Vi/Vim - herança dos anos 70 que nunca morre ;) Instale os plugins para Python.

DICA: em todos os casos, prefira instalar os pacotes Python utilizando o apt-get ou o mecanismo que sua distribuição fornece e, somente se o pacote não existir, instale-o utilizando o pip. Se utilizar o pip, faça a instalação de usuário utilizando o comando pip3 install <pacote> --user (NUNCA utilize o sudo junto com --user e evite instalar globalmente para evitar problemas futuros com o APT). Melhor ainda: isole o ambiente utilizado em cada disciplina com uma ferramenta como o Virtualenv ou o Poetry.

Linux e Docker

Os comandos de instalação acima assumem uma distribuição de Linux baseada em Debian. Não é necessário instalar uma distribuição deste tipo e você pode adaptar os comandos para o gerenciador de pacotes da sua distribuição (ou o Brew, no caso do OS X). Apesar do Linux não ser necessário para executar a maior parte das tarefas, é altamente recomendável que todos instalem o Docker para compartilharmos ambientes de desenvolvimento previsíveis (por exemplo, eu testarei as submissões em containers específicos que serão compartilhados com a turma). É possível executar o Docker em ambientes não-Linux utilizando o Docker Machine ou o Vagrant. Deste modo, cada aluno deve providenciar a instalação do Docker e Docker Compose na sua máquina.

Bibliografia principal

Dragon Book: Compilers: Principles, Techniques, and Tools, Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman, Pearson, 2006. SICP: Structure and Interpretation of Computer Programs, Gerald Jay Sussman and Hal Abelson, MIT Press. (https://web.mit.edu/alexmv/6.037/sicp.pdf)

Material suplementar

Curso de Python: https://scrimba.com/learn/python Curso de Python no Youtube (pt-BR): https://www.youtube.com/watch?v=S9uPNppGsGo&list=PLvE-ZAFRgX8hnECDn1v9HNTI71veL3oW0

Cronograma de atividades

Consultar cronograma.

Obs.: O cronograma está sujeito a alterações.

You might also like...
Code for ACL 2021 main conference paper
Code for ACL 2021 main conference paper "Conversations are not Flat: Modeling the Intrinsic Information Flow between Dialogue Utterances".

Conversations are not Flat: Modeling the Intrinsic Information Flow between Dialogue Utterances This repository contains the code and pre-trained mode

Code for our paper
Code for our paper "Mask-Align: Self-Supervised Neural Word Alignment" in ACL 2021

Mask-Align: Self-Supervised Neural Word Alignment This is the implementation of our work Mask-Align: Self-Supervised Neural Word Alignment. @inproceed

A PyTorch implementation of paper
A PyTorch implementation of paper "Learning Shared Semantic Space for Speech-to-Text Translation", ACL (Findings) 2021

Chimera: Learning Shared Semantic Space for Speech-to-Text Translation This is a Pytorch implementation for the "Chimera" paper Learning Shared Semant

Code for our ACL 2021 paper - ConSERT: A Contrastive Framework for Self-Supervised Sentence Representation Transfer

ConSERT Code for our ACL 2021 paper - ConSERT: A Contrastive Framework for Self-Supervised Sentence Representation Transfer Requirements torch==1.6.0

Code for our ACL 2021 (Findings) Paper - Fingerprinting Fine-tuned Language Models in the wild .

🌳 Fingerprinting Fine-tuned Language Models in the wild This is the code and dataset for our ACL 2021 (Findings) Paper - Fingerprinting Fine-tuned La

Code for our paper "Transfer Learning for Sequence Generation: from Single-source to Multi-source" in ACL 2021.

TRICE: a task-agnostic transferring framework for multi-source sequence generation This is the source code of our work Transfer Learning for Sequence

Unifying Cross-Lingual Semantic Role Labeling with Heterogeneous Linguistic Resources (NAACL-2021).

Unifying Cross-Lingual Semantic Role Labeling with Heterogeneous Linguistic Resources Description This is the repository for the paper Unifying Cross-

Python Implementation of ``Modeling the Influence of Verb Aspect on the Activation of Typical Event Locations with BERT'' (Findings of ACL: ACL 2021)

BERT-for-Surprisal Python Implementation of ``Modeling the Influence of Verb Aspect on the Activation of Typical Event Locations with BERT'' (Findings

Code for papers "Generation-Augmented Retrieval for Open-Domain Question Answering" and "Reader-Guided Passage Reranking for Open-Domain Question Answering", ACL 2021

This repo provides the code of the following papers: (GAR) "Generation-Augmented Retrieval for Open-domain Question Answering", ACL 2021 (RIDER) "Read

Owner
null
Official code for "Parser-Free Virtual Try-on via Distilling Appearance Flows", CVPR 2021

Parser-Free Virtual Try-on via Distilling Appearance Flows, CVPR 2021 Official code for CVPR 2021 paper 'Parser-Free Virtual Try-on via Distilling App

null 395 Jan 3, 2023
Official code of our work, Unified Pre-training for Program Understanding and Generation [NAACL 2021].

PLBART Code pre-release of our work, Unified Pre-training for Program Understanding and Generation accepted at NAACL 2021. Note. A detailed documentat

Wasi Ahmad 138 Dec 30, 2022
Negative sampling for solving the unlabeled entity problem in NER. ICLR-2021 paper: Empirical Analysis of Unlabeled Entity Problem in Named Entity Recognition.

Negative Sampling for NER Unlabeled entity problem is prevalent in many NER scenarios (e.g., weakly supervised NER). Our paper in ICLR-2021 proposes u

Yangming Li 128 Dec 29, 2022
Repository to hold code for the cap-bot varient that is being presented at the SIIC Defence Hackathon 2021.

capbot-siic Repository to hold code for the cap-bot varient that is being presented at the SIIC Defence Hackathon 2021. Problem Inspiration A plethora

Aryan Kargwal 19 Feb 17, 2022
Code for CVPR 2021 paper: Revamping Cross-Modal Recipe Retrieval with Hierarchical Transformers and Self-supervised Learning

Revamping Cross-Modal Recipe Retrieval with Hierarchical Transformers and Self-supervised Learning This is the PyTorch companion code for the paper: A

Amazon 69 Jan 3, 2023
[WWW 2021 GLB] New Benchmarks for Learning on Non-Homophilous Graphs

New Benchmarks for Learning on Non-Homophilous Graphs Here are the codes and datasets accompanying the paper: New Benchmarks for Learning on Non-Homop

null 94 Dec 21, 2022
[Preprint] Escaping the Big Data Paradigm with Compact Transformers, 2021

Compact Transformers Preprint Link: Escaping the Big Data Paradigm with Compact Transformers By Ali Hassani[1]*, Steven Walton[1]*, Nikhil Shah[1], Ab

SHI Lab 367 Dec 31, 2022
🏆 The 1st Place Submission to AICity Challenge 2021 Natural Language-Based Vehicle Retrieval Track (Alibaba-UTS submission)

?? The 1st Place Submission to AICity Challenge 2021 Natural Language-Based Vehicle Retrieval Track (Alibaba-UTS submission)

null 26 Apr 29, 2021
This repository will contain the code for the CVPR 2021 paper "GIRAFFE: Representing Scenes as Compositional Generative Neural Feature Fields"

GIRAFFE: Representing Scenes as Compositional Generative Neural Feature Fields Project Page | Paper | Supplementary | Video | Slides | Blog | Talk If

null 1.1k Dec 27, 2022
Findings of ACL 2021

Assessing Dialogue Systems with Distribution Distances [arXiv][code] We propose to measure the performance of a dialogue system by computing the distr

Yahui Liu 16 Feb 24, 2022