Você está na página 1de 16

Captulo 4

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

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

4.1 Programao de Computadores


Embora o equipamento bsico para a realizao das tarefas associadas Cincia da
Computao seja, evidentemente, o Computador, ns utilizaremos, ao longo deste
curso, o conceito de Sistema Computacional, pelo seu significado mais abrangente, tanto
quanto ao tipo de hardware envolvido quanto pela sua extenso aos demais
componentes envolvidos nas atividades computacionais, particularmente os programas,
mtodos, regras e documentao.
Um Sistema Computacional pode ser visto como uma associao entre dois conceitos
cada vez mais utilizados na terminologia de informtica:
n o hardware, que est associado parte fsica do sistema (os circuitos e

dispositivos) que suporta o processamento da informao;


n o software, que corresponde ao conjunto de programas responsveis pela
pilotagem do sistema para a execuo das tarefas consideradas.
No que diz respeito a esta segunda classe de componentes, pode-se estabelecer uma
classificao segundo o tipo de servio por ele realizado. Assim, tem-se as seguintes
definies:
n o software de sistema (ou sistema operacional) capaz de oferecer ao usurio,

ou a outros softwares, facilidades de acesso aos recursos do computador, seja


atravs de comandos, seja atravs de servios especiais ativados a nvel de um
programa. O sistema operacional administra os arquivos, controla perifricos e
executa utilitrios.
n o software utilitrio, que podem ser programas desenvolvidos por especialistas
ou mesmo por usurios experimentados que tem por objetivo facilitar a realizao
de determinadas atividades correntes no uso dos computadores (deteco e
eliminao de vrus, programas de comunicao em redes de computadores,
compresso de arquivos, etc...);
n o software aplicativo, que so os programas desenvolvidos ou adquiridos pelos

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.

4.2 Nveis de Linguagens de Programao


As linguagens de programao podem ser classificadas em nveis de linguagens, sendo
que os nveis mais baixos so mais prximas da linguagem interpretada pelo
processador e mais distante das linguagens naturais.

4.2.1 Linguagem de Mquina


Lembrando que o computador corresponde basicamente a um conjunto de circuitos, a
sua operao controlada atravs de programas escritos numa forma bastante primitiva,
baseada no sistema binrio de numerao tanto para a representao dos dados quanto
das operaes. A esta forma de representao dos programas, dado o nome de
linguagem de mquina, em razo de ser a forma compreendida e executada pelo
hardware do sistema.

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

As instrues de linguagem de mquina so representadas por cdigos que


correspondem palavras binrias cuja extenso pode variar de 8 a 64 bits (Figura 1).
Dependendo da operao considerada, o cdigo de uma instruo pode simbolizar a
operao a ser executada e os dados envolvidos na operao (ou uma referncia
localizao dos dados).

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

Ilustrao de um programa em linguagem de mquina

Por uma questo de custo a nvel do hardware, as operaes representadas pelas


instrues de linguagem de mquina so bastante elementares, como por exemplo, a
transferncia de dados entre memria e registro da CPU, a adio de dois valores, o
teste de igualdade entre dois valores, etc...
A linguagem de mquina impraticvel para escrita ou leitura. invivel escrever ou ler
um programa codificado na forma de uma string de bits.

4.2.2 Linguagem Hexadecimal


Para simplificar a compreenso e a programao de computadores, num primeiro tempo
foi adotado a notao hexadecimal para representar programas em linguagem de
mquina, onde a seqncia de bits representada por nmeros hexadecimais, conforme
ilustrado na Figura 2.
11 1A
39 03
84 47
84 03
Figura

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 linguagem hexadecimal portanto apenas uma simplificao de notao da linguagem


de mquina. Apesar disto, a programao e leitura usando a linguagem hexadecimal
continua impraticvel.

4.2.3 Linguagem Assembly


Embora seja a linguagem diretamente executvel pelos processadores, a programao
de aplicaes diretamente em linguagem de mquina impraticvel, mesmo
representada na notao hexadecimal. Por esta razo, a linguagem de mquina de cada
processador acompanhada de uma verso legvel da linguagem de mquina que a
chamada linguagem simblica Assembly. Simblica pois esta linguagem no composta
de nmeros binrios ou hexadecimais como nas duas linguagens anteriores. A
linguagem Assembly na realidade uma verso legvel da linguagem de mquina. Ela
utiliza palavras abreviadas, chamadas de mnemnicos, indicando a operao. Abaixo
so apresentados dois exemplos de instrues Assembly:
n MOV R1, R2 nesta instruo identifica-se o mnemnico MOV (abreviao de

MOVE) e dois registradores como parmetros: R1 e R2. Quando o processador


executa esta instruo, ele comanda o movimento do contedo de R2 para R1
(equivalente a instruo Pascal R1:=R2, sendo R1 e R2 equivalente a duas
variveis);
n ADD R1, R2 nesta instruo identifica-se o mnemnico ADD (abreviao de
ADDITION) e dois registradores como parmetros: R1 e R2. Quando o
processador executa esta instruo, ele comanda a adio do contedo de R1 ao
contedo de R2 e o resultado armazenado em R1 (equivalente a instruo
Pascal R1:=R1+R2).
Escolhendo nomes descritivos para as posies de memria, e usando mnemnicos
para representar cdigos de operao, a linguagem assembly facilitou significativamente

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

a leitura de seqncias de instruo de mquina. Como exemplo, supomos a operao


de dois nmeros inteiros: A:=B+C. Esta operao, em um PC, em notao hexadecimal
ficaria: A1000203060202A30402. Se associarmos o nome B posio de memria 200h,
C posio 202h e A posio 204h, usando a tcnica mnemnica, a mesma rotina
poder ser expressa da seguinte forma:
MOV AX,B
ADD AX,C
MOV A,AX

; registro AX recebe o valor de memria contida na varivel B


; AX recebe a soma de AX (valor de B) com o valor de C
; varivel A recebe valor de AX

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.

Vantagens e Desvantagens da Linguagem Assembly


Mas se ns temos as linguagens de alto nvel para qu precisamos utilizar a linguagem
Assembly? Para responder esta pergunta necessrio conhecer as vantagens e
desvantagens da linguagem Assembly e a sua utilizao.
Desvantagens com relao as linguagens de alto nvel:
n A linguagem Assembly apresenta um nmero muito reduzido de instrues, do

tipo operaes de movimentao de dados em memria, para registros e para


memrias, e operaes lgicas e aritmticas bem simples. Estas instrues so de
baixa expressividade, isto , elas so de baixo nvel. O programador deve
programar num nvel de detalhamento muito maior para fazer a mesma coisa que
em um programa escrito em linguagem de alto nvel.
n Como o programador utiliza diretamente os recursos do processador e memria,
ele deve conhecer muito bem a mquina onde ele est programando.
n Um programa escrito em linguagem Assembly no muito legvel, por isso ele

deve ser muito bem documentado.


n Um programa Assembly no muito portvel. Ela portvel apenas dentro de

uma famlia de processadores. Por exemplo, diferente de um programa C, ele no


pode ser executado em PCs e estaes de trabalho.
n Devido a sua baixa expressividade, ilegibilidade e exigncia do conhecimento
sobre a mquina faz a programao Assembly ter um custo de desenvolvimento

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

maior, requerendo um maior nmero de homens/hora comparado com a


programao utilizando linguagens de alto nvel.
Apesar das desvantagens acima citadas, a utilizao da linguagem Assembly tem
algumas vantagens que so listados abaixo:
n Ela permite o acesso direto ao programa de mquina. Utilizando uma linguagem

de alto nvel, no tem-se o controle do cdigo de mquina gerado pelo compilador


(alguns compiladores permite a otimizao de tamanho e de velocidade do
programa). Devido a este acesso, o programador pode gerar um programa mais
compacto e eficiente que o cdigo gerado pelo compilador. Um programa escrito
em linguagem Assembly pode ser 0 ou 300 % menor e mais rpido que um
programa compilado.
n Alm disso, esta linguagem permite o controle total do hardware, por exemplo,
permitindo a programao de portas seriais e paralela de um PC.

Aplicaes da Linguagem Assembly


A linguagem Assembly utilizada em vrios tipos de aplicaes:
n Controle de processos com resposta em tempo real, devido a possibilidade de

gerar programas mais eficientes. Neste tipo de aplicao, geralmente o


processador deve executar um conjunto de instrues em um tempo limitado. Por
exemplo, a cada 10 milisegundos o processador deve ler um dado, process-lo e
emitir um resultado.
n Comunicao e transferncia de dados, devido a possibilidade de acessar
diretamente o hardware, a linguagem Assembly utilizada para a implementao
de programas de comunicao ou transferncia de dados.
n Otimizao de subtarefas da programao de alto nvel, um programa no
precisa somente ser escrito em linguagem Assembly ou linguagem de alto nvel.
Ns podemos ter programas de alto nvel com subtarefas escritas em linguagem
Assembly. Sendo assim, ns podemos otimizar partes de programas, no caso de
tarefas tempo-real ou para a programao do hardware do computador.

4.2.4 Linguagem de Alto Nvel


As linguagens de alto nvel so assim denominadas por apresentarem uma sintaxe mais
prxima da linguagem natural, fazendo uso de palavras reservadas extradas do
vocabulrio corrente (como READ, WRITE, TYPE, etc...) e permitirem a manipulao dos
dados nas mais diversas formas (nmeros inteiros, reais, vetores, listas, etc...); enquanto
a linguagem Assembly trabalha com bits, bytes, palavras, armazenados em memria.
As linguagens de alto nvel ou de segunda gerao surgiram entre o final da dcada de
50 e incio dos anos 60. Linguagens como Fortran, Cobol, Algol e Basic, com todas as
deficincias que se pode apontar atualmente, foram linguagens que marcaram presena
no desenvolvimento de programas, sendo que algumas delas tm resistido ao tempo e
s crticas, como por exemplo Fortran que ainda visto como uma linguagem de
implementao para muitas aplicaes de engenharia. Cobol um outro exemplo de
linguagem bastante utilizada no desenvolvimento de aplicaes comerciais.
Em comparao com a linguagem Assembly, a passagem de um programa escrito em
linguagem de alto nvel para o programa em linguagem de mquina bem mais
complexa. Para esta passagem so utilizados compiladores e linkadores.
Com o desenvolvimento das linguagens de alto nvel, o objetivo da independncia de
mquina foi amplamente alcanada. Dado que os comandos das linguagens de alto nvel
no referenciam os atributos de uma dada mquina, eles podem ser facilmente
compilados tanto em uma mquina como em outra. Assim, um programa escrito em
linguagem de alto nvel poderia, teoricamente, ser usado em qualquer mquina,
bastando escolher o compilador correspondente.
Em realidade, no entanto, provou no ser to simples. Quando um compilador
projetado, certas restries impostas pela mquina subjacente so, em ltima instncia,
refletidas como caractersticas da linguagem a ser traduzida. Por exemplo, o tamanho do

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

registrador e as clulas de memria de uma mquina limitam o tamanho mximo dos


inteiros que nela podem ser convenientemente manipulados. Disso resulta o fato de que,
em diferentes mquinas, uma mesma linguagem pode apresentar diferentes
caractersticas, ou dialetos. Conseqentemente, em geral necessrio fazer ao menos
pequenas modificaes no programa antes de move-lo de uma mquina para outra.
A causa deste problema de portabilidade , em alguns casos, a falta de concordncia em
relao correta composio da definio de uma linguagem em particular. Para auxiliar
nesta questo, o American National Standards Institute (ANSI) e a International
Organization for Standardization (ISO) adotaram e publicaram padres para muitas das
linguagens mais populares. Em outros casos, surgiram padres informais, devido
popularidade de um dados dialeto de uma linguagem e ao desejo, por parte de alguns
autores de compiladores, de oferecerem produtos compatveis.

4.2.5 Linguagens estruturadas


Nesta classe, encaixam-se as chamadas linguagens de programao de alto nvel
surgidas em meados dos anos 60. As linguagens concebidas neste perodo foram
resultado da necessidade da produo de cdigo de programa de forma clara,
aparecendo o conceito de estruturao do cdigo (endentao, utilizao de letras
maisculas e minsculas nos identificadores, eliminao de instrues problemticas
como o go to, etc...).
O perodo compreendido entre a dcada de 60 e a de 80 foi bastante produtivo no que
diz respeito ao surgimento de linguagens de programao, o que permitiu o
aparecimento de uma grande quantidade de linguagens as quais podem ser organizadas
da seguinte forma:
n as linguagens de uso geral, as quais podem ser utilizadas para implementao

de programas com as mais diversas caractersticas e independente da rea de


aplicao considerada; encaixam-se nesta categoria linguagens como Pascal,
Modula-2 e C;
n as linguagens especializadas, as quais so orientadas ao desenvolvimento de
aplicaes especficas; algumas das linguagens que ilustram esta categoria so
Prolog, Lisp e Forth;
n as linguagens orientadas a objeto, que oferecem mecanismos sintticos e
semnticos de suporte aos conceitos da programao orientada a objetos; alguns
exemplos destas linguagens so Smalltalk, Eiffel, C++ e Delphi.

4.3 Execuo de Programas


Para que um programa possa ser executado, preciso que seja transferido para a
memria principal. A maioria dos programas ficam armazenados em disco (disco rgido,
disquetes, etc.), mas a CPU no pode executar nenhum programa diretamente a partir
do disco. O programa precisa ser antes lido do disco e carregado na memria principal.
Por exemplo, para executar o programa FORMAT (usado para formatar disquetes),
preciso que voc fornea pelo teclado um comando como:
FORMAT A:
Uma vez que voc digita este comando, o programa FORMAT.COM lido do disco
rgido e carregado na memria principal. O carregador (loader) o utilitrio do sistema
operacional responsvel pela cpia do programa do dispositivo de armazenamento para
a memria principal. A CPU pode ento executar o programa, que far a formatao de
um disquete. A Figura 3 simboliza a leitura do programa FORMAT.COM a partir do disco
para a memria principal (essa operao chamada de CARGA), e seu processamento
pela CPU (essa operao chamada de EXECUO).

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

Figura 3. Carga e execuo do programa FORMAT.COM


O sistema operacional responsvel pela leitura do arquivo FORMAT.COM e a
execuo. O MS-DOS um exemplo de sistema operacional. O WINDOWS tambm
pode ser considerado uma espcie de sistema operacional. Uma das vrias funes do
sistema operacional permanecer o tempo todo ativo na memria principal, esperando
que o usurio comande a execuo de algum programa. Portanto, quando se usa um
comando como "FORMAT A:", o que ocorrer na verdade o seguinte:
n Inicialmente o sistema operacional checa se voc fornece algum comando.
n Voc digita o comando "FORMAT A:".
n O sistema operacional procura no disco o arquivo FORMAT.COM e carrega-o na

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.

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

3) Mostra o que ocorre imediatamente antes da execuo do programa


FORMAT.COM. O sistema operacional recebe um comando do usurio para que
leia o arquivo FORMAT.COM do disco para a memria RAM.
4) O programa FORMAT.COM est sendo executado pela CPU.

Figura 4. BOOT e carga de um programa

4.4 Desenvolvimento de Programas


O desenvolvimento de programas associado ao uso de ferramentas ou ambientes de
desenvolvimento que acompanham o programador desde a etapa de codificao
propriamente dita at a gerao e teste do cdigo executvel. Sero apresentadas a
seguir as principais etapas de gerao de um programa, alm das ferramentas
utilizadas. Mais adiante sero apresentadas metodologias mais completas que definem
os passos para o desenvolvimento de programas. Esta rea da informtica chamada
de engenharia de software.

4.4.1 Gerao do cdigo fonte (codificao)


A codificao a escrita, utilizando uma linguagem de programao, das instrues que
o computador deve realizar para alcanar um resultado. Para a realizao desta tarefa
so utilizados os chamados editores. Os editores so a primeira ferramenta qual o
programador recorre na etapa de codificao, pois atravs dela que ser gerado o
arquivo (ou o conjunto de arquivos) que vai conter o cdigo-fonte do programa a ser
desenvolvido.
Apesar de que possvel utilizar qualquer editor de linha (como por exemplo o EDIT do
DOS) para gerar o arquivo de programa, alguns ambientes oferecem ferramentas de
edio mais poderosas (orientadas sintaxe ou de colorao de sintaxe). Alguns
ambientes mais recentes oferecem a possibilidade de projeto de interfaces grficas e
gerenciadores de eventos, com gerao automatizada do cdigo-fonte.

4.4.2 Traduo do Cdigo Fonte (cdigo objeto)


Independente da linguagem utilizada e da arquitetura do sistema computacional, o
cdigo-fonte no executvel diretamente pelo processador. Ele permite apenas que o
programador consiga definir o programa em uma forma legvel aos humanos. Para que
se possa obter o programa executvel, necessrio que o cdigo-fonte seja traduzido
para o cdigo de mquina do processador que compe a arquitetura do sistema.
Felizmente, isto realizado de forma automtica graas existncia de ferramentas

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

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

Figura 5. Diagrama de sintaxe do comando if-then-else


A Figura 6 apresenta um diagrama de sintaxe que descreve a sintaxe de uma estrutura
chamada Expresso. Ela formada por um Termo que pode aparecer isolado ou ento
seguido pelos smbolos +, e de outra Expresso. O segundo diagrama descreve um
Termo como sendo, na sua forma mais simples, uma varivel, e em sua forma mais

10

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

complexa, qualquer Termo j construdo, seguido de um smbolo * ou /, seguido de uma


Expresso.
Expresso:
+
Term

Expresso
-

Termo:
/
Term

Expresso
*

Varivel

Figura 6. Diagrama de sintaxe descrevendo a estrutura de uma expresso algbrica simples


Pode-se representar, de forma grfica, a maneira pela qual uma cadeia adere sintaxe
descrita por um conjunto de diagramas de sintaxe, atravs de uma rvore sinttica, como
ilustrado na Figura 7, que apresenta uma rvore sinttica para a cadeia x+y*z com base
no diagrama da figura acima. Note-se que a raiz da rvore o no-terminal Expresso, e
que cada nvel mostra a maneira como os no-terminais daquele nvel vo sendo
decompostos, at que finalmente sejam obtidos os smbolos da prpria cadeia analisada.
Expresso

Termo

Expresso

Termo

Termo

Expresso

Termo

Figura 7. rvore sinttica da cadeia x+y*z


O processo de anlise sinttica de um programa consiste, essencialmente, em construir
uma rvore de sintaxe para o programa-fonte. Por isso, as regras de sintaxe que
descrevem a estrutura gramatical de um programa no devem propiciar que duas ou
mais rvores de sintaxe distintas possam ser construdas para a mesma cadeia, dado
que isto levaria a ambigidades no analisador sinttico. Esta falha pode ser bastante
sutil. Com efeito, a prpria regra da Figura 8 contm esse defeito, pois aceita as duas
rvores de sintaxe mostradas na figura para o nico comando seguinte:

11

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

If B1 then if B2 then S1 else S2


Comando

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

para distinguir as duas possibilidades.


medida que um analisador sinttico recebe tomos do analisador lxico, ele vai
analisando os comandos e ignorando os comentrios. As informaes extradas das
declaraes so tabeladas em uma estrutura conhecida como tabela de smbolos. Dessa
forma, a tabela de smbolos guarda informaes sobre as variveis declaradas, os tipos

12

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

de dados e as estruturas de dados associadas a tais variveis. O analisador sinttico,


ento, utiliza como base estas informaes ao analisar comandos tais como:
Total:=Custo+Imposto;

De fato, para determinar o significado do smbolo +, o analisador sinttico dever saber


qual o tipo de dados associados s variveis Custo e Imposto. Se Custo for do tipo real e
Imposto for do tipo caractere, esto somar Custo e Imposto faz pouco sentido e dever
ser considerado um erro. Se Custo e Imposto forem ambos de tipo inteiro ento o
analisador sinttico solicitar ao gerador de cdigo a construo de uma instruo em
linguagem de mquina que utilize o cdigo de operao correspondente adio de
inteiros. Se, porm, ambos forem de tipo real, o analisador solicitar o uso do cdigo de
operao correspondente adio de valores em ponto flutuante.
O comando acima tambm tem sentido quando os dados envolvidos no forem do
mesmo tipo. Por exemplo, se Custo for inteiro e Imposto for real, o conceito de adio
ainda ser aplicvel. Neste caso, o analisador sinttico poder decidir que o gerador de
cdigo construa as instrues necessrias para converter um dado de um tipo para
outro, antes de executar a adio. Tal converso implcita entre tipos denominada
coero.
As operaes de coero so mal-vistas por muitos projetistas de linguagens. Eles
argumentam que a necessidade da coero um sintoma de falha no projeto do
programa, no devendo, pois, ser contornada pelo analisador sinttico. O resultado
que a maioria das linguagens modernas so fortemente tipadas, o que significa que
todas as aes solicitadas por um programa devem envolver dados de tipos compatveis,
sem coero. Analisadores sintticos para estas linguagens consideram como erros
quaisquer incompatibilidade de tipo.
A gerao de cdigo, ao final do processo de traduo, o processo de construo
das instrues, em linguagem de mquina. Este processo envolve numerosos
problemas, um dos quais o da construo de um cdigo eficiente. Por exemplo,
consideremos a tarefa de traduzir a seguinte seqncia de dois comandos:
x:=y+x;
w:=x+z;

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.

4.4.3 Editores de ligao


A tarefa realizada pelo editor de ligaes, ou linker como mais conhecido rearranjar o
cdigo do programa, incorporando a ele todas as partes referenciadas no cdigo original,
resultando num cdigo executvel pelo processador. Esta tarefa pode ser feita tambm
pelos chamados carregadores.
A figura abaixo resume as trs etapas anteriores.

13

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

Cdigo
Fonte

Cdigo
Fonte

Cdigo
Fonte

Cdigo
Fonte

Cdigo
Objeto

Cdigo
Objeto

Cdigo
Objeto

Cdigo
Objeto

Biblioteca

Programa
executvel

Figura 9. Desenvolvimento de um programa

4.4.4 Depuradores ou debuggers


Os debuggers so assim chamados devido sua funo essencial que de auxiliar o
programador a eliminar (ou reduzir) a quantidade de bugs (erros) de execuo no seu
programa. Eles executam o programa gerado atravs de uma interface apropriada que
possibilita uma anlise efetiva do cdigo do programa graas :
n execuo passo-a-passo (ou instruo por instruo) de partes do programa;
n visualizao do estado do programa atravs das variveis e eventualmente dos

contedos dos registros internos do processador;


n alterao em tempo de execuo de contedos de memria ou de variveis ou de
instrues do programa;
n etc...

4.5 Paradigmas de programao


Do Assembly s linguagens mais sofisticadas de inteligncia artificial, a programao
evoluiu para tcnicas de programao de mais em mais transparentes frente mquina,
numa tentativa de prover uma maior modularidade e um crescimento em desempenho e
expressividade.
Existem vrios paradigmas de programao, que so estilos utilizados pelos
programadores para conceber um programa. A evoluo das linguagens de
programao pode ser apresentada a partir da forma como os paradigmas de
programao evoluram desde a programao no estruturada programao orientada
a objetos. A seguir sero apresentados alguns destes paradigmas de programao.

4.5.1 Programao no-estruturada


Usualmente, pessoas aprendem a programao escrevendo programas pequenos e
simples, consistindo apenas de um programa principal. Aqui programa principal
significa uma seqncia de comandos ou declaraes que modificam dados que so
acessvel a todos os pontos do programa. Esta tcnica de programao tem vrias
desvantagens no caso de programas grandes. Por exemplo, se a mesma seqncia
necessria em localizaes diferentes ela deve ser copiada. Isto leva a idia de extrair
estas seqncias, nomear elas e oferecer uma tcnica para chamar e retornar destes
procedimentos.

4.5.2 Programao Procedural


Aqui um programa pode ser visto como uma seqncia de chamadas de procedimentos.
Um exemplo de procedimento clssico o clculo de uma raiz quadrada. Uma chamada

14

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

de procedimento usada para invocar o procedimento, podendo ser passado alguns


parmetros (por exemplo, o nmero cuja raiz quadrada deve ser calculada). Aps a
seqncia ser executada, o controle retorna justo aps o ponto de chamada do
procedimento. Introduzindo parmetros to bem quanto procedimentos de
procedimentos (sub-procedimentos), programas podem ser escritos mais em mais
estruturados e livres de erro. Por exemplo, se um procedimento correto, toda vez que
ele usado ele produz um resultado correto. Conseqentemente, no caso de erros voc
pode direcionar sua busca queles lugares que no so livres de erros.

4.5.3 Programao Modular


No passar dos anos, a nfase no projeto de programas passou do projeto de
procedimentos para a organizao dos dados, surgindo a programao modular. Nela,
procedimentos relacionados e dados que eles utilizam so agrupados em mdulos
separados. Por exemplo, todas as funes de manipulao de uma pilha (empilhar,
desempilhar, etc.) e a pilha em si podem ser agrupadas em um mdulo. Um programa
portanto no consiste mais de apenas uma parte nica. Ele agora composto de vrias
pequenas partes que interagem atravs de chamadas de procedimento. Cada mdulo
tem seus prprios dados. Isto permite que cada mdulo gerencie um estado interno que
modificado por chamadas a procedimentos deste mdulo.

4.5.4 Programao Orientada a Objetos


Em contraste com as outras tcnicas apresentadas, ns agora temos uma malha de
objetos que interagem, cada um mantendo seu prprio estado. A essncia da
programao orientada a objetos consiste em tratar os dados e os procedimentos que
atuam sobre os dados como um nico objeto uma entidade independente com uma
identidade e certas caractersticas prprias. Este paradigma de programao ser o
objeto de estudo deste curso.
Uma abordagem orientada a objetos identifica as palavras-chaves no problema. Estas
palavras-chaves so descritas ento em um diagrama e setas so desenhadas entre
estas palavras-chaves para definir uma hierarquia interna. As palavras-chaves sero os
objetos na implementao e a hierarquia define a relao entre estes objetos. O termo
objeto usado aqui para descrever uma estrutura bem definida, contendo todas as
informaes sobre certa entidade: dados e funes para manipular os dados.
Os objetos introduzem uma maneira diferente de conceber, de programar, de analisar e
de manter as aplicaes. Aps um longo perodo de maturao em laboratrios de
pesquisa, as linguagens objetos comeam a invadir os domnios profissionais.
possvel hoje em dia dizer que no se trata de um modo, mas de um processo de
mutao. O principal argumento desses novos produtos inclui as facilidade de
reutilizao de cdigo e em conseqncia ganhos de produtividade so alcanados. A
reusabilidade depende em muito da modularidade dos programas.

4.5.5 Linguagens de programao e seus paradigmas


Uma linguagem de programao fornece o suporte a um estilo ou paradigma de
programao se ela fornece funcionalidades que a tornam conveniente para usar
determinado estilo. Uma linguagem no suporta uma tcnica se necessrio esforos
excepcionais ou destreza para escrever tal programa: ela meramente habilita a tcnica a
ser usada. Por exemplo, voc pode escrever programas estruturados em Fortran e
programas orientados a objetos em C, mas isto desnecessariamente difcil de fazer
porque estas linguagens no suportam diretamente estas tcnicas. de
responsabilidade do programador aplicar certa tcnica de programao.

4.6 Linguagens Interpretadas


As etapas de desenvolvimento anteriores consideram que o uso de linguagens de
programao compiladas, ou seja, aquelas que produziro um programa na forma da

15

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

linguagem de mquina do processador. Portanto, as instrues definidas pelo


programador usando uma linguagem de alto nvel sero traduzidas para as instruo na
linguagens de mquina.
Existe outra forma de execuo de um programa, que a sua interpretao por um outro
programa, chamado interpretador. So as ditas linguagens interpretadas. A linguagem
Java a linguagem de programao interpretada mais conhecida atualmente. Ela
interpretada por uma mquina virtual chamada JVM (Java Virtual Machine).
Um interpretador um programa que executa as instrues escritas em linguagem de
alto nvel. Geralmente, o interpretador translada as instrues de alto nvel em uma
forma intermediria, que executada. Ao contrrio do compilador que traduz as
instrues de alto nvel em uma linguagem de mquina.

4.6.1 Compilador Versus Interpretador


Um programa compilado geralmente executa mais rapidamente que um programa
interpretado. A vantagem do interpretador que ele no necessita passar por um estgio
de compilao durante a qual as instrues de mquina so gerados. Este processo
pode consumir muito tempo se o programa longo. O interpretador, por outro lado, pode
executar imediatamente os programas de alto-nvel. Por esta razo, os interpretadores
so algumas vezes usados durante o desenvolvimento de um programa, quando um
programador deseja testar rapidamente seu programa. Alm disso, os interpretadores
so com freqncia usados na educao, pois eles permitem que o estudante programe
interativamente.
Tanto os interpretadores como os compiladores so disponveis para muitas linguagens
de alto nvel. Mas, Java, Basic e LISP so especialmente projetadas para serem
executadas por um interpretador.
Embora se obtenha um programa mais lento, algumas linguagens interpretadas tem
outra vantagem: a portabilidade. Como no gerado um cdigo de mquina, e sim um
cdigo intermedirio que ser interpretado por uma mquina virtual, pode-se obter a
portabilidade do cdigo se esta mquina virtual for desenvolvida para vrias plataformas
(computadores diferentes). Este o caso da linguagem Java.

4.6.2 Mquina Virtual


Uma mquina virtual um ambiente operacional (ambiente onde os usurios executam o
programa) auto-contido que se comporta como se fosse um computador separado. Por
exemplo, uma applet Java executa em uma Mquina Virtual Java que no acessa ao
sistema operacional do computador hospedeiro. Este projeto tem duas vantagens:
n Independncia de sistema: uma aplicao poder ser executada em qualquer

mquina virtual, sem se preocupar com o hardware e software dando suporte ao


sistema.
n Segurana: como a mquina virtual no tem contato com o sistema operacional,

existem poucas possibilidade de um programa interpretado danifique outros


arquivos ou aplicaes. Esta vantagem trs consigo uma limitao: os programas
executando em uma mquina virtual no pode tomar vantagem das
funcionalidades do sistema operacional

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

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

Existem vrias implementaes de JVMs para diversos sistemas operacionais, incluindo


UNIX, Macintosh OS e Windows. Alm disso, o bytecode pode ser convertido
diretamente em instrues de linguagem de mquina, usando o compilador JIT (Just-Intime Compiler).
Java uma linguagem de programao de propsito geral com um nmero de
caractersticas que fazer ela muito interessante para ser usada na World Wide Web.
Aplicaes Java menores, chamadas applets, podem ser baixadas de um servidor Web
e executar no seu navegador por um navegador compatvel com o Java, tal como o
Netscape Navigator ou o Microsoft Internet Explorer.

Figura 10. Criao e Execuo de uma aplicao Java

Você também pode gostar