Linguagens e Programação Gramáticas
Gramáticas Ferramenta para a descrição e análise de linguagens; Baseada num conjunto de regras que especificam o modo de construção das frases válidas na linguagem; Assente nos vários tokens que são reconhecidos pelo analisador léxico.
Representação formal G = (V, Σ, P, S) V é um conjunto finito, não vazio, de símbolos não terminais é o alfabeto (conjunto finito, não vazio, de símbolos terminais) P é o conjunto de produções (regras da gramática) S é o símbolo inicial a partir do qual todas as frases são derivadas (axioma da gramática)
Notação BNF BNF Backus Naur Form (Backus Normal Form) Criada por John Backus e Peter Naur para descrever a linguagem ALGOL Meta símbolos utilizados: ::= - representa definido como - indica uma alternativa <> - define uma regra <numero> ::= <algarismo> <algarismo><numero> <algarismo> ::= 0 1 2 3 4 5 6 7 8 9
Notação EBNF Estende a notação BNF com a inclusão dos seguintes símbolos: [] - indica uma parte opcional {} - indica algo que se pode repetir 0 ou mais vezes () - define precedência dentro da regra "" - define um carater que deve ser tratado como terminal. Por exemplo: "<" <identificador> ::= (<letra> _){(<letra> <algarismo> _)} <letra> ::= a A b B z Z <algarismo> ::= 0 1 2 3 4 5 6 7 8 9
Hierarquia de Chomsky Tipo 0 recursivamente enumeráveis Tipo 1 dependentes de contexto Tipo 2 independentes de contexto Tipo 3 regulares
Notações e Convenções Seja G=(V n,v t,p,s) V n vocabulário não terminal Letras maiúsculas do alfabeto {A,B,,Z} V t vocabulário terminal Letras minúsculas do alfabeto {a,b, z}, dígitos e símbolos. V n V t = P produções S V n axioma da gramática V = V n V t Letras gregas minúsculas {,,, } Cada produção tem a forma onde V+ e V*
Hierarquia de Chomsky Tipo 3 Gramáticas regulares As produções são da forma: Lineares à direita A a A ab A ou onde A,B V n e a V t São os tipos de gramática mais restritas em termos de poder de representação G=({S}, {a,b}, P, S) P: { S as S b } L(G)={a n b n 0} Lineares à esquerda A a A Ba A
Hierarquia de Chomsky Tipo 2 Gramáticas independentes de contexto As produções são da forma: A α onde A V n e V+ O lado esquerdo da regra possui apenas uma símbolo não terminal (uma variável) G=({S,A,B}, {a,b}, P, S) P: { S ab ba A a as baa B b bs abb } L(G)={palavras sobre {a,b} com o mesmo número de a's e de b's}
Hierarquia de Chomsky Tipo 1 Gramáticas dependentes de contexto Imposta a restrição de que nenhuma substituição reduz o comprimento da frase à qual a substituição é aplicada As produções são da forma: αaβ αγβ com αaβ αγβ onde α,β,γ V*, γ e A V n G=({A,B,C}, {a,b,c}, P, A) P: { A abc A abbc Bb bb Bc Cbcc bc Cb ac aab ac aa }
Hierarquia de Chomsky Tipo 0 Gramáticas livres ou sem restrições As produções são da forma: α β onde V+ e V* Não há restrições nas regras de produção. G=({S,A,B,C,D,E}, {a}, P, S) P: { S ACaB Ca aac CB DB CB E ad DA AD AC ae Ea AE } L(G)={a 2n n é um inteiro positivo}
Exercício Classifique a seguinte gramática segundo a hierarquia de Chomsky G = ({S,C,D,E}, {a,$,#}, P, S) P = {S $Ca# a Ca aac $D $C C# D# E ad Da ae Ea $E } Gramática Livre ou Recursivamente enumerável
Exercício Classifique a seguinte gramática segundo a hierarquia de Chomsky G = ({A,B,C}, {a,b,c}, P, A) P = {A abc abbc Bb bb Bc Cbcc bc Cb ac aab ac aa } Gramática Dependente de contexto
Exercício Classifique a seguinte gramática segundo a hierarquia de Chomsky G = ({S,A,B}, {a,b}, P, S) P = { S ab ba A a as baa B b bs abb } Gramática Independente de contexto
Exercício Classifique a seguinte gramática segundo a hierarquia de Chomsky G = ({S}, {a, +, *, (, )}, P, S) P = { } S S * S S S + S S (S) S a Gramática Independente de contexto
Exercício Classifique a seguinte gramática segundo a hierarquia de Chomsky G = ({S,A}, {a, b, c}, P, S) P = { S as ba A c } Gramática Regular à direita
Reconhecedores Tipo de gramática Tipo 0 livres Tipo 1 dependente de contexto Tipo 2 independente de contexto Tipo 3 regulares Reconhecedor Máquina de Turing Máquina de Turing com memória limitada Autómato de pilha Autómato finito
Exercícios Propostos 1. Considere a seguinte gramática S (L) a L L,S S a) Identifique os símbolos terminais e não terminais desta gramática Símbolos terminais: "a" "," "(" ")" Símbolos não terminais: b) Determine uma árvore de derivação desta gramática para (a,a) S S L ( L ) L S, S a a
Exercícios Propostos 1. Considere a seguinte gramática S (L) a L L,S S c) Crie um autómato finito equivalente a esta gramática Impossível. Só as gramáticas tipo 3 podem ser representadas por um AF. d) Caracterize formalmente a linguagem representada por esta gramática Qualquer regra da gramática é do tipo X onde X V n e V +. Isto é, qualquer ocorrência de X pode ser substituído por independentemente do contexto. Logo a gramática é Tipo 2 independente de contexto.
Exercícios Propostos 2. Escreva uma gramática capaz de reconhecer cada uma das seguintes linguagens a) Palavras no ={a,b} que terminam em b e começam em a b) Palavras no ={a,b,c,d} em que b é sempre precedido por um a c) Palavras no ={a,b,c,d} que são capicuas e têm um comprimento maior que 1 S atb T at bt ε S at T at bt b
Exercícios Propostos 2. Escreva uma gramática capaz de reconhecer cada uma das seguintes linguagens a) Palavras no ={a,b} que terminam em b e começam em a b) Palavras no ={a,b,c,d} em que b é sempre precedido por um a c) Palavras no ={a,b,c,d} que são capicuas e têm um comprimento maior que 1 S T TS T a ab c d S as cs ds ab a c d B bs b
Exercícios Propostos 2. Escreva uma gramática capaz de reconhecer cada uma das seguintes linguagens a) Palavras no ={a,b} que terminam em b e começam em a b) Palavras no ={a,b,c,d} em que b é sempre precedido por um a c) Palavras no ={a,b,c,d} que são capicuas e têm um comprimento maior que 1 S ata btb ctc dtd T a b c d S
Exercícios Propostos 3. Defina uma gramática capaz de representar uma quantia monetária nas moedas apresentadas na tabela seguinte Euro Moeda Exemplo e12,23; e1,00; e2,35; 23,50EUR Libra 12.50; 22.12; 22.99 Dólar $25.13; $5.00; $0.30 Escudo 12$50; 25$00; 150$00; 0$50 <MOEDA> <EURO> <LIBRA> <DOLAR> <ESCUDO> <EURO> e<valor>,<cent> <VALOR>,<CENT>EUR <LIBRA> <VALOR>.<CENT> <DOLAR> $<VALOR>.<CENT> <ESCUDO> <VALOR>$<CENT> <VALOR> <NUM> <NUM><VALOR> <CENT> <NUM><NUM> <NUM> 1 2 3 4 5 6 7 8 9 0
Exercícios Propostos 4. Considere uma gramática G=(V,,P,S): S TyBT T xt x B zb a) Defina formalmente a gramática G G=({S,T,B},{x,y,z},P,S) P: { S TyBT T xt x B zb } b) Classifique G, segundo a hierarquia de Chomsky. Justifique. Tipo 2 independente de contexto c) Represente a gramática recorrendo a um AF. Impossivel! Só as gramáticas regulares podem ser representadas com AF
Exercícios Propostos 7. Considere uma gramática G tal que: S as Sb ab SS a) Escreva uma expressão regular para reconhecer a linguagem definida pela gramática G, ou seja, L(G). a(a b)*b b) Escreva uma sequência de derivação para aaabb. <S> a<s> aa<s> aa<s>b aaabb c) Classifique a gramática G quanto à ambiguidade. Como vimos de b), <S> a<s> aa<s> aa<s>b aaabb Mas, <S> <S>b a<s>b aa<s>b aaabb Isto é, aaabb tem mais do que uma sequência de derivação. Logo a gramática G é uma GRAMÁTICA AMBIGUA
Exercícios Propostos 8. Crie um programa em FLEX, que identifique os tokens presentes em expressões lógicas válidas na seguinte gramática. E E or E E and E E xor E not E (E) ID INT REAL Nota: Um ID representa um identificador (uma letra seguida de letras ou algarismos), INT um número inteiro e REAL um número real. Os espaços, tabs e mudanças de linha devem ser ignorados. Qualquer outro carácter deve originar um erro.
Exercícios Propostos 8. %% (OR or) {printf(" OR ");} (AND and) {printf(" AND ");} (XOR xor) {printf(" XOR ");} (NOT not) {printf(" NOT ");} \( {printf(" ABREPAR ");} \) {printf(" FECHAPAR ");} [0-9]+\.[0-9]+ {printf(" REAL ");} [0-9]+ {printf(" INT ");} [a-za-z]([0-9] [a-za-z])* {printf(" ID ");} [ \t] \n. {printf(" ERRO ");} %% main() { yylex(); }
Exercícios Propostos 9. Considere a seguinte gramática: S if b then S else S S if b then S S a a) Mostre que a gramática em questão é ambígua (p.e. encontre uma frase que tenha duas árvores sintáticas) Frase: if b then if b then a else a Derivação 1: S if b then S else S if b then if b then S else S if b then if b then a else a Derivação 2: S if b then S if b then if b then S else S if b then if b then a else a b) Escreva uma gramática equivalente não ambígua S A B A if b then A else A a B if b then S if b then A else B
Exercícios Propostos 10.Converta o seguinte AF numa gramática. Considere ={a,e,i,o,u} S A B C D E aa es is os us aa eb is os us aa es ic os us aa es is od us aa es is os ue ae ee ie oe ue ε
Exercícios Complementares 1. Escreva uma gramática capaz de reconhecer cada uma das seguintes linguagens: i. Palavras em = {a,b,c,d} que começam e terminam em a; S ata a T at bt ct dt ε S at a T at bt ct dt a ii. Números romanos menores que 50. S U D DU D x xx xxx xl U i ii iii iv v vi vii viii ix
Exercícios Complementares 2. Considere uma calculadora básica capaz de processar as quatro operações algébricas fundamentais representadas pelos símbolos +,-, *, /, parêntesis e o '-' unitário. I. Escreva uma sintaxe para expressões algébricas válidas nesta calculadora; II. III. Escreva uma árvore de derivação para a expressão: 2 + 3 *4. A árvore de derivação que obteve é única? Que problema está aqui em causa? Explique. Adicione as operações: ^ e % à gramática.
Exercícios Complementares 4. Converta o seguinte AF numa gramática A ae bb ce de B ac bc C bd D ac be ce dc E ab ε
Linguagens e Programação Gramáticas