Você está na página 1de 9

LINGUAGEM DE PROGRAMAÇÃO

Criado na década de 1950, o nome compilador se refere ao processo de tradução da linguagem de


programação para linguagem de máquina (de uma linguagem fonte para uma linguagem que o
computador entenda). No entanto, a tradução de uma linguagem fonte não é a única função do
compilado; ele também reporta ao seu usuário a presença de erros no programa origem (Mizrahi,
2008). Um compilador consiste em um programa que lê outro programa escrito em uma linguagem
– a linguagem de origem – e a traduz em um programa equivalente em outra linguagem – a
linguagem de destino. Existem duas tarefas principais executadas por um compilador no processo
de tradução:
1. Análise – momento em que o texto de entrada (código escrito na linguagem de programação) é
examinado, verificado e compreendido;
2. Síntese (ou geração de código) – momento em que o texto de saída (texto objeto) é gerado.
Uma das formas mais comuns de tabela utilizada na representação intermediária é a tabela de
símbolos (tokens). A função dessa tabela é guardar cada token usado no programa na informação
correspondente.

COMPONENTES DE UM COMPILADOR
A construção de um compilador é dividida em partes, cada uma com uma função especifica:
• Analisador Léxico(AL): separa no programa fonte cada símbolo que tenha algum
significado para a linguagem ou avisa quando um símbolo que não faz parte da linguagem é
encontrado.
• Análise Sintática(AS): é o responsável por verificar se a seqüência de símbolos existentes
no programa fonte formam um programa válido ou não. É construído sobre uma gramática
composta de uma série de regras que descrevem quais são as construções válidas da
linguagem.
• Análise Semântica(ASE): irá verificar se os aspectos semânticos estão corretos, ou seja, se
não existem incoerências quanto ao significado das construções utilizadas pelo programador.
A ASE depende de uma tabela de símbolos onde são armazenadas as informações de
variáveis declaradas, funções ou métodos, entre outros. 
• Geração e Otimização de Código (GC): após a verificação que não existem erros
sintáticos ou semânticos, o compilador realiza a sua tarefa de criar o programa objeto que
reflete, mediante instruções de baixo nível, os comandos do programa fonte. Também pode
fazer a otimização do código, onde são aplicadas diversas técnicas para otimizar algumas
características do programa objeto, como o seu tamanho ou sua velocidade.  A linguagem de
Programação C é uma linguagem com uma estrutura simples e que gera códigos mais
enxutos e velozes se comparada a outras linguagens, pois permite a inclusão de uma farta
quantidade de rotinas. 
Um programa em C é constituído de:
• Um cabeçalho, que contém inclusão de bibliotecas, as diretivas de compilador nas quais se
definem o valor de constantes simbólicas, declaração de variáveis, declaração de funções,
entre outros;
• Um bloco principal de instruções e outros blocos de rotinasDocumentação do programa em
forma de comentários. O primeiro estágio da compilação é chamado de pré-
processamento Um comentário em C consiste em uma sequência de caracteres que começa
com uma barra e um asterisco (/*) e termina com um asterisco e uma barra (*/). Os
comentários são tratados pelo compilador como um espaço em branco, isto é, são ignorados.
Um comentário pode incluir qualquer grupo de caracteres, incluindo mudanças de linha,
exceto o indicador de fim de comentário, ou seja /*. Em virtude deste fato, os comentários
descritos não podem ser encadeados (um comentário dentro de outro comentário). Outra
forma de formar comentários em C consiste em escrever duas barras (//) na coluna em que
queremos iniciar o comentário. Todos os caracteres, até ao final dessa linha, serão
considerados comentários. A primeira linha do programa #include informa ao compilador a
biblioteca que deve incluir à biblioteca stdio (standard input/output)   A função main serve
como o ponto de partida para a execução do programa. Em geral, ela controla a execução,
direcionando as chamadas para outras funções no programa.Portanto, a função main é a
primeira função de um programa C a ser executada e a única que não precisa ser
explicitamente chamada. A seguir, os formatos usados na função main:  int main()  int
main(void)  int main(int argc, char * argv[ ])  int main(int argc, char * const argv[ ],
char * const envp[ ]) Os formatos int main( ) e int main(void) são usados quando nenhum
argumento é passado ao programa.  Em linguagem C podemos passar argumentos através da
linha de comando para um programa quando ele inicia.
A função main recebe parâmetros passados via linha de comando como vemos a seguir:
int main( int argc, char *argv[ ] )
Onde:
argc – é um valor inteiro que indica a quantidade de argumentos que foram passados ao chamar o
programa.
argv – é um vetor de char que contém os argumentos, um para cada string passada na linha de
comando.
argv[0] armazena o nome do programa que foi chamado no prompt, sendo assim, argc é pelo menos
igual a 1, pois no mínimo existirá um argumento.
Os argumentos passados por linha de comando devem ser separados por um espaço ou tabulação
 
 
A função main pode retornar um inteiro para o sistema operacional. Para isso, utiliza-se o int
main(), em conjunto com o comando return, para encerrar a função e passar um inteiro para o
sistema operacional. O retorno zero indica ao Sistema Operacional que o programa foi
bemsucedido.
 
Toda função é declarada com uma identificação e parênteses após seu nome. No exemplo
main(), a função é identificada com o nome “main” e acompanhada de “(” e “)”. Essas
características que permitem que o compilador saiba que se trata de uma função. Sem os parênteses,
o compilador pode tratar o nome como se fosse uma variável, ocasionando um erro, uma vez que a
palavra main é reservada pelo compilador.]
A palavra indentação é um neologismo e não existe na língua portuguesa. Esse termo foi
“abrasileirado” do termo indentation, usado na língua inglesa, que significa recuo. O objetivo da
indentação é o de tornar os códigos mais legíveis. A utilização de regras de indentação permite, por
meio de uma simples inspeção visual, evidenciar facilmente a estrutura global do programa,
tornando claramente visíveis todas as instruções de um ou mais blocos de código.
 
Na linguagem de programação C, existem comandos processados durante a compilação do
programa, conhecidos como diretivas de compilação. Esses comandos informam ao compilador
as constantes simbólicas usadas na linguagem de programação e as bibliotecas que devem ser
anexadas ao programa compilado (Mizrahi, 2008). Observe os exemplos mostrados abaixo:  A
diretiva #include diz ao compilador para incluir na compilação do programa outros arquivos.
Geralmente estes arquivos contém bibliotecas de funções ou rotinas do usuário.  A diretiva
#define diz ao compilador quais são as constantes simbólicas que serão usadas no programa.
 

 
 
 
 
 
 
 
BIT:
 
1 bit é o menor espaço que podemos lidar na memória d eum computador. Só pode trabalhar com
dois valores : 0 e 1.
8bits: 1byte
1024: 1kilobyte
1024 kilobyres: 1megabytes
1024 megabyte: 1gigabyte
 
Cada variável de um programa ocupa um certo número de bytes consecutivos na memória do
computador. Uma variável do tipo char ocupa 1 byte. Uma variável do tipo int ocupa 4 bytes e
um double ocupa 8 bytes em muitos computadores.  
 
Toda variável tem uma localização na memória e o endereço de identificação dessa variável é o
primeiro byte que foi ocupado por ela. 
 
 
 
A memória de um computador é dividida em bytes, numerados de zero até o limite de memória
da máquina. Esses números são chamados endereços de bytes, usados como referências, pelo
computador, para localizar as variáveis
Quando o programa é carregado na memória, ocupa certa quantidade de bytes, e toda variável e
função desse programa terão seu espaço e endereço particular. Para conhecer o endereço em que
uma variável está alocada, usa-se o operador de endereços &.
Quando se define uma variável como ponteiro, dizemos que o endereço de uma variável simples
está guardado em um ponteiro que pode ser utilizado como parâmetro para uma função. Para
que isso ocorra, basta colocar o operador “*” antes da variável e o operador “&” na chamada
do parâmetro.
Endereço de memória :
 

 
A função scanf() espera que o usuário digite algum dado de entrada e o operador ‘&’,
acompanhado da variável, serve para especificar o lugar certo onde esse dado vai ficar posicionado
na memória. Portanto, o uso do operador de endereço para essa função se faz necessário (Ascencio,
2012). O operador oposto é o * (asterisco), que pega o valor apontado pelo endereço.Por essas
razões, podemos encontrar endereços diferentes na passagem de parâmetros e execução do
algoritmo (Mizrahi, 2008) para cada nova execução de um problema.
Mizrahi (2008) descreve memória como uma unidade organizada logicamente em palavras. Uma
palavra é uma unidade lógica de informação constituída por um número de bits de único endereço,
consequentemente, um conjunto de palavras armazenadas na memória é um programa, e pode ser
dividido em duas categorias:  Instruções – operações (programa propriamente dito) realizadas
pela máquina;  Dados – variáveis, ou valores, processadas nessas operações.
 
PONTEIROS
 
O ponteiro é uma ferramenta poderosa oferecida em linguagens de programação e considerada, pela
maioria dos programadores, um dos tópicos mais difíceis.Apontadores, ou ponteiros, são variáveis
que armazenam o endereço de outras variáveis na memória. Ou seja, em vez de termos um valor
numérico ou caracteres, por exemplo, armazenado na variável, temos um endereço.
Dizemos que um ponteiro “aponta” para uma variável na memória quando este contém o
endereço daquela variável. O uso de ponteiros é muito útil quando um dado deve ser acessado na
memória em diferentes partes de um programa.
De acordo com Mizrahi (2008), estas são algumas razões para o uso de ponteiros:
1. Fornecem maneiras com as quais as funções podem realmente modificar os argumentos que
recebem (passagem de parâmetros por referência);
2. Criar estruturas de dados complexas, como listas encadeadas e árvores binárias, em que um item
deve conter referências a outro;
3. Alocar e desalocar memória dinamicamente do sistema;
4. Passar para uma função o endereço de outra função.
 
Meu ponteiro está apontando (*) para um número int ( inteiro). ponteiro= &x ( endereço de
memória do valor x)

 
printf(“%i”, * ponteiro); // acessa o valor de x: 10
printf(“%i”, ponteiro); // acessa o endereço de memória que está o valor de x
 
A sintaxe de declaração de um ponteiro é: tipo *nome_ponteiro; Em que temos:
 tipo – refere-se ao tipo de dado da variável armazenada que é apontada pelo endereço do
ponteiro;
 *nome_ponteiro – o nome da variável ponteiro;
 O uso do asterisco * serve para determinar que a variável usada será um ponteiro.
 
PONTEIRO TAMANHO E ENDEREÇAMENTO
 
Um ponteiro também é uma variável e também ocupa espaço na memória. Normalmente, o tamanho
de um ponteiro independe do tipo de dados da variável da qual está apontando e ocupa o espaço de
um inteiro (Mizrahi, 2008). Para obter o tamanho de um tipo de variável na linguagem de
programação C, utiliza-se a função sizeof.
 
PONTEIROS E VETORES
 
Vetores unidimensionais, ou arrays, consistem em um conjunto de dados de mesmo tipo
armazenados em posições sequenciais na memória, caracterizando uma estrutura de dados
homogênea. O nome do vetor é um 11 ponteiro que aponta para o primeiro elemento do vetor.
 
 
 

 
 
 
Vetor de ponteiros
 
Os ponteiros também podem ser declarados na forma de uma estrutura de dados homogênea
(Mizrahi, 2008). Para evidenciar esse conceito, temos o algoritmo na Figura 24, que define um
vetor de ponteiros com 4 elementos, e mais quatros vetores de 3 elementos.
 

 
 
STRUCT
 
Uma struct pode ser vista como um conjunto de variáveis referenciadas pelo mesmo nome, sendo
que cada uma delas pode ter o mesmo tipo de dado ou vários tipos.
A ideia básica por trás da uma struct é criar uma variável que contenha várias outras variáveis. Em
outras palavras, estamos criando uma variável que contém dentro de si outras variáveis.
 
 
OBS: fgets() - substitui o scanf quando for ler algo com espaço : Ana Maria.
fgets( nome, 11, stdin); // stdin significa que a leitura é feita pelo teclado.
 
http://linguagemc.com.br/struct-em-c/
 
 
UNION
 
Com a union pode-se criar variáveis capazes de suportar dados diferentes, alocados no mesmo
espaço de memória, em momentos diferentes. Isto é, a union permite que um conjunto de variáveis
compartilhe o mesmo espaço na memória. Ocupa menos espaço na memória.
Parecido com Struct.
 
Enum
 
Enum, ou enumeração, é um tipo de dado definido pelo usuário, com o uso de uma lista de
identificadores. Os identificadores podem ser vistos como uma lista de constantes, em que cada
constante tem um nome significativo.Retorna um número inteiro, o primeiro sempre é o zero.

 
Typedef
 
O comando typedef é usado para criar “sinônimo” ou um “alias” para tipos de dados existentes. Na
prática podemos dizer que estamos renomeando um tipo de dados.
É importante ressaltar que o comando typedef não cria um novo tipo. Ele apenas permite que um
tipo existente seja denominado de uma forma diferente, de acordo com a especificação desejada
pelo programador.
 

Você também pode gostar