Top Banner
Linguagens e Programação Gramáticas Paulo Proença – [email protected]
33

Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

Feb 08, 2019

Download

Documents

dothuan
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

Linguagens e Programação

GramáticasPaulo Proença – [email protected]

Page 2: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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]

Page 3: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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]

Page 4: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 5: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 6: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 7: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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]

Page 8: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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}

Page 9: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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}

Page 10: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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 }

Page 11: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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}

Page 12: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 13: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 14: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 15: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 16: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 17: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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]

Page 18: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 19: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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.

Page 20: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 21: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 22: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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 |

Page 23: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 24: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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]

Page 25: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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]

Page 26: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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]

Page 27: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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();}

Page 28: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 29: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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 | ε

Page 30: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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

Page 31: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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]

Page 32: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

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 | ε

Page 33: Linguagens e Programação Gramáticasproenca/dump/LPROG/pptGramáticas.pdf · Representação formal LPROG 𝐺=(𝑉,Σ,𝑃,𝑆) V é um conjunto finito, não vazio, de símbolos

Linguagens e Programação

GramáticasPaulo Proença – [email protected]