Software Básico Silvio Fernandes

Slides:



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

Software Básico Silvio Fernandes
Software Básico Silvio Fernandes Universidade Federal Rural do Semiárido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula 05:
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 06: Funções.
MÁQUINAS UNIVERSAIS Fabrício Dias
Linguagens Formais e Autômatos
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 03: Computador.
Software Básico Silvio Fernandes
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Universidade Federal de São Carlos Introdução à Linguagem C Comandos.
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
Introdução a Programação Renata Freire
Análise de Requisitos Use Case Renata Araujo Ricardo Storino
EXPRESSÕES ARITMÉTICAS
EXPRESSÕES ARITMÉTICAS
Linguagens Livres de Contexto
INTRODUÇÃO À PROGRAMAÇÃO
Rganização de Computadores Melhorias de Desempenho com Pipelines Capítulo 6 – Patterson & Hennessy Organização de Computadores Melhorias de Desempenho.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Linguagem de Prog. e Programas
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Programação Baseada em Objectos Desenho de TAD
Campus de Caraguatatuba
Prof. Bruno Moreno Aula 4 – 11/03/2011
Semana 03: Comandos de desvio de fluxo. Expressões lógicas.
Análise Semântica e Representação Intermédia
PROGRAMAÇÃO I UNIDADE 1.
Ferramentas para a Construção de Compiladores: Lex & Yacc
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 02: Introdução.
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Fábio de Oliveira Borges
Semana 03 Comandos de desvio de fluxo. Expressões lógicas.
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Análise Léxica Primeira fase de um compilador
Projeto de Banco de Dados
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Computação Gráfica Aula 3 Transformações Geométricas
Organização e Arquitetura de Computadores
Agenda - Aula 2 Introdução (Computador Digital) Processadores
Análise Léxica.
Capítulo II Gramáticas e Linguagens
Campus de Caraguatatuba Aula 2: Somatório e Produtório
Máquina de Turing Universal
Analise sintática aula-07-analise-sintática.pdf.
UML - Unified Modeling Language
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
Analise Semântica aula-10-analise-semântica.pdf.
Projeto de Linguagens de Programação
Planilha Eletrônica - Excel
Campus de Caraguatatuba Aula 9: Noções Básicas sobre Erros (3)
Análise Sintática Prof. Alexandre Monteiro
Tradução Dirigida por Sintaxe
Faculdade Pernambucana - FAPE Setembro/2007
COMPILADORES 04 Prof. Marcos.
Fundamentos de linguagens de programação
Sintaxe de uma Linguagem
SISTEMAS DE INFORMAÇÃO
Linguagem de Programação I PARTE i
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
COMPILADORES 03 Prof. Marcos.
Transcrição da apresentação:

Software Básico Silvio Fernandes 2009.1 Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Software Básico Aula 18: Introdução aos compiladores Silvio Fernandes 2009.1

Funções básicas Veremos as operações fundamentais necessárias para a compilação de um programa típico escrito numa linguagem de alto nível Usaremos como exemplo o programa em Pascal a seguir

Funções básicas

Funções básicas Uma linguagem de alto nível pode ser descrita em termos da gramática Determina a forma, ou sintaxe, das instruções válidas da linguagem O problema da compilação será comparar as instruções escritas pelo programador com as estruturas definidas pela gramática, e produzir o código-objeto correspondente a cada instrução

Funções básicas É conveniente considerar cada instrução do programa-fonte como uma sequência de tokens A tarefa de análise da instrução original para reconhecimento e classificação dos diversos tokens é conhecida como análise léxica A parte do compilador que executa esta função costuma ser chamada de scanner

Funções básicas Depois da análise dos tokens, cada instrução deve ser reconhecida como uma das construções válidas da linguagem (definidas pela gramática) Esse processo é chamado análise sintática ou parsing, executado pelo parser O último passo é a geração do código-objeto

Gramáticas A gramática é uma descrição formal da sintaxe, ou forma, dos programas e instruções individuais escritas nessa linguagem A gramática não descreve a semântica, ou significado, das várias instruções Ex: I := J + K e I := X + Y Onde X e Y são variáveis REAIS e I, J e K são INTEIRAS As instruções tem a mesma sintaxe mas semântica diferentes As diferenças entre elas seriam reconhecidas durante a geração de código

Gramáticas Várias notações podem ser usadas para definir a gramática de uma linguagem Utilizaremos a notação BNF (Backus-Naur Form) por ser simples e muito utilizada A seguir é mostrado um conjunto restrito da linguagem Pascal na notação BNF

Gramáticas

Gramáticas Uma gramática BNF consiste num conjunto de regras, cada uma das quais define a sintaxe de alguma construção (construto) da linguagem Ex: a regra 13 <read> ::= READ ( <id-list> ) Esta é a definição da sintaxe da instrução READ do Pascal, identificada como <read> O símbolo ::= pode ser lido como “é definido como”

Gramáticas String delimitados pelos sinais “<“ e “>” são chamados símbolos não terminais (contrutos) Elementos que não ficam entre < e > são denominados símbolos terminais (ex: tokens) Símbolos não terminais: <read> e <id-list> Símbolos terminais: “READ”, “(“ e “)” Para reconhecer <read> é preciso da definição de <id-list>

Gramáticas Regra 6 <id-list> ::= id | <id-list>, id Essa regra oferece 2 possibilidades separadas por “|” A 1ª alternativa pode-se restringir ao token id (representa um identificador reconhecido pelo scanner) A 2ª alternativa é uma <id-list> seguida por “,” seguida por um token id

Gramáticas Repare que esta regra é recursiva, significando que o construto <id-list> é definido em termos de si mesmo É conveniente mostrar a análise gramatical de uma instrução sob a forma de uma árvore (árvore sintática) A seguir a árvore sintática da instrução READ (VALUE)

Gramáticas

Gramáticas A regra 9 da gramática define a sintaxe de uma instrução de atribuição <assign> ::= id := <exp> <assign> é formado por um id seguido do token :=, seguido de uma expressão <exp> A regra 10 define uma expressão <exp> ::= <term> | <exp> + <term> | <exp> - <term>

Gramáticas Percebe-se que <exp> é definida como uma sequência de termos <term>, conectados pelos operadores + e – A regra 11 define um termo como qualquer sequência de fatores <factor> ligados por * e DIV A regra 12 estabelece que um fator pode ser formado por um id ou por um inteiro ou por uma expressão delimitada por parênteses

Gramáticas Árvore sintática da instrução 14 do programa em Pascal

Gramáticas Observe que segundo a árvore sintática a multiplicação e a divisão são feitas antes da soma e da subtração A seguir a árvore sintática de todo o programa-exemplo em Pascal

Gramáticas

Gramáticas

Análise léxica Corresponde à leitura do programa que será compilado e ao reconhecimento dos tokens que compõem o código-fonte Os scanners (analisadores léxicos) são projetados para reconhecer palavras-chaves, operadores e identificadores, além de inteiros, números com ponto flutuante, strings de caracteres e etc

Análise léxica Os identificadores e inteiros costumam ser reconhecidos diretamente como tokens simples Como alternativa, estes tokens poderiam ser definidos como parte da gramática <ident> ::= <letter> | <ident> <letter> | <ident> <digit> <letter> ::= A | B | C | D | ... | Z <digit> ::= 0 | 1 | 2 | 3 | ... | 9

Análise léxica O scanner costuma reconhecer tokens com 1 ou mais caracteres Ex: a string READ seria interpretada como um token simples ou como uma sequência de 4 tokens R, E, A, D A string := seria reconhecida como um operador simples de atribuição, e não como : seguido de = A saída do scanner é formada por uma sequência de tokens, geralmente representado por um código de tamanho fixo (ex: inteiro)

Análise léxica

Análise léxica Essa representação fornece informações suficientes quando o token lido é uma palavra-chave ou um operador No entanto, para identificadores é necessário um especificador de token que informaria o nome, o valor inteiro do identificador encontrado pelo scanner Para isso, alguns scanners usam tabelas de símbolos assim como os assemblers

Análise léxica A fig. a seguir mostra a saída de um scanner para o programa-exemplo em Pascal Para um token do tipo 22 (identificador), o especificador é um ponteiro que indica um item na tabela de símbolos (^SUM, ^SUMSQ, etc) Para um token do tipo 23 (inteiro), o especificador é o valor do inteiro (#0, #100, etc)

Análise léxica

Análise léxica Na maioria das vezes, o scanner (análise léxica) funciona como uma procedure chamada pelo parser (análise sintática) quando precisa de outro token Cada chamada ao scanner produziria a codificação (se necessário o especificador) para o próximo token do programa-fonte O parser seria responsável por guardar os tokens dos quais ele necessite para outras análises

Referências Leland L Beck. “Desenvolvimento de software básico”. 2ª ed. Rio de Janeiro: Campus, 1993. 525p.