Introdução – parte I Compiladores Mariella Berger Sumário • • • • • O que é um compilador? Aplicações de um compilador. Modelo de compilação. Analisador léxico. Analisador sintático O Que é um Compilador? • Um compilador é um programa que recebe um programa escrito em uma linguagem fonte e o traduz em um programa equivalente escrito em uma linguagem destino. • Os programas fonte e alvo têm o mesmo significado. O que é um Compilador? Programa Fonte COMPILADOR Mensagens de Erro Programa Alvo Aplicações de um Compilador • Técnicas usadas em analisadores léxicos podem ser usadas em editores de texto, sistema de recuperação de informação e reconhecimento de padrões. Aplicações de um Compilador • Técnicas usadas em analisadores sintáticos (parsers) podem ser usadas em processamento de consultas tais como SQL. Modelo de Compilação • Há duas grandes fases de um compilador: Análise e Síntese. • Na fase de análise, uma representação intermediária é criada a partir do programa fonte: • • Analisador léxico, sintático e semântico. Na fase de síntese, o programa alvo é criado a partir da representação intermediária: • Gerador de código intermediário, otimizador de código e gerador de código final. As fases de um Compilador Análise Léxica Análise Sintática ANÁLISE Análise Semântica Gerador de Código Intermediário Otimizador de Código Gerador de Código SÍNTESE Analisador Léxico • O analisador léxico lê o programa fonte (caractere por caractere) e retorna os tokens formadores deste; • Um token descreve um padrão de caracteres tendo algum significado no programa fonte: • • • • • Identificadores Operadores Palavras chave Números Delimitadores, etc Análise Léxica montante := deposito_inicial + 60; montante Identificador := Símbolo de atribuição deposito_inicial Identificador + Símbolo de adição 60 Número ; Símbolo ponto e vírgula Analisador Léxico • Insere informação sobre identificadores na tabela de símbolo. • Expressões regulares são usada para descrever tokens (lexical constructs). • Um autômato finito (determinístico) pode ser usado na implementação de um analisador léxico. Analisador Sintático • Análise hierárquica é chamada de análise gramatical ou análise sintática. • Envolve os tokens do programa fonte em frases gramaticais representadas por uma árvore gramatical. • Analisador cria uma estrutura sintática (geralmente uma árvore) de um dado programa. Um analisador sintático é também chamado de parse. Análise Sintática montante := deposito_inicial + 60; Considere a gramática: atribuição -> identificador := expressão ; expressão -> identificador expressão -> número expressão -> expressão + expressão Análise Sintática atribuição identificador := expressão ; montante expressão + expressão identificador numero deposito_inicial 60 Analisador Léxico x Sintático • Quais construções de um programa devem ser reconhecidas por um analisador léxico e quais pelo analisador sintático? • O analisador léxico reconhece as menores unidades significativas (tokens) no programa fonte, no entanto não é suficiente para analisar expressões e enunciados. Analisador Léxico x Sintático Analisador Léxico x Sintático Analisador Léxico x Sintático