1.03k likes | 1.27k Views
Linguagens Formais e Compiladores. Carlos Alberto Pimentel fragapimentel@gmail.com http://fragapimentel.googlepages.com *Parte dos slides gentilmente cedidos pela prof Laís (Unifacs). Ementa. Gramáticas e automatos Gramáticas livres de contexto Gramáticas sensíveis ao contexto
E N D
Linguagens Formais e Compiladores Carlos Alberto Pimentel fragapimentel@gmail.com http://fragapimentel.googlepages.com *Parte dos slides gentilmente cedidos pela prof Laís (Unifacs)
Ementa • Gramáticas e automatos • Gramáticas livres de contexto • Gramáticas sensíveis ao contexto • Introdução à arquitetura de compiladores • Análise Léxica, sintática e semântica • Geração de código intermediário e otimização
Habilidades • Conceituar gramáticas e automatos • Habilidade para diferenciar os diversos tipos de gramáticas e automatos • Compreender as diversas fases de um compilador • Habilidade para implementar um tradutor • Compreender como as diversas técnicas de programação influenciam no desempenho dos programas gerados.
Pré-requisitos • Conhecimentos básicos em teoria dos conjuntos e lógica matemática
Bibliografia • HOPCROFT, J., MOTOWANI, R. ULLMAN, J. Introduction to Automata Theory, Languages and Computational. Addison- Wesley, 2001. • AHO, A., SETHI, R. ULLMAN, J. Compilers. Addison Wesley, 2006. • LEWIS, H., PAPADIMITRIOU, C., Elements of the theory of computational. Prentice Hall, 2004. • MENEZES, P., Linguagens formais e automatos. Sagra Luzzato, 2005. http://teia.inf.ufrgs.br/ • PRICE, A. TOSCANI, S. Implementação de linguagens de programação. Sagra Luzzato, 2005. • RAVI SETHI JEFFREY D. ULLMAN ET AL. Compiladores: Princípios, Técnicos e Ferramentas.
Linguagens formais e automatos • Originalmente desenvolvida em 1950 como estudo relacionado as linguagens naturais, posteriormente linguagens “artificiais”. • Emprego na análise léxica e sintática das linguagens de programação.
Sintaxe e semântica • Linguagens formais preocupa-se com a análise sintática. • A teoria da sintaxe possui modelos matemáticos bem definidos. Ex.: gramáticas de Chomsky • Linguagem: Uma entidade livre X entidade com significado
Sintaxe e semântica • Sintaxe – Trata das propriedades livres da linguagem. Ex.: Verificação gramatical • Semântica – Objetiva dar uma interpretação ou significado para o programa
Alfabetos, palavras, linguagens, gramáticas • Para o dicionário Aurélio um linguagem é “O uso da palavra articulada ou escrita como meio de expressão e comunicação entre pessoas” • Precisamos de um formalismo matemático.
Alfabeto • Um conjunto finito de símbolos. • {a, b, c, d, e, ..., z} • {0, 1} • {0, 1, 2, ..., 9, A, B, C, D, E, F}
Palavra, cadeia de caracteres ou sentença • Uma seqüência finita de símbolos justapostos. • Palavra vazia ε • Se denota um alfabeto • * denota o conjunto de todas as palavras sobre o alfabeto • + denota o conjunto de todas as palavras exceto palavra vazia. Exemplos???
Tamanho ou comprimento de uma palavra • Sendo w uma palavra, o comprimento da palavra é dado por |w|. • O comprimento é dado em número de símbolos • |ε| = 0 • |casa|=4 • |pé|=2 • |compilador|=?
Prefixo, sufixo, subpalavra • Prefixo – subconjunto inicial de símbolos de uma palavra • Sufixo – subconjunto final de símbolos de uma palavra • Subpalavra – qualquer subconjunto de símbolos de uma palavra. • Abcb é uma palavra do alfabeto {a, b, c} • Exemplos de prefixo e sufixo????
Linguagem formal • Um conjunto de palavras sobre um alfabeto. • Exemplo de linguagem: O conjunto de palíndromos sobre um determinado alfabeto • {}<>{ε}
Concatenação • Justaposição de símbolos que representam as palavras componentes • Propriedades: • Associativa – v(wt) = (vw)t • Elemento neutro a esquerda e direita • εw=w=wε • Exemplos????
Concatenação sucessiva • Uma palavra e concatenada sucessivamente com ela mesma. • wn – Sendo w uma palavra e n a quantidade de contatenações. Assim: • w0=ε • wn= wn-1w, para n > 0 • Ex.: A5=AAAAA • Concatenação da palavra vazia??????
Gramática • Uma gramática é uma quádrupla ordenada • G=(V, T, P, S) • V – Conjunto finito de símbolos não terminais • T – Conjunto finito de símbolos terminais • P – Conjunto finito de pares, denominados regras de produção. • S – Elemento de V, denominado variável inicial
Regra de produção • Definem as condições de geração das palavras da linguagem. • 1| 2 | 3| .... | n • Para descobrir se uma cadeia x T* é gerada pela gramática basta fazer um processo de derivação começando do símbolo inicial S até obter a cadeia desejada.
Gramáticas • Um exemplo inicial: <frase> <sujeito> <verbo> <predicado> <sujeito> O homem <sujeito> A mulher <verbo> leu <verbo> escreveu <predicado> um <adjetivo> livro <adjetivo> ótimo <adjetivo> péssimo <adjetivo> e
Exemplo de gramática • A gramática gera a seguinte linguagem • {ww | w é palavra de {a, b}*}
Gramática {ww | w é palavra de {a, b}*} • G={V, T, P, S} • V={S, X, Y, A, B, F} • T={a, b} • P={S→XY, X→XaA | XbB | F, Aa→aA, Ab→bA, AY→Ya, Ba→aB, Bb→bB, BY→Yb, Fa→aF, Fb→bF,FY→ e} • S={S}
Exemplo de derivação da gramática {ww | w é palavra de {a, b}*} • S=>XY=>XaAY=>XaYa=>XbBaYa=>XbaBYa=>FbaYba=>bFaYba=>baFYba =>baba
{ww | w é palavra de {a, b}*} • A gramática apresentada gera o primeiro w após X e o segundo w após Y, como segue: • A cada símbolo terminal gerado após X, é gerada uma variável correspondente; • Esta variável “caminha” na palavra até passar por Y, quando devira o correspondente terminal; • Para encerrar, X devira a variável F a qual “caminha” até encontrar Y quando FY deriva a palavra vazia.
Exercício (Media de eficiência) • Dada a gramática anterior da ling. {ww | w é palavra de {a, b}*} • Gerar duas palavras de comprimento |WW| = 4 e uma palavra de comprimento |WW| = 6. Mostrar que a palavra bbaa não pode ser derivada da gramática. Individual ou em dupla
Gramáticas equivalentes • Duas gramáticas G1 e G2 são ditas Gramáticas equivalentes se, e somente se, GERA(G1) = GERA(G2)
Exercício (Media de eficiência) • Desenvolver uma gramática que gere expressões aritméticas com parênteses balanceados, dois operadores (representados por * e +) e um operando (representado por x), Por exemplo, x, x*(x+x) e ((((x)))) são expressões aritméticas válidas. • No máximo 3 pessoas por equipe
Linguagens Regulares ou do tipo 3 • De acordo com a Hierarquia de Chomsky, trata-se da classe de linguagens mais simples, sendo possível desenvolver algoritmos de reconhecimento ou de geração de pouca complexidade, grande eficiência e de fácil implementação.
Propriedades das linguagens regulares • LR podem ser representadas por formalismos • pouca complexidade • grande eficiência • fácil implementação • Entretanto, por ser uma classe relativamente simples • é restrita e limitada
Linguagem Regular ou tipo 3 • Uma das principais características das linguagens regulares é o fato de serem representadas for formalismos de pouca complexidade, grande eficiência e fácil implementação. Entretanto, por serem de uma classe relativamente simples, é restrita e limitada.
LR (tipo 3) LLC (tipo 2) LSC (tipo 1) LEF (tipo 0) De acordo com a Hierarquia de Chomsky
Sistema de estados finitos • É um modelo matemático de um sistema com entradas e saídas discretas. Pode assumir um número pré-definido de estados. Cada estado resume somente informações do estado passado para determinar as ações da próxima entrada.
Exemplo de sistema de estados finitos • Um exemplo clássico e simples é o elevador. Trata-se de um sistema que não memoriza as requisições anteriores. Cada “estado” sumariza as informações “andar corrente” e “direção de movimento”. As entradas para o sistema são requisições pendentes. • Ou exemplo, analisadores léxicos e alguns processadores de texto, memorizam apenas a estrutura do prefixo das palavras
Teoria dos AutômatosAutômatos Finitos • Autômatos finitos (AF): • modelo restrito para o computador • são dispositivos de reconhecimento de linguagens • tem capacidade finita fixa de informação • sem memória auxiliar • sem saída de dados • Pode-se dizer que é uma máquina abstrata que reconhece linguagens. Supondo-se uma linguagem L e fornecendo ao AF uma seqüência de caracteres w, ele responderá se w L ou w L.
Teoria dos AutômatosAutômatos Finitos Um autômato finito possui: • Fita de entrada– armazena os símbolos da cadeia de entrada; • Controle finito - extrai símbolos da fita de entrada através de um sensor de leitura; • Função de transição– decide qual deverá ser o próximo estado do autômato, com base no símbolo lido e no estado anterior; • Número finito de estados.
A Fita • É finita a esquerda e a direita, dividida em células onde cada uma armazena um símbolo. • Não é possível gravar sobre a fita e não existe memória auxiliar • Inicialmente a cadeia a ser processada ocupa toda fita
Unidade de controle • Possui um número finito de estados pré-definido. A unidade lê um símbolo da fita de cada vez e move a cabeça para a direita • Inicialmente a cabeça é posicionada mais a esquerda da fita. • Importante – O autômato Finito não possui memória de trabalho.
Autômatos finitos equivalentes • Dois autômatos finitos M1 e M2 são ditos equivalente se, e somente se: • ACEITAM(M1) = ACEITAM(M2)
Linguagem regular ou do tipo 3 • Uma linguagem aceita por um autômato finito determinístico é uma linguagem regular
fita com a cadeia w de entrada a a b b Cabeça de leitura Controle Finito Início do processo de reconhecimento pelo estado inicial qo Teoria dos AutômatosAutômatos Finitos • Graficamente um AF pode ser representado por
Teoria dos AutômatosAutômatos Finitos O Autômato Finito consegue ler, através da cabeça de leitura, os símbolos da fita seqüencialmente sempre da esquerda para a direita. O AF é uma máquina que sempre pára retornando uma resposta sim (cadeia reconhecida) ou não (cadeia não conhecida). Podem ser classificados em: • Autômatos Finitos Determinísticos (AFD) • Autômatos Finitos Não-Determinísticos (AFND)
Teoria dos AutômatosAutômatos Finitos Determinísticos Definição formal de um Autômato Finito Determinístico: Um Autômato Finito Determinístico (AFD) ou simplesmente Autômato Finito (AF) M é uma 5-upla: M = (, Q, , q0, F), onde : alfabeto de símbolos de entrada; Q: conjunto finito de estados do autômato; : função programa ou função de transição (parcial) : Q Q q0: estado inicial (q0Q) F: conjunto de estados finais ou estados de aceitação (FQ)
Teoria dos AutômatosAutômatos Finitos Determinísticos Representação Gráfica:
1 0 0 0 1 qo q1 qo qo q1 1 q1 q1 qo Teoria dos AutômatosAutômatos Finitos Determinísticos Exemplo: Autômato que reconhece a linguagem de números binários com quantidade ímpar de 1s. M = (∑, Q, , qo, F) Q = { qo, q1 }, ∑ = { 0, 1 }, F = { q1 } Forma Tabular : Forma Gráfica :
Teoria dos AutômatosAutômatos Finitos Determinísticos • Um Autômato Finito nunca entra em “loop” infinito, pois como qualquer cadeia a ser processada pelo AF é finita e como um novo símbolo da entrada é lido a cada aplicação da função programa, o processo de reconhecimento de qualquer cadeia pára de duas maneiras: • Aceitando ou; • rejeitando uma entrada .
Teoria dos AutômatosAutômatos Finitos Determinísticos As condições de parada são as seguintes: • Após processar o último símbolo da fita, o Autômato Finito assume um estado final: o autômato pára e a entrada é aceita; • Após processar o último símbolo da fita, o AF assume um estado não final: o autômato pára e a entrada é rejeitada; • A função programa é indefinida para o argumento (estado corrente, símbolo lido): a máquina pára e a palavra de entrada é rejeitada.
Teoria dos AutômatosAutômatos Finitos Determinísticos Definição: Autômatos Finitos equivalentes. • Dois autômatos finitos M1 e M2 são ditos equivalentes se, e somente se: L(M1) = L(M2); Definição: Um linguagem aceita por um autômato finito determinístico é uma linguagem regular ou Tipo 3.
1 0 0 0 1 qo q1 qo qo q1 1 q1 q1 qo Teoria dos AutômatosAutômatos Finitos Determinísticos Exemplo: Autômato que reconhece a linguagem de números binários com quantidade ímpar de 1s. M = (∑, Q, , qo, F) Q = { qo, q1 }, ∑ = { 0, 1 }, F = { q1 } Forma Tabular : Forma Gráfica :
Teoria dos AutômatosAutômatos Finitos Determinísticos Definição: Processo de reconhecimento de uma dada cadeia w por um AF. O autômato é inicializado com a cabeça no símbolo mais a esquerda e no estado inicial qo. Se um AF M=(∑, Q, , qo, F) está no estado p e a cabeça de leitura da fita olha o símbolo a ∑, então o AF vai para o estado (p, a) = q e move a cabeça um símbolo à direita. Se w ∑* então M aceita w se M computa w e depois de ler o último símbolo de w entra em um estado final F.