Sem resumo de edição |
|||
| Linha 11: | Linha 11: | ||
= Princípio de funcionamento = | = Princípio de funcionamento = | ||
<br> | <br> | ||
O compilador primeiramente faz a análise do código fonte | O compilador primeiramente faz a análise do código fonte e então gera o código final. A análise é dividida em três partes: léxica, sintática e semântica. | ||
= Análise Léxica = | = Análise Léxica = | ||
| Linha 24: | Linha 24: | ||
<br> | <br> | ||
As análises léxica e sintática não estão preocupadas com o significado ou semântica dos programas que elas processam. O papel do analisador semântico é prover métodos pelos quais as estruturas construídas pelo analisador sintático possam ser avaliadas ou executadas. As gramáticas livres de contexto não são suficientemente poderosas para descrever uma série de construções das linguagens de programação, como por exemplo regras de escopo, regras de visibilidade e consistência de tipos. É papel do analisador semântico assegurar que todas as regras sensíveis ao contexto da linguagem estejam analisadas e verificadas quanto à sua validade. Um exemplo de tarefa própria do analisador semântico é a checagem de tipos de variáveis em expressões. Um dos mecanismos comumente utilizados por implementadores de compiladores é a Gramática de Atributos, que consiste em uma gramática livre de contexto acrescentada de um conjunto finito de atributos e um conjunto finito de predicados sobre estes atributos. | As análises léxica e sintática não estão preocupadas com o significado ou semântica dos programas que elas processam. O papel do analisador semântico é prover métodos pelos quais as estruturas construídas pelo analisador sintático possam ser avaliadas ou executadas. As gramáticas livres de contexto não são suficientemente poderosas para descrever uma série de construções das linguagens de programação, como por exemplo regras de escopo, regras de visibilidade e consistência de tipos. É papel do analisador semântico assegurar que todas as regras sensíveis ao contexto da linguagem estejam analisadas e verificadas quanto à sua validade. Um exemplo de tarefa própria do analisador semântico é a checagem de tipos de variáveis em expressões. Um dos mecanismos comumente utilizados por implementadores de compiladores é a Gramática de Atributos, que consiste em uma gramática livre de contexto acrescentada de um conjunto finito de atributos e um conjunto finito de predicados sobre estes atributos. | ||
= Geração de código final = | = Geração de código final = | ||
Edição das 02h19min de 7 de junho de 2017
Esta pesquisa deve fornecer um conteúdo atualizado sobre o tema acima. Não esqueça de incluir as referëncias (fontes) no último item, reforçando que não deve ser um Copy/Paste e sim uma síntese das pesquisas que fizer.
Conceito
Compiladores são programas que traduzem uma linguagem-fonte escrita em uma linguagem de programação para uma linguagem-alvo de baixo nível, como linguagem de montagem ou código de máquina.
Princípio de funcionamento
O compilador primeiramente faz a análise do código fonte e então gera o código final. A análise é dividida em três partes: léxica, sintática e semântica.
Análise Léxica
Na primeira fase do compilador, o analisador léxico, também denominado scanner, lê o código fonte, caracter a caracter, buscando a separação e identificação dos elementos componentes do programa fonte, chamados símbolos léxicos ou tokens. O que não é necessário para o programa é removido nessa fase, tais como espaços em branco e comentários.
Análise Sintática
O analisador sintático recebe do scanner o código-fonte em forma de tokens e determina a estrutura do programa. Os resultados da análise sintática são geralmente representados como uma árvore sintática.
Análise Semântica
As análises léxica e sintática não estão preocupadas com o significado ou semântica dos programas que elas processam. O papel do analisador semântico é prover métodos pelos quais as estruturas construídas pelo analisador sintático possam ser avaliadas ou executadas. As gramáticas livres de contexto não são suficientemente poderosas para descrever uma série de construções das linguagens de programação, como por exemplo regras de escopo, regras de visibilidade e consistência de tipos. É papel do analisador semântico assegurar que todas as regras sensíveis ao contexto da linguagem estejam analisadas e verificadas quanto à sua validade. Um exemplo de tarefa própria do analisador semântico é a checagem de tipos de variáveis em expressões. Um dos mecanismos comumente utilizados por implementadores de compiladores é a Gramática de Atributos, que consiste em uma gramática livre de contexto acrescentada de um conjunto finito de atributos e um conjunto finito de predicados sobre estes atributos.
Geração de código final
A fase de geração de código final é a última fase da compilação. A geração de um bom código objeto é difícil devido aos detalhes particulares das máquinas para os quais o código é gerado. Contudo, é uma fase importante, pois uma boa geração de código pode ser, por exemplo, duas vezes mais rápida que um algoritmo de geração de código ineficiente. Nem todas as técnicas de optimização são independentes da arquitetura da máquina-alvo. Optimizações dependentes da máquina necessitam de informações tais como os limites e os recursos especiais da máquina-alvo a fim de produzir um código mais compacto e eficiente. O código produzido pelo compilador deve se aproveitar dos recursos especiais de cada máquina-alvo. Segundo Aho, o código objeto pode ser uma sequência de instruções absolutas de máquina, uma sequência de instruções de máquina relocáveis, um programa em linguagem assembly ou um programa em outra linguagem.
Exemplos de compiladores
- Para C e C++
- Dev-C++
- GCC
- C++ Builder
- Visual C++
- Para Java (todos são Ambientes de Desenvolvimento Integrado (IDE))
- Eclipse
- JBuilder
- JEdit
- JDeveloper
- NetBeans
- Para Python (todos são IDEs)
- Idle
- Eclipse
- Wing
- Komodo
- Para PHP:
- Roadsend
- Phalanger
Referências bibliográficas
- Louden, Kenneth C. Compiladores: princípios e práticas / Kenneth C. Louden ; [ tradução Flávio Soares Corrêa da Silva]. -- São Paulo : Pioneira Thomson Learning, 2004. Título original: Compiler construction : principles and practice.
<ISBN: 85-221-0422-0>
- Pulcinelli, Márcio. Princípios de um compilador.
<https://www.tiespecialistas.com.br/2014/02/principios-de-um-compilador/>. Acesso em 06/06/2017.
- Ricarte, Ivan. Compiladores.
<http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node37.html>. Acesso em 06/06/2017.
- PythonBrasil. Ides Python.
<https://wiki.python.org.br/IdesPython>. Acesso em 06/06/2017.
- ROADSEND. Roadsend PHP.
<http://www.roadsend.com/>. Acesso em 06/06/2017.
- Phalanger. Phalanger - The PHP Language Compiler for the .NET Framework.
<https://phalanger.codeplex.com/>. Acesso em 06/06/2017.
- Wikipedia. Compilador.
<https://pt.wikipedia.org/wiki/Compilador#Refer.C3.AAncias>. Acesso em 06/06/2017.
- Wikipedia. Linguagem Compilada.
<https://pt.wikipedia.org/wiki/Linguagem_compilada>. Acesso em 06/06/2017.
- Xavier, Denys. Lista de compiladores de C e C++.
<http://www.tiexpert.net/programacao/algoritmo/lista-compiladores-c.php>. Acesso em 06/06/2017.
- Xavier, Denys. Lista de compiladores de Java.
<http://www.tiexpert.net/programacao/algoritmo/lista-compiladores-java.php>. Acesso em 06/06/2017.