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

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

  • Upload
    dothuan

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Linguagens e Programação

GramáticasPaulo Proença – [email protected]

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

Linguagens e Programação

GramáticasPaulo Proença – [email protected]