-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
atualizando materiais de aula plano de ensino
- Loading branch information
1 parent
46f4734
commit 932e8b8
Showing
10 changed files
with
3,562 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
from ply import lex | ||
|
||
tokens = ( | ||
'NUMERO', | ||
'SOMA', | ||
) | ||
|
||
data = "2+3" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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' |
Oops, something went wrong.