Skip to content

Commit

Permalink
atualizando materiais de aula plano de ensino
Browse files Browse the repository at this point in the history
  • Loading branch information
leopoldomt committed Oct 31, 2023
1 parent 46f4734 commit 932e8b8
Show file tree
Hide file tree
Showing 10 changed files with 3,562 additions and 3 deletions.
42 changes: 42 additions & 0 deletions 2023-10-24.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# IF688 - Teoria e Implementação de Linguagens Computacionais

## Introdução

### Objetivo

O objetivo desta aula é fornecer uma visão geral do curso, apresentando a arquitetura geral de compiladores, explicando brevemente as fases associadas.

### Questões para Discussão

- O que é um compilador?
- Quais são os princípios fundamentais que devemos ter em mente ao criar um compilador?
- Como o processo de compilação é dividido?
- Por que um compilador é dividido em múltiplas fases?
- De que forma o conhecimento obtido na disciplina pode ser aplicado, além da construção de compiladores?

### Material usado em sala de aula

- [Slides (pdf)](https://drive.google.com/file/d/1pUPAxG100harA2bu82idBUYtlbZBXSY4/view)

### Leitura Adicional

- [An Intro to Compilers](https://nicoleorchard.com/blog/compilers)
- [A Deeper Inspection Into Compilation And Interpretation](https://dev.to/vaidehijoshi/a-deeper-inspection-into-compilation-and-interpretation-8bp)
- [Rich Programmer Food](http://steve-yegge.blogspot.com.br/2007/06/rich-programmer-food.html)

### Links Relacionados

- [Welcoming Semmle to GitHub](https://github.blog/2019-09-18-github-welcomes-semmle/)
- [The next step for LGTM.com: GitHub code scanning!](https://github.blog/2022-08-15-the-next-step-for-lgtm-com-github-code-scanning/)
- [Coverity Scan](https://scan.coverity.com/)
- [Infer](https://fbinfer.com)
- [lint](https://developer.android.com/studio/write/lint?hl=pt-br)
- [CompCert](http://compcert.inria.fr)
- [BIRL](https://birl-language.github.io)
- [ArnoldC](https://lhartikk.github.io/ArnoldC/)
- [Rockstar](https://codewithrockstar.com/)

### Sugestão de vídeo

- [The Art of Code - Dylan Beattie](https://www.youtube.com/watch?v=6avJHaC3C2U)
- versão dublada em português: https://youtube.com/watch?v=9fUXZrz_x_Q
32 changes: 32 additions & 0 deletions 2023-10-26.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# IF688 - Teoria e Implementação de Linguagens Computacionais

## Análise Léxica

### Objetivo

O objetivo desta aula é apresentar e discutir a motivação para o uso de analisadores léxicos, relembrando conceitos básicos da teoria de linguagens formais, com foco em expressões regulares.

### Questões para Discussão

- Qual é a responsabilidade de um analisador léxico?
- Que tipo de erros um analisador léxico sinaliza?
- Quais as razões para separarmos análise léxica de sintática?
- O que caracteriza um token?
- Como especificar tokens usando expressões regulares?

### Material usado em aula

- [Slides Análise Léxica (pdf)](https://drive.google.com/file/d/14CKnqteSpdQSk-4Ok06CyM1dfFkivO43/view)

### Vídeos complementares

- [Análise Léxica - Visão Geral](https://www.youtube.com/watch?v=DrHk0P3Vy6Y)
- [Análise Léxica - Expressões Regulares](https://www.youtube.com/watch?v=_W8fSlngkq8)
- [Análise Léxica - De expressões regulares a autômatos finitos](https://www.youtube.com/watch?v=94Qzr39D5Hc)
- [Self Compiling Compilers - Computerphile](https://www.youtube.com/watch?v=lJf2i87jgFA)

### Links Relacionados

- [Bootstrapping Compilers and T-diagrams](https://eschew.wordpress.com/2010/02/28/bootstrapping-compilers-and-t-diagrams/)
- [RegexOne - Learn Regular Expressions with simple, interactive exercises](https://regexone.com/)
- [REGEXPER](https://regexper.com/)
35 changes: 35 additions & 0 deletions 2023-10-31.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# IF688 - Teoria e Implementação de Linguagens Computacionais

## Implementando Analisadores Léxicos

### Objetivo

O objetivo desta aula é apresentar como implementar analisadores léxicos, manualmente e a partir de geradores.

### Questões para Discussão

- Como implementar um analisador léxico manualmente?
- É possível gerar um analisador léxico automaticamente?
- Como usar um gerador estilo _lex_?
- Quais as vantagens e desvantagens de analisadores léxicos implementados manualmente?

### Material usado em sala de aula

- **Analisador Léxico manualmente implementado durante a aula**
- [`lexer.py`](2023-10-31/lexer.py)
- [`main.py`](2023-10-31/main.py)
- **Analisador Léxico usando PLY - implementado durante a aula**
- [`auto.py`](2023-10-31/auto.py)

### Vídeos

- [Análise Léxica - JFlex](https://www.youtube.com/watch?v=Dzl2fu016Y4)

### Links Relacionados

- [Gentle introduction into compilers. Part 1: Lexical analysis and Scanner](https://admin.indepth.dev/gentle-introduction-into-compilers-part-1-lexical-analysis-and-scanner/)
- [Compiler Basics, Part 2: Building the Scanner](https://visualstudiomagazine.com/articles/2014/06/01/compiler-basics-part-2.aspx)
- [Lexical Analysis](https://courses.cs.washington.edu/courses/cse413/06au/compiler/scanner.html)
- [PLY](https://ply.readthedocs.io/en/latest/index.html)
- [JFlex](http://jflex.de)
- [lex](http://dinosaur.compilertools.net/#lex)
8 changes: 8 additions & 0 deletions 2023-10-31/auto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from ply import lex

tokens = (
'NUMERO',
'SOMA',
)

data = "2+3"
44 changes: 44 additions & 0 deletions 2023-10-31/lexer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import enum
import sys

class Lexer:
def __init__(self, source):
self.source = source + '\n'
self.caractereAtual = ''
self.posicaoAtual = -1
self.proximoCaractere()

# Processa o próximo caractere
def proximoCaractere(self):
pass

# Retorna o caractere de lookahead (qual o que vem aí)
def peek(self):
pass


# Token inválido, imprime mensagem de erro
def abort(self, message):
pass

# Pula espaços em branco
def skipWhitespace(self):
pass

# Pula comentários
def skipComment(self):
pass

# Retorna o próximo token
def getToken(self):
pass

class Token:
def __init__(self, lexema, tipo) -> None:
self.lexema = lexema
self.tipo = tipo

class TipoToken(enum.Enum):
EOF = -1
NUMERO = 1
SOMA = 202
10 changes: 10 additions & 0 deletions 2023-10-31/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from lexer import *

def main():
source = "2+3"
lexer = Lexer(source)
token = lexer.getToken()
while token.tipo != TipoToken.EOF:
print(str(token.tipo) + " (" + token.lexema + ')')
token = lexer.getToken()
main()
5 changes: 5 additions & 0 deletions 2023-10-31/ply/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# PLY package
# Author: David Beazley ([email protected])
# https://github.com/dabeaz/ply

__version__ = '2022.10.27'
Loading

0 comments on commit 932e8b8

Please sign in to comment.