linguagens livre de contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

29
Linguagens Livre de Contexto <stmt>::=<if-stmt>|<while-stmt>| <begin-stmt>|<assg-stmt> <if-stmt>::=if <bool-expr> then <stmt> else <stmt> <while-stmt>::= while <bool-expr> do <stmt> <begin-stmt>::= begin <stmt-list> end <stmt-list>::=<stmt>;<stmt-list>|<stmt> <assg_stmt>::=<var> :=<arith-expr>

Upload: internet

Post on 17-Apr-2015

119 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Linguagens Livre de Contexto

<stmt>::=<if-stmt>|<while-stmt>| <begin-stmt>|<assg-stmt><if-stmt>::=if <bool-expr> then <stmt> else <stmt><while-stmt>::=while <bool-expr> do <stmt><begin-stmt>::=begin <stmt-list> end<stmt-list>::=<stmt>;<stmt-list>|<stmt><assg_stmt>::=<var>:=<arith-expr>

Page 2: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

<bool-expr>::=<arith-expr><comp-op><arith-expr><comp.-op>::=<|>|≤|≥|≠|=|<arith-expr>::=<var>|<const>|(<arith-expr><arith-op><arith-expr>)<arith-op>::=+ | - | *| /<const>::=0|1|2|3|4|5|6|7|8|9<var>::=a|b|c|…|x|y|zBNF (Backus-Naur form)dando a

definição formal de uma linguagem de “programação”.

Page 3: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Mais Exemplos

• L = {anbn|n0} é livre de contexto. • Se em L substituirmos ‘a’ por ‘(‘ e ‘b’

por ‘)’, cadeias de parênte-ses tais como ( ( ) ) e ( ( ( ) ) ) estarão em L.

• L descreve uma estrutura aninhada comum em linguagens de progra-mação.

Page 4: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Gramáticas Livre De Contexto

•As produções numa gramática regu-lar são restritas de duas formas:

– o lado esquerdo deve conter uma única variável,

– enquanto o lado direito tem uma forma especial.

•Para criar uma gramática “mais poderosa”, devemos relaxar algumas dessas condições .

Page 5: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

• Mantemos a restrição sobre o lado esquerdo, mas permitimos qualquer coisa no lado direito.

Definição: Uma gramática G=<V,T,S,P> é livre de contexto se todas as produções em P tem a forma Ax, onde AV e x(VT)*.

Page 6: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

•A linguagem L é livre de contexto sss existe uma gramática livre de contexto G tal que L = L(G).

Obs: Toda linguagem regular é livre de contexto.

Page 7: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Exemplos

• G=<{S},{a,b},S,P>, com produ-ções SaSa; SbSb, S

• Uma derivação típica nessa gramática é SaSaaaSaaaabSbaaaaabbaa

• Isto torna claro que L(G)={WWR|W{a, b}*}

Page 8: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Mais Exemplos

• A gramática G=<{S, A, B}, {a, b}, S, P>,

onde P é

SabB; AaaBb; BbbAa; A• L(G)={ab (bbaa)n bba (ba)n |n0}

Page 9: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Derivação Mais à Esquerda e Mais à Direita

G=<{A,B,S},{a,b},S,P> com produções:

1. SAB; 2. AaaA;

3. A;

4. BBb;

5. B.

L(G)={a2nbm|n0, m0}

S1AB2aaAB3aaB4aaBb5aab

S1AB4ABb2aaABb5aaAb3aab

Page 10: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Definição:• Uma derivação diz-se mais à

esquerda se em cada etapa a variável mais a esquerda é trocada na forma sentencial.

• Se em cada etapa a variável mais a direita é trocada, dizemos que a derivação é mais à direita.

Page 11: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Exemplos

Considere a gramática com produ-ções SaAB, AbBb, BA|

• uma derivação mais à esquerda da cadeia abbbb:

SaABabBbBabAbBabbBbbBabbbBabbbb

• uma derivação mais à direita:SaABaAabBbabAbabbBbbabb

bb.

Page 12: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

•Mostra derivações independente da ordem em que as produções são usadas.•Uma árvore de derivação é uma árvore ordenada onde:

– os nodos são rotulados com os lados esquerdos das produções e

– o filho de cada nodo representa seus correspondentes lados direitos.

Árvores de Derivação

Page 13: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Exemplo

Aa b A B c

A

a b A B c

Page 14: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Definição

Seja G=<V, T, S, P> uma gramática livre de contexto. Uma árvore ordenada é uma árvore de derivação para G se e somente se ela tem as seguintes propriedades:

1. A raiz tem rótulo S

2. Toda folha tem rótulo de T{}

3. Todo vértice interior tem um rótulo de V.

Page 15: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

4. Se um vértice tem rótulo A V, e seus filhos são rotulados(da es-querda para direita) a1, a2, …,an, então P deve conter uma produção da forma Aa1a2…an

5. Uma folha rotulada o seu pai não tem nenhum filho além dàquele rótulado .

Page 16: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

árvore de derivação parcial:• Uma árvore que tem as proprieda-des

3, 4 e 5 mas não necessaria-mente 1 e

• a propriedade 2 é trocada por:

2a.Toda folha tem rótulo em VT{}

Page 17: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

cadeia gerada

A cadeia de símbolos obtida lendo-se, da esquerda para à direita, omitindo qualquer encontrado, diz-se gerada pela árvore.

Exemplo: Considere a gramática G, com produções

SaAB AbBb BA |

Page 18: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Exemplo (a)

• A árvore (a) é uma ár-vore de derivação par-cial para G.

• A cadeia abBbB, gera-da pela árvore, é uma forma sentencial de G.

S

a BA

b B b

a)(

Page 19: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Exemplo (b)

• a árvore (b) é uma árvore de derivação. • A cadeia gerada, abbbb é uma sentença de

L(G).

S

a A

b B b

B

A

b B b

(b)

Page 20: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Relação entre Formas Sentenciais e Árvores de

Derivações•Árvores de derivação dão uma des-crição explícita e compreensível de derivações. •Assim como grafo de transições para autômatos finitos, elas são úteis nos argumentos.

Page 21: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Teorema

Seja G=<V, T,S, P> uma gramática livre de contexto.

Então pra todo wL(G) existe uma árvore de derivação G cuja cadeia gerada é w.

Inversamente a cadeia gerada por qual-quer árvore de derivação está em G.

Além disso, se tG é qualquer árvore de derivação parcial para G cuja raiz é rotulada S, então tG gera uma forma sentencial de G.

Page 22: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Prova

• Primeiramente, mostraremos que para toda forma sentencial de G existe uma árvore de derivação parcial.

• Faremos isso por indução no número de etapas da derivação.

Page 23: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Prova (cont.): base

Como base, observemos que a afir-mação é verdadeira pra toda forma sentencial derivada em uma etapa. Como Su implica que existe uma produção Su, isto segue imediata-mente da definição da árvore de derivação.

Page 24: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Prova(cont.): passo

Suponhamos que para toda forma sentencial derivável em n etapas, existem uma árvore de derivação parcial correspondente.

Page 25: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

Prova(cont.): passo

Agora qualquer w derivável em n+1 etapas deve ser tal que

S*x A y, x, y (V U T)*, A V em n etapas, e

x A yx a1, a2…amy = w,

ai VT.

Page 26: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

• mas por hipótese de indução existe uma árvore de derivação parcial que gera x A y.

• como G deve ter produção Aa1a2…am, expandindo as folhas rotuladas A, obtemos uma árvore de derivação parcial que gera w.

• Logo, por indução, o resultado é verdadeiro para toda forma senten-cial.

Page 27: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

• Usando um argumento análogo, podemos mostrar que toda árvore de derivação parcial representa alguma forma sentencial.

• Uma árvore de derivação é uma árvore de derivação parcial cujas folhas são terminais.

• Logo toda sentença em L(G) é gerada por alguma árvore de deri-vação de G e toda árvore de derivação gerada está em L(G).

q.e.d

Page 28: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

•Árvores de derivação mostram quais produções são usadas para se obter uma sentença, mas não dá a ordem de suas aplicações.•Árvores de derivações são capazes de representar qualquer derivação, refletindo o fato de que esta ordem é irrelevante, uma observação que nos permite fechar o buraco na discussão anterior.

Page 29: Linguagens Livre de Contexto ::= | | | ::=if then else ::=while do ::=begin end ::= ; | ::= :=

• Por definição, qualquer wL(G) tem uma derivação mais a esquerda e uma mais a direita.

• dada uma árvore de derivação, po-demos sempre obter uma derivação mais a esquerda pensando na árvore como tendo sido construída de tal modo que a variável mais a esquerda foi sempre expandida primeiro.

• Todo w L(G) tem pelo menosuma derivação mais a esquerda e uma mais a direita.