SlideShare a Scribd company logo
1 of 38
Download to read offline
Representação de linguagens

         Ivan Ricarte


            2008




                              I NTRODUÇÃO À COMPILAÇÃO
Sumário




          I NTRODUÇÃO À COMPILAÇÃO
Motivação




   Arquivo de                                  Arquivo de
                   Análise           Síntese
     origem                                     destino


                Gramáticas   Estruturas
                              internas




                                               I NTRODUÇÃO À COMPILAÇÃO
Etapa de análise

      Objetivos
          Extrair do código fonte os elementos básicos do programa
          Obter estrutura lógica do programa e de suas expressões
      Análise léxica reconhecimento, a partir dos caracteres,
                   das palavras básicas do “vocabulário” do
                   programa
                       palavras-chaves da linguagem, operadores,
                       identificadores, constantes
      Análise sintática reconhecimento da estrutura de
                   comandos e do programa como um todo
                       definições, declarações, comandos simples,
                       blocos de comandos, programas
      Análise semântica verificar relacionamentos entre
                 fragmentos do código

                                                        I NTRODUÇÃO À COMPILAÇÃO
Etapa de análise


  Análise léxica e análise sintática
      Demandam o reconhecimento de seqüências de símbolos
      válidas
           Léxica seqüência de caracteres que compõe uma
                   palavra
         Sintática seqüência de palavras que compõe uma
                   sentença
      Há necessidade de um mecanismo para especificar quais
      seqüências são válidas
  Mecanismo formal linguagens e gramáticas




                                                 I NTRODUÇÃO À COMPILAÇÃO
Conjuntos


  Definição
  Um conjunto é um agregado de elementos (sem repetição)
  tratado como um todo

  Representação
      Pela enumeração dos elementos: {1, 2, 3, 4, 5, . . . }
      Por uma proposição lógica:
      {x|x é um número inteiro positivo}
      Por um nome: N
  Conjunto sem elementos: conjunto vazio — {} ou ∅



                                                         I NTRODUÇÃO À COMPILAÇÃO
Relações entre conjuntos e seus elementos


                        A = {1, 2, 3}

  Relação entre elementos e conjuntos: ∈ (pertinência)
                           1∈A
                           7∈A

  Relação entre conjuntos: ⊂ ⊆ (continência)
                        {1, 2, 3} ⊆ A
                         {1, 2} ⊂ A
                        {2, 3, 4} ⊂ A


                                                I NTRODUÇÃO À COMPILAÇÃO
Operações de conjuntos


  Dados dois conjuntos B e C,
  União
  B ∪ C = {x | x ∈ B ∨ x ∈ C}

  Interseção
  B ∩ C = {x | x ∈ B ∧ x ∈ C}

  Diferença
  B − C = {x | x ∈ B ∧ x ∈ C}




                                I NTRODUÇÃO À COMPILAÇÃO
Partição



   Definição
   Uma partição é um conjunto de subconjuntos tal que
       Todos os elementos do conjunto original pertencem a
       algum subconjunto da partição; e
       Nenhum elemento do conjunto original pertence a mais de
       um subconjunto

   Sejam D1 ⊂ D e D2 ⊂ D, então {D1 , D2 } é uma partição de D
   se D1 ∪ D2 = D e D1 ∩ D2 = ∅




                                                        I NTRODUÇÃO À COMPILAÇÃO
Linguagens
Alfabeto




    Linguagens definidas a partir de um conjunto de símbolos
           Alfabeto é o conjunto de símbolos válidos de uma
                    linguagem

           Alfabeto da língua portuguesa: {a, b, c, . . . , z}
           Alfabeto da linguagem de máquina: {0, 1}




                                                                 I NTRODUÇÃO À COMPILAÇÃO
Linguagens
Strings




           String é uma seqüência (concatenação) de símbolos de
                  um alfabeto
                      A string vazia (nenhum símbolo) é denotada
                      pelo símbolo ε

          Se A é um alfabeto, então:
                  A∗ (clausura de A) é o conjunto de todas as
                      strings que podem ser formadas a partir de
                      símbolos de A
                  A+ é A∗ − ε



                                                        I NTRODUÇÃO À COMPILAÇÃO
Linguagens
Exemplo



    Seja B = {0, 1} o alfabeto para a linguagem

                         L = {0n 1n | n ≥ 0}

    onde bn representa uma seqüência de n ocorrências do
    símbolo b.
    Quais das seguintes strings são válidas nesta linguagem?
          01
          010
          0110
          0011
          ε


                                                      I NTRODUÇÃO À COMPILAÇÃO
Descrição de linguagens: Gramáticas


  Uma gramática define regras para a formação de strings
  válidas em uma linguagem
   Produções conjunto de regras de formação de strings
     Alfabeto conjunto de símbolos da linguagem e um conjunto
              de símbolos auxiliares
              Símbolos terminais símbolos da linguagem
              Símbolos não-terminais símbolos auxiliares
                  Um símbolo não-terminal é especial — indica
                  o ponto de partida para formar strings nessa
                  linguagem




                                                    I NTRODUÇÃO À COMPILAÇÃO
Gramáticas
Definição formal




                            G = (VT , VN , P, Si )

              VT alfabeto dos símbolos terminais
              VN alfabeto dos símbolos não-terminais
                  P conjunto de regras ou produções, expressos na
                    forma α → β, onde α ∈ V + e β ∈ V ∗
        Si ∈ VN símbolo sentencial, símbolo não-terminal
                inicial ou axioma: o ponto de partida na
                produção de qualquer sentença na linguagem



                                                         I NTRODUÇÃO À COMPILAÇÃO
Produções




  Uma produção
                            E →D
  representa que o símbolo ou seqüência de símbolos E (o lado
  esquerdo) pode ser substituído pelo símbolo ou seqüência de
  símbolos D (o lado direito) no processo de formação de uma
  string a partir do símbolo sentencial.




                                                    I NTRODUÇÃO À COMPILAÇÃO
Produções
Exemplo




    Na gramática

               G1 = ({0, 1}, {Z }, {Z → 0Z 1, Z → ε}, Z )

    as duas produções são:
      Z → 0Z 1 onde ocorre o símbolo Z é possível substituí-lo
               pela seqüência 0Z 1
          Z → ε onde ocorre o símbolo Z é possível substituí-lo
                pelo símbolo ε (ou seja, eliminá-lo)




                                                            I NTRODUÇÃO À COMPILAÇÃO
Derivações


  Derivação
  É a substituição do lado esquerdo de uma produção de uma
  gramática pelos símbolos do lado direito

                        Z ⇒ 0Z 1 ⇒ 01
  Resultado de derivação pode ser
  Forma sentencial Qualquer seqüência de símbolos, terminais
             ou não-terminais, que pode ser derivada a partir
             do símbolo sentencial de uma gramática
    Sentença Forma sentencial composta exclusivamente por
             símbolos terminais


                                                    I NTRODUÇÃO À COMPILAÇÃO
Derivações
Definições




    Dadas duas formas sentenciais γ e δ
        γ =⇒ δ δ é imediatamente derivável de γ pela aplicação
               de uma única produção
            +
        γ =⇒ δ δ é derivável de γ pela aplicação de uma ou mais
               produções
    Em G1
        0Z 1 é imediatamente derivável de Z
        01 é imediatamente derivável de 0Z 1
        01 é derivável de Z



                                                      I NTRODUÇÃO À COMPILAÇÃO
Derivações
Reconhecimento de sentenças válidas



    Sentença σ faz parte da linguagem L se há seqüência de
    derivações a partir do símbolo sentencial S que leve à σ:
                                        +
                                      S =⇒ σ

         Na gramática G1 = ({0, 1}, {Z }, {Z → 0Z 1, Z → ε}, Z ),
         quais das seguintes strings são válidas?
              01
              010
              0110
              0011
              ε



                                                         I NTRODUÇÃO À COMPILAÇÃO
Reconhecimento de sentenças
Exemplos




    Em G1 = ({0, 1}, {Z }, {Z → 0Z 1, Z → ε}, Z )
             01 Z ⇒ 0Z 1 ⇒ 01 (válida)
            010 Z ⇒ 0Z 1 ⇒? (inválida)
           0110 Z ⇒ 0Z 1 ⇒ 00Z 11 ⇒ 0011 (válida)
           0011 Z ⇒ 0Z 1 ⇒? (inválida)
              ε Z ⇒ ε (válida)




                                                    I NTRODUÇÃO À COMPILAÇÃO
Classificação de gramáticas


  Gramáticas podem ter produções α → β com distintos graus
  de complexidade em seu formato:
      Quantos símbolos no lado esquerdo?
      Como os símbolos que aparecem no lado esquerdo
      podem aparecer no lado direito (recursividade)?
  Quanto menos restrições houver ao formato das produções,
  maior o poder de expressão da gramática
      Pode representar linguagens mais complexas
      Procedimento de reconhecimento de sentenças mais
      complicado




                                                   I NTRODUÇÃO À COMPILAÇÃO
Classificação de Chomsky



     Chomsky (1928– ) estudou gramáticas formais e propôs a
     seguinte classificação:
          Tipo 0 Gramáticas recursivamente enumeráveis ou
                  Gramáticas com estrutura de frase
          Tipo 1 Gramáticas sensíveis ao contexto
          Tipo 2 Gramáticas livres de contexto
          Tipo 3 Gramáticas regulares
     A mesma classificação é aplicada às linguagens
         Linguagem do tipo n é descrita por uma gramática do tipo n




                                                       I NTRODUÇÃO À COMPILAÇÃO
Classificação de Chomsky
Gramática recursivamente enumerável




         Não impõe nenhuma restrição à forma das produções
         Pelo menos uma das produções da gramática pode ter a
         forma α → β na qual a quantidade de símbolos em α é
         maior que a quantidade de símbolos em β
              Uma derivação pode reduzir a quantidade de símbolos na
              forma sentencial




                                                          I NTRODUÇÃO À COMPILAÇÃO
Classificação de Chomsky
Gramática sensível ao contexto




         As produções α → β devem obedecer à restrição

                                 | α |≤| β |

         Nenhuma derivação pode reduzir a quantidade de
         símbolos em uma forma sentencial




                                                     I NTRODUÇÃO À COMPILAÇÃO
Classificação de Chomsky
Gramática livre de contexto




          As produções α → β devem obedecer à restrição

                                    | α |= 1

               O lado esquerdo da produção tem um único símbolo
               não-terminal
          Poder de expressão suficiente para capturar principais
          aspectos dos comandos das linguagens de programação




                                                          I NTRODUÇÃO À COMPILAÇÃO
Classificação de Chomsky
Gramática regular




         Se produção é recursiva, não contém auto-incorporação
               Produções recursivas têm formato

                                       A → Aβ

               ou
                                       A → βA
               para uma seqüência de símbolos β qualquer




                                                           I NTRODUÇÃO À COMPILAÇÃO
Notações alternativas



      Além da descrição formal por meio de gramáticas,
      linguagens podem ser descritas por meio das seguintes
      representações:
      Expressões regulares mesmo poder de expressão de
                  gramáticas regulares
      Backus-Naur Form mesmo poder de expressão de
                  gramáticas livres de contexto
      Diagramas sintáticos mesmo poder de expressão de
                  gramáticas livres de contexto




                                                   I NTRODUÇÃO À COMPILAÇÃO
Expressões regulares
Definição


    Uma expressão regular é definida pelas seguintes regras:
     1. A string vazia é uma expressão regular.
     2. Dado um alfabeto A, então um elemento de A é uma
        expressão regular em A.
     3. Se P é uma expressão regular em A, então a repetição de
        0 ou mais ocorrências de P, denotada P ∗ , também é uma
        expressão regular em A.
     4. Se P e Q são expressões regulares em A, então a
        seqüência de P e Q, denotada PQ, também é uma
        expressão regular em A.
     5. Se P e Q são expressões regulares em A, então a
        alternativa entre P e Q, denotada P | Q, também é uma
        expressão regular em A.

                                                      I NTRODUÇÃO À COMPILAÇÃO
Expressões regulares
Exemplos


    Para o alfabeto A = {a, b}, são expressões regulares:
              aa∗ strings com pelo menos uma ocorrência do
                  símbolo a, como a, aa e aaaaa. Como ∗ tem a
                  maior precedência, esta expressão é diferente de
                  (aa)∗ , que representa strings com zero ou mais
                  pares de símbolos a.
      a(a|b)∗b strings que começam com o símbolo a e terminam
               com o símbolo b e têm qualquer quantidade dos
               símbolos a ou b no meio. As strings ab, aab, abb,
               aabb e abab são válidas segundo essa expressão.
           ba|a∗b a string ba ou uma string com qualquer
                  quantidade (até mesmo 0) do símbolo a terminada
                  pelo símbolo b, como b, ab ou aab.

                                                        I NTRODUÇÃO À COMPILAÇÃO
Expressões regulares
Relação com gramáticas regulares


    Como um operador em uma expressão regular relaciona-se às
    produções de uma gramática regular equivalente?
    Concatenação: tem a mesma representação nas duas
               notações, ou seja, um símbolo após o outro.
     Alternativa: o operador | de uma expressão regular
                  corresponde, na gramática, a produções
                  alternativas para um mesmo símbolo
                  não-terminal.
     Repetição: o operador de repetição ∗ de uma expressão
                regular corresponde, na gramática, a uma
                produção recursiva. Se a expressão permite zero
                ocorrências do padrão, então a regra que
                estabelece o fim da recursão leva à string vazia.

                                                       I NTRODUÇÃO À COMPILAÇÃO
Relação com gramáticas regulares
Exemplos


           aa∗ equivale a uma gramática com produções

                                  S → aS
                                  S→a

           a(a|b)∗b equivale a uma gramática com produções

                                 S → aQb
                                 Q → aQ
                                 Q → Qb
                                 Q→ε



    Em ambos os casos, S é o símbolo sentencial
                                                        I NTRODUÇÃO À COMPILAÇÃO
Backus-Naur Form


     Define uma notação textual compacta para as produções
     de uma gramática livre de contexto
     Notação BNF básica:
              ::= produção (→)
         < · · · > símbolo não-terminal
                  | alternativa
     Exemplo:

                  < S > ::= a < Q > b
                 < Q > ::= a < Q > | < Q > b | ” ”




                                                     I NTRODUÇÃO À COMPILAÇÃO
BNF estendido




     Extensões que foram propostas à notação BNF padrão:
      [ · ] opcional (zero ou uma ocorrência)
    (· | ·) fatoração
         ·∗ repetição (zero ou mais ocorrências)
     Limitação: símbolos usados como metacaracteres não
     podem fazer parte do alfabeto da linguagem




                                                   I NTRODUÇÃO À COMPILAÇÃO
Diagramas sintáticos




      Notação gráfica para gramáticas livres de contexto, com
      um diagrama para cada símbolo não-terminal
      Símbolos não-terminais: retângulos
      Símbolos terminais: círculos ou elipses




                                                    I NTRODUÇÃO À COMPILAÇÃO
Diagrama sintático
Exemplo




          Regra < expr >::= (< expr >)| < expr > + < expr > em BNF
          equivale a


                            (        expr        )

             expr


                          expr         +         expr




                                                        I NTRODUÇÃO À COMPILAÇÃO
Diagrama sintático
Exemplo




          Regra < N >::= [< A >]xy∗ em BNF estendido equivale a


              N             A          x

                                                y




                                                       I NTRODUÇÃO À COMPILAÇÃO
Como essas definições são utilizadas


      Associada a uma gramática formal há uma definição de
      um autômato que reconhece strings na linguagem descrita
      por essa gramática
      Símbolos elementares de uma linguagem de programação
      são descritos por gramáticas ou expressões regulares
          Embasamento formal para a análise léxica
          Reconhecimento por meio de autômatos finitos
      Sentenças de uma linguagem de programação são
      descritas por gramáticas livres de contexto
          Embasamento formal para a análise sintática
          Reconhecimento por meio de autômatos de pilha




                                                        I NTRODUÇÃO À COMPILAÇÃO
Sugestões de leitura (Web)



      “O conjunto dos números naturais não tem o 0?”
      http://en.wikipedia.org/wiki/Natural_number
      Biografias na Wikipedia:
      Noam Chomsky http:
                  //pt.wikipedia.org/wiki/Chomsky
      John Backus http://pt.wikipedia.org/wiki/
                  John_Backus
       Peter Naur http://pt.wikipedia.org/wiki/
                  Peter_Naur




                                            I NTRODUÇÃO À COMPILAÇÃO

More Related Content

What's hot (19)

02 algoritmos
02 algoritmos02 algoritmos
02 algoritmos
 
Henriquecristovao manual c-cpp
Henriquecristovao manual c-cppHenriquecristovao manual c-cpp
Henriquecristovao manual c-cpp
 
Logica java ate slide 30
Logica java   ate slide 30Logica java   ate slide 30
Logica java ate slide 30
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Lógica Computacional
Lógica ComputacionalLógica Computacional
Lógica Computacional
 
Algoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentosAlgoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentos
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)
 
Lógica De Programação
Lógica De ProgramaçãoLógica De Programação
Lógica De Programação
 
Apostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em CApostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em C
 
First Order Logic
First Order LogicFirst Order Logic
First Order Logic
 
Compiladores 7
Compiladores 7Compiladores 7
Compiladores 7
 
Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)
 
Semântica Formal
Semântica FormalSemântica Formal
Semântica Formal
 
Java 05
Java 05Java 05
Java 05
 
Ponteiros e Alocação Dinâmica
Ponteiros e Alocação DinâmicaPonteiros e Alocação Dinâmica
Ponteiros e Alocação Dinâmica
 
53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-i53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-i
 
Aula9 diagrama de_sequencia
Aula9 diagrama de_sequenciaAula9 diagrama de_sequencia
Aula9 diagrama de_sequencia
 
Pged 01
Pged 01Pged 01
Pged 01
 
Fundamentos do java
Fundamentos do javaFundamentos do java
Fundamentos do java
 

Viewers also liked

Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresAnderson Favaro
 
Aula 3 compiladores e interpretadores
Aula 3   compiladores e interpretadoresAula 3   compiladores e interpretadores
Aula 3 compiladores e interpretadoresLCCIMETRO
 
Estrutura básica de um computador
Estrutura básica de um computadorEstrutura básica de um computador
Estrutura básica de um computadorAna Covas Grilo
 
Compiler Design
Compiler DesignCompiler Design
Compiler DesignMir Majid
 

Viewers also liked (6)

Compiladores 6
Compiladores 6Compiladores 6
Compiladores 6
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
 
Aula 3 compiladores e interpretadores
Aula 3   compiladores e interpretadoresAula 3   compiladores e interpretadores
Aula 3 compiladores e interpretadores
 
Estrutura básica de um computador
Estrutura básica de um computadorEstrutura básica de um computador
Estrutura básica de um computador
 
Compiler Design
Compiler DesignCompiler Design
Compiler Design
 

Similar to Compiladores 2

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 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
 
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
 
Logica de primeira_ordem_sintaxe_semantica_propriedades_sintaticas
Logica de primeira_ordem_sintaxe_semantica_propriedades_sintaticasLogica de primeira_ordem_sintaxe_semantica_propriedades_sintaticas
Logica de primeira_ordem_sintaxe_semantica_propriedades_sintaticasromildasromildas
 

Similar to Compiladores 2 (6)

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
 
Python 03 - Sintaxe
Python 03 - SintaxePython 03 - Sintaxe
Python 03 - 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.pdf
 
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
 
Logica de primeira_ordem_sintaxe_semantica_propriedades_sintaticas
Logica de primeira_ordem_sintaxe_semantica_propriedades_sintaticasLogica de primeira_ordem_sintaxe_semantica_propriedades_sintaticas
Logica de primeira_ordem_sintaxe_semantica_propriedades_sintaticas
 

More from Ivan Ricarte

Aula catalogo de refatoracoes
Aula   catalogo de refatoracoesAula   catalogo de refatoracoes
Aula catalogo de refatoracoesIvan Ricarte
 
Testes de unidade em Java: JUnit
Testes de unidade em Java: JUnitTestes de unidade em Java: JUnit
Testes de unidade em Java: JUnitIvan Ricarte
 
Refatoração: Code smells
Refatoração: Code smellsRefatoração: Code smells
Refatoração: Code smellsIvan Ricarte
 
Aplicacoes web semantica saude
Aplicacoes web semantica saudeAplicacoes web semantica saude
Aplicacoes web semantica saudeIvan Ricarte
 
R - Software Estatistico
R - Software EstatisticoR - Software Estatistico
R - Software EstatisticoIvan Ricarte
 
Aula revisão de java e junit
Aula   revisão de java e junitAula   revisão de java e junit
Aula revisão de java e junitIvan Ricarte
 
Introducao a refatoracao
Introducao a refatoracaoIntroducao a refatoracao
Introducao a refatoracaoIvan Ricarte
 
C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1Ivan Ricarte
 
Membros de classes C++
Membros de classes C++Membros de classes C++
Membros de classes C++Ivan Ricarte
 
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Ivan Ricarte
 
Problemas no desenvolvimento do software
Problemas no desenvolvimento do softwareProblemas no desenvolvimento do software
Problemas no desenvolvimento do softwareIvan Ricarte
 
Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)Ivan Ricarte
 
SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)Ivan Ricarte
 
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúdeO Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúdeIvan Ricarte
 

More from Ivan Ricarte (20)

Aula catalogo de refatoracoes
Aula   catalogo de refatoracoesAula   catalogo de refatoracoes
Aula catalogo de refatoracoes
 
Testes de unidade em Java: JUnit
Testes de unidade em Java: JUnitTestes de unidade em Java: JUnit
Testes de unidade em Java: JUnit
 
Refatoração: Code smells
Refatoração: Code smellsRefatoração: Code smells
Refatoração: Code smells
 
Aplicacoes web semantica saude
Aplicacoes web semantica saudeAplicacoes web semantica saude
Aplicacoes web semantica saude
 
R - Software Estatistico
R - Software EstatisticoR - Software Estatistico
R - Software Estatistico
 
Aula UML e Java
Aula UML e JavaAula UML e Java
Aula UML e Java
 
Aula revisão de java e junit
Aula   revisão de java e junitAula   revisão de java e junit
Aula revisão de java e junit
 
Introducao a refatoracao
Introducao a refatoracaoIntroducao a refatoracao
Introducao a refatoracao
 
C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1
 
c++ construtores
c++ construtoresc++ construtores
c++ construtores
 
Padroes
PadroesPadroes
Padroes
 
C++ Sobrecarga
C++ SobrecargaC++ Sobrecarga
C++ Sobrecarga
 
Membros de classes C++
Membros de classes C++Membros de classes C++
Membros de classes C++
 
UML e POO
UML e POOUML e POO
UML e POO
 
Antipadroes
AntipadroesAntipadroes
Antipadroes
 
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Princípios da organização de código fonte C++
Princípios da organização de código fonte C++
 
Problemas no desenvolvimento do software
Problemas no desenvolvimento do softwareProblemas no desenvolvimento do software
Problemas no desenvolvimento do software
 
Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)
 
SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)
 
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúdeO Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
 

Recently uploaded

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 

Recently uploaded (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Compiladores 2

  • 1. Representação de linguagens Ivan Ricarte 2008 I NTRODUÇÃO À COMPILAÇÃO
  • 2. Sumário I NTRODUÇÃO À COMPILAÇÃO
  • 3. Motivação Arquivo de Arquivo de Análise Síntese origem destino Gramáticas Estruturas internas I NTRODUÇÃO À COMPILAÇÃO
  • 4. Etapa de análise Objetivos Extrair do código fonte os elementos básicos do programa Obter estrutura lógica do programa e de suas expressões Análise léxica reconhecimento, a partir dos caracteres, das palavras básicas do “vocabulário” do programa palavras-chaves da linguagem, operadores, identificadores, constantes Análise sintática reconhecimento da estrutura de comandos e do programa como um todo definições, declarações, comandos simples, blocos de comandos, programas Análise semântica verificar relacionamentos entre fragmentos do código I NTRODUÇÃO À COMPILAÇÃO
  • 5. Etapa de análise Análise léxica e análise sintática Demandam o reconhecimento de seqüências de símbolos válidas Léxica seqüência de caracteres que compõe uma palavra Sintática seqüência de palavras que compõe uma sentença Há necessidade de um mecanismo para especificar quais seqüências são válidas Mecanismo formal linguagens e gramáticas I NTRODUÇÃO À COMPILAÇÃO
  • 6. Conjuntos Definição Um conjunto é um agregado de elementos (sem repetição) tratado como um todo Representação Pela enumeração dos elementos: {1, 2, 3, 4, 5, . . . } Por uma proposição lógica: {x|x é um número inteiro positivo} Por um nome: N Conjunto sem elementos: conjunto vazio — {} ou ∅ I NTRODUÇÃO À COMPILAÇÃO
  • 7. Relações entre conjuntos e seus elementos A = {1, 2, 3} Relação entre elementos e conjuntos: ∈ (pertinência) 1∈A 7∈A Relação entre conjuntos: ⊂ ⊆ (continência) {1, 2, 3} ⊆ A {1, 2} ⊂ A {2, 3, 4} ⊂ A I NTRODUÇÃO À COMPILAÇÃO
  • 8. Operações de conjuntos Dados dois conjuntos B e C, União B ∪ C = {x | x ∈ B ∨ x ∈ C} Interseção B ∩ C = {x | x ∈ B ∧ x ∈ C} Diferença B − C = {x | x ∈ B ∧ x ∈ C} I NTRODUÇÃO À COMPILAÇÃO
  • 9. Partição Definição Uma partição é um conjunto de subconjuntos tal que Todos os elementos do conjunto original pertencem a algum subconjunto da partição; e Nenhum elemento do conjunto original pertence a mais de um subconjunto Sejam D1 ⊂ D e D2 ⊂ D, então {D1 , D2 } é uma partição de D se D1 ∪ D2 = D e D1 ∩ D2 = ∅ I NTRODUÇÃO À COMPILAÇÃO
  • 10. Linguagens Alfabeto Linguagens definidas a partir de um conjunto de símbolos Alfabeto é o conjunto de símbolos válidos de uma linguagem Alfabeto da língua portuguesa: {a, b, c, . . . , z} Alfabeto da linguagem de máquina: {0, 1} I NTRODUÇÃO À COMPILAÇÃO
  • 11. Linguagens Strings String é uma seqüência (concatenação) de símbolos de um alfabeto A string vazia (nenhum símbolo) é denotada pelo símbolo ε Se A é um alfabeto, então: A∗ (clausura de A) é o conjunto de todas as strings que podem ser formadas a partir de símbolos de A A+ é A∗ − ε I NTRODUÇÃO À COMPILAÇÃO
  • 12. Linguagens Exemplo Seja B = {0, 1} o alfabeto para a linguagem L = {0n 1n | n ≥ 0} onde bn representa uma seqüência de n ocorrências do símbolo b. Quais das seguintes strings são válidas nesta linguagem? 01 010 0110 0011 ε I NTRODUÇÃO À COMPILAÇÃO
  • 13. Descrição de linguagens: Gramáticas Uma gramática define regras para a formação de strings válidas em uma linguagem Produções conjunto de regras de formação de strings Alfabeto conjunto de símbolos da linguagem e um conjunto de símbolos auxiliares Símbolos terminais símbolos da linguagem Símbolos não-terminais símbolos auxiliares Um símbolo não-terminal é especial — indica o ponto de partida para formar strings nessa linguagem I NTRODUÇÃO À COMPILAÇÃO
  • 14. Gramáticas Definição formal G = (VT , VN , P, Si ) VT alfabeto dos símbolos terminais VN alfabeto dos símbolos não-terminais P conjunto de regras ou produções, expressos na forma α → β, onde α ∈ V + e β ∈ V ∗ Si ∈ VN símbolo sentencial, símbolo não-terminal inicial ou axioma: o ponto de partida na produção de qualquer sentença na linguagem I NTRODUÇÃO À COMPILAÇÃO
  • 15. Produções Uma produção E →D representa que o símbolo ou seqüência de símbolos E (o lado esquerdo) pode ser substituído pelo símbolo ou seqüência de símbolos D (o lado direito) no processo de formação de uma string a partir do símbolo sentencial. I NTRODUÇÃO À COMPILAÇÃO
  • 16. Produções Exemplo Na gramática G1 = ({0, 1}, {Z }, {Z → 0Z 1, Z → ε}, Z ) as duas produções são: Z → 0Z 1 onde ocorre o símbolo Z é possível substituí-lo pela seqüência 0Z 1 Z → ε onde ocorre o símbolo Z é possível substituí-lo pelo símbolo ε (ou seja, eliminá-lo) I NTRODUÇÃO À COMPILAÇÃO
  • 17. Derivações Derivação É a substituição do lado esquerdo de uma produção de uma gramática pelos símbolos do lado direito Z ⇒ 0Z 1 ⇒ 01 Resultado de derivação pode ser Forma sentencial Qualquer seqüência de símbolos, terminais ou não-terminais, que pode ser derivada a partir do símbolo sentencial de uma gramática Sentença Forma sentencial composta exclusivamente por símbolos terminais I NTRODUÇÃO À COMPILAÇÃO
  • 18. Derivações Definições Dadas duas formas sentenciais γ e δ γ =⇒ δ δ é imediatamente derivável de γ pela aplicação de uma única produção + γ =⇒ δ δ é derivável de γ pela aplicação de uma ou mais produções Em G1 0Z 1 é imediatamente derivável de Z 01 é imediatamente derivável de 0Z 1 01 é derivável de Z I NTRODUÇÃO À COMPILAÇÃO
  • 19. Derivações Reconhecimento de sentenças válidas Sentença σ faz parte da linguagem L se há seqüência de derivações a partir do símbolo sentencial S que leve à σ: + S =⇒ σ Na gramática G1 = ({0, 1}, {Z }, {Z → 0Z 1, Z → ε}, Z ), quais das seguintes strings são válidas? 01 010 0110 0011 ε I NTRODUÇÃO À COMPILAÇÃO
  • 20. Reconhecimento de sentenças Exemplos Em G1 = ({0, 1}, {Z }, {Z → 0Z 1, Z → ε}, Z ) 01 Z ⇒ 0Z 1 ⇒ 01 (válida) 010 Z ⇒ 0Z 1 ⇒? (inválida) 0110 Z ⇒ 0Z 1 ⇒ 00Z 11 ⇒ 0011 (válida) 0011 Z ⇒ 0Z 1 ⇒? (inválida) ε Z ⇒ ε (válida) I NTRODUÇÃO À COMPILAÇÃO
  • 21. Classificação de gramáticas Gramáticas podem ter produções α → β com distintos graus de complexidade em seu formato: Quantos símbolos no lado esquerdo? Como os símbolos que aparecem no lado esquerdo podem aparecer no lado direito (recursividade)? Quanto menos restrições houver ao formato das produções, maior o poder de expressão da gramática Pode representar linguagens mais complexas Procedimento de reconhecimento de sentenças mais complicado I NTRODUÇÃO À COMPILAÇÃO
  • 22. Classificação de Chomsky Chomsky (1928– ) estudou gramáticas formais e propôs a seguinte classificação: Tipo 0 Gramáticas recursivamente enumeráveis ou Gramáticas com estrutura de frase Tipo 1 Gramáticas sensíveis ao contexto Tipo 2 Gramáticas livres de contexto Tipo 3 Gramáticas regulares A mesma classificação é aplicada às linguagens Linguagem do tipo n é descrita por uma gramática do tipo n I NTRODUÇÃO À COMPILAÇÃO
  • 23. Classificação de Chomsky Gramática recursivamente enumerável Não impõe nenhuma restrição à forma das produções Pelo menos uma das produções da gramática pode ter a forma α → β na qual a quantidade de símbolos em α é maior que a quantidade de símbolos em β Uma derivação pode reduzir a quantidade de símbolos na forma sentencial I NTRODUÇÃO À COMPILAÇÃO
  • 24. Classificação de Chomsky Gramática sensível ao contexto As produções α → β devem obedecer à restrição | α |≤| β | Nenhuma derivação pode reduzir a quantidade de símbolos em uma forma sentencial I NTRODUÇÃO À COMPILAÇÃO
  • 25. Classificação de Chomsky Gramática livre de contexto As produções α → β devem obedecer à restrição | α |= 1 O lado esquerdo da produção tem um único símbolo não-terminal Poder de expressão suficiente para capturar principais aspectos dos comandos das linguagens de programação I NTRODUÇÃO À COMPILAÇÃO
  • 26. Classificação de Chomsky Gramática regular Se produção é recursiva, não contém auto-incorporação Produções recursivas têm formato A → Aβ ou A → βA para uma seqüência de símbolos β qualquer I NTRODUÇÃO À COMPILAÇÃO
  • 27. Notações alternativas Além da descrição formal por meio de gramáticas, linguagens podem ser descritas por meio das seguintes representações: Expressões regulares mesmo poder de expressão de gramáticas regulares Backus-Naur Form mesmo poder de expressão de gramáticas livres de contexto Diagramas sintáticos mesmo poder de expressão de gramáticas livres de contexto I NTRODUÇÃO À COMPILAÇÃO
  • 28. Expressões regulares Definição Uma expressão regular é definida pelas seguintes regras: 1. A string vazia é uma expressão regular. 2. Dado um alfabeto A, então um elemento de A é uma expressão regular em A. 3. Se P é uma expressão regular em A, então a repetição de 0 ou mais ocorrências de P, denotada P ∗ , também é uma expressão regular em A. 4. Se P e Q são expressões regulares em A, então a seqüência de P e Q, denotada PQ, também é uma expressão regular em A. 5. Se P e Q são expressões regulares em A, então a alternativa entre P e Q, denotada P | Q, também é uma expressão regular em A. I NTRODUÇÃO À COMPILAÇÃO
  • 29. Expressões regulares Exemplos Para o alfabeto A = {a, b}, são expressões regulares: aa∗ strings com pelo menos uma ocorrência do símbolo a, como a, aa e aaaaa. Como ∗ tem a maior precedência, esta expressão é diferente de (aa)∗ , que representa strings com zero ou mais pares de símbolos a. a(a|b)∗b strings que começam com o símbolo a e terminam com o símbolo b e têm qualquer quantidade dos símbolos a ou b no meio. As strings ab, aab, abb, aabb e abab são válidas segundo essa expressão. ba|a∗b a string ba ou uma string com qualquer quantidade (até mesmo 0) do símbolo a terminada pelo símbolo b, como b, ab ou aab. I NTRODUÇÃO À COMPILAÇÃO
  • 30. Expressões regulares Relação com gramáticas regulares Como um operador em uma expressão regular relaciona-se às produções de uma gramática regular equivalente? Concatenação: tem a mesma representação nas duas notações, ou seja, um símbolo após o outro. Alternativa: o operador | de uma expressão regular corresponde, na gramática, a produções alternativas para um mesmo símbolo não-terminal. Repetição: o operador de repetição ∗ de uma expressão regular corresponde, na gramática, a uma produção recursiva. Se a expressão permite zero ocorrências do padrão, então a regra que estabelece o fim da recursão leva à string vazia. I NTRODUÇÃO À COMPILAÇÃO
  • 31. Relação com gramáticas regulares Exemplos aa∗ equivale a uma gramática com produções S → aS S→a a(a|b)∗b equivale a uma gramática com produções S → aQb Q → aQ Q → Qb Q→ε Em ambos os casos, S é o símbolo sentencial I NTRODUÇÃO À COMPILAÇÃO
  • 32. Backus-Naur Form Define uma notação textual compacta para as produções de uma gramática livre de contexto Notação BNF básica: ::= produção (→) < · · · > símbolo não-terminal | alternativa Exemplo: < S > ::= a < Q > b < Q > ::= a < Q > | < Q > b | ” ” I NTRODUÇÃO À COMPILAÇÃO
  • 33. BNF estendido Extensões que foram propostas à notação BNF padrão: [ · ] opcional (zero ou uma ocorrência) (· | ·) fatoração ·∗ repetição (zero ou mais ocorrências) Limitação: símbolos usados como metacaracteres não podem fazer parte do alfabeto da linguagem I NTRODUÇÃO À COMPILAÇÃO
  • 34. Diagramas sintáticos Notação gráfica para gramáticas livres de contexto, com um diagrama para cada símbolo não-terminal Símbolos não-terminais: retângulos Símbolos terminais: círculos ou elipses I NTRODUÇÃO À COMPILAÇÃO
  • 35. Diagrama sintático Exemplo Regra < expr >::= (< expr >)| < expr > + < expr > em BNF equivale a ( expr ) expr expr + expr I NTRODUÇÃO À COMPILAÇÃO
  • 36. Diagrama sintático Exemplo Regra < N >::= [< A >]xy∗ em BNF estendido equivale a N A x y I NTRODUÇÃO À COMPILAÇÃO
  • 37. Como essas definições são utilizadas Associada a uma gramática formal há uma definição de um autômato que reconhece strings na linguagem descrita por essa gramática Símbolos elementares de uma linguagem de programação são descritos por gramáticas ou expressões regulares Embasamento formal para a análise léxica Reconhecimento por meio de autômatos finitos Sentenças de uma linguagem de programação são descritas por gramáticas livres de contexto Embasamento formal para a análise sintática Reconhecimento por meio de autômatos de pilha I NTRODUÇÃO À COMPILAÇÃO
  • 38. Sugestões de leitura (Web) “O conjunto dos números naturais não tem o 0?” http://en.wikipedia.org/wiki/Natural_number Biografias na Wikipedia: Noam Chomsky http: //pt.wikipedia.org/wiki/Chomsky John Backus http://pt.wikipedia.org/wiki/ John_Backus Peter Naur http://pt.wikipedia.org/wiki/ Peter_Naur I NTRODUÇÃO À COMPILAÇÃO