Escolar Documentos
Profissional Documentos
Cultura Documentos
Introducao Linguagens
Introducao Linguagens
Linguagens de Programao
4.0 ndice
4.1
Programao de Computadores
4.2
Nveis de Linguagens de Programao
4.2.1
Linguagem de Mquina
4.2.2
Linguagem Hexadecimal
4.2.3
Linguagem Assembly
4.2.4
Linguagem de Alto Nvel
4.2.5
Linguagens estruturadas
2
2
3
3
5
6
4.3
Execuo de Programas
4.4
Desenvolvimento de Programas
4.4.1
Gerao do cdigo fonte (codificao)
4.4.2
Traduo do Cdigo Fonte (cdigo objeto)
4.4.3
Editores de ligao
4.4.4
Depuradores ou debuggers
8
8
8
12
13
4.5
Paradigmas de programao
4.5.1
Programao no-estruturada
4.5.2
Programao Procedural
4.5.3
Programao Modular
4.5.4
Programao Orientada a Objetos
4.5.5
Linguagens de programao e seus paradigmas
13
13
13
14
14
14
4.6
Linguagens Interpretadas
4.6.1
Compilador Versus Interpretador
4.6.2
Mquina Virtual
4.6.3
Java
14
15
15
15
usurios para algum fim especfico, seja ele de natureza profissional, educacional
ou mesmo de lazer (jogos).
Informalmente, uma linguagem de programao pode ser definida como sendo um
conjunto limitado de instrues (vocabulrio), associado a um conjunto de regras
(sintaxe) que define como as instrues podem ser associadas, ou seja, como se pode
compor os programas para a resoluo de um determinado problema.
Ao longo dos anos, foram desenvolvidas (e continuam sendo) uma grande quantidade de
linguagens de programao, algumas de uso mais geral e outras concebidas para reas
de aplicao especficas.
1
0
1
0
0
0
0
0
0
1
0
0
Figura 1.
1
0
0
1
1
1
0
0
0
0
1
1
1
1
0
1
0
1
1
0
1
0
1
0
1
0
0
1
0
1
1
1
0
0
0
1
1
1
0
0
0
1
1
0
1
0
1
1
0
0
1
0
FB AB 7F
30 39 73
F3 37 84
83 03 83
2. Ilustrao
43 27 5B 6C
63 F4 3A B4
50 83 BC 5F
78 5F FF FF
de um programa em
D5 6F
74 84
6C 10
00 00
linguagem
99 FF 10
AB 7D 6B
39 85 85
00 00 00
hexadecimal
11
54
94
00
20
35
47
74
A maioria concorda que a segunda forma, embora ainda incompleta, melhor que a
primeira para representar a rotina. Apesar de oferecer uma representao mais prxima
do que o programador est acostumado a manipular, a linguagem Assembly apresenta
certas dificuldades para a realizao dos programas, tais como a necessidade de
definio de um conjunto relativamente grande de instrues para a realizao de
tarefas que seriam relativamente simples (se representadas atravs de outras
linguagens) e a exigncia do conhecimento de detalhes do hardware do sistema
(arquitetura interna do processador, endereos e modos de operao de dispositivos de
hardware, etc...).
Por outro lado, a utilizao da linguagem Assembly proporciona um maior controle sobre
os recursos do computador, permitindo tambm obter-se bons resultados em termos de
otimizao de cdigo
Como a linguagem Assembly apenas uma verso legvel da linguagem de mquina, a
passagem de um programa escrito em Assembly para a linguagem de mquina quase
sempre direta, no envolvendo muito processamento. Esta passagem de um programa
Assembly para linguagem de mquina chamada de Montagem, e o programa que
realiza esta operao chamado de montador (Assembler).
A linguagem Assembly orientada para mquina (ou melhor, para processador),
necessrio conhecer a estrutura do processador para poder programar em Assembly. A
linguagem Assembly utiliza instrues de baixo nvel que operam com registros e
memrias diretamente. Assim ela muito orientada s instrues que so diretamente
executadas pelo processador. Na seqncia da evoluo das linguagens de
programao, procurou-se aproximar mais a linguagem de programao linguagem
natural que utilizamos no dia-a-dia: surgiram ento as linguagens de alto nvel, tipo
Pascal, C, C++, etc.
memria RAM.
n O sistema operacional momentaneamente transfere o controle da CPU para o
programa FORMAT.COM, que a essa altura j est carregado na memria
principal.
n A CPU executa o programa FORMAT.COM
n Ao terminar a execuo do FORMAT.COM, o sistema operacional volta a ter o
controle da CPU. Fica ento aguardando que voc envie um novo comando.
Podemos entender ento que nenhum programa chega at a memria por mgica, e
sim, atravs do controle feito pelo sistema operacional. Algum mais observador pode
ento ficar com a seguinte dvida: "Se o sistema operacional quem l para a memria
principal todos os programas a serem executados, como ento que o prprio sistema
operacional chegou nesta memria?". No instante em que ligamos o computador, a
memria principal no contm programa algum. Nesse instante, o sistema operacional
est armazenado no disco (normalmente no disco rgido, no caso dos PCs), e precisa
ser carregado na memria. Quem faz a carga do sistema operacional para a memria
um programa chamado BIOS, que fica gravado em memria ROM. Lembre-se que a
memria ROM no perde seus dados quando o computador desligado. Portanto, no
instante em que ligamos o computador, o BIOS j est na memria, e imediatamente
processado pela CPU. O processamento do BIOS comea com uma contagem de
memria, seguido de alguns testes rpidos no hardware, e finalmente a leitura do
sistema operacional do disco para a memria principal. Esse processo, ou seja, a carga
do sistema operacional na memria RAM, chamado de BOOT. A Figura 4 mostra o
processo de BOOT para a carga do sistema operacional DOS:
1) No instante em que o computador ligado, o sistema operacional est
armazenado em disco, a RAM est "vazia", e a CPU executa o BIOS.
2) Mostra o instante em que termina a operao de BOOT. O sistema operacional j
est carregado na memria e j est sendo executado pela CPU.
como os Montadores (ou Assemblers que, como o nome indica, so orientados para
traduzir programas escritos na linguagem Assembly) e os Compiladores, construdos
para gerar o cdigo de programas originalmente escritos em linguagens de alto nvel
como Pascal, C, Fortran e outras. O cdigo gerado por estas ferramentas representado
segundo o sistema de numerao binria e denominado cdigo-objeto.
O cdigo-objeto o cdigo produzido pelo compilador. Ele se trata de uma forma
intermediria similar a linguagem de mquina do computador. O cdigo-objeto, apesar
de estar representado em binrio, no auto-contido, ou seja, no executvel
diretamente pelos processadores. A principal razo disto que o cdigo-objeto
caracterizado normalmente por referncias a partes de programa que no esto
necessariamente definidas no mesmo arquivo que gerou o aquele arquivo objeto. Estas
outras partes do cdigo do programa podem ter sido geradas a partir de outros arquivos
de cdigo-fonte concebidos pelo mesmo programador ou existirem sob a forma de
arquivos de bibliotecas de sub-rotinas.
O processo de traduo do cdigo fonte em cdigo objeto compreende trs atividades:
anlise lxica, anlise sinttica e gerao de cdigo, que so processadas pelos
mdulos do tradutor conhecidos como analisador lxico, sinttico e gerador de cdigo.
Anlise lxica o processo de reconhecer quais cadeias de smbolos do programa-fonte
representam entidades indivisveis. Por exemplo, os trs smbolos 153 no devem ser
interpretados como 1, seguido por 5, seguido por 3, mas so reconhecidos como um
valor numrico apenas. Do mesmo modo, as palavras que aparecem no programa,
embora compostas de caracteres individuas, devem ser interpretadas cada qual como
uma unidade inseparvel. A maioria dos seres humanos executa a atividade de anlise
lxica com um esforo consciente pequeno. Quando solicitados a ler em voz alta,
pronunciamos palavras completas, em vez de caracteres individuais.
Dado que o analisador lxico identifica um grupo de smbolos que representam uma
nica entidade, ele a classifica como sendo ou um valor numrico, ou uma palavra, ou
um operador aritmtico, e assim por diante, e gera um padro de bits conhecido como
tomo (token), indicativo da classe do elemento. Esses tomos so os dados de entrada
do analisador sinttico.
Anlise sinttica o processo de identificao da estrutura gramatical do programa, e de
reconhecimento do papel de cada um dos seus componentes. O processo de anlise
sinttica feito com base em um conjunto de regras sintticas, que definem a sintaxe da
linguagem de programao. Uma forma de expressar tais regras travs de diagramas
de sintaxe, representaes grficas da estrutura gramatical de um programa. A Figura 5
apresenta um diagrama de sintaxe do comando if-then-else existente em muitas
linguagens de programao. Este diagrama indica que uma estrutura if-then-else
comea com a palavra if, seguida de uma Expresso Booleana, seguida pela palavra
then e, finalmente, por um Comando. Esta combinao pode ser ou no seguida por
uma palavra else e outro Comando. Note que os termos de fato contidos num comando
if-then-else so representados em uma elipse, enquanto os que exigem explicao
adicional, tal como Expresso Booleana e Comando, esto em retngulo. Termos que
exigem explicao adicional (aqueles nos retngulos) so chamados no-terminais;
aqueles contidos nas elipses so os terminais. Na descrio completa da sintaxe de uma
linguagem, os no terminais so descritos por meio de diagramas adicionais.
if
Expresso
Booleana
then
Comando
else
Comando
10
Expresso
-
Termo:
/
Term
Expresso
*
Varivel
Termo
Expresso
Termo
Termo
Expresso
Termo
11
if
Expresso
booleana
then
Comando
else
Comando
S2
B1
if
Expresso
booleana
then
Comando
S1
B2
Comando
if
Expresso
booleana
then
Comando
B1
if
Expresso
booleana
B2
then
Comando
S1
else
Comando
S2
Figura 8. Duas rvores de sintaxe distintas para o comando if B1 then B2 then S1 else S2
Note-se que as duas interpretao so significativamente diferentes. A primeira implica
que o comando S2 ser executado se B1 for falso, enquanto a segunda implica que S2
s ser executado se B1 for verdadeiro e B2, falso.
As definies de sintaxe para linguagens formais de programao so projetadas para
evitar tais ambigidades. Em muitas linguagens, evita-se tais problemas usando chaves,
ou ento Begin-End. Em particular, escreveramos:
If B1 then
Begin
End
if B2 then S1
else S2
e
If B1 then
Begin
End;
if B2 then S1
else S2
12
Estes comandos poderiam ser traduzidos como comandos independentes. Todavia, esta
interpretao tende a no produzir um cdigo eficiente. O gerador de cdigo deve ser
construdo de tal forma que seja capaz de identificar que, ao ser completado o primeiro
comando, os valores de x e de z j se encontram em registradores de propsito geral do
processador, no necessitando, pois, serem carregados a partir da memria para o
clculo do valor de w. Melhorias como essa constituem a otimizao de cdigo, cuja
realizao constitui importante tarefa do gerador de cdigo.
Note-se que as anlises lxica e sinttica e a gerao de cdigo no so efetuadas em
ordem estritamente seqencial, mas de forma intercalada. O analisador lxico comea
identificando o primeiro tomo e fornecendo-o ao analisador sinttico. J com esta pista
sobre a estrutura que vem a seguir, o analisador sinttico solicita ao analisador lxico o
prximo tomo. medida que o analisador sinttico reconhece sentenas ou comandos
completos, vai ativando o gerador de cdigo, para que este possa produzir as
correspondentes instrues de mquina.
13
Cdigo
Fonte
Cdigo
Fonte
Cdigo
Fonte
Cdigo
Fonte
Cdigo
Objeto
Cdigo
Objeto
Cdigo
Objeto
Cdigo
Objeto
Biblioteca
Programa
executvel
14
15
4.6.3 Java
Java uma das linguagens interpretadas mais conhecidas no momento. Ela uma
linguagem de programao de alto nvel, desenvolvida pela Syn Microsystems. Ela
uma linguagem orientada a objetos similar ao C++, mas simplificada para eliminar
caractersticas que causam erros comuns de programao.
Cdigos fontes de Java (arquivos com a extenso .java) so traduzidos na forma de um
cdigo intermedirio chamado bytecode (arquivos com a extenso .class), que podem
ser executados por um interpretador Java. O bytecode pode ser transferido atravs de
uma rede e executada por uma Mquina Virtual Java (JVM).
16