LPROG
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.
29 de março de 2016Paulo Proença – [email protected]
LPROG
Representação formal
𝐺 = (𝑉, Σ, 𝑃, 𝑆)
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)
29 de março de 2016Paulo Proença – [email protected]
LPROG
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
29 de março de 2016Paulo Proença – [email protected]
<numero> ::= <algarismo> | <algarismo><numero><algarismo> ::= 0|1|2|3|4|5|6|7|8|9
LPROG
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: "<"
29 de março de 2016Paulo Proença – [email protected]
<identificador> ::= (<letra>|_){(<letra>|<algarismo>|_)}<letra> ::= a|A|b|B|…|z|Z<algarismo> ::= 0|1|2|3|4|5|6|7|8|9
LPROG
Hierarquia de Chomsky
29 de março de 2016Paulo Proença – [email protected]
Tipo 0recursivamente
enumeráveis
Tipo 1dependentes de
contexto
Tipo 2 independentes de
contexto
Tipo 3regulares
LPROG
Notações e Convenções
Seja G=(Vn,Vt,P,S)
Vn – vocabulário não terminal
• Letras maiúsculas do alfabeto {A,B,…,Z}
Vt – vocabulário terminal
• Letras minúsculas do alfabeto {a,b,…z}, dígitos e símbolos.
Vn Vt =
P – produções
S Vn – axioma da gramática
V = Vn Vt• Letras gregas minúsculas {,,,…}
Cada produção tem a forma onde V+ e V*
29 de março de 2016Paulo Proença – [email protected]
LPROG
Hierarquia de Chomsky
Tipo 3 – Gramáticas regulares
As produções são da forma:
ou
onde A,BVn e aVt São os tipos de gramática mais restritas em termos
de poder de representação
29 de março de 2016Paulo Proença – [email protected]
Lineares à direita
A aA aBA
Lineares à esquerda
A aA BaA
G=({S}, {a,b}, P, S)P: {S aS
S b }
L(G)={anb | n0}
LPROG
Hierarquia de Chomsky
Tipo 2 – Gramáticas independentes de contexto
As produções são da forma:
A α onde AVn e V+
O lado esquerdo da regra possui apenas uma símbolo
não terminal (uma variável)
29 de março de 2016Paulo Proença – [email protected]
G=({S,A,B}, {a,b}, P, S)P: {S aB | bA
A a | aS | bAAB b | bS | aBB }
L(G)={palavras sobre {a,b} com o mesmo número de a's e de b's}
LPROG
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 Vn
29 de março de 2016Paulo Proença – [email protected]
G=({A,B,C}, {a,b,c}, P, A)P: {A abc
A aBbcBb bBBc CbccbC CbaC aaBaC aa }
LPROG
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.
29 de março de 2016Paulo Proença – [email protected]
G=({S,A,B,C,D,E}, {a}, P, S)P: {S ACaB
Ca aaCCB DBCB EaD DAAD ACaE EaAE }
L(G)={a2n | n é um inteiro positivo}
LPROG
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 }
29 de março de 2016Paulo Proença – [email protected]
Gramática Livre ou Recursivamente enumerável
LPROG
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 }
29 de março de 2016Paulo Proença – [email protected]
Gramática Dependente de contexto
LPROG
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
}
29 de março de 2016Paulo Proença – [email protected]
Gramática Independente de contexto
LPROG
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
}
29 de março de 2016Paulo Proença – [email protected]
Gramática Independente de contexto
LPROG
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
}
29 de março de 2016Paulo Proença – [email protected]
Gramática Regular à direita
LPROG
Reconhecedores
Tipo de gramática Reconhecedor
Tipo 0 – livres Máquina de Turing
Tipo 1 – dependente de contextoMáquina de Turing com memória limitada
Tipo 2 – independente de contexto Autómato de pilha
Tipo 3 – regulares Autómato finito
29 de março de 2016Paulo Proença – [email protected]
LPROG
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
b) Determine uma árvore de derivação desta gramática para (a,a)
29 de março de 2016Paulo Proença – [email protected]
Símbolos terminais: "a" "," "(" ")"
Símbolos não terminais: S L
S
L( )
,L S
S
a
a
LPROG
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
d) Caracterize formalmente a linguagem representada por esta
gramática
29 de março de 2016Paulo Proença – [email protected]
Qualquer regra da gramática é do tipo X onde XVn 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.
Impossível.
Só as gramáticas tipo 3 podem ser representadas por um AF.
LPROG
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
29 de março de 2016Paulo Proença – [email protected]
S aTb S aTT aT | bT | ε T aT | bT | b
LPROG
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
29 de março de 2016Paulo Proença – [email protected]
S T | TST a | ab | c | d
S aS | cS | dS | aB | a | c | dB bS | b
LPROG
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
29 de março de 2016Paulo Proença – [email protected]
S aTa | bTb | cTc | dTdT a | b | c | d | S |
LPROG
Exercícios Propostos
3. Defina uma gramática capaz de representar uma quantia monetária nas moedas apresentadas na tabela seguinte
29 de março de 2016Paulo Proença – [email protected]
Moeda Exemplo
Euro 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
LPROG
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: { STyBT
TxT|x
BzB| }
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 AF29 de março de 2016Paulo Proença – [email protected]
LPROG
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
29 de março de 2016Paulo Proença – [email protected]
LPROG
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.
29 de março de 2016Paulo Proença – [email protected]
LPROG
Exercícios Propostos
8.
29 de março de 2016Paulo Proença – [email protected]
%%(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();}
LPROG
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)
b) Escreva uma gramática equivalente não ambígua
29 de março de 2016Paulo Proença – [email protected]
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
S A | BA if b then A else A | aB if b then S | if b then A else B
LPROG
Exercícios Propostos
10.Converta o seguinte AF numa gramática. Considere ={a,e,i,o,u}
29 de março de 2016Paulo Proença – [email protected]
S aA | eS | iS | oS | uSA aA | eB | iS | oS | uSB aA | eS | iC | oS | uSC aA | eS | iS | oD | uSD aA | eS | iS | oS | uEE aE | eE | iE | oE | uE | ε
LPROG
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;
ii. Números romanos menores que 50.
29 de março de 2016Paulo Proença – [email protected]
S aTa | a
T aT | bT | cT | dT | ε
S aT | a
T aT | bT | cT | dT | a
S U | D | DUD x | xx | xxx | xlU i | ii | iii | iv | v | vi | vii | viii | ix
LPROG
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. 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.
III. Adicione as operações: ^ e % à gramática.
29 de março de 2016Paulo Proença – [email protected]
LPROG
Exercícios Complementares
4. Converta o seguinte AF numa gramática
29 de março de 2016Paulo Proença – [email protected]
A aE | bB | cE | dEB aC | bCC bDD aC | bE | cE | dCE aB | ε