SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
Linguagens, sintaxe e semântica


LNCC                     UFRJ
Linguagens naturais e formais
Linguagens naturais
Linguagem formal

      Um conjunto finito e não-vazio 
       cujos elementos são símbolos

Qualquer cadeia finita de símbolos
 justapostos – inclusive a vazia, 

               Coleção de todas as strings
                construídas a partir de 


            Qualquer subconjunto L de *
Em princípio não existem regras
    para construir uma linguagem.
 Entretanto, ao criar uma linguagem,
    estamos cheios de segundas
intenções – e assim precisaremos de
        regras para atingi-las!



        Para  = { 0, 1 }, temos
    = { , 0, 1, 00, 01, 10, 11, 000,
                 001, ... }.
   A partir daí poderemos construir
    diversas linguagens, que serão
   muito úteis, conforme veremos.
Atenção!
Um símbolo é
                          Termos
uma entidade
                         técnicos
  atômica

                Uma string é
               só uma cadeia
                de símbolos
                               Uma linguagem
                               formal é só um
                                 conjunto de
                                   strings
Exemplo
  Coleção de símbolos para
     descrever jogos de
          baralho




{ ,,,, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, [, ] }
Exemplo – continuação

           Strings
                     , , 8, 9, A, 2, A23,
                     , 55555, JQKA,
                     4, 7, A, 7,
                     10JQKA, [A,K], etc

{ A, 2, ... , 7, J, Q, K,
  A, 2, ... , 7, J, Q, K,
  A, 2, ... , 7, J, Q, K,
  A, 2, ... , 7, J, Q, K,        Uma
[A,A,2], ... , [7, Q,5 ],     linguagem
               etc }
Envolve a atribuição de
 um significado a cada
string de uma linguagem
Gramática
Gramática


Uma forma de definir uma
   linguagem formal L
 a partir de um alfabeto 
Gramática
Componentes
  de uma
 gramática               N – um conjunto de
                       símbolos não-terminais

              T – um conjunto de      N T  
              símbolos terminais

                    S – um símbolo especial: o
                        símbolo de partida

                P – um conjunto de produções
Os não-terminais ...
                             As classes
                            gramaticais
                                     Em inglês,
           O conjunto N dos           tokens
        símbolos não-terminais
Os lexemas da          Os terminais ...
  linguagem

       O conjunto T dos
      símbolos terminais




                        Apesar dos não-terminais
                       serem usados na construção,
                          eles não aparecem na
                            sentença acabada
As produções ...
                           As regras
                          gramaticais

       O conjunto P das
          produções
Uma derivação ...
Produções

                                         naipe?
carta: um valor seguido de um naipe
mão : um conjunto de 3 cartas (p/ex.)
                                         valor?


                                    , 3A, 17, [J, K, A]
, 2, 7, A,   [3, J, K]
                                             Strings não
              São strings                 admissíveis em
           admissíveis em                 linguagens para
           linguagens para               jogos de baralho
          jogos de baralho
As wff’s




Assim, a linguagem formal
  é o conjunto de todas
      as suas wff ’s      Apenas um nome
                            mais enfático
                           para as strings
                             produzidas
Alfabeto de uma linguagem
                                             Exemplo
  para descrever datas no
        calendário



     { /, jan, fev, ..., dez, 0, 1 2, 3, 4, 5, 6, 7, 8, 9 }
Produções
 data: o dia, seguido do mês, seguido do ano;
              separados pela barra


                                                Dia? Mês? Ano?
6/jan/2009, 1/abr/1998, 14/jul/1872


   Datas são wff’s (strings     46/jan/2009, abr/1/1998
      admissíveis) no
   calendário gregoriano               Não são wff’s
Metalinguagem -BNF
Metalinguagem

  Linguagem auxiliar utilizada
para descrever mais claramente
      a linguagem formal


           {   }    ,
Metalinguagem


                        Pode ser uma
                     linguagem natural
                     como o português
                     ou inglês, ou outra
                     linguagem formal


O formalismo de Backus-Naur (BNF)
John Warner Backus




  • O “pai” do FORTRAN;
  • Participou decisivamente
    na criação do ALGOL.
Peter Naur




Criador do ALGOL, junto com
       Backus e outros
O formalismo de Backus-Naur

 J. W. Backus desenvolveu, especificamente para a ALGOL 58, um
método para descrever linguagens de programação, que veio a ser
           conhecido como a forma normal de Backus.




           Tal método foi revisado e expandido por Peter Naur para a
            ALGOL 60; por sugestão de Donald Knuth, foi renomeado
                    como a forma normal de Backus-Naur
Noam Chomsky




               Filadelfia, 07/12/1928
                  Professor do MIT
Exemplo

                                      Símbolo
                                      terminal


 dígito   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

                                 Separador de
   Nome do                        alternativas
identificador da
     classe
Exemplo – produção

   dígito   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

 natural    dígito  |  dígito   natural 




                                               Observe que a
                                           definição de natural é
                                                  recursiva
Regras de produção
       Os elementos são escolhidos
              de uma lista;
          a ordem não importa

 dígito   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9


                natural    dígito  |  dígito   natural 


                                            Os elementos são escritos
                                                sequencialmente
                                            da esquerda para a direita
A EBNF e os diagramas de caminho
EBNF


O EBNF não é mais poderoso que o BNF;
 apenas é mais facilitador – mais prático.
Nele são incluídas notações para repetição
       e para elementos opcionais


       No EBNF os símbolos terminais são
             escritos entre aspas “ ”
   e os não-terminais diretamente, sem os  
A EBNF

           Um elemento opcional é escrito
                 entre colchetes [ a ];
     O elemento a pode ser incluído ou descartado



          A repetição de um ou mais elementos
           é descrita pela utilização de chaves:
•   ( a )+ indica a repetição do a pelo menos uma vez;
•   ( a )* indica a repetição do a zero ou mais vezes.
Exemplo
    dígito  “0” | “1” | ... | “9”

    inteiro  [ “ - ” | “ + ” ] dígito ( dígito )*


São produções de inteiro:
  -1, +21, 9, 12047, etc




                   inteiro  [ “ - ” | “ + ” ] ( dígito )+
Apesar da notação usada ser praticamente a mesma, há uma grande
diferença entre o significado de definições léxicas e sintáticas: uma definição
  léxica opera sobre os caracteres individuais do fluxo de entrada, ao passo
  que uma definição sintática opera no fluxo de tokens gerado pela análise
 léxica. Todas as utilizações da BNF no próximo capítulo, Análise léxica, são
 definições léxicas; já nos capítulos subsequentes são definições sintáticas.
EBNF e diagramas sintáticos


                        Representação gráfica
Representação gráfica

                                   A
       A      B

EBNF                    EBNF
     AB                      [A]
Significado
                        Significado
  A seguido de B             A ou nada
EBNF
                        e diagramas
Representação gráfica    sintáticos
              A

              B

EBNF

     A|B

Significado

     ou A ou B
EBNF e diagramas sintáticos


Representação gráfica       Representação gráfica


              A
                                          A

EBNF                        EBNF
     ( A )*                      ( A )+
Significado                 Significado

Sequência de zero            Sequência de um
  ou mais A ’s                 ou mais A ’s
EBNF e diagramas sintáticos

                            Representação gráfica

Representação gráfica
                                        a

              a                         b


EBNF
     a                                  z

Significado

         Símbolo            EBNF

         terminal               a | b | ... | z
Exemplo                      Um número binário pode ser
                              constituído por apenas um
                               bit, como 0 ou 1, ou por
                                   vários, como 110.
             0
   bit                             Para gerar 110:
             1                     • Você sai de número binário no
                                     diagrama, passa por bit e
                                     escolhe 0.
                 +                 • Volta, passa novamente por bit
   sinal                             e escolhe 1.
                 -                 • Torna a voltar, passa por bit
                                     mais uma vez e escolhe 1.


                     sinal
   número
                                  bit
   binário

                                           Diagrama sintático
Python, EBNF e
diagramas de sintaxe

Mais adiante no curso, teremos a oportunidade
 de trabalhar com a EBNF para definição da
        sintaxe da Linguagem Python.

Todo o manual de referência da linguagem, em
       The Python Language Reference
  é construído utilizando a EBNF; confira em
        Python v2.6.5 documentation
     A seguir exibiremos alguns exemplos.
A definição de nome em Python

letra_min   a

            b
                       nome ::= letra_min ( letra_min | “_” )*
                       letra_min ::= “a”...”z”
            z




                nome   letra_min

                                       letra_min

                                          _
O comando print




                             expr   ,          ,
                    expr
cmd_print   print
                    >>     expr
                                        ,   expr
                                                   ,
O comando print


 O comando print avalia uma expressão por vez e escreve o objeto resultante
     na saída padrão (veja a seguir). Se um objeto não é uma string ele é
  convertido antes numa string, usando as regras para conversão de strings.
                Então ela é escrita (a resultante ou a original).

  É colocado (escrito) um espaço antes que cada objeto seja (convertido e)
escrito, a menos que o sistema de saída acredite que foi posicionado no início
                               de uma linha.

Este é o caso quando:
1. ainda foi escrito nenhum caractere na saída padrão
2. o último caractere escrito na saída padrão é ‘ n’ , ou
3. a última operação de escrita na saída padrão não foi um comando print.
   (Por essa razão, em alguns casos pode ser funcional escrever uma string
   vazia para a saída).
O comando if




cmd_if     if    expr    :    seq


          elif   expr    :    seq


          else    :     seq
O comando if



       O comando if é usado para execução condicional.

   Ele seleciona exatamente uma das sequências avaliando as
expressões uma a uma até achar uma que seja verdadeira (true –
 veja a seção Operações booleanas para as definições de true e
false); então essa sequência é executada (e nenhuma outra parte
do comando if é executado ou avaliado). Se todas as expressões
  são falsas, é executada a sequência associada à clausula else
                      (caso esteja presente).

Contenu connexe

Tendances

MC - Aula 05 - Memória e Dispositivos de Armazenamento
MC - Aula 05 - Memória e Dispositivos de ArmazenamentoMC - Aula 05 - Memória e Dispositivos de Armazenamento
MC - Aula 05 - Memória e Dispositivos de ArmazenamentoFelipe J. R. Vieira
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Aula 1 - Técnica de Redação de Documentos
Aula 1 - Técnica de Redação de DocumentosAula 1 - Técnica de Redação de Documentos
Aula 1 - Técnica de Redação de DocumentosHebert De Paula Santana
 
Instalações ited domótica - projeto integrado de comunicações
Instalações ited   domótica - projeto integrado de comunicaçõesInstalações ited   domótica - projeto integrado de comunicações
Instalações ited domótica - projeto integrado de comunicaçõesFrancisco Costa
 
Introdução à semântica
Introdução à semânticaIntrodução à semântica
Introdução à semânticaValeria Nunes
 
Análise Orientada a Objetos - Objetos E Classes
Análise Orientada a Objetos  -   Objetos E ClassesAnálise Orientada a Objetos  -   Objetos E Classes
Análise Orientada a Objetos - Objetos E ClassesCursoSENAC
 
Plano de aula 2016
Plano de aula 2016Plano de aula 2016
Plano de aula 2016Karlla Costa
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Linguagem Prolog - Antonio Rufino
Linguagem Prolog - Antonio RufinoLinguagem Prolog - Antonio Rufino
Linguagem Prolog - Antonio RufinoAntonio Rufino
 
Variação linguistica aulão
Variação linguistica   aulãoVariação linguistica   aulão
Variação linguistica aulãoeeepadrianonobre
 

Tendances (20)

MC - Aula 05 - Memória e Dispositivos de Armazenamento
MC - Aula 05 - Memória e Dispositivos de ArmazenamentoMC - Aula 05 - Memória e Dispositivos de Armazenamento
MC - Aula 05 - Memória e Dispositivos de Armazenamento
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Numeral
NumeralNumeral
Numeral
 
Aula 1 - Técnica de Redação de Documentos
Aula 1 - Técnica de Redação de DocumentosAula 1 - Técnica de Redação de Documentos
Aula 1 - Técnica de Redação de Documentos
 
clean code
clean codeclean code
clean code
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Instalações ited domótica - projeto integrado de comunicações
Instalações ited   domótica - projeto integrado de comunicaçõesInstalações ited   domótica - projeto integrado de comunicações
Instalações ited domótica - projeto integrado de comunicações
 
Qualidade de Software
Qualidade de SoftwareQualidade de Software
Qualidade de Software
 
Mito 7 - Marcos Bagno
Mito 7 - Marcos BagnoMito 7 - Marcos Bagno
Mito 7 - Marcos Bagno
 
Introdução à semântica
Introdução à semânticaIntrodução à semântica
Introdução à semântica
 
Inglês Técnico Instrumental: Aula 1
Inglês Técnico Instrumental: Aula 1Inglês Técnico Instrumental: Aula 1
Inglês Técnico Instrumental: Aula 1
 
Análise Orientada a Objetos - Objetos E Classes
Análise Orientada a Objetos  -   Objetos E ClassesAnálise Orientada a Objetos  -   Objetos E Classes
Análise Orientada a Objetos - Objetos E Classes
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Plano de aula 2016
Plano de aula 2016Plano de aula 2016
Plano de aula 2016
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Linguagem Prolog - Antonio Rufino
Linguagem Prolog - Antonio RufinoLinguagem Prolog - Antonio Rufino
Linguagem Prolog - Antonio Rufino
 
Morfologia - Classes Gramaticais
Morfologia - Classes GramaticaisMorfologia - Classes Gramaticais
Morfologia - Classes Gramaticais
 
Concepões de língua, linguagem, norma e fala
Concepões de língua, linguagem, norma e falaConcepões de língua, linguagem, norma e fala
Concepões de língua, linguagem, norma e fala
 
Variação linguistica aulão
Variação linguistica   aulãoVariação linguistica   aulão
Variação linguistica aulão
 

En vedette

Leitura complementar 05 - Homem computador e interfaces
Leitura complementar 05 - Homem computador e interfacesLeitura complementar 05 - Homem computador e interfaces
Leitura complementar 05 - Homem computador e interfacesPROF COMPUTAÇÃO Bordoni
 
Leitura complementar 07 - Linha do tempo, ling.progr
Leitura complementar 07 - Linha do tempo, ling.progrLeitura complementar 07 - Linha do tempo, ling.progr
Leitura complementar 07 - Linha do tempo, ling.progrPROF COMPUTAÇÃO Bordoni
 
Leitura complementar 03 - Computadores eletrônicos
Leitura complementar 03 - Computadores eletrônicosLeitura complementar 03 - Computadores eletrônicos
Leitura complementar 03 - Computadores eletrônicosPROF COMPUTAÇÃO Bordoni
 
Leitura complementar 01 - Computadores mecânicos
Leitura complementar 01 - Computadores mecânicosLeitura complementar 01 - Computadores mecânicos
Leitura complementar 01 - Computadores mecânicosPROF COMPUTAÇÃO Bordoni
 
Leitura complementar 02 - Computadores eletromecânicos
Leitura complementar 02 - Computadores eletromecânicosLeitura complementar 02 - Computadores eletromecânicos
Leitura complementar 02 - Computadores eletromecânicosPROF COMPUTAÇÃO Bordoni
 
Semântica – antonímia e contradição
Semântica – antonímia e contradiçãoSemântica – antonímia e contradição
Semântica – antonímia e contradiçãovinivs
 
Conceitos básicos em análise semântica
Conceitos básicos em análise semânticaConceitos básicos em análise semântica
Conceitos básicos em análise semânticaMiquéias Vitorino
 
Semântica
SemânticaSemântica
Semânticavinivs
 
Semântica sinonímia e paráfrase
Semântica   sinonímia e paráfraseSemântica   sinonímia e paráfrase
Semântica sinonímia e paráfrasevinivs
 

En vedette (16)

Leitura complementar 05 - Homem computador e interfaces
Leitura complementar 05 - Homem computador e interfacesLeitura complementar 05 - Homem computador e interfaces
Leitura complementar 05 - Homem computador e interfaces
 
Python 02 - Interatividade
Python 02 - InteratividadePython 02 - Interatividade
Python 02 - Interatividade
 
Python 01 apresentando
Python 01 apresentandoPython 01 apresentando
Python 01 apresentando
 
Leitura complementar 07 - Linha do tempo, ling.progr
Leitura complementar 07 - Linha do tempo, ling.progrLeitura complementar 07 - Linha do tempo, ling.progr
Leitura complementar 07 - Linha do tempo, ling.progr
 
Leitura complementar 03 - Computadores eletrônicos
Leitura complementar 03 - Computadores eletrônicosLeitura complementar 03 - Computadores eletrônicos
Leitura complementar 03 - Computadores eletrônicos
 
Leitura complementar 04 - Microrocessadores
Leitura complementar 04 - MicrorocessadoresLeitura complementar 04 - Microrocessadores
Leitura complementar 04 - Microrocessadores
 
Python 04 - Programação Estruturada
Python 04 - Programação EstruturadaPython 04 - Programação Estruturada
Python 04 - Programação Estruturada
 
Unidade03
Unidade03Unidade03
Unidade03
 
Python 05 - Ponto flutuante
Python 05  - Ponto flutuantePython 05  - Ponto flutuante
Python 05 - Ponto flutuante
 
Leitura complementar 01 - Computadores mecânicos
Leitura complementar 01 - Computadores mecânicosLeitura complementar 01 - Computadores mecânicos
Leitura complementar 01 - Computadores mecânicos
 
Leitura complementar 02 - Computadores eletromecânicos
Leitura complementar 02 - Computadores eletromecânicosLeitura complementar 02 - Computadores eletromecânicos
Leitura complementar 02 - Computadores eletromecânicos
 
Semântica – antonímia e contradição
Semântica – antonímia e contradiçãoSemântica – antonímia e contradição
Semântica – antonímia e contradição
 
Conceitos básicos em análise semântica
Conceitos básicos em análise semânticaConceitos básicos em análise semântica
Conceitos básicos em análise semântica
 
Paradigmas de Linguagem
Paradigmas de LinguagemParadigmas de Linguagem
Paradigmas de Linguagem
 
Semântica
SemânticaSemântica
Semântica
 
Semântica sinonímia e paráfrase
Semântica   sinonímia e paráfraseSemântica   sinonímia e paráfrase
Semântica sinonímia e paráfrase
 

Similaire à Linguagens Formais e Sintaxe

linguagens regulares na ciencia da computação.pdf
linguagens regulares na ciencia da computação.pdflinguagens regulares na ciencia da computação.pdf
linguagens regulares na ciencia da computação.pdfjonathan509395
 
Gramáticas E Linguagens Formais
Gramáticas E Linguagens FormaisGramáticas E Linguagens Formais
Gramáticas E Linguagens Formaisguest47ac6
 
Aula 3 linguagens e gramaticas
Aula 3   linguagens e gramaticasAula 3   linguagens e gramaticas
Aula 3 linguagens e gramaticaswab030
 
Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Thayse
 
Linguagens Formais e Autômatos: alfabetos, palavras e linguagens
Linguagens Formais e Autômatos: alfabetos, palavras e linguagensLinguagens Formais e Autômatos: alfabetos, palavras e linguagens
Linguagens Formais e Autômatos: alfabetos, palavras e linguagensWellington Della Mura
 

Similaire à Linguagens Formais e Sintaxe (11)

linguagens regulares na ciencia da computação.pdf
linguagens regulares na ciencia da computação.pdflinguagens regulares na ciencia da computação.pdf
linguagens regulares na ciencia da computação.pdf
 
Compiladores 2
Compiladores 2Compiladores 2
Compiladores 2
 
02 linguagens e gramaticas
02   linguagens e gramaticas02   linguagens e gramaticas
02 linguagens e gramaticas
 
Gramáticas E Linguagens Formais
Gramáticas E Linguagens FormaisGramáticas E Linguagens Formais
Gramáticas E Linguagens Formais
 
Aula 3 linguagens e gramaticas
Aula 3   linguagens e gramaticasAula 3   linguagens e gramaticas
Aula 3 linguagens e gramaticas
 
Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0
 
Aula1.0.pptx
Aula1.0.pptxAula1.0.pptx
Aula1.0.pptx
 
06 linguagens livres do contexto
06   linguagens livres do contexto06   linguagens livres do contexto
06 linguagens livres do contexto
 
Linguagens Formais e Autômatos: alfabetos, palavras e linguagens
Linguagens Formais e Autômatos: alfabetos, palavras e linguagensLinguagens Formais e Autômatos: alfabetos, palavras e linguagens
Linguagens Formais e Autômatos: alfabetos, palavras e linguagens
 
Linguagens Formais
Linguagens FormaisLinguagens Formais
Linguagens Formais
 
Linguagem lua
Linguagem luaLinguagem lua
Linguagem lua
 

Linguagens Formais e Sintaxe

  • 1. Linguagens, sintaxe e semântica LNCC UFRJ
  • 4. Linguagem formal Um conjunto finito e não-vazio  cujos elementos são símbolos Qualquer cadeia finita de símbolos justapostos – inclusive a vazia,  Coleção de todas as strings construídas a partir de  Qualquer subconjunto L de *
  • 5. Em princípio não existem regras para construir uma linguagem. Entretanto, ao criar uma linguagem, estamos cheios de segundas intenções – e assim precisaremos de regras para atingi-las! Para  = { 0, 1 }, temos  = { , 0, 1, 00, 01, 10, 11, 000, 001, ... }. A partir daí poderemos construir diversas linguagens, que serão muito úteis, conforme veremos.
  • 6. Atenção! Um símbolo é Termos uma entidade técnicos atômica Uma string é só uma cadeia de símbolos Uma linguagem formal é só um conjunto de strings
  • 7. Exemplo Coleção de símbolos para descrever jogos de baralho { ,,,, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, [, ] }
  • 8. Exemplo – continuação Strings , , 8, 9, A, 2, A23, , 55555, JQKA, 4, 7, A, 7, 10JQKA, [A,K], etc { A, 2, ... , 7, J, Q, K, A, 2, ... , 7, J, Q, K, A, 2, ... , 7, J, Q, K, A, 2, ... , 7, J, Q, K, Uma [A,A,2], ... , [7, Q,5 ], linguagem etc }
  • 9. Envolve a atribuição de um significado a cada string de uma linguagem
  • 11. Gramática Uma forma de definir uma linguagem formal L a partir de um alfabeto 
  • 12. Gramática Componentes de uma gramática N – um conjunto de símbolos não-terminais T – um conjunto de N T   símbolos terminais S – um símbolo especial: o símbolo de partida P – um conjunto de produções
  • 13. Os não-terminais ... As classes gramaticais Em inglês, O conjunto N dos tokens símbolos não-terminais
  • 14. Os lexemas da Os terminais ... linguagem O conjunto T dos símbolos terminais Apesar dos não-terminais serem usados na construção, eles não aparecem na sentença acabada
  • 15. As produções ... As regras gramaticais O conjunto P das produções
  • 17. Produções naipe? carta: um valor seguido de um naipe mão : um conjunto de 3 cartas (p/ex.) valor? , 3A, 17, [J, K, A] , 2, 7, A, [3, J, K] Strings não São strings admissíveis em admissíveis em linguagens para linguagens para jogos de baralho jogos de baralho
  • 18. As wff’s Assim, a linguagem formal é o conjunto de todas as suas wff ’s Apenas um nome mais enfático para as strings produzidas
  • 19. Alfabeto de uma linguagem Exemplo para descrever datas no calendário { /, jan, fev, ..., dez, 0, 1 2, 3, 4, 5, 6, 7, 8, 9 }
  • 20. Produções data: o dia, seguido do mês, seguido do ano; separados pela barra Dia? Mês? Ano? 6/jan/2009, 1/abr/1998, 14/jul/1872 Datas são wff’s (strings 46/jan/2009, abr/1/1998 admissíveis) no calendário gregoriano Não são wff’s
  • 22. Metalinguagem Linguagem auxiliar utilizada para descrever mais claramente a linguagem formal { } ,
  • 23. Metalinguagem Pode ser uma linguagem natural como o português ou inglês, ou outra linguagem formal O formalismo de Backus-Naur (BNF)
  • 24. John Warner Backus • O “pai” do FORTRAN; • Participou decisivamente na criação do ALGOL.
  • 25. Peter Naur Criador do ALGOL, junto com Backus e outros
  • 26. O formalismo de Backus-Naur J. W. Backus desenvolveu, especificamente para a ALGOL 58, um método para descrever linguagens de programação, que veio a ser conhecido como a forma normal de Backus. Tal método foi revisado e expandido por Peter Naur para a ALGOL 60; por sugestão de Donald Knuth, foi renomeado como a forma normal de Backus-Naur
  • 27. Noam Chomsky Filadelfia, 07/12/1928 Professor do MIT
  • 28. Exemplo Símbolo terminal  dígito   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Separador de Nome do alternativas identificador da classe
  • 29. Exemplo – produção  dígito   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9  natural    dígito  |  dígito   natural  Observe que a definição de natural é recursiva
  • 30. Regras de produção Os elementos são escolhidos de uma lista; a ordem não importa  dígito   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9  natural    dígito  |  dígito   natural  Os elementos são escritos sequencialmente da esquerda para a direita
  • 31. A EBNF e os diagramas de caminho
  • 32. EBNF O EBNF não é mais poderoso que o BNF; apenas é mais facilitador – mais prático. Nele são incluídas notações para repetição e para elementos opcionais No EBNF os símbolos terminais são escritos entre aspas “ ” e os não-terminais diretamente, sem os  
  • 33. A EBNF Um elemento opcional é escrito entre colchetes [ a ]; O elemento a pode ser incluído ou descartado A repetição de um ou mais elementos é descrita pela utilização de chaves: • ( a )+ indica a repetição do a pelo menos uma vez; • ( a )* indica a repetição do a zero ou mais vezes.
  • 34. Exemplo dígito  “0” | “1” | ... | “9” inteiro  [ “ - ” | “ + ” ] dígito ( dígito )* São produções de inteiro: -1, +21, 9, 12047, etc inteiro  [ “ - ” | “ + ” ] ( dígito )+
  • 35. Apesar da notação usada ser praticamente a mesma, há uma grande diferença entre o significado de definições léxicas e sintáticas: uma definição léxica opera sobre os caracteres individuais do fluxo de entrada, ao passo que uma definição sintática opera no fluxo de tokens gerado pela análise léxica. Todas as utilizações da BNF no próximo capítulo, Análise léxica, são definições léxicas; já nos capítulos subsequentes são definições sintáticas.
  • 36. EBNF e diagramas sintáticos Representação gráfica Representação gráfica A A B EBNF EBNF AB [A] Significado Significado A seguido de B A ou nada
  • 37. EBNF e diagramas Representação gráfica sintáticos A B EBNF A|B Significado ou A ou B
  • 38. EBNF e diagramas sintáticos Representação gráfica Representação gráfica A A EBNF EBNF ( A )* ( A )+ Significado Significado Sequência de zero Sequência de um ou mais A ’s ou mais A ’s
  • 39. EBNF e diagramas sintáticos Representação gráfica Representação gráfica a a b EBNF a z Significado Símbolo EBNF terminal a | b | ... | z
  • 40. Exemplo Um número binário pode ser constituído por apenas um bit, como 0 ou 1, ou por vários, como 110. 0 bit Para gerar 110: 1 • Você sai de número binário no diagrama, passa por bit e escolhe 0. + • Volta, passa novamente por bit sinal e escolhe 1. - • Torna a voltar, passa por bit mais uma vez e escolhe 1. sinal número bit binário Diagrama sintático
  • 41. Python, EBNF e diagramas de sintaxe Mais adiante no curso, teremos a oportunidade de trabalhar com a EBNF para definição da sintaxe da Linguagem Python. Todo o manual de referência da linguagem, em The Python Language Reference é construído utilizando a EBNF; confira em Python v2.6.5 documentation A seguir exibiremos alguns exemplos.
  • 42. A definição de nome em Python letra_min a b nome ::= letra_min ( letra_min | “_” )* letra_min ::= “a”...”z” z nome letra_min letra_min _
  • 43. O comando print expr , , expr cmd_print print >> expr , expr ,
  • 44. O comando print O comando print avalia uma expressão por vez e escreve o objeto resultante na saída padrão (veja a seguir). Se um objeto não é uma string ele é convertido antes numa string, usando as regras para conversão de strings. Então ela é escrita (a resultante ou a original). É colocado (escrito) um espaço antes que cada objeto seja (convertido e) escrito, a menos que o sistema de saída acredite que foi posicionado no início de uma linha. Este é o caso quando: 1. ainda foi escrito nenhum caractere na saída padrão 2. o último caractere escrito na saída padrão é ‘ n’ , ou 3. a última operação de escrita na saída padrão não foi um comando print. (Por essa razão, em alguns casos pode ser funcional escrever uma string vazia para a saída).
  • 45. O comando if cmd_if if expr : seq elif expr : seq else : seq
  • 46. O comando if O comando if é usado para execução condicional. Ele seleciona exatamente uma das sequências avaliando as expressões uma a uma até achar uma que seja verdadeira (true – veja a seção Operações booleanas para as definições de true e false); então essa sequência é executada (e nenhuma outra parte do comando if é executado ou avaliado). Se todas as expressões são falsas, é executada a sequência associada à clausula else (caso esteja presente).