GBC015: INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO Execução de Algoritmos: Linguagens e Compiladores Ilmério Reis da Silva [email protected] www.facom.ufu.br/~ilmerio/icc UFU/FACOM/BCC Linguagens Humanos: mais de 5.000 línguas Características: – Símbolos – Regras gramaticais – Semântica Linguagem dos Computadores Digitais Símbolos primitivos: 1 ou 0 Porque? – BInary digiT – 1 : passagem de energia – 0 : corte de energia Símbolos derivados: – Padrões de bits – Byte = 8 bits MONTADOR (assembly) Linguagem de máquina é muito difícil para humanos Tradutores MOV $1, AL 10110000 01100001 EXEMPLO ASSEMBLY movl $5, %eax movl $1, %edx .L4: imull %eax, %edx decl %eax testl %eax, $0 jg .L4 ; Coloque 5 em eax ; Coloque 1 em edx ; Multiplique eax por edx em edx ; Subtraia 1 de eax ; Teste se eax é 0 ; Va_para .L4 se teste maior que 0 OBS: o que faz esse programa? LINGUAGENS DE ALTO NÍVEL Assembly não foi suficiente, continuava difícil Busca por linguagens mais próximas do programador e não da máquina Lista não exaustiva de linguagens de alto nível: – FORTRAN, IBM, 1954 (imperativa) – LISP, MIT, 1958 (funcional) – ALGOL, 1958 (imperativa) – COBOL, 1958 (comercial) – C, Bell, 1972 (imperativa) – PROLOG, Universidade de Marselha, 1972 (declarativa) – JAVA, Sun, 1995 (OO : portabilidade) – PHP, Rasmus, 1995 (interpretada) – Etc. FORTRAN (1954) nfact=1 do i=1, 5 nfact = nfact*i enddo OBS: - procedural/imperativa: instruções mudam o estado da máquina - variáveis, laços,sequências - 20 vezes mais fácil q o Assembly - usada em cálculos científicos LISP (1958) (def un factorial (n) (i f (<= n 1) 1 (* n (factorial (- n 1))))) OBS: - funcional - pré-fixada - recursividade - muitos parêntesis - usada por teóricos da computação ALGOL (1958) integer procedure Factorial(m); integer m; Begin integer F; F := if m=1 then 1 else m*Factorial(m‐1); Factorial := F end; OBS: - em busca de um padrão - linguagem muito influente - recursividade - acadêmica COBOL (1958) IDENTIFICATION DIVISION. PROGRAM-ID. 'FATORIAL'. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-FAT PIC 9(09) VALUE ZEROS. 01 WS-N PIC 9(09) VALUE ZEROS. PROCEDURE DIVISION. RT-0-PRINCIPAL SECTION. MOVE 5 TO WS-FAT. SUBTRACT 1 FROM WS-FAT GIVING WS-N. PERFORM RT-1-INICIAR UNTIL WS-N EQUAL 0. DISPLAY 'WS-FAT = ' WS-FAT. STOP RUN. RT-0-PRINCIPALX. EXIT. RT-1-INICIAR SECTION. MULTIPLY WS-FAT BY WS-N GIVING WS-FAT. SUBTRACT 1 FROM WS-N GIVING WS-N. OBS: - em busca de um padrão para área comercial C (1972) i nt main() { i nt n = 5; i nt fact = 1; whi l e (n > 1) { fact *= n; n--; } printf("%d\n", fact); } OBS: - prevalente por muitos anos PROLOG (1972) factorial(0,1). factorial(N,F) :N>0, N1 is N-1, factorial(N1, F1), F is N * F1. OBS: Linguagem declarativa * o programa é um conjunto de restrições * o programa descreve uma verdade * ausência de efeitos colaterais: (resultados diferentes de uma mesma função com os mesmos parâmetros) * laços são obtidos por recursão JAVA (1994) public class Fact { public static void main(String a[]) { int n = 5; int fact = 1; while (n > 1) { fact *= n; n--; } System.out.println(fact); } } OBS: - prevalente - orientada a objetos - portabilidade PHP (1994) <?php $fat = $_POST['fat']; $resul = 1; for($i = $fat; $i >= 1; $i--){ $resul *= $fat; $fat--; } echo "<br><br>".$resul."<br><br><br>"; ?> <br><br> <form method="post" action="fatorial.php"> <input type="text" name="fat"><br> <input type="submit" name="aa" value="enviar"> </form> OBS: - interpretado por um servidor web - boa interface com SGBD via SQL QUANTAS LINGUAGENS DE PROGRAMAÇÃO? - 2.500 SEGUNDO A EDITORA O'REILLY - 600 DOCUMENTADAS NA WIKIPÉDIA - Prevalência linguagens(www.tiobe.com, 01/16) * Java, 21,5% * C, 16,0% * C++, 6,9% * C#, 4,7% * Python, 3,9% * PHP, 2,7% PREVALÊNCIA DE LINGUAGENS DE PROGRAMAÇÃO (www.tiobe.com) COMPILADORES traduzem o programa para linguagem de máquina INPERPRETADORES traduzem cada comando Bibliografia [1] BROOKSHEAR, J. Glenn. Ciência da computação: uma visão abrangente, ,tradução da 11a ed [por] Eduardo K Pivete, Porto Alegre, Bookman, 2013. [2] FEDELI, Ricardo Daniel; POLLONI, Enrico Giulio Franco; PERES, Fernando Eduardo. Introdução à ciência da computação. 2. ed. São Paulo: Cengage Learning, 2010. [3] MOKARZEL, Fábio Carneiro. Introdução à ciência da computação. Rio de Janeiro: Elsevier, 2008. [4] Autran Macedo, Maria Adriana, Renato Pimentel e Ilmério Silva, http://www.facom.ufu.br Material de Apoio Capítulo 6 de [1], incluindo exercícios Capítulo 5 de [2], incluindo exercícios FIM Execução de Algoritmos: Linguagens e Compiladores