• Nenhum resultado encontrado

Projeto de Linguagem de Programação

N/A
N/A
Protected

Academic year: 2021

Share "Projeto de Linguagem de Programação"

Copied!
33
0
0

Texto

(1)

Projeto de Linguagem de Programação

Aula 1: Apresentação da Disciplina

Prof Joaquim Pessôa Filho

(2)

O que são Compiladores e Interpretadores?

  Quais as linguagens que nós conhecemos hoje?

  Qual a melhor linguagem atualmente?

  Qual a linguagem mais utilizada? Por quê?

  Qual a diferença entre interpretadores e compiladores?

  E Java?

  O que esperar da disciplina?

(3)

Objetivos

 

Apresentar os conceitos e algoritmos fundamentais para construção de

compiladores de linguagens.

 

Criar analisadores léxico e sintático

 

Utilizar ferramentas automáticas para

geração de analisadores.

(4)

Ementa do Curso

 

Fundamentos do processo de compilação

 

Análise léxica

 

Fundamentos

 

Prática

 

Análise sintática

 

Fundamentos

 

Prática

(5)

Estratégia de Ensino

  Aulas teóricas expositivas, exercícios individuais e em grupo.

  Aulas de laboratório utilizando geradores de

analisadores léxicos/sintáticos e linguagem Java para programação de analisadores semânticos e geradores de código.

  Utilização do ambiente Blackboard

  Notas de aulas

  Listas de exercícios

(6)

Conteúdo Programático

1.  Fundamentos do processo de compilação

1.  Noções elementares de linguagens formais

2.  Compilação x interpretação

3.  Módulos e interfaces de um compilador

4.  Ferramentas de geração automática de analisadores 2.  Análise léxica

1.  Tokens léxicos

2.  Expressões regulares

3.  Autômatos finitos

4.  Geradores de analisadores léxicos 3.  Análise sintática

1.  Gramáticas livres de contexto

2.  Análise preditiva

3.  Análises LL e LR

4.  Geradores de analisadores sintáticos

(7)

Conteúdo Programático

4.  Análise semântica

1.  Tabelas de símbolos

2.  Verificação de tipos 5.  Registros de Ativação

1.  Organização de memória em tempo de execução: segmento de código, segmento de dados, pilhas e heaps.

2.  Registro de ativação

6.  Geração de código intermediário

1.  Máquinas virtuais

2.  Árvores de representação intermediárias

3.  Geração de árvores de representação intermediárias

4.  Árvores canônicas

(8)

Avaliação

 

2 Avaliações Parciais - 3.0 (1,5 cada)

 

Atividades em Sala/Laboratório - 1.0

 

Atividades online - 1.0

 

Prova Regimental - 5.0

(9)

Bibliografia

  Livro(s) texto(s):

  AHO, A. V. Compiladores: Principios, Tecnicas e Ferramentas. 2. ed. São Paulo: Pearson, 2008.

  LOUDEN, K. C. Compiladores: Principios e Praticas. São Paulo:

Bookman, 2004.

  Livros de referência:

  APPEL, A.W. Modern Compiler Implementation in Java, 2a. Edição, Cambridge: Cambridge University Press, 2002.

  COOPER, K. D.; TORCZON, L. Engineering a Compiler. New York: Morgan Kaufmann Publishers,inc, 2004.

  MAK, R. Writing Compilers And Interpreters: An Applied Approach Using C++. 2. ed. New York: John Wiley Consumer, 1996.

  SRIKANT, Y. N.; SHANKER, P. The Compiler Design Handbook:

Optimizations & Machine Code Generation. New York: Crc Press, 2003.

  WATT, D. A. Programming Language Processors In Java. New York:

Prentice Hall, 2000.

(10)

Tradutor

É um programa que traduz o programa fonte para o programa objeto.

Tradutor

Programa Fonte

Programa

Objeto

(11)

Compilador

É o tradutor de um programa em linguagem de alto nível para um programa em linguagem de baixo nível (assembly).

Compilador

PF em linguagem de alto nível

PO em

linguagem de baixo nível

(12)

Interpretador

Interpreta diretamente as instruções do programa fonte.

Interpretador

Programa

Fonte Resultados

(13)

Montador

Montador

PF em

linguagem de baixo nível

PO em

linguagem de Máquina

(14)

Pré-processador

Pré-processador

PF em

linguagem de alto nível

PO em linguagem de

alto nível

(15)

Compilador x Interpretador

(16)

As Fases de Análise

(17)

As Fases de Análise

(18)

Análise Léxica Análise Sintática Análise Semântica

Geração de código intermediário Otimização de código

Geração de código Síntese

Análise

Programa Fonte

Programa Executável

Compilador Atual

(19)

Analisador Léxico

Objetivos:

  Ler o programa fonte

  Encontrar os tokens:

  Identificadores

  Constantes

  Palavras reservadas

  Símbolos especiais

  Ignorar elementos como: Espaços, comentários e caracteres de controle

  Detectar erros léxicos: Símbolos inválidos, tamanho inválido de constantes, literais e identificadores.

(20)

Exemplo

Program exemplo;

var X, Y: Integer;

begin

! Início do programa read (A);

...

Program é uma palavra reservada

exemplo é um identificador

; é um símbolo especial var é uma palavra

reservada ...

(21)

Analisador Sintático

  Agrupa os tokens em estruturas sintáticas

  expressões

  declarações

  comandos

  chamadas

  ...

  Detecta problemas sintáticos

  ordem dos tokens

  ausência ou excesso de elementos

  ...

(22)

Sintaxe

Gramáticas são escritas geralmente na notação BNF (Backus-Naur Form). Em BNF, uma regra é escrita na forma N ::= α, onde N é um símbolo não terminal e α é uma cadeia de símbolos terminais e/ou não terminais.

(23)

Exemplo de um programa escrito na linguagem Mini-Triangle

! This is a comment.

let

const m ~ 7;

var n: Integer;

in

begin

n := 2 * m * m;

putint(n);

end

(24)

Exemplo de um programa escrito na linguagem Mini-Triangle

Quais são os símbolos terminais da linguagem?

Quais os símbolos não terminais?

E as regras de produção?

(25)

Exemplo de um programa escrito na linguagem Mini-Triangle

Símbolos terminais:

begin const do else end if

in let then var while

; : := ~ ( )

+ - * / < > = \

(26)

Exemplo de um programa escrito na linguagem Mini-Triangle

Símbolos não-terminais:

Program (Símbolo inicial)

Comando Comando-simples

Expressão Expressão-primária

V-nome

Declaração Declaração-simples Tipo

Operador Identificador

Inteiro-Literal

(27)

Exemplo de um programa escrito na linguagem Mini-Triangle

Regras de Produção:

Programa ::= Comando

Comando ::= Comando-simples

| Comando ; Comando-simples

(28)

Exemplo de um programa escrito na linguagem Mini-Triangle

Comando-simples ::=

V-nome := Expressão

| Identificador ( Expressão )

| if Expressão then Comando-simples | else Comando-simples

| while Expressão do Comando-simples | let Declaração in Comando-simples

| begin Comando end

(29)

Exemplo de um programa escrito na linguagem Mini-Triangle

Expressão ::= Expressão-primária

| Expressão Operador Expressão-primária Expressão-Primária ::= Inteiro-Literal

| V-nome

| Operador Expressão-primária

| (Expressão)

(30)

Exemplo de um programa escrito na linguagem Mini-Triangle

V-nome ::= Identificador

Declaração ::= Declaração-simples

| Declaração ; Declaração-simples Declaração-simples ::=

const Identificador ~ Expressão

| var Identificador : Tipo

(31)

Exemplo de um programa escrito na linguagem Mini-Triangle

Tipo ::= Identificador

Operador ::= + | - | * | / | < | > | = | \

Identificador ::= Letra | Identificador Letra | Identificador Dígito

Inteiro-Literal ::= Dígito

| Inteiro-Literal Dígito

Comentário ::= ! Símbolo* eol

(32)

Exemplo de um programa escrito na linguagem Mini-Triangle

Como seriam as regras para:

Dígito Letra

Símbolo

Dígito ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Letra ::= a | b | c | ... | z | A | B | C | ... | Z

Símbolo ::= Letra | “ ” | Caracter-especial

(33)

Exercícios

 

Escreva a gramática para a seguinte linguagem:

1. L(G)={w | w ∈ {00,11}* e w=(0011)n, n≥0}

 

Escreva uma gramática para cada uma das linguagens abaixo:

1. L(G1)={w|w ∈ {a,b,c}* e w=abnc, n≥0}

2. L(G2)={w|w ∈ {0,1}* e w=0m1n,m≥n e ≥1}

Referências

Documentos relacionados

No sentido de reverter tal situação, a realização deste trabalho elaborado na disciplina de Prática enquanto Componente Curricular V (PeCC V), buscou proporcionar as

O turismo realimenta o papel da comunicação, uma vez que o deslocamento em busca do novo (lugar) se dá a partir do compartilhamento de experiências entre indivíduos.

 Isso pode ser feito pela própria classe onde os eventos são originados ou por outra classe.. Linguagem

As ferramentas para retirada do lacre tipo &#34;porca louca&#34; e instalação dos tipos &#34;abraçadeira&#34; e &#34;metálico com fecho plástico&#34; devem ser fornecidas em

  Se temos um compilador escrito em linguagem de alto nível que compila código C para x86, temos ainda um problema, esse compilador pode ser alterado para uma outra máquina

A) Inscrição apenas para o Programa de Intercâmbios do International Office FEA-RP, para alunos que não pretendem concorrer à Bolsa USP de Mérito Acadêmico e/ou não

Python ´ e uma linguagem de alt´ıssimo n´ıvel (VHLL – very high level language), interpretada, de c´ odigo fonte aberto e dispon´ıvel para v´ arios sistemas operacionais..

Objetivo específico foi avaliar duas ligas metálicas básicas (Ni-Cr e Co-Cr) comparadas a uma liga áurica quanto à resistência à ruptura e limite de resistência.. H2) A liga de