Um compilador é um programa de software que transforma um programa ou código escrito em uma linguagem de programação de alto nível em uma linguagem de baixo nível legível por máquina. Quando escrevemos um programa ou código que pode estar em uma linguagem de alto nível, como C, C++ ou como a fornecida abaixo.
//Simple Java program public class simple{ public static void main(String[] args){ System.out.printIn("Hello World") } }Uma linguagem de alto nível está mais próxima do inglês, o que torna mais fácil para nós escrevermos programas. Mas não podemos simplesmente executar o mesmo código em um computador, pois as máquinas não conseguem entender isso. Tudo o que um computador pode entender é o código binário, ou seja, uns e zeros. Portanto, a solução para o problema de os computadores não entenderem as linguagens de alto nível seria convertê-las em código binário compreensível por máquina. Essa é a tarefa exata que é executada por um compilador.
O processo de compilação do programa simples 'hello world' lá em cima seria o seguinte -
- Criamos o programa 'hello world' e salvamos o arquivo como Hello.java.
- Quando completamos este programa, o compilador gera o código de máquina equivalente e o salva no arquivo de classe de mesmo nome, mas com extensão de classe Hello.class.
- E quando o programa é executado, é o arquivo de classe que é executado e fornece a saída.
Os compiladores são de vários tipos, mas neste artigo, vamos aprender sobre um específico, que é o Compilador de Código-Fonte.
Compilador
de
origem para origem : Um compilador de origem para origem (compilador S2S) também é referido por três outros nomes, o primeiro é o tradutor de origem para origem, o segundo é transcompilador e o terceiro é transpilador. Se tentarmos resumir o trabalho na fonte para o compilador fonte é uma frase, seria o seguinte:
Um compilador S2S recebe como entrada o código-fonte de um programa para o qual ele retorna um código-fonte com a mesma funcionalidade geral na mesma linguagem de programação ou em uma linguagem de programação diferente.
Ao contrário do compilador geral, cujo trabalho é converter uma linguagem de programação de alto nível em uma linguagem de máquina binária, o compilador fonte para fonte converte um código-fonte de uma linguagem de programação para outra linguagem de programação que está no mesmo nível de compilação da máquina língua. Por exemplo, enquanto o compilador tradicional pode converter C para assembly ou Jave para bytecode , o compilador de origem para origem pode converter uma linguagem de script para outra, como Javascript para Python ou C++ para Java .
Alguns exemplos de compiladores tradicionais estão listados abaixo:
Nome | Idioma de Origem | Língua Alvo |
GCC | C++ | Binário / Linguagem de Máquina |
Clang | C++ | Binário / Linguagem de Máquina |
JAVAC | Java | Código de byte |
GCJ | Jave | Código de byte |
ECJ | Java | Código de byte |
Alguns exemplos de compiladores Source to Source estão listados abaixo:
Nome | Idioma de Origem | Língua Alvo |
Cfront | C++ | C |
HPHPc | PHP | C++ |
Babel | ES ^ + (JS) | ES5 |
ClojureScript | Clojure | JavaScript |
JSSweet | Java | TypeScript |
Swiftify | Objective-C | Rápido |
J2ObjC | Java | Objective-C |
Haxe | Haxe | ActionScript3, JavaScript, Java, C++, C#, PHP, Python, Lua |
Maia | Maia | Verilog |
Cerberus X | Cerberus | JavaScript, Java, C++, C# |
Uma das principais aplicações de código fonte para compiladores de código-fonte é converter o código antigo, ou seja, código legado, para as versões mais recentes de uma linguagem de programação ou API que ajuda a manter a compatibilidade com versões anteriores do código. As ferramentas são muito úteis na atualização de bases de código grandes e antigas que, de outra forma, levariam muito tempo para fazer isso manualmente. Um exemplo disso poderia ser a conversão do programa da versão mais antiga do C++ para a versão estável atual, que é C++ 20. Ou também pode ser o caso de uma API, como o antigo programa Dart, a ser convertida para a versão mais recente do Dart 2.0. A estrutura do mais recente poderia depender do compilador. Pode ser muito semelhante ao código original para facilitar o processo de desenvolvimento de uma linguagem para outra ou da versão mais antiga para a mais recente.
Se olharmos mais de perto a tabela acima, podemos deduzir que o uso inicial de algumas das principais linguagens de programação, como PHP ou C++, foi iniciado como fonte para compiladores de origem, já que seu principal uso era converter para o outras linguagens de programação convencionais. Hoje também, se dermos uma olhada, podemos identificar linguagens como Dart, Typescript, CoffeeScript, Emcscript e outras como sendo principalmente utilizadas para a conversão para outras linguagens.
Tradutor de
linguagem assembly
: os tradutores de linguagem assembly são um dos exemplos mais importantes do compilador fonte para fonte. Abaixo, discutimos brevemente os quatro tradutores da linguagem assembly.
- Intel CONV86 -
é um dos primeiros compiladores que podem traduzir assembly para o binário. No final dos anos 70, era feito pela Intel, que é famosa por fazer processadores. O objetivo pretendido para isso era executar de forma confiável o programa feito para um processador de 8 bits no processador de 16 bits da Intel. De acordo com os usuários, por ser um dos primeiros no gênero, não foi capaz de atender às expectativas. - SCP TRANS86 -
Semelhante ao Intel CONV86, este tradutor foi desenvolvido em 1980 por um engenheiro chamado Tim Paterson, conhecido como o criador do famoso 86-DOS. Este tradutor foi projetado para traduzir o código assembly do Intel 8080 e Zilog Z80 em código .ASM para o processador Intel 8086 da Intels de 16 bits. Mas, semelhante ao seu homólogo anterior, ele não era capaz de realizar o trabalho de forma eficaz e exigia muita correção manual. - Sorcim TRANS86 -
Socrium é uma start-up que também ofereceu ao mercado um tradutor de montagens em 1980. Também foi inventado para converter montagens para MS-DOS. Este tradutor provou ser um substituto melhor para os dois anteriores. - Digital Research XLT86 -
Este tradutor surgiu no mercado em setembro de 1981 e foi desenvolvido por Gary Kildall. Antes deste tradutor, nenhum outro tinha a abordagem de otimização do compilador que proporcionava um desempenho eficaz. Como o SCP TRANS86, seu objetivo também era converter o código-fonte .ASM do Intel 8080 no código .A86 do Intel 8086.
Esses quatro tradutores de código de montagem marcam o início dos compiladores de origem em origem, que agora haviam feito muitas dobras no progresso.
Aprenda todos os conceitos do GATE CS com aulas gratuitas ao vivo em nosso canal do youtube.