Escolar Documentos
Profissional Documentos
Cultura Documentos
Compilador
Origem: Wikipédia, a enciclopédia livre.
O nome "compilador" é usado principalmente para os programas que traduzem o código fonte de
uma linguagem de programação de alto nível para uma linguagem de programação de baixo nível
(por exemplo, Assembly ou código de máquina). Contudo alguns autores citam exemplos de
compiladores que traduzem para linguagens de alto nível como C.[4] Para alguns autores um
programa que faz uma tradução entre linguagens de alto nível é normalmente chamado um
tradutor, filtro[5] ou conversor de linguagem. Um programa que traduz uma linguagem de
programação de baixo nível para uma linguagem de programação de alto nível é um
descompilador.[6] Um programa que faz uma tradução entre uma linguagem de montagem e o
código de máquina é denominado montador (assembler).[5] Um programa que faz uma tradução
entre o código de máquina e uma linguagem de montagem é denominado desmontador
(disassembler).[6] Se o programa compilado pode ser executado em um computador cuja CPU ou
sistema operacional é diferente daquele em que o compilador é executado, o compilador é
conhecido como um compilador cruzado.[7]
História
Os softwares para os primeiros computadores foram escritos principalmente em linguagem
assembly por muitos anos. As linguagens de alto nível de programação não foram inventadas até
que os benefícios de ser capaz de reutilizar software em diferentes tipos de CPUs passassem a ser
significativamente maiores do que o custo de se escrever um compilador. A capacidade de
memória muito limitada dos primeiros computadores também criava muitos problemas técnicos
na implementação de um compilador.
https://pt.wikipedia.org/wiki/Compilador 1/8
07/12/23, 16:21 Compilador – Wikipédia, a enciclopédia livre
Características
Normalmente, o código fonte é escrito em uma linguagem de programação de
alto nível, com grande capacidade de abstração, e o código objeto é escrito em
uma linguagem de baixo nível,[15] como uma sequência de instruções a ser
executada pelo microprocessador.
Outra parte separada do compilador que muitos usuários vêem como integrada é o linker, cuja
função é unir vários programas já compilados de uma forma independente e unificá-los em um
programa executável.[20] Isso inclui colocar o programa final em um formato compatível com as
necessidades do sistema operacional para carregá-lo em memória e colocá-lo em execução.
Fases da compilação
Análise léxica
Análise 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.[30] 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.[31] É 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.[32] Um
https://pt.wikipedia.org/wiki/Compilador 3/8
07/12/23, 16:21 Compilador – Wikipédia, a enciclopédia livre
Otimização de código
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.[36] 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
https://pt.wikipedia.org/wiki/Compilador 4/8
07/12/23, 16:21 Compilador – Wikipédia, a enciclopédia livre
aproveitar dos recursos especiais de cada máquina-alvo.[32] 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.[39]
Tratamento de erros
O tratamento de erros está voltado a falhas devido a
muitas causas: erros no compilador, erros na
elaboração do programa a ser compilado, erros no
ambiente (hardware, sistema operacional), dados
incorretos, etc. As tarefas relacionadas ao
tratamento de erros consistem em detectar cada
erro, reportá-lo ao usuário e possivelmente fazer
algum reparo para que o processamento possa
continuar.[40]
Tratamento de erro de execução em uma
aplicação Java no Eclipse. Os erros podem ser classificados em erros léxicos,
erros sintáticos, erros não independentes de
contexto (semânticos), erros de execução e erros de
limite.[41] Os erros léxicos ocorrem quando um token identificado não pertence a gramática da
linguagem fonte. Os erros sintáticos ocorrem quando alguma estrutura de frase não está de acordo
com a gramática, como por exemplo parênteses sem correspondência. Os erros não independentes
de contexto em geral são associados a não declaração de objetos como variáveis e erros de tipos. Os
erros de execução ocorrem após a compilação, quando o programa já está sendo executado. Um
exemplo típico é o da divisão por zero. Os erros de limite, ocorrem durante a execução e estão
relacionados as características da máquina na qual o programa está sendo executado, como por
exemplo, estouro de pilha.[41]
Ver também
Ciência da computação
Compilador Just in Time (JIT)
Linguagens formais
Linguagem de programação
Interpretador
https://pt.wikipedia.org/wiki/Compilador 5/8
07/12/23, 16:21 Compilador – Wikipédia, a enciclopédia livre
Linker
Notas
1. Em português, "compilar" significa, por exemplo: reunir obras literárias, documentos, escritos
de vários autores, entre outros, compondo uma obra com esse material. Larousse (1992).
Dicionário da Língua Portuguesa (em inglês). [S.l.]: Nova Cultural. ISBN 85-85222-23-9
Referências
1. Aho, Alfred V.; Ullman, Jeffrey D. (1977). Principles of Compiler Design (em inglês). Reading,
Massachusetts, EUA: Addison-Wesley. p. 1. 604 páginas. ISBN 0-201-00022-9
2. Parsons, Thomas W. (1992). Introduction to Compiler Construction (em inglês). Nova Iorque,
EUA: Computer Science Press. p. 1. 359 páginas. ISBN 0-7167-8261-8
3. Appel, Andrew W. (1998). Modern Compiler Implementation in Java (http://www.cs.princeton.ed
u/~appel/modern/java/) (em inglês). Cambridge: Cambridge University Press. p. 3.
548 páginas. ISBN 0-521-58388-8
4. Cooper, Torczon (2003). Engineering a Compiler (em inglês). San Francisco: Morgan
Kaufmann. p. 2. ISBN 1-55860-698-X
5. Neto, João José (1987). Introdução à Compilação. Rio de Janeiro: LTC. 222 páginas.
ISBN 978-85-216-0483-9
6. Watt, David A.; Brown, Deryck F. (2000). Programming Language Processors in Java (em
inglês). Harlow, England: Prentice Hall. p. 27. 436 páginas. ISBN 0-130-25786-9
7. Elder, John (1994). Compiler Conctruction. A Recursive Descent Model (em inglês). 1.
Englewood Cliffs, Nova Jersey, EUA: Prentice Hall. p. 7-8. 437 páginas. ISBN 0-13-291139-6
8. Lemone, Karen A. (1992). Fundamentals of Compilers. An Introduction to Computer Language
Translation (em inglês). Boca Raton: CRC. 184 páginas. ISBN 0-8493-7341-7
9. Wexelblat, Richard L.(Editor) (1981). History of Programming Languages. New York: Academic
Press. p. 6-15. 758 páginas. ISBN 0-12-745040-8
10. Bashe, Charles J.; Johnson, Lyle R.; Palmer, John H.; Pugh, Emerson W. (1986). IBM´s Early
Computers. Cambridge: MIT Press. p. 333. 716 páginas. ISBN 0-262-02225-7
11. McClelland, William F (abril 1983). «Programming». Annals of The History of Computing (em
inglês). 5 (2). Arlington, VA: American Federation of Information Processing Societies. pp. 135–
139. ISSN 1058-6180 (https://www.worldcat.org/issn/1058-6180)
12. Sammet, Jean E (1969). Programming Languages: History and Fundamentals. Englewood
Cliffs, New Jersey: Prentice Hall. p. 5. 785 páginas. ISBN 0-13-729988-5
13. «IP: Os primeiros compiladores COBOL do mundo» (https://web.archive.org/web/20120220002
430/http://www.interesting-people.org/archives/interesting-people/199706/msg00011.html).
interesting-people.org. 12 de Junho de 1997. Consultado em 21 de dezembro de 2011.
Arquivado do original (http://www.interesting-people.org/archives/interesting-people/199706/ms
g00011.html) em 20 de fevereiro de 2012
14. T. Hart and M. Levin. «O novo compilador, AIM-39 - CSAIL Digital Archive - Artificial Intelligence
Laboratory Series» (ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-039.pdf) (PDF).
publications.ai.mit.edu[ligação inativa]
15. Mak, Ronald (1996). Writing Compilers and Interpreters. An Applied Approach Using C++ (em
inglês). Nova Iorque: John Wiley and Sons. p. 1. 838 páginas. ISBN 0-471-11353-0
16. Holmes, Jim (1995). Object-Oriented Compiler Construction (em inglês). Englewood Cliffs,
Nova Jersey: Prentice Hall. p. 2-3. 483 páginas. ISBN 0-13-630740-X
17. Sebesta, Robert (2010). Conceitos de Linguagens de Programação 9ª ed. Porto Alegre:
Bookman. p. 49-50. 792 páginas. ISBN 978-85-7780-791-8
18. Engel, Joshua (1999). Programming for the Java Virtual Machine (em inglês). Reading,
Massachusetts: Addison & Wesley. p. 355. 488 páginas. ISBN 0-201-30972-6
https://pt.wikipedia.org/wiki/Compilador 6/8
07/12/23, 16:21 Compilador – Wikipédia, a enciclopédia livre
19. Louden, Kenneth C. (2004). Compiladores. Princípios e Práticas. São Paulo: Pioneira
Thompson Learning. p. 5. 569 páginas. ISBN 85-221-0422-0
20. Levine, John R. (2000). Linkers & Loaders (em inglês). San Francisco: Morgan Kaufmann
Publishers. p. 1-3. 256 páginas. ISBN 1-55860-496-0
21. Aho, Alfred V.; Ullman, Jeffrey D. (1972). The Theory of Parsing, Translation, and Compiling,
Vol. 1, Parsing (em inglês). 1. Englewood Cliffs, Nova Jersey, EUA: Prentice Hall. p. 59.
542 páginas. ISBN 0-13-914556-7
22. Price, Ana M. A.; Toscano, Simão Sirineo (2000). Implementação de Linguagens de
Programação: Compiladores. Série de Livros Didáticos Número 9. Porto Alegre: Sagra
Luzzatto. 195 páginas. ISBN 978-85-241-0639-2
23. «Compiladores - Página de José Lucas Mourão Rangel Netto» (https://web.archive.org/web/20
090412162502/http://www-di.inf.puc-rio.br/~rangel/comp.html). PUC-Rio. Consultado em 21 de
junho de 2009. Arquivado do original (http://www-di.inf.puc-rio.br/~rangel/comp.html) em 12 de
abril de 2009
24. Fischer, Charles N.; LeBlanc, Jr, Richard J. (1991). Crafting a Compiler with C (em inglês).
Redwood City, California: Benjamin Cummings Publishing. p. 50. 812 páginas. ISBN 0-8053-
2166-7
25. Aho, Alfred V.; Sethi, Ravi; Ullman, Jeffrey D. (1986). Compilers: Principles, Techniques and
Tools (em inglês). Reading, Massachusetts, EUA: Addison-Wesley. 796 páginas. ISBN 978-0-
201-10088-4
26. Delamaro, Marcio (2004). Como Construir um Compilador Utilizando Ferramentas Java (http://
www.novateceditora.com.br/livros/compilador/). São Paulo: Novatec. p. 4. 308 páginas.
ISBN 85-7522-055-1
27. Grune, Dick; Bal, Henri E.; Jacobs, Ceriel J. H.; Langendoen, Koen G (2001). Projeto Moderno
de Compiladores. Rio de Janeiro: Campus. ISBN 978-85-352-0876-4
28. Lewis II, P. M.; Rosenkrantz, D,J.; Stearns, R.E. (1978). Compiler Design Theory (em inglês).
Reading, Massachusetts: Addison-Wesley. p. 227. 647 páginas. ISBN 0-201-14455-7
29. Alblas, Henk; Nymeyer, Albert (1996). Practice and Principles of Compiler Building with C (em
inglês). London: Prentice Hall. p. 30. 427 páginas. ISBN 0-13-349267-2
30. Watson, Des (1989). High-Level Languages and Their Compilers (em inglês). Wokingham,
Reino Unido: Addison-Wesley. 337 páginas. ISBN 0-201-18489-3
31. Wilhelm, Reinhard; Maurer, Dieter (1995). Compiler Design (em inglês). Harlow, England:
Addison-Wesley. 606 páginas. ISBN 0-201-42290-5
32. Tremblay, Jean-Paul; Sorenson, Paul G. (1989). The Theory and Practice of Compiler Writing
(em inglês). Nova Iorque: McGraw-Hill. 796 páginas. ISBN 0-07-065161-2
33. Pittman, Thomas; Peters, James (1992). The Art of Compiler Design. Theory and Practice (em
inglês). Englewood Cliffs, Nova Jersey, EUA: Prentice Hall. 419 páginas. ISBN 0-13-048190-4
34. Pyster, Arthur B. (1988). Compiler Design and Construction. Tools and Techniques (em inglês).
Nova Iorque, EUA: Van Nostrand Reinhold Company. p. 8. 267 páginas. ISBN 0-442-27536-6
35. Crespo, Rui Gustavo (1998). Processadores de Linguagens. da Concepção à Implementação.
Lisboa, Portugal: IST Press. p. 247. 435 páginas. ISBN 972-8469-01-2
36. Aho, Alfred V.; Ullman, Jeffrey D. (1977). Principles of Compiler Design (em inglês). Reading,
Massachusetts, EUA: Addison-Wesley. 604 páginas. ISBN 0-201-00022-9
37. Muchnick, Steven S. (1997). Advanced Compiler Design Implementation (em inglês). San
Francisco, California: Morgan Kaufmann Publishers. p. 96. 856 páginas. ISBN 1-55860-320-4
38. Kakde, O. G. (2003). Algorithms for Compiler Design (em inglês). Hingham: Charles River
media. 334 páginas. ISBN 1-58450100-6
39. Aho, Alfred V.; Ullman, Jeffrey D. (1972). The Theory of Parsing, Translation, and Compiling,
Vol. 2, Compiling (em inglês). 2. Englewood Cliffs, Nova Jersey, EUA: Prentice Hall. p. 720.
ISBN 0-13914564-8
40. Waite, William M.; Goos, Gerhard (1984). Compiler Construction. Nova Iorque: Springer-
Verlag. p. 302. 446 páginas. ISBN 0-387-90821-8
https://pt.wikipedia.org/wiki/Compilador 7/8
07/12/23, 16:21 Compilador – Wikipédia, a enciclopédia livre
41. Hunter, Robin (1987). Compiladores. Sua Concepção e Programação em Pascal. Lisboa:
Presença. p. 259-275. 323 páginas. Depósito legal nº 16057/87
42. Kowaltowski, Tomasz (1983). Implementação de Linguagens de Programação. Rio de Janeiro:
Guanabara Dois. p. 170-171. 189 páginas. ISBN 85-7030-009-3
43. Holub, Allen I. (1990). Compiler Design in C (em inglês). Englewood Cliffs, Nova Jersey:
Prentice Hall. p. 201;348. 924 páginas. ISBN 0-13-155045-4
44. Kakde, O. G. (2003). Algorithms for Compiler Design (em inglês). Hingham: Charles River
media. p. 261. 334 páginas. ISBN 1-58450100-6
Bibliografia
Appel, Andrew W. (1997). Modern Compiler Implementation in C. Basic Techiques (em inglês).
[S.l.]: Cambridge University Press. 398 páginas. ISBN 0-521-58653-4
Brown, P. J. (1979). Writing Interactive Compilers and Interpreters (em inglês). Chichester:
John Wiley & Sons. 265 páginas. ISBN 0-471-27609-X
Kaplan, Randy M. (1994). Constructing Language Processors for Little Languages (em inglês).
Nova Iorque: John Wiley & Sons. 452 páginas. ISBN 0-471-59754-6
Lee, John A. N. (1967). The Anatomy of a Compiler (em inglês). Nova Iorque: Reinhold
Publishing Company. 275 páginas. Library of Congress Catalog Card Number: 67-29207
Metsker, Steven John (2001). Building Parsers with Java (em inglês). Boston: Addison-Wesley.
371 páginas. ISBN 0-201-71962-2
Ricarte, Ivan (2008). Introdução à Compilação. Rio de Janeiro: Campus, Elsevier. 264 páginas.
ISBN 978-85-352-3067-3
Terry, Patrick D. (1986). Programming Language Translation. A Practical Approach (em inglês).
Wokingham: Addison-Wesley. 443 páginas. ISBN 0-201-18040-5
Wirth, Niklaus (1996). Compiler Construction (https://web.archive.org/web/20070205031012/htt
p://www.cs.inf.ethz.ch/~wirth/books/CompilerConstruction/) (em inglês). [S.l.]: Addison-Wesley.
ISBN 0-201-40353-6. Consultado em 17 de março de 2007. Arquivado do original (http://www.c
s.inf.ethz.ch/~wirth/books/CompilerConstruction) em 5 de fevereiro de 2007
Ligações externas
Obtida de "https://pt.wikipedia.org/w/index.php?title=Compilador&oldid=65083654"
https://pt.wikipedia.org/wiki/Compilador 8/8