Repositório da disciplina no semestre 2021-2

Related tags

Text Data & NLP2021-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.

Collection of useful (to me) python scripts for interacting with napari

Napari scripts A collection of napari related tools in various state of disrepair/functionality. Browse_LIF_widget.py This module can be imported, for

5 Aug 15, 2022
Snowball compiler and stemming algorithms

Snowball is a small string processing language for creating stemming algorithms for use in Information Retrieval, plus a collection of stemming algori

Snowball Stemming language and algorithms 613 Jan 07, 2023
Compute distance between sequences. 30+ algorithms, pure python implementation, common interface, optional external libs usage.

TextDistance TextDistance -- python library for comparing distance between two or more sequences by many algorithms. Features: 30+ algorithms Pure pyt

Life4 3k Jan 06, 2023
숭실대학교 컴퓨터학부 전공종합설계프로젝트

✨ 시각장애인을 위한 버스도착 알림 장치 ✨ 👀 개요 현대 사회에서 대중교통 위치 정보를 이용하여 사람들이 간단하게 이용할 대중교통의 정보를 얻고 쉽게 대중교통을 이용할 수 있다. 해당 정보는 각종 어플리케이션과 대중교통 이용시설에서 위치 정보를 제공하고 있지만 시각

taegyun 3 Jan 25, 2022
Python library for Serbian Natural language processing (NLP)

SrbAI - Python biblioteka za procesiranje srpskog jezika SrbAI je projekat prikupljanja algoritama i modela za procesiranje srpskog jezika u jedinstve

Serbian AI Society 3 Nov 22, 2022
A toolkit for document-level event extraction, containing some SOTA model implementations

Document-level Event Extraction via Heterogeneous Graph-based Interaction Model with a Tracker Source code for ACL-IJCNLP 2021 Long paper: Document-le

84 Dec 15, 2022
IMS-Toucan is a toolkit to train state-of-the-art Speech Synthesis models

IMS-Toucan is a toolkit to train state-of-the-art Speech Synthesis models. Everything is pure Python and PyTorch based to keep it as simple and beginner-friendly, yet powerful as possible.

Digital Phonetics at the University of Stuttgart 247 Jan 05, 2023
Code associated with the Don't Stop Pretraining ACL 2020 paper

dont-stop-pretraining Code associated with the Don't Stop Pretraining ACL 2020 paper Citation @inproceedings{dontstoppretraining2020, author = {Suchi

AI2 449 Jan 04, 2023
Implementation of Fast Transformer in Pytorch

Fast Transformer - Pytorch Implementation of Fast Transformer in Pytorch. This only work as an encoder. Yannic video AI Epiphany Install $ pip install

Phil Wang 167 Dec 27, 2022
A PyTorch-based model pruning toolkit for pre-trained language models

English | 中文说明 TextPruner是一个为预训练语言模型设计的模型裁剪工具包,通过轻量、快速的裁剪方法对模型进行结构化剪枝,从而实现压缩模型体积、提升模型速度。 其他相关资源: 知识蒸馏工具TextBrewer:https://github.com/airaria/TextBrewe

Ziqing Yang 231 Jan 08, 2023
PyTorch source code of NAACL 2019 paper "An Embarrassingly Simple Approach for Transfer Learning from Pretrained Language Models"

This repository contains source code for NAACL 2019 paper "An Embarrassingly Simple Approach for Transfer Learning from Pretrained Language Models" (P

Alexandra Chronopoulou 89 Aug 12, 2022
Code for the paper TestRank: Bringing Order into Unlabeled Test Instances for Deep Learning Tasks

TestRank in Pytorch Code for the paper TestRank: Bringing Order into Unlabeled Test Instances for Deep Learning Tasks by Yu Li, Min Li, Qiuxia Lai, Ya

3 May 19, 2022
🏖 Easy training and deployment of seq2seq models.

Headliner Headliner is a sequence modeling library that eases the training and in particular, the deployment of custom sequence models for both resear

Axel Springer Ideas Engineering GmbH 231 Nov 18, 2022
Unofficial implementation of Google's FNet: Mixing Tokens with Fourier Transforms

FNet: Mixing Tokens with Fourier Transforms Pytorch implementation of Fnet : Mixing Tokens with Fourier Transforms. Citation: @misc{leethorp2021fnet,

Rishikesh (ऋषिकेश) 217 Dec 05, 2022
A Python wrapper for simple offline real-time dictation (speech-to-text) and speaker-recognition using Vosk.

Simple-Vosk A Python wrapper for simple offline real-time dictation (speech-to-text) and speaker-recognition using Vosk. Check out the official Vosk G

2 Jun 19, 2022
Simple telegram bot to convert files into direct download link.you can use telegram as a file server 🪁

TGCLOUD 🪁 Simple telegram bot to convert files into direct download link.you can use telegram as a file server 🪁 Features Easy to Deploy Heroku Supp

Mr.Acid dev 6 Oct 18, 2022
Text-to-Speech for Belarusian language

title emoji colorFrom colorTo sdk app_file pinned Belarusian TTS 🐸 green green gradio app.py false Belarusian TTS 📢 🤖 Belarusian TTS (text-to-speec

Yurii Paniv 1 Nov 27, 2021
Code for the paper "A Simple but Tough-to-Beat Baseline for Sentence Embeddings".

Code for the paper "A Simple but Tough-to-Beat Baseline for Sentence Embeddings".

1.1k Dec 27, 2022
Towards Nonlinear Disentanglement in Natural Data with Temporal Sparse Coding

Towards Nonlinear Disentanglement in Natural Data with Temporal Sparse Coding

Bethge Lab 61 Dec 21, 2022