Linguagens Formais e Compiladores

Slides:



Advertisements
Apresentações semelhantes
Decidibilidade e Indecidibilidade
Advertisements

Linguagens Livre-de-contexto
TEORIA DA COMPUTAÇÃO Parte I  Introdução  Linguagens Regulares
FAPE - Curso de Ciência da Computação
FAPE - Curso de Ciência da Computação
Tópicos em Compiladores
gerador de código intermediário
Compiladores Claudio Benossi
Linguagem Fabrício Dias
Teoria da Computação MÁQUINA DE TURING (Continuação) Fabrício Dias
I - Noções dum compilador
Compiladores I Cristiano Damiani Vasconcellos
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
Prof. Yandre Maldonado e Gomes da Costa
Linguagens Formais e Autômatos
Prof. Yandre Maldonado e Gomes da Costa
TEORIA DA COMPUTAÇÃO Parte II  Linguagens Livres de Contexto
Teoria da Computação FIC– Ciência da Computação
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Análise Léxica (Parte 2)
3 AUTÓMATOS FINITOS.
Software Básico Silvio Fernandes
Ling. Formais e Autômatos Autômatos finitos
Linguagens Livres de Contexto
esquerda p/ direita,read only
Linguagens e Máquinas WILSON ROSA DE OLIVEIRA DEPARTAMENTO DE INFORMÁTICA UFPE
autômatos finitos com transições e
Identificando Linguagens Não Regulares
Linguagem de Prog. e Programas
Autômatos Finitos Determinísticos
Construção de Compiladores
Alfabetos, Palavras e Linguagens
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Compiladores, Aula Nº 5 João M. P. Cardoso
Gramáticas Livres de Contexto
Erick Vagner Cabral Igor Lucena Vitor Baptista
Informática Teórica Engenharia da Computação
Ling. Formais e Autômatos AFN-ε
Teoria da Computação Aula 1 Prof. Fabiano Sabha.
Expressões Regulares e Gramáticas
Inteligência Artificial
Analise sintática aula-07-analise-sintática.pdf.
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Teoria da.
Máquinas de Turing.
Análise Sintática Prof. Alexandre Monteiro
Linguagens Formais e Autômatos
LFA: Unidade 03 – Parte B Engenharia/Ciência da Computação
Faculdade Pernambucana - FAPE Setembro/2007
Prof. André Luis Roland Tancredo Engenheiro da Computação e Pesquisador em Desenvolvimento Tecnológico para Semicondutores pelo CNPq Especialista em Microeletrônica.
Linguagens Formais - aula 02
Computabilidade e Linguagens Formais
Computabilidade e Linguagens Formais
MÁQUINAS DE TURING Acadêmicos: Karen Juliani Tosta Tomaz RA – 47566
Engenharia/Ciência da Computação
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
Compiladores Análise Léxica
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.
Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE
UEZO - CURSO DE CIÊNCIA DA COMPUTAÇÃO Primeiro semestre de 2013_2.
Informática Teórica Engenharia da Computação
Transcrição da apresentação:

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

Conteúdo programático

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.

De acordo com a Hierarquia de Chomsky LR (tipo 3) LEF (tipo 0) LSC (tipo 1) LLC (tipo 2)

Tradução dos formalismos das linguagens regulares

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ômatos Autô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ômatos Autô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

Teoria dos Autômatos Autômatos Finitos Graficamente um AF pode ser representado por a b Controle Finito fita com a cadeia w de entrada Cabeça de leitura Início do processo de reconhecimento pelo estado inicial qo

Teoria dos Autômatos Autô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ômatos Autô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 (q0Q) F: conjunto de estados finais ou estados de aceitação (FQ)

Teoria dos Autômatos Autômatos Finitos Determinísticos Representação Gráfica:

Teoria dos Autômatos Autô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 : qo q1 1  1 qo q1

Teoria dos Autômatos Autô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ômatos Autô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ômatos Autô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.

Teoria dos Autômatos Autô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 :  1 qo q1 qo q1 1

Teoria dos Autômatos Autô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.

Teoria dos Autômatos Autômatos Finitos Determinísticos Seja a cadeia w = 01110. Deseja-se verificar se w é reconhecida pelo AFD do exemplo anterior. Como ao final da leitura da cadeia w o estado que o AFD assumiu foi q1  F então a cadeia w é reconhecida pelo autômato, ou seja, w é aceita como uma cadeia da linguagem reconhecida pelo AFD. 1 Controle Finito (q0, 0) = q0 Cabeça de leitura Início do AFD em q0 1 Controle Finito (q0, 1) = q1 Cabeça de leitura q0 1 Controle Finito (q1, 1) = q0 Cabeça de leitura q1 1 Controle Finito (q1, 0) = q1 Cabeça de leitura q1 1 Controle Finito (q0, 1) = q1 Cabeça de leitura q0 1 Controle Finito Cabeça de leitura q1  F

Teoria dos Autômatos Autômatos Finitos Determinísticos Exemplo 1: Construir um AFD que reconhece a linguagem a*. M = (∑, Q, , qo, F) Q = { qo }, ∑ = { a }, F = { q0 } Forma Tabular : Forma Gráfica :  a qo qo a

Teoria dos Autômatos Autômatos Finitos Determinísticos Exemplo 2: Construir um AFD que reconhece a linguagem aa* . M = (∑, Q, , qo, F) Q = { qo, q1 }, ∑ = { a }, F = { q1 } Forma Tabular : Forma Gráfica :  a qo q1 qo q1 a

Teoria dos Autômatos Autômatos Finitos Determinísticos Exemplo 3: Construir um AFD que reconhece a linguagem (abb*a)* . M = (∑, Q, , qo, F) Q = { qo, q1, q2 }, ∑ = { a, b }, F = { q0 } Forma Tabular : Forma Gráfica : Obs.: qrej é o estado que representa a rejeição de um símbolo de uma dada cadeia w, ou seja, w  Linguagem reconhecida pelo AFD. qo q1 a b q2  a b qo q1 qrej q2 q0

Exercícios Construa um autômato finito determinístico e uma expressão regular para cada umas da linguagens a seguir: A) A linguagem dos identificadores do pascal Ex. válidos: a, _, media, M23af, c311 Ex. inválidos: 2, 45media, 3csa B) Os números inteiros Ex. válidos: 1, -1, +1, +45, 77, -44, 4564894, -459456 Ex. inválidos: +, -, 55+5, 8989-4, --65, ++5 C) Os números reais Ex. válidos: 1, -1, +1, +45.05, 77.5, -44.5554, 4564.894, -459456 Ex. inválidos: +, -, 55+5, 8..989-4, --65, ++5, .56, +.45, .564, -+532

Teoria dos Autômatos Expressões Regulares A expressão regular é a maneira mais compacta e mais simples de descrever conjuntos regulares, e é usada com essa finalidade em construção de compiladores, editores, sistemas operacionais, protocolos, etc. É um formalismo denotacional, também considerado gerador.

Expressão Regular ER Toda linguagem regular pode ser descrita por uma expressão regular simples, denominada Expressão regular. Trata-se de um formalismo denotacional, também considerado gerador, pois pode-se inferir como construir (“gerar”) as palavras de uma linguagem.

Como saber se uma linguagem é regular Basta representá-la com pelo menos um dos seguintes formalismos {autômato finito | Expressão Regular | Gramática Regular} Para mostrar que uma linguagem não é regular é preciso mostrar que ele não poder ser representada por nenhum dos formalismos. Pode-se usar o Lema do bombeamento.

Expressão Regular ER A omissão de parênteses em uma ER sobre um alfabeto é indutivamente definida como se segue: Uma linguagem gerada por uma ER r é representada por L(r) ou GERA(r).

Expressões Regulares Definição: Uma Expressão Regular (ER) sobre um alfabeto  é definida como segue:  é uma ER (linguagem vazia)  é uma ER (linguagem contendo somente a cadeia vazia ) para cada a  , a é uma ER se  e  são ER´s, então | é uma ER. ( OU  – alternância) se  e  são ER´s, então  é uma ER. (concatenação) se  é uma ER, então ()* é uma ER (exponenciação)

Teoria dos Autômatos Expressões Regulares *:  |  |  |  |..... +:  |  |  |..... + = * ordem de precedência(decrescente): exponenciação concatenação alternância

Teoria dos Autômatos Expressões Regulares Expressão regular Linguagem representada aa Somente a palavra aa ba* Todas as palavras que começam com b, seguido por zero ou mais a´s (a|b)* Todas as palavras sobre {a, b} (a|b)* aa (a|b) * Todas as palavras que contém aa como subpalavra a* ba* ba* Todas as palavras contendo exatamente 2 b´s (a|b)* (aa| bb ) Todas as palavras que terminam com aa ou bb (a| ) (b | ba)* Todas as palavras que não possuem 2 a´s consecutivos

Exercício Desenvolva Autômatos Finitos Determinísticos, que reconheçam as seguintes linguagens: A) sobre o alfabeto {a, b, c} {w | aa ou bb é subpalavra e cccc é sufixo de w} 63

Exercícios b) Sobre o alfabeto {a, b} b1) {W1W2W1 | W2 é qualquer e |W1| = 3} b2) {W | o décimo símbolo da direita para a esquerda de w é a}

Autômato finito não determinístico O não determinismo é uma importante generalização dos modelos de máquinas, sendo e fundamental importância no estudo da teoria da computação e na teoria das linguagens formais.

Autômato finito não determinístico – AFN ou AFND Nem sempre a facilidade do não-determinísmo aumenta o poder de reconhecimento de linguagens de uma classe de autômatos

Importante Qualquer autômato finito não-determinístico pode ser simulado por um autômato finito determinístico. Assim, para cada AFN é possível construir um AFD equivalente que realiza o mesmo processamento.

A facilidade do não determinismo A função programa, ao processar uma entrada composta pelo estado corrente e símbolo lido, tem como resultado um conjunto de novos estados. O não-determinísmo. Ilustração: Filme “O Vidente”

Aceitação do AFN Um linguagem é aceita pelo autômato finito não determinístico é denotada por ACEITAM(M) ou L(M), é o conjunto de todas as palavras pertencentes a * tais que existe pelo menos um caminho alternativo que aceita a palavra.

Autômato finito com movimentos vazios AFNε Movimentos vazios constituem uma generalização dos modelos de máquinas não-determinísticas. Um movimento vazio é uma transição sem transição. Uma das vantagens dos momentos vazios é que facilita algumas demonstrações relacionadas com os autômatos. A facilidade dos momentos vazios não aumentam o poder de reconhecimento

Equivalência entre ER e AFD

Gramática linear Seja G=(V, T, P, S) uma gramática e sejam A e B elementos de V e w uma palavra de T*. Então G é uma: Gramática Linear à direita (GLD). Se todas as regras de produção são da forma: A→wB ou A→w Gramática Linear à esquerda (GLE). Se todas as regras de produção são da forma: A→Bw ou A→w

Gramática linear Gramática Linear Unitária à direita (GLUD). Se todas as regras de produção são da forma: A→wB ou A→w, adicionalmente |w|<=1 Gramática Linear à esquerda (GLUE). Se todas as regras de produção são da forma: A→Bw ou A→w, adicionalmente |w|<=1

Equivalência das gramáticas lineares As diversas gramáticas lineares são formalismos equivalentes: Seja L uma linguagem então: L é gerada por uma GLD se, e somente se, L é gerada por uma GLE se, e somente se, L é gerada por uma GLUD se, e somente se, L é gerada por uma GLUE.

Ex. de gramáticas lineares equivalentes para a linguagem a(ba)*

GLD para a linguagem a(ba)* G={{S,A}, {a,b}, P, S} P={S→aA, A→baA|e}

GLE para a linguagem a(ba)* G={{S}, {a,b}, P, S} P={S→Sba|a}

GLUD para a linguagem a(ba)* G={{S,A, B}, {a,b}, P, S} P={S→aA, A→bB|e, B→aA}

GLUE para a linguagem a(ba)* G={{S,A}, {a,b}, P, S} P={S→Aa|a, A→Sb}

Teorema 1 - Se L é uma Linguagem gerada por uma gramática regular, então L é uma linguagem regular 2 - Se L é uma linguagem regular, então existe uma gramática regular G que gera L.

Linguagens Livres de Contexto Segundo a classificação realizada por Chomsky nem todas as linguagens livres de contexto são regulares. Isto ocorre porque elas possuem cadeias com construções contendo “aninhamento sintático”.

Linguagens Livres de Contexto Possuem aninhamento Sintático. Exemplo: L = { w | w  conjunto de cadeias com número balanceado de parênteses escritos em ordem correta } x = (( )( ))( ), y = ((( ))), z = ( )(( )( ))(( ))

Linguagens Livres de Contexto Compreende um universo mais amplo de linguagens (comparativamente com as regulares) tratando, adequadamente, parênteses balanceados, construções bloco-estruturadas, dentre outras Os conceitos da LLC são aplicados aos analisadores sintáticos, tradutores de linguagens e processadores de texto em geral

Gramática Livre de contexto Gramática onde as regras de produção são definidas de forma mais livre que na Gramática Regular. São entidades geradoras de Linguagens Livres de Contexto

Autômato com pilha Autômato cuja estrutura básica é análoga à do Autômato Finito, adicionando uma memória auxiliar tipo pilha (a qual pode ser lida ou gravada) O autômato com pilha pode ser Determinístico ou não-Determinístico

De acordo com a Hierarquia de Chomsky LR (tipo 3) LEF (tipo 0) LSC (tipo 1) LLC (tipo 2)

Exemplos de linguagens livres de contexto a) L = { wwr, onde w é uma seqüência de símbolos do Vt, e wr é o inverso de w }, Ex.: Vt={ a, b}, x = abba, y = abbaaaabba, z = bbabbabb b) L = { wcwr, onde w é uma seqüência de símbolos de Vt, e c  Vt }, Ex.: Vt={ a, b, c}, x = abcba, y = abbaacaabba, z = bbabcbabb c) L = { anbn, n >= 0 }, Ex.: x = aabb, y = aaaaabbbbb, z =  d) L = { w  { a, b }*, com o mesmo no de a´s e b´s }, Ex.: x = abaabb, y = aabb, z = bbaaab

Problema aabbbacabbbaa Pensando nas cadeias geradas pelas Linguagens Livres de contexto não regulares parece que qualquer dispositivo que as reconheça, necessita “lembrar” de características da cadeia analisada. No exemplo do item b, supondo Vt = { a, b, c } e a cadeia de entrada aabbbacabbbaa deve existir um esquema para “lembrar” a primeira metade da cadeia de entrada (antes de c) para poder verificar a outra metade na ordem inversa.

Constatação: O Autômato Finito não possui este recurso !!! Análise: Se a máquina fosse capaz de acumular os símbolos da cadeia de entrada, utilizando uma MEMÓRIA auxiliar, à medida que a cadeia é lida e pudesse retirar estes símbolos da MEMÓRIA quando necessário o processo de reconhecimento seria resolvido. Solução: O dispositivo que soluciona parte deste problema é uma PILHA, funcionando como MEMÓRIA, que permite o acesso de leitura (pop) e gravação (push).

Graficamente um Autômato de Pilha pode ser representado por: fita com a cadeia w de entrada a a b b b a c a b b b a a b Cabeça de leitura e gravação b a Cabeça de leitura Controle Finito qi a Pilha Início do processo de reconhecimento pelo estado inicial qo

Autômato com pilha O Autômato de Pilha (AP) consegue ler, através da cabeça de leitura, os símbolos da fita seqüencialmente sempre da esquerda para a direita, armazenar (push) e retirar (pop) símbolos da Pilha.

Pilha do Autômato

O Autômato de Pilha (AP) é uma 7-upla: O Autômato de Pilha (AP) é uma sétupla: M = (E, Q, P, F, q0, z0, V) Onde: E é o alfabeto dos símbolos de entrada que podem formar a cadeia w є V* da fita Q é um conjunto finito (não vazio) de estados. P função programa ou função transição q0 é o estado no qual o autômato é iniciado, q0 є Q. F é o conjunto de estados finais (reconhecedores). z0 é o símbolo inicial da pilha. V é o alfabeto de símbolos finito da pilha.

{anbn | n>= 0}

{WWr | w pertence a {a, b}*}

{anbman+m | n >= 0, m>= 0}