Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouIan De Andrade Alterado mais de 9 anos atrás
1
Aula 4©João M. P. Cardoso 1 Anatomia de um Compilador Compiladores, Aula Nº 4 João M. P. Cardoso
2
Aula 4©João M. P. Cardoso 2 Viagem Do texto que representa o programa até ao código máquina Duas fases: Análise Reconhecimento dos enunciados no código fonte e armazenamento em estruturas internas Síntese Geração do código assembly a partir das estruturas internas
3
Aula 4©João M. P. Cardoso 3 Análise Lexical Lexical Analyzer (Scanner) Cadeia de Tokens Programa (cadeia de caracteres)
4
Aula 4©João M. P. Cardoso 4 Análise Lexical /* uma expressão simples */ y = b*x +c; // atribui a y ID(y) EQ ID(b) TIMES ID(x) PLUS ID(c) SEMICOLON EOF Lexical Analyzer (Scanner)
5
Aula 4©João M. P. Cardoso 5 Análise Lexical /* exemplo Int sum(int A[], int N) { Int i, 5sum = 0; For(i=0; i<N; i++) { sum = sum + A[i]; } return sum; } Tratamento de erros Não é uma palavra reservada nem um identificador Falta terminar comentário */
6
Aula 4©João M. P. Cardoso 6 Análise Sintáctica Syntax Analyzer (Parser) Árvore sintáctica Syntax Analyzer (Parser) Lexical Analyzer (Scanner) Cadeia de Tokens Programa (cadeia de caracteres)
7
Aula 4©João M. P. Cardoso 7 Análise Sintáctica b x * = y y = b*x + c + c Árvore Sintáctica (concreta)
8
Aula 4©João M. P. Cardoso 8 Análise Sintáctica bx y = + * c Árvore Sintáctica (abstracta): AST y = b*x + c
9
Aula 4©João M. P. Cardoso 9 Análise Sintáctica Tratamento de erros Int sum(int A[], int N)) { Int i, sum = 0; For(i=0; i<N; i++) { sum = sum + A[i] } retur sum; } Falta ‘;’ Não é palavra reservada Chaveta a mais Parêntesis a mais
10
Aula 4©João M. P. Cardoso 10 Análise Semântica Semantic Analyzer Syntax Analyzer (Parser) Árvore sintáctica Syntax Analyzer (Parser) Lexical Analyzer (Scanner) Cadeia de Tokens Programa (cadeia de caracteres) Representação intermédia tmp1 = b*x; tmp2 = tmp1 + c;
11
Aula 4©João M. P. Cardoso 11 Análise Semântica Tratamento de erros boolean sum(int A[], N) { Int i, sum; For(i=0; i<N; i++) { sum1 = sum + A[i]; } return sum; } Tipo não definido Não foi atribuído valor inicial a sum Tipo da variável retornada não confere com a declaração do cabeçalho da função Variável não declarada
12
Aula 4©João M. P. Cardoso 12 Optimização de código Code Optimizer Representação intermédia optimizada Representação intermédia Semantic Analyzer Syntax Analyzer (Parser) Árvore sintáctica Syntax Analyzer (Parser) Lexical Analyzer (Scanner) Cadeia de Tokens Programa (cadeia de caracteres)
13
Aula 4©João M. P. Cardoso 13 Geração de código assembly Code Generator Código Assembly Code Generator Code Optimizer Representação intermédia optimizada Representação intermédia Semantic Analyzer Syntax Analyzer (Parser) Árvore sintáctica Syntax Analyzer (Parser) Lexical Analyzer (Scanner) Cadeia de Tokens Programa (cadeia de caracteres) mult $t4, $t1,$t2; Add $t4, $t4, $t3;
14
Aula 4©João M. P. Cardoso 14 TPC Apresente os resultados de cada etapa de compilação para a expressão: y = a*x*x+b*x+c;
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.