Improve Portuguese translation of Compilers guide (#27087)

Added missing translations, improved some wording and removed extraneous whitespace.
This commit is contained in:
Diogo Campos
2019-08-16 00:30:55 -03:00
committed by Randell Dawson
parent 64b403338c
commit d5046d6e82

View File

@ -2,26 +2,28 @@
title: Compilers
localeTitle: Compiladores
---
## Compiladores
### Programação
Na sua essência, um computador barebones (também conhecido como computador de programa armazenado) nada mais é do que uma máquina que sabe ler etapas escritas em um conjunto de instruções fixo e executá-las. O conjunto de instruções que um computador entende é muito específico para ele. Isso também é conhecido como linguagem de máquina ( **opcodes** ). Linguagem de máquina é muitas vezes referida como código binário.
Na sua essência, um computador barebones (também conhecido como computador de programa armazenado) nada mais é do que uma máquina que sabe ler etapas escritas em um conjunto de instruções fixo e executá-las. O conjunto de instruções que um computador entende é muito específico para ele. Isso também é conhecido como linguagem de máquina (**opcodes**). Linguagem de máquina é muitas vezes referida como código binário.
Humanos interagem com computadores usando **Programas** . Um programa é simplesmente uma sequência de opcodes fornecidos ao computador juntamente com dados que são necessários para executar os opcodes.
Humanos interagem com computadores usando **Programas**. Um programa é simplesmente uma sequência de opcodes fornecidos ao computador juntamente com dados que são necessários para executar os opcodes.
Por exemplo,
```
ADD 10, 20 // ADD is the Opcode
// and 10, 20 are the two operands(data)
// needed for the ADD instruction to be executed successfully
ADD 10, 20 // ADD é o Opcode (código da operação)
// e 10, 20 são os dois operandos (dados)
// necessários para que a instrução ADD seja executada com sucesso
```
Os humanos desenvolvem programas para resolver problemas complexos. Observando como os opcodes são simples, se tentarmos desenvolver programas usando apenas opcodes, será muito complicado e difícil de depurar. Para resolver este problema, linguagens de alto nível como C / C ++, Python, Java, Javascript, etc foram desenvolvidas.
Os humanos desenvolvem programas para resolver problemas complexos. Observando como os opcodes são simples, se tentarmos desenvolver programas usando apenas opcodes, será muito complicado e difícil de depurar. Para resolver este problema, linguagens de alto nível como C/C++, Python, Java, Javascript, etc foram desenvolvidas.
Agora, linguagens de alto nível não são adequadas para execução por computadores. Assim, surgiu a necessidade de um tradutor que pudesse digerir os programas de linguagem de alto nível e convertê-los em instruções de linguagem de máquina adequadas para execução por um computador.
#### \[HUMANOS\] -> \[Programas de idiomas de alto nível\] -> \[Tradutor\] -> \[Linguagem de máquina\] -> \[Computador\]
#### \[HUMANOS\] -> \[Programas em linguagem de alto nível\] -> \[Tradutor\] -> \[Linguagem de máquina\] -> \[Computador\]
Um **compilador** é um tipo de programa tradutor, que traduz linguagens de alto nível em código binário, que não é nada além de 1s e 0s. Quando você executa seu código-fonte, um compilador traduz todo o código primeiro e depois produz o código binário. Então o computador pega o código binário e o executa.
@ -31,29 +33,31 @@ Se houver erros no seu código-fonte, o compilador detecta e sinaliza-os. Isso i
A maioria dos compiladores divide-se em três estágios principais: Análise, Transformação e Geração de Código
1. _A análise_ está tomando código bruto e transformando-o em uma representação mais abstrata do código.
2. _A transformação_ leva essa representação abstrata e manipula para fazer o que o compilador quiser.
3. _Geração de código_ leva a representação transformada do código e transforma-lo em novo código.
1. _Análise (Parsing)_ é tomar código bruto e transformá-lo em uma representação mais abstrata do código.
2. A _Transformação_ pega essa representação abstrata e a manipula para fazer o que o compilador quiser.
3. A _Geração de Código_ pega a representação transformada do código e o transforma em novo código.
#### Análise
A análise normalmente é dividida em duas fases: **Análise Lexical** e **Análise Sintática** .
A análise normalmente é dividida em duas fases: **Análise Lexical** e **Análise Sintática**.
A _Análise Lexical_ pega o código bruto e o separa em coisas chamadas de tokens por uma coisa chamada tokenizer (ou lexer).
_A análise lexical_ pega o código bruto e o separa nessas coisas chamadas de tokens por uma coisa chamada tokenizer (ou lexer).
```
Tokens are an array of tiny little objects that describe an isolated piece of the syntax.
They could be numbers, labels, punctuation, operators, etc.
Tokens são uma lista de pequenos objetos que descrevem uma peça isolada da sintaxe.
Eles podem ser números, rótulos, pontuação, operadores, etc.
```
_A análise sintática_ pega os tokens e os reformata em uma representação que descreve cada parte da sintaxe e sua relação com o outro. Isso é conhecido como uma representação intermediária ou Abstract Syntax Tree.
A _Análise Sintática_ pega os tokens e os reformata em uma representação que descreve cada parte da sintaxe e sua relação com as outras. Isso é conhecido como uma representação intermediária ou Árvore de Sintaxe Abstrata.
```
An Abstract Syntax Tree, or AST for short, is a deeply nested object.
It represents code in a way that is both easy to work with and tells us a lot of information.
Uma Árvore de Sintaxe Abstrata (ou *Abstract Syntax Tree*, AST) é um objeto profundamente aninhado.
Ela representa o código de uma maneira que é simples de trabalhar e nos fornece muitas informações.
```
#### Transformação
O próximo tipo de estágio para um compilador é a transformação. Novamente, isso apenas pega a AST da última etapa e faz alterações nela. Ele pode manipular o AST na mesma língua ou pode traduzi-lo em um idioma totalmente novo.
O próximo tipo de estágio para um compilador é a transformação. Novamente, isso apenas pega a AST da última etapa e faz alterações nela. Ele pode manipular o AST na mesma linguagem ou pode traduzi-lo para uma linguagem totalmente nova.
#### Geração de Código
@ -63,4 +67,4 @@ Todos os compiladores precisam executar estas etapas. A maioria dos compiladores
#### Mais Informações:
["A Gentler Introduction to Programming", de Matt Adesanya,](https://medium.freecodecamp.org/a-gentler-introduction-to-programming-707453a79ee8) abrange compiladores versus intérpretes, juntamente com outros conceitos básicos de programação.
["A Gentler Introduction to Programming", de Matt Adesanya,](https://medium.freecodecamp.org/a-gentler-introduction-to-programming-707453a79ee8) abrange compiladores versus intérpretes, juntamente com outros conceitos básicos de programação.