Curso: Ciência da Computação
       Turma: 4º/5º Série


Aspectos Teóricos da Computação

            Aula 3

   Linguagens e Gramáticas
Linguagem
O Dicionário Aurélio define linguagem como:


o uso da palavra articulada ou escrita como meio
  de expressão e comunicação entre as pessoas.
Entretanto, esta definição não é suficientemente
 precisa para permitir o desenvolvimento
 matemático de uma teoria baseada em
 linguagens.
Precisamos de uma definição mais objetiva e
 ampla.
Uma linguagem é composta de de palavras que
 formam um alfabeto. da Computação
               Aspectos Teóricos                   2
Albabeto
Um alfabeto é um conjunto finito de símbolos ou
 caracteres.
Portanto:
  ●   Um conjunto infinito não é um alfabeto;
  ●   o conjunto vazio é um alfabeto.
Exemplo:
  {a,b,c} ou {} são alfabetos
  N não é um alfabeto
  {a,b,aa,ab,bb,ba,bb....} não é um alfabeto



                    Aspectos Teóricos da Computação   3
Alfabeto de uma Linguagem de
             Programação
O alfabeto de uma linguagem de programação
 como Pascal é o conjunto de todos os símbolos
 usados na construção de programas, incluindo
 letras, dígitos, caracteres especiais, espaço.




                Aspectos Teóricos da Computação   4
Palavra
Uma Palavra, Cadeia de Caracteres ou Sentença
 sobre um alfabeto é uma sequência finita de
 símbolos do alfabeto justapostos.
O símbolo ε denota a palavra ou cadeia vazia.




                Aspectos Teóricos da Computação   5
Prefixo, Sufixo e Subpalavra
Um Prefixo ou Sufixo de uma palavra é qualquer sequência inicial respectivamente final
  de símbolos da palavra.


Uma Subpalavra é qualquer sequência de símbolos contíguos da palavra.


Exemplos:
abcb é uma palavra do alfabeto {a,b,c}
Relativamente à palavra abcb, vale que:

    ε , a, ab, abc, abcb são todos os prefixos;
    ε, b, cb, bcb, abcb são todos os sufixo;
    Qualquer prefixo ou sufixo é uma subpalavra;




                              Aspectos Teóricos da Computação                            6
Palavra: Linguagem de Programação
Em uma linguagem de programação como
 Pascal, uma palavra é um programa.




              Aspectos Teóricos da Computação   7
Concatenação
A Concatenação de Palavras ou simplesmente Concatenação é uma operação
   binária definida sobre um conjunto de palavras, a qual associa a cada par
   de palavras uma palavra formada pela justaposição de primeira com a
   segunda.
Propriedades
   suponha v,w,t palavras quaisquer
   a) Associativa. v(wt) = (vw)t
   b) Elemento neutro. εw = wε
Exemplo: Suponha o alfabeto Σ = {a,b}. Então, para as palavras v =
  baaaa e w = bb vale que:
   vw = baaaabb
   vε = baaaa


Concatenação sucessiva de uma palavra..
Se w = a o que seria w5?
                           Aspectos Teóricos da Computação                 8
Concatenação Sucessiva
A Concatenação Sucessiva é representada na forma de um expoente,
wn onde n representa o número de concatenações sucessivas é definida
   indutivamente a partir da operação de concatenção binária, como segue:
w0 = ε
wn = wwn-1 n>0


Exemplo
   Seja w uma palavra e a um símbolo, Então:
   w3 = www
   w1 = w
   a5 = aaaaa
   an = aaaa..a (o símbolo repetido n vezes)



                          Aspectos Teóricos da Computação                   9
Alfabeto
Se Σ representa o alfabeto, então:
Σ* denota o conjunto de todas as palavras possíveis sobre
 Σ.
Σ+ denota Σ* - {ε }


Conjunto de todas as palavras.
Seja Σ um alfabeto. Então o conjunto de toda as palavras
  Σ* é indutivamente definido como segue:
a. Base da indução: ε є Σ* para qualquer x є ∑, vale x є ∑*
b. Passo da indução: Se u e v são palavras de ∑* então a
   concatenação uv é uma palavra de ∑*
                      Aspectos Teóricos da Computação         10
Exemplo: Conjunto de todas as palavras
●   Se ∑ = {a,b}, então:
    ●
        ∑+ = {a,b,aa,ab,ba,bb,aaa,...}
    ●   ∑* = {ε, a,b,aa,ab,ba,bb,aaa,...}




                       Aspectos Teóricos da Computação   11
Comprimento, tamanho de uma palavra
●   O comprimento ou Tamanho de uma palavra w,
    representado por |w|, é o número de símbolos
    que compõem a palavra. Portanto, para um
    dado alfabeto ∑ , comprimento é uma função
    com domínio em ∑* e codomínio em N.
    a. |abc| = 3
    b. | ε | = 0




                   Aspectos Teóricos da Computação   12
Linguagem Formal
Uma linguagem formal ou simplesmente
Linguagem L sobre um alfaberto ∑ é um
conjunto de palavras sobre ∑, ou seja:
L ⊆ ∑*




              Aspectos Teóricos da Computação   13
Exemplo de Linguagem Formal
●   O conjunto Ø e o conjunto formado pela palavra vazia { ε }
    são linguagens sobre qualquer alfabeto. Obviamente, vale
    que:
    Ø≠{ε}
●   Os conjuntos ∑* e ∑+ são linguagens sobre um alfabeto ∑
    qualquer. Obviamente, vale que:
    ∑* ≠ ∑+




                      Aspectos Teóricos da Computação        14
Exercício
●   Suponha o alfabeto ∑ = {a,b}. Então, o conjunto de
    palíndromos (palavras que tem a mesma leitura da
    esquerda para a direita e vice-versa) sobre ∑ é um
    exemplo de linguagem infinita. Quais são os elementos
    dessa linguagem?




                     Aspectos Teóricos da Computação        15
Exemplo de Linguagem Formal
●   Suponha o alfabeto ∑ = {a,b}. Então, o conjunto de
    palíndromos (palavras que tem a mesma leitura da
    esquerda para a direita e vice-versa) sobre ∑ é um
    exemplo de linguagem infinita. Assim, são palavras dessa
    linguagem:
      , a, b, aa, bb, aaa, aba, bab, bbb, aaa, ...




                        Aspectos Teóricos da Computação    16
Exemplo: Linguagem Formal: Linguagem de
                   Programação
●   Um linguagem de programação como C é
    formalmente definida pelo conjunto de todos os
    programas (palavras) da linguagem.




                  Aspectos Teóricos da Computação   17
Gramática
Como definir todos os programas de uma
determinada linguagem se torna inviável pois é
infinito criou-se uma nova maneira de especificar
linguagem de maneira finita, a gramática.


   Uma gramática é, basicamente, um conjunto
    finito de regras as quais, quando aplicadas
   sucessivamente, geram palavras. O conjunto
        de todas a palavras geradas por uma
           gramática define as linguagens.


                 Aspectos Teóricos da Computação    18
Gramática
Exemplo de Gramática:
                             S→A
                           A→0A1
                              A→ε
Uma gramática consiste de uma coleção de regras que
especificam como derivar strings de uma linguagem.
As regras de produção envolvem símbolos da linguagem
(ou terminais) e variáveis (ou símbolos não-terminais),
que representam conjuntos de strings.
Uma das variáveis é distinguida como símbolo inicial.


                   Aspectos Teóricos da Computação      19
Exemplo de Derivação de String
Seja G1 a seguinte gramática:
                                     S→A
                                   A → 0A1
                                      A →ε
Exemplo de derivação de string usando G1 :
           S ⇒ A ⇒ 0A1 ⇒ 00A11 ⇒ 000A111 ⇒ 000111
A sequência de substituições é chamada de derivação.
O conjunto de todos os strings de terminais gerados desta forma
constitui a linguagem especificada pela gramática.
Escrevemos L(G) para denotar a linguagem gerada pela gramática
G. Portanto, L(G1 ) = {0n1n | n ≥ 0 }

000111 é chamada de string terminal pois não tem como substituir mais
nenhuma variável nela.
                           Aspectos Teóricos da Computação              20
Gramática
Uma gramática de Chomsky, Gramática Irrestrita ou simplesmente
Gramática é uma quadrupla ordenada:
       G = {V, ∑,P,S} na qual:
a. V, um conjunto finito de símbolos variáveis ou não terminais;
b. ∑, um conjunto finito de símbolos terminais ou constantes disjunto de
V;
c. P: (V U ∑ )+ → (V U ∑ )* é uma relação finita (ou seja, P é um conjunto
finito de pares), denominada de Relação de Produções ou simplesmente
produções. Cada par da relação é denominado de regra de produção ou
simplesmente produção; P pode ser considerada a função que leva um
elemento x a um elemento y.
d. S, um elemento distinguido de V denominado símbolo inicial ou
variável inicial.




                           Aspectos Teóricos da Computação              21
Exemplo de Gramática
G = ({S, A}, {0, 1}, R, S) onde R:
                 S→A
               A → 0A1
                    A→ε




             Aspectos Teóricos da Computação   22
Exercício de Gramática
Formule uma outra gramática
baseada na gramática do exemplo
G = ({S, A}, {0, 1}, R, S) onde R:
                                      S→A
                                     A → 0A1
                                      A→ε
15 minutos em grupo




                           Aspectos Teóricos da Computação   23
Derivação
●   Se u, v , w ∈ (V ∪ ∑ )∗ (i.e., são strings de variáveis e
    terminais) e α → β ∈ R (i.e., é uma regra da gramática) então
    dizemos que uαv deriva uβv, escrito como uαv ⇒ uβv .
●   Podemos também dizer que uβv é derivado diretamente de uαv
    usando a regra α → β
●   u ⇒k v se existe uma sequência finita
    u0 , u1 , . . . , uk ∈ (V ∪ ∑ )∗ , para k > 0, tal que
    u = u 0 ⇒ u1 ⇒ . . . ⇒ u k = v
●   Também dizemos que u0 , u1 , . . . , uk é uma derivação de v a
    partir de u
●   Escrevemos u ⇒∗ v se u = v ou u ⇒k v para algum k > 0




                           Aspectos Teóricos da Computação           24
Linguagem Especificada por uma
              Gramática
Seja G = (V , Σ, R, S) uma gramática.
A linguagem especificada por G é
    L(G) = {w ∈ Σ∗ | S ⇒∗ w }




                  Aspectos Teóricos da Computação   25
Tipos de Regras




 Aspectos Teóricos da Computação   26
Tipos de Gramática – Hierarquia de
            Chomsky




           Aspectos Teóricos da Computação   27
Notação
Para distinguir não-terminais de terminais,
frequentemente usamos não-terminais entre < > e
terminais entre aspas ” ”.
Se duas ou mais regras têm o mesmo lado
esquerdo, por exemplo:
A → 0A1 e A →ε
podemos escrever, de forma mais compacta
A → 0A1 | ε.


Obs. Só use essa regra quando tudo estiver
muito claro na sua cabeça.
                 Aspectos Teóricos da Computação   28
Gramática Livre de Contexto G2
A gramática G2 a seguir especifica um fragmento da língua inglesa:
<SENTENCE> → <NOUN_PHRASE><VERB_PHRASE>
<NOUN_PHRASE> → <CP_NOUN> | <CP_NOUN><PREP_PHRASE>
<VERB_PHRASE> → <CP_VERB> | <CP_VERB><PREP_PHRASE>
<PREP_PHRASE> → <PREP><CP_NOUN>
<CP_NOUN> → <ARTICLE><NOUN>
<CP_VERB> → <VERB> | <VERB><NOUN_PHRASE>
<ARTICLE> → a | the
<NOUN> → boy | girl | flower
<VERB> → touches | likes | sees
<PREP> → with



                        Aspectos Teóricos da Computação              29
Gramática Livre de Contexto G2
Note que:
A CFG(Gramática livre de contexto) G2 tem 10 variáveis (escritas em
letras maiúsculas e entra < >) e 9 não-terminais (escritos no alfabeto
padrão), mais um caractere de espaço.
A CFG G2 tem 18 regras.
Exemplos de strings que pertencem a L(G2):
a boy sees
the boy sees a flower
a girl with a flower likes the boy




                           Aspectos Teóricos da Computação               30
Exemplo de Derivação em G2
<SENTENCE>   ⇒ <NOUN_PHRASE><VERB_PHRASE>
             ⇒ <CP_NOUN><VERB_PHRASE>
             ⇒ <ARTICLE><NOUN><VERB_PHRASE>
             ⇒ a <NOUN><VERB_PHRASE>
             ⇒ a boy <VERB_PHRASE>
             ⇒ a boy <CP_VERB>
             ⇒ a boy <VERB>
             ⇒ a boy sees




                   Aspectos Teóricos da Computação   31
Regras Lineares
Seja G = (V , Σ, R, S) uma CFG e A → w ∈ R,
onde A ∈ V .
  ●   r é linear se w ∈ Σ∗VΣ∗
  ●   r é linear à direita se w ∈ Σ∗V
  ●   r é linear à esquerda se w ∈ VΣ∗
  ●   r é terminal se w ∈ Σ∗




                     Aspectos Teóricos da Computação   32
Exemplo de Gramática Linear à Direita
 G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε }, A)




                 Aspectos Teóricos da Computação      33
Exemplo de Gramática Linear à Direita
    G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε}, A)


    Exemplo de derivação em G:
    A ⇒ 0A ⇒ 00A ⇒ 00B ⇒ 001B ⇒ 0011B ⇒
    00111B ⇒ 00111

●   Qual é a linguagem especificada por G?




                    Aspectos Teóricos da Computação     34
Exemplo de Gramática Linear à Direita
    G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε}, A)


    Exemplo de derivação em G:
    A ⇒ 0A ⇒ 00A ⇒ 00B ⇒ 001B ⇒ 0011B ⇒
    00111B ⇒ 00111

●   Qual é a linguagem especificada por G?
           L(G) = 0*1*




                         Aspectos Teóricos da Computação   35
Para a Próxima Aula
Ler capítulo 2 do livro texto.




                  Aspectos Teóricos da Computação   36

Aula 3 linguagens e gramaticas

  • 1.
    Curso: Ciência daComputação Turma: 4º/5º Série Aspectos Teóricos da Computação Aula 3 Linguagens e Gramáticas
  • 2.
    Linguagem O Dicionário Auréliodefine linguagem como: o uso da palavra articulada ou escrita como meio de expressão e comunicação entre as pessoas. Entretanto, esta definição não é suficientemente precisa para permitir o desenvolvimento matemático de uma teoria baseada em linguagens. Precisamos de uma definição mais objetiva e ampla. Uma linguagem é composta de de palavras que formam um alfabeto. da Computação Aspectos Teóricos 2
  • 3.
    Albabeto Um alfabeto éum conjunto finito de símbolos ou caracteres. Portanto: ● Um conjunto infinito não é um alfabeto; ● o conjunto vazio é um alfabeto. Exemplo: {a,b,c} ou {} são alfabetos N não é um alfabeto {a,b,aa,ab,bb,ba,bb....} não é um alfabeto Aspectos Teóricos da Computação 3
  • 4.
    Alfabeto de umaLinguagem de Programação O alfabeto de uma linguagem de programação como Pascal é o conjunto de todos os símbolos usados na construção de programas, incluindo letras, dígitos, caracteres especiais, espaço. Aspectos Teóricos da Computação 4
  • 5.
    Palavra Uma Palavra, Cadeiade Caracteres ou Sentença sobre um alfabeto é uma sequência finita de símbolos do alfabeto justapostos. O símbolo ε denota a palavra ou cadeia vazia. Aspectos Teóricos da Computação 5
  • 6.
    Prefixo, Sufixo eSubpalavra Um Prefixo ou Sufixo de uma palavra é qualquer sequência inicial respectivamente final de símbolos da palavra. Uma Subpalavra é qualquer sequência de símbolos contíguos da palavra. Exemplos: abcb é uma palavra do alfabeto {a,b,c} Relativamente à palavra abcb, vale que: ε , a, ab, abc, abcb são todos os prefixos; ε, b, cb, bcb, abcb são todos os sufixo; Qualquer prefixo ou sufixo é uma subpalavra; Aspectos Teóricos da Computação 6
  • 7.
    Palavra: Linguagem deProgramação Em uma linguagem de programação como Pascal, uma palavra é um programa. Aspectos Teóricos da Computação 7
  • 8.
    Concatenação A Concatenação dePalavras ou simplesmente Concatenação é uma operação binária definida sobre um conjunto de palavras, a qual associa a cada par de palavras uma palavra formada pela justaposição de primeira com a segunda. Propriedades suponha v,w,t palavras quaisquer a) Associativa. v(wt) = (vw)t b) Elemento neutro. εw = wε Exemplo: Suponha o alfabeto Σ = {a,b}. Então, para as palavras v = baaaa e w = bb vale que: vw = baaaabb vε = baaaa Concatenação sucessiva de uma palavra.. Se w = a o que seria w5? Aspectos Teóricos da Computação 8
  • 9.
    Concatenação Sucessiva A ConcatenaçãoSucessiva é representada na forma de um expoente, wn onde n representa o número de concatenações sucessivas é definida indutivamente a partir da operação de concatenção binária, como segue: w0 = ε wn = wwn-1 n>0 Exemplo Seja w uma palavra e a um símbolo, Então: w3 = www w1 = w a5 = aaaaa an = aaaa..a (o símbolo repetido n vezes) Aspectos Teóricos da Computação 9
  • 10.
    Alfabeto Se Σ representao alfabeto, então: Σ* denota o conjunto de todas as palavras possíveis sobre Σ. Σ+ denota Σ* - {ε } Conjunto de todas as palavras. Seja Σ um alfabeto. Então o conjunto de toda as palavras Σ* é indutivamente definido como segue: a. Base da indução: ε є Σ* para qualquer x є ∑, vale x є ∑* b. Passo da indução: Se u e v são palavras de ∑* então a concatenação uv é uma palavra de ∑* Aspectos Teóricos da Computação 10
  • 11.
    Exemplo: Conjunto detodas as palavras ● Se ∑ = {a,b}, então: ● ∑+ = {a,b,aa,ab,ba,bb,aaa,...} ● ∑* = {ε, a,b,aa,ab,ba,bb,aaa,...} Aspectos Teóricos da Computação 11
  • 12.
    Comprimento, tamanho deuma palavra ● O comprimento ou Tamanho de uma palavra w, representado por |w|, é o número de símbolos que compõem a palavra. Portanto, para um dado alfabeto ∑ , comprimento é uma função com domínio em ∑* e codomínio em N. a. |abc| = 3 b. | ε | = 0 Aspectos Teóricos da Computação 12
  • 13.
    Linguagem Formal Uma linguagemformal ou simplesmente Linguagem L sobre um alfaberto ∑ é um conjunto de palavras sobre ∑, ou seja: L ⊆ ∑* Aspectos Teóricos da Computação 13
  • 14.
    Exemplo de LinguagemFormal ● O conjunto Ø e o conjunto formado pela palavra vazia { ε } são linguagens sobre qualquer alfabeto. Obviamente, vale que: Ø≠{ε} ● Os conjuntos ∑* e ∑+ são linguagens sobre um alfabeto ∑ qualquer. Obviamente, vale que: ∑* ≠ ∑+ Aspectos Teóricos da Computação 14
  • 15.
    Exercício ● Suponha o alfabeto ∑ = {a,b}. Então, o conjunto de palíndromos (palavras que tem a mesma leitura da esquerda para a direita e vice-versa) sobre ∑ é um exemplo de linguagem infinita. Quais são os elementos dessa linguagem? Aspectos Teóricos da Computação 15
  • 16.
    Exemplo de LinguagemFormal ● Suponha o alfabeto ∑ = {a,b}. Então, o conjunto de palíndromos (palavras que tem a mesma leitura da esquerda para a direita e vice-versa) sobre ∑ é um exemplo de linguagem infinita. Assim, são palavras dessa linguagem: , a, b, aa, bb, aaa, aba, bab, bbb, aaa, ... Aspectos Teóricos da Computação 16
  • 17.
    Exemplo: Linguagem Formal:Linguagem de Programação ● Um linguagem de programação como C é formalmente definida pelo conjunto de todos os programas (palavras) da linguagem. Aspectos Teóricos da Computação 17
  • 18.
    Gramática Como definir todosos programas de uma determinada linguagem se torna inviável pois é infinito criou-se uma nova maneira de especificar linguagem de maneira finita, a gramática. Uma gramática é, basicamente, um conjunto finito de regras as quais, quando aplicadas sucessivamente, geram palavras. O conjunto de todas a palavras geradas por uma gramática define as linguagens. Aspectos Teóricos da Computação 18
  • 19.
    Gramática Exemplo de Gramática: S→A A→0A1 A→ε Uma gramática consiste de uma coleção de regras que especificam como derivar strings de uma linguagem. As regras de produção envolvem símbolos da linguagem (ou terminais) e variáveis (ou símbolos não-terminais), que representam conjuntos de strings. Uma das variáveis é distinguida como símbolo inicial. Aspectos Teóricos da Computação 19
  • 20.
    Exemplo de Derivaçãode String Seja G1 a seguinte gramática: S→A A → 0A1 A →ε Exemplo de derivação de string usando G1 : S ⇒ A ⇒ 0A1 ⇒ 00A11 ⇒ 000A111 ⇒ 000111 A sequência de substituições é chamada de derivação. O conjunto de todos os strings de terminais gerados desta forma constitui a linguagem especificada pela gramática. Escrevemos L(G) para denotar a linguagem gerada pela gramática G. Portanto, L(G1 ) = {0n1n | n ≥ 0 } 000111 é chamada de string terminal pois não tem como substituir mais nenhuma variável nela. Aspectos Teóricos da Computação 20
  • 21.
    Gramática Uma gramática deChomsky, Gramática Irrestrita ou simplesmente Gramática é uma quadrupla ordenada: G = {V, ∑,P,S} na qual: a. V, um conjunto finito de símbolos variáveis ou não terminais; b. ∑, um conjunto finito de símbolos terminais ou constantes disjunto de V; c. P: (V U ∑ )+ → (V U ∑ )* é uma relação finita (ou seja, P é um conjunto finito de pares), denominada de Relação de Produções ou simplesmente produções. Cada par da relação é denominado de regra de produção ou simplesmente produção; P pode ser considerada a função que leva um elemento x a um elemento y. d. S, um elemento distinguido de V denominado símbolo inicial ou variável inicial. Aspectos Teóricos da Computação 21
  • 22.
    Exemplo de Gramática G= ({S, A}, {0, 1}, R, S) onde R: S→A A → 0A1 A→ε Aspectos Teóricos da Computação 22
  • 23.
    Exercício de Gramática Formuleuma outra gramática baseada na gramática do exemplo G = ({S, A}, {0, 1}, R, S) onde R: S→A A → 0A1 A→ε 15 minutos em grupo Aspectos Teóricos da Computação 23
  • 24.
    Derivação ● Se u, v , w ∈ (V ∪ ∑ )∗ (i.e., são strings de variáveis e terminais) e α → β ∈ R (i.e., é uma regra da gramática) então dizemos que uαv deriva uβv, escrito como uαv ⇒ uβv . ● Podemos também dizer que uβv é derivado diretamente de uαv usando a regra α → β ● u ⇒k v se existe uma sequência finita u0 , u1 , . . . , uk ∈ (V ∪ ∑ )∗ , para k > 0, tal que u = u 0 ⇒ u1 ⇒ . . . ⇒ u k = v ● Também dizemos que u0 , u1 , . . . , uk é uma derivação de v a partir de u ● Escrevemos u ⇒∗ v se u = v ou u ⇒k v para algum k > 0 Aspectos Teóricos da Computação 24
  • 25.
    Linguagem Especificada poruma Gramática Seja G = (V , Σ, R, S) uma gramática. A linguagem especificada por G é L(G) = {w ∈ Σ∗ | S ⇒∗ w } Aspectos Teóricos da Computação 25
  • 26.
    Tipos de Regras Aspectos Teóricos da Computação 26
  • 27.
    Tipos de Gramática– Hierarquia de Chomsky Aspectos Teóricos da Computação 27
  • 28.
    Notação Para distinguir não-terminaisde terminais, frequentemente usamos não-terminais entre < > e terminais entre aspas ” ”. Se duas ou mais regras têm o mesmo lado esquerdo, por exemplo: A → 0A1 e A →ε podemos escrever, de forma mais compacta A → 0A1 | ε. Obs. Só use essa regra quando tudo estiver muito claro na sua cabeça. Aspectos Teóricos da Computação 28
  • 29.
    Gramática Livre deContexto G2 A gramática G2 a seguir especifica um fragmento da língua inglesa: <SENTENCE> → <NOUN_PHRASE><VERB_PHRASE> <NOUN_PHRASE> → <CP_NOUN> | <CP_NOUN><PREP_PHRASE> <VERB_PHRASE> → <CP_VERB> | <CP_VERB><PREP_PHRASE> <PREP_PHRASE> → <PREP><CP_NOUN> <CP_NOUN> → <ARTICLE><NOUN> <CP_VERB> → <VERB> | <VERB><NOUN_PHRASE> <ARTICLE> → a | the <NOUN> → boy | girl | flower <VERB> → touches | likes | sees <PREP> → with Aspectos Teóricos da Computação 29
  • 30.
    Gramática Livre deContexto G2 Note que: A CFG(Gramática livre de contexto) G2 tem 10 variáveis (escritas em letras maiúsculas e entra < >) e 9 não-terminais (escritos no alfabeto padrão), mais um caractere de espaço. A CFG G2 tem 18 regras. Exemplos de strings que pertencem a L(G2): a boy sees the boy sees a flower a girl with a flower likes the boy Aspectos Teóricos da Computação 30
  • 31.
    Exemplo de Derivaçãoem G2 <SENTENCE> ⇒ <NOUN_PHRASE><VERB_PHRASE> ⇒ <CP_NOUN><VERB_PHRASE> ⇒ <ARTICLE><NOUN><VERB_PHRASE> ⇒ a <NOUN><VERB_PHRASE> ⇒ a boy <VERB_PHRASE> ⇒ a boy <CP_VERB> ⇒ a boy <VERB> ⇒ a boy sees Aspectos Teóricos da Computação 31
  • 32.
    Regras Lineares Seja G= (V , Σ, R, S) uma CFG e A → w ∈ R, onde A ∈ V . ● r é linear se w ∈ Σ∗VΣ∗ ● r é linear à direita se w ∈ Σ∗V ● r é linear à esquerda se w ∈ VΣ∗ ● r é terminal se w ∈ Σ∗ Aspectos Teóricos da Computação 32
  • 33.
    Exemplo de GramáticaLinear à Direita G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε }, A) Aspectos Teóricos da Computação 33
  • 34.
    Exemplo de GramáticaLinear à Direita G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε}, A) Exemplo de derivação em G: A ⇒ 0A ⇒ 00A ⇒ 00B ⇒ 001B ⇒ 0011B ⇒ 00111B ⇒ 00111 ● Qual é a linguagem especificada por G? Aspectos Teóricos da Computação 34
  • 35.
    Exemplo de GramáticaLinear à Direita G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε}, A) Exemplo de derivação em G: A ⇒ 0A ⇒ 00A ⇒ 00B ⇒ 001B ⇒ 0011B ⇒ 00111B ⇒ 00111 ● Qual é a linguagem especificada por G? L(G) = 0*1* Aspectos Teóricos da Computação 35
  • 36.
    Para a PróximaAula Ler capítulo 2 do livro texto. Aspectos Teóricos da Computação 36