29
ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Embed Size (px)

Citation preview

Page 1: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

ALGOL

Luccas L. L. M. Martins

Raoní Galvão

Renato Evangelista

Renato Matsuura

Page 2: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Introdução

O Algol é uma linguagem de programação de alto nível voltada principalmente para aplicações científicas. Seu nome provém das palavras "Algorithmic Language" (Linguagem Algorítmica).

começou a ser formulada em 1857, e foi definida em 1963, Algol 60.

Page 3: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Introdução

As duas características principais do Algol são: a clareza e a elegância da sua estrutura baseada nos blocos e o estilo de sua definição, que usa uma linguagem metalingüística para definir de forma concisa e relativamente completa a sua sintaxe.

Page 4: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Introdução

Existem outras versões do Algol, como, por exemplo, o Algol 68, o Algol W voltado para máquinas IBM e o Algol 6000/7000 da Burroughs.

Esta linguagem se tornou apropriada para escrever "software" básico; em particular o sistema operacional do B6700 (MCP – "Master Control Program") está escrito em DCALGOL, que é uma extensão do Algol B6000/7000.

Page 5: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Compilação

Muitos compiladores foram escritos para o ALGOL 60, porém para implentar a linguagem toda eles falhavam.

O compilador de Elliott era um desses, mas com uma diferença.

Page 6: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Compilação

O compilador de Elliott

• Implementava quase todas as características da linguagem e

• Rodaria, até mesmo, em uma pequena máquina.

Page 7: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Compilação

Base de clientes principal do Elliott eram as universidades, com suas aquiteturas 803. Uma das exigências do compilador era ser capaz de rodar grupos de programas em ordem, sem a necessidade reiniciar o compilador.

O compilador era um grande sucesso e foi usado extensivamente

Page 8: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Características

Algol usa uma linguagem metalingüística para definir de forma concisa e relativamente completa a sua sintaxe

• capacidade de escrita X

• clareza• Elegância

Page 9: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Características

Estrutura de controle é uma instrução de controle acompanhada da coleção de comandos cuja execução ela controla.

Page 10: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Instruções Compostas

Instrução compostabegin

comando_1;...comando_n;

end Formar conjuntos de instruções.

Page 11: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Instruções Compostas

Um conjunto de instruções é abstraído para uma única.

Muito importante no projeto de instruções de controle.

Page 12: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Instruções Compostas

Bloco: instrução composta que pode definir um novo escopo (com variáveis locais).

Algol introduziu a idéia de programação utilizando blocos.

C, C++ e Java permitem tanto instruções compostas como blocos, ambos delimitados por chaves.

Em algumas linguagens a delimitação é feita pela própria estrutura de controle.

Page 13: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Instruções de Seleção

Definição: Uma instrução de seleção oferece os meios de escolher entre dois ou mais caminhos de execução em um programa. Essas instruções são partes fundamentais de todas as linguagens de programação.

Dividem-se em duas categorias gerais

- seleção bidirecional

- seleção múltipla (n-direcional)

Page 14: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Exemplos de Seletores Bidirecionais

Primeiro a permitir que uma instrução composta fosse selecionada por um seletor unidirecional

Precursor do seletor bidirecionalExemplos:

if (exp booleana) then if (exp booleana) then begin instrução; instrução_1; else .... instrução; instrução_n;

end

Page 15: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Aninhamento de Seletores

Questão Fundamental: Emparelhamento de cláusulas then e elseExemplo em Pascal (Sucessora do Algol 60)

if soma = 0 thenif cont = 0 then

resultado :=0else

resultado :=1 O else pode ser interpretado como par do 1º ou do 2º then e,

embora o recuo sugira o contrário, em Pascal esta construção indica que o else é par do 2º then

Page 16: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Aninhamento de Seletores

O Pascal utiliza uma regra semântica para solucionar a ambigüidade existente no exemplo anterior:- TODO ELSE SE REFERE AO THEN NÃO EMPARELHADO MAIS RECENTE

O Algol 60 utiliza uma regra sintática para solucionar tal ambigüidade- SE UM IF PRECISAR SER ANINHADO EM UMA THEN, ELE DEVERÁ SER COLOCADO EM UMA INSTRUÇÃO COMPOSTA

Page 17: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Aninhamento de Seletores

Exemplos if soma = 0 then

begin if cont = 0 then resultado:=0

else resultado:=1 end

(Else emparelhado com o 2º then)

if soma = 0 then begin

if cont = 0 then resultado:=0

endelse resultado:=1

(Else emparelhado com o 1º then)

Page 18: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Palavras especiais e fechamento de seleção

São palavras cuja função é resolver a questão da semântica de seletores aninhados

São utilizadas no Algol 68, no Fortran 77 e 90, no Modula-2 e no AdaExemplo em Ada:if A>B then

soma := soma + a;acont := acont + 1;

elsesoma := soma + b;bcont := acont + 1;

end if;

Page 19: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Seletores Múltiplos Modernos

O Case foi incluído no Algol-W. Trata-se de uma estrutura encapsulada e de entrada única cuja forma geral é:

case expressão_inteira ofbegininstrução_1;..........instrução_n;end

Page 20: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Seletores Múltiplos Modernos

Para o caso de o valor da expressão não aparecer em nenhuma lista de constantes, muitos dialetos do Pascal (sucessora do Algol) incluem, agora, uma cláusula opcional else. Um exemplo é:

case indice of

1, 3: begin impar := impar + 1; somaimpar := somaimpar + indice end;2, 4: begin par := par + 1; somapar := somapar + indice end;else writeln (‘Erro na instrução case, indice =’, indice)

end

Page 21: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Instruções Iterativas

Roteiro

IntroduçãoQuestões de ProjetoLaços controlados por contadorLaços controlados logicamenteMecanismos de controle de laço localizados pelo

usuário Iteração baseada em estrutura de dados

Page 22: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Instrução FOR do Algol 60

Exemplo de como a busca por flexibilidade pode levar a excessiva complexidade

É uma generalização significativa da instrução DO do Fortran, como mostra a EBNF:<for_stmt> -> for var := <elemento_da_lista>

{, <elemento_da_lista>} do <comando>

<elemento_da_lista> -> <expressão> | <expressão> step <expressão> until <expressão> | <expressão> while <expr_booleana>

Page 23: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Instrução FOR do Algol 60

Diferença significativa: pode combinar um controlador e uma expressão booleana para controle do laço

Três formas mais simples:for cont := 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 do

lista[cont] := 0for cont := 1 step 1 until 10 do

lista[cont] := 0for cont := 1, cont + 1 while (cont<=10) do

lista[cont] := 0

Page 24: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Instrução FOR do Algol 60

A partir da combinação das formas simples criam-se instruções bem mais complexas

for indice := 1, 4, 13, 41, step 2 until 47,

3 * indice while indice < 1000, 34, 2, -24 dosoma := soma + índice

Essa instrução adiciona os seguintes valores à variável soma: 1, 4, 13, 41, 43, 45, 47, 141, 423, 34, 2, -24

Page 25: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Instrução FOR do Algol 60

Descrição semântica operacional de uma instrução FOR geral somente com a forma STEP-UNTIL:

var_for := expressao_inicialloop:

until := expressao_untilstep := expressao_steptemp := (var_for - until) * SIGN(step)if temp > 0 goto out

[corpo do laço]var_for := var_for + stepgoto loop

out: ...

Page 26: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Opções de Projeto do Algol 60

A variável de laço pode ser do tipo inteiro ou real e é declarada como qualquer outra

A variável de laço tem seu valor mais recente atribuído (independente da causa da finalização)

Seus parâmetros (não sua variável) podem ser mudados no corpo do laço

É ilegal desviar-se para o corpo do laço Os parâmetros do laço são avaliados para cada

iteração

Page 27: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Programa em Algol

procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; begin

integer p, q; y := 0; i := k := 1; for p:=1 step 1 until n do for q:=1 step 1 until m do

if abs(a[p, q]]) > y then begin y := abs(a[p, q]); i := p; k := q end

end Absmax

Page 28: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Conclusões

Diversidade de opiniões entre os projetistas de linguagens.

Clareza e elegância. Introduziu a idéia de Blocos

Page 29: ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista Renato Matsuura

Bibliografia

http://es.wikipedia.org/wiki/Algol http://www.dcs.qmul.ac.

uk/~ohearn/Algol/intro.html http://www.cis.cau.edu/Curriculum/476/

chapter2/algol60/ http://en.wikipedia.org/wiki/ALGOLftp://

ftp.aw.com/cseng/authors/sebesta