290 likes | 503 Views
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).
E N D
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.
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.
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.
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.
Compilação O compilador de Elliott • Implementava quase todas as características da linguagem e • Rodaria, até mesmo, em uma pequena máquina.
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
capacidade de escrita • clareza • Elegância X Características • Algol usa uma linguagem metalingüística para definir de forma concisa e relativamente completa a sua sintaxe
Características • Estrutura de controle é uma instrução de controle acompanhada da coleção de comandos cuja execução ela controla.
Instruções Compostas • Instrução composta begin comando_1; ... comando_n; end • Formar conjuntos de instruções.
Instruções Compostas • Um conjunto de instruções é abstraído para uma única. • Muito importante no projeto de instruções de controle.
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.
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)
Exemplos de Seletores Bidirecionais • Primeiro a permitir que uma instrução composta fosse selecionada por um seletor unidirecional • Precursor do seletor bidirecional Exemplos: if (exp booleana) then if (exp booleana) then begin instrução; instrução_1; else .... instrução; instrução_n; end
Aninhamento de Seletores • Questão Fundamental: Emparelhamento de cláusulas then e else Exemplo em Pascal (Sucessora do Algol 60) if soma = 0 then if cont = 0 then resultado :=0 else 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
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
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 end else resultado:=1 (Else emparelhado com o 1º then) Aninhamento de Seletores
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 Ada Exemplo em Ada: if A>B then soma := soma + a; acont := acont + 1; else soma := soma + b; bcont := acont + 1; end if;
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 of begin instrução_1; ..... ..... instrução_n; end
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
Instruções Iterativas • Roteiro • Introdução • Questões de Projeto • Laços controlados por contador • Laços controlados logicamente • Mecanismos de controle de laço localizados pelo usuário • Iteração baseada em estrutura de dados
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>
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] := 0 for cont := 1 step 1 until 10 do lista[cont] := 0 for cont := 1, cont + 1 while (cont<=10) do lista[cont] := 0
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 do soma := soma + índice Essa instrução adiciona os seguintes valores à variável soma: 1, 4, 13, 41, 43, 45, 47, 141, 423, 34, 2, -24
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_inicial loop: until := expressao_until step := expressao_step temp := (var_for - until) * SIGN(step) if temp > 0 goto out [corpo do laço] var_for := var_for + step goto loop out: ...
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
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
Conclusões • Diversidade de opiniões entre os projetistas de linguagens. • Clareza e elegância. • Introduziu a idéia de Blocos
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