Curso Sistemas de Informação Disciplina: Arquitetura de Software

Slides:



Advertisements
Apresentações semelhantes
Software Básico Silvio Fernandes
Advertisements

1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Arquitetura de Computadores
WebDesign Redes de Computadores Aula 05
Introdução à Ciência da Computação Linguagens de Programação.
Programas e Microprogramas
Compiladores Claudio Benossi
I - Noções dum compilador
Compiladores I Cristiano Damiani Vasconcellos
Linguagem de Montagem Visão geral.
Prof. Yandre Maldonado e Gomes da Costa
Linguagens Formais e Autômatos
Paradigmas de Programação
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Software Básico Silvio Fernandes
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1.
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Linguagens Livres de Contexto
INTRODUÇÃO À PROGRAMAÇÃO
Ferramentas Programação
Curso Sistemas de Informação I Disciplina: Arquitetura de Software
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Bibliografia 1. Aho V.A., Sethi R., Ulman D.J., Compiladores - Princípios, Técnicas e Ferramentas, tradução de Daniel de Ariosto Pinto - Ed. Guanabara.
Linguagem de Prog. e Programas
Tradutores de Linguagens
Arquitetura de Computadores
Aula 4 Nomes, Vinculações, Tipos e Escopos
Prof. Msc. Raul Paradeda Aula 2 Introdução
Introdução a Programação Orientada a Objetos
Prof. Bruno Moreno Aula 4 – 11/03/2011
Análise Semântica e Representação Intermédia
JAVA: Conceitos Iniciais
Sejam bem vindos! Arquitetura de Sistemas Operacionais.
PROGRAMAÇÃO I UNIDADE 1.
Análise léxica e sintática
Aula prática – geração de código (.NET)
Ferramentas para a Construção de Compiladores: Lex & Yacc
Compiladores, Aula Nº 9 João M. P. Cardoso
Gramáticas Livres de Contexto
Laboratório I Mateus Raeder Material baseado nos originais da
Teoria e Implementação de Linguagens Computacionais – IF688
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Análises léxica e sintática
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Modelos de Paradigmas de programação
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Organização e Arquitetura de Computadores
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Nome alunos 1 Título UC. Título – slide 2 Conteúdo Conteúdo 2.
Análises léxica e sintática
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Projeto de Linguagens de Programação
Processadores de Linguagens
Compiladores.
Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.
Tradução Dirigida por Sintaxe
Back-End Compilação aula-11-back-end.pdf.
Linguagens de Programação II
Fundamentos de linguagens de programação
Semântica de Linguagens de Programação
Compiladores – IF688 Professor: André Santos
Software Básico Introdução à Organização de Computadores Capítulo 1 Mitsuo Takaki
Sintaxe de uma Linguagem
SISTEMAS DE INFORMAÇÃO
Influencias sobre o Projeto da Linguagem
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Transcrição da apresentação:

Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores

Linguagem de Programação Uma Linguagem de Programação é composta de símbolos e códigos, regras de sintaxe e ferramenta. A primeira e mais primitiva linguagem de computador é a própria linguagem de máquina (formada por 0’s e 1’s).

Programação em Linguagem de Máquina Desenvolver um programa em linguagem de máquina é difícil, longo e principalmente caro de se construir. Um programa em linguagem de máquina é difícil de ser entendido por outros programadores. Essa complexidade levou a necessidade de desenvolver novas técnicas e ferramentas.

Linguagem Assembly e o Processo de Tradução O processo de tradução da linguagem de montagem para a linguagem de máquina é realizada por um programa chamado ASSEMBLER. Os programas de alto nível também precisam ser traduzidos para a linguagem de máquina. O processo de montagem traduz um programa escrito numa Linguagem de Programação num programa equivalente em Linguagem de Máquina.

Processo de Montagem e Tradução CÓDIGO FONTE TRADUÇÃO LINGUAGEM DE MÁQUINA

Compiladores (Processo de Compilação) Fonte LP Compilação Executável criado antes da execução LM Dados Execução

Interpretadores (Processo de Interpretação) Fonte LP Interpretação Executável criado em tempo de execução LM Dados Execução

Compiladores Híbridos LP Fonte Compilação Código intermediário criado antes da execução Código Intermediário Interpretação LM Executável criado em tempo de execução Dados Execução

Código Intermediário É mais ágil de INTERPRETAR. Não é específico de uma PLATAFORMA. Necessita ser instalado um INTERPRETADOR DE CÓDIGO.

Código Intermediário Exemplo.: JVM – Java Virtual Machine (Máquina Virtual Java) .NET – Dot Net (Máquina Virtual Microsoft) O código intermediário é chamado de bytecode.

Backus-Naur Form - BNF É uma linguagem usada para descrever outra linguagem. BNF é uma metalinguagem para descrever Linguagens de Programação.

Backus-Naur Form - BNF Foram os idealizadores iniciais da linguagem de livre contexto. John Backus Noam Chomsky Mais tarde Peter Naur modificou a linguagem para o projeto do Algol 60. Peter Naur

Gramática BNF Uma gramática em BNF é composta por um conjunto finito de regras para definir uma Linguagem de Programação. Portanto, a gramática consiste em um conjunto de definições “REGRAS”. É com a aplicação da gramática que conseguimos formar programas válidos na linguagem destino.

Exemplo de Gramática BNF <programa> ::= begin <list_inst> end <list_inst> ::= <instrução> ; | <instrução> ; <list_inst> <instrução> ::= <var> := <expressão> <var> ::= A | B | C <expressão> ::= <var> + <var> | <var> - <var> | <var>

Gramática BNF A BNF usa abstrações para representar estruturas sintáticas. Ex.: <expressão> Os itens léxicos são representados pelo negrito e são chamados de TERMINAIS. Ex.: A | B | C | D O símbolo ::= é usado no sentido de: “é definido por” <id> ::= A | B | C | D

Regras da BNF Sempre existe um símbolo não-terminal no lado esquerdo de uma instrução.| <var> ::= A | B | C | D No lado direito podemos ter terminais e/ou não-terminais. <var> ::= A | B | C | D <instrução> ::= <var> = <expressão>

Regras da BNF Sempre existe um símbolo não-terminal no lado esquerdo de uma instrução.| <var> ::= A | B | C | D No lado direito podemos ter terminais e/ou não-terminais. <var> ::= A | B | C | D <instrução> ::= <var> = <expressão>

Quais são os Não-Terminais e os Terminais ? <programa> ::= begin <lista_sentenças> end <lista_sentenças> ::= <sentença> ; | <sentença> ; <lista_sentenças> <sentença> ::= <id> := <expressão> <id> ::= A | B | C | D | E <expressão> ::= <id> + <id> | <id> - <id> | <id>

Quais são os Não-Terminais e os Terminais ? programa lista_sentenças sentença id expressão Terminais begin end ; := A B C D E + -

Exemplo de Programa Válido begin A := B + C; B := B - D; A := B; end Um programa apenas contém símbolos terminais!

Exemplo de uma Linguagem com SE condicional? <programa> ::= begin <lista_sentenças> end <lista_sentenças> ::= <sentença> ; | <sentença> ; <lista_sentenças> | <condição> ; <lista_sentenças> <sentença> ::= <id> := <expressão> <condição> ::= if <comparação> then <lista_sentenças> end if | if <comparação> then <lista_sentenças> else <lista_sentenças> end if <comparação> ::= <id> > <id> | <id> < <id> | <id> = <id> | <id> <> <id> | <id> <= <id> | <id> >= <id> <id> ::= A | B | C | D | E <expressão> ::= <id> + <id> | <id> - <id> | <id>

Parse Trees A := B + C <sentença> A := B + C <id> A := <expressão> <id> B + <id> C

Desenhe a Árvore de Análise para a instrução: Exercício Desenhe a Árvore de Análise para a instrução: A := B * ( A + C )

Exercício * <atrib> A := <expr> <expr> B ) ( + C

Exercício Desenhe a Árvore de Análise para a instrução: A := (B * C) + (A * C) + (B * C)