Introdução Instruções Novas Construção de Compiladores Aula 12 - Chamadas de Procedimento Parâmetros passados por Referência Bruno Müller Junior Departamento de Informática UFPR 18 de Setembro de 2014 Bruno Müller Junior Departamento de Informática UFPR Construção de Compiladores Aula 12 - Chamadas de Procedimento Parâmetros passados por Referência Introdução Instruções Novas 1 Introdução 2 Instruções Novas Exemplo de passagem de Parâmetros por referência Bruno Müller Junior Departamento de Informática UFPR Construção de Compiladores Aula 12 - Chamadas de Procedimento Parâmetros passados por Referência Introdução Instruções Novas Introdução Na passagem de parâmetro por referência, o parâmetro real OBRIGATORIAMENTE é uma variável; Em tempo de execução, o endereço desta variável é colocado no espaço reservado ao parâmetro formal correspondente; Identifica-se um parâmetro passado por referência pelo uso da palavra reservada VAR à frente do parâmetro formal correspondente. Bruno Müller Junior Departamento de Informática UFPR Construção de Compiladores Aula 12 - Chamadas de Procedimento Parâmetros passados por Referência Introdução Instruções Novas Instruções Novas As novas instruções tratam parâmetros formais por referência. Em tempo de execução, estes endereços léxicos indicados contém endereços físicos das variáveis-alvo. Instrução CRVI k,n RTPR k,n CREN k,n Bruno Müller Junior Ação M[M[D[k]+n]]:=M[s]; s:=s+1 i:=i+1 M[s]:=M[M[D[k]+n]] i:=M[s-2] i:=i+1 s:=s+1 M[s]:=D[k]+n] i:=i+1 Significado Carrega Valor Indireto Armazena Valor Indireto Carrega Endereço Departamento de Informática UFPR Construção de Compiladores Aula 12 - Chamadas de Procedimento Parâmetros passados por Referência Introdução Instruções Novas Exemplo de passagem de Parâmetros por referência Exemplo de passagem de Parâmetros por referência 1 2 3 4 5 6 7 8 9 program proc3 (input, output); var k: integer; procedure p(n:integer; var g:integer); var h:integer; begin if (v<2) then g:=g+1 else begin p(n-1,h) 1 ; g:=h; 10 11 p(n-2,g) 2 12 13 14 15 16 17 end write (n,g) end begin k:=0; p(3,k) 3 ; 18 19 end. Bruno Müller Junior Departamento de Informática UFPR Construção de Compiladores Aula 12 - Chamadas de Procedimento Parâmetros passados por Referência