Construção de Compiladores Período Especial Aula 11 ... · Aula 11: Chamadas de Procedimento...

Post on 13-Oct-2020

1 views 0 download

Transcript of Construção de Compiladores Período Especial Aula 11 ... · Aula 11: Chamadas de Procedimento...

Sintaxe Nomenclatura Tradução Execução Projeto

Construção de CompiladoresPeríodo Especial

Aula 11: Chamadas de ProcedimentoParâmetros passados por Valor

Bruno Müller Junior

Departamento de InformáticaUFPR

2020

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Sintaxe

A passagem de parâmetros é alvo das regras 14 e 15.Exemplo: procedure p(x:integer; var y:integer);

Onde x é passado por valor e y por referência.Esta aula explica a passagem de parâmetros por valor. Apróxima irá explicar a passagem por referência.

12. <declara procedimento> ::= <identificador> [<parâmetros formais>] ;<bloco>

14. <parâmetros formais> ::= (<seção parâmetros formais>; <seção parâmetros formais> )

15. <seção parâmetros formais> ::= [VAR] <listaIds> : <ident>20. <chamada deprocedimento> ::= <identificador> [(<lista de expressóes>)]

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Nomenclatura

Para efeito de diferenciação do momento em que são usados,os parâmetros de um procedimento recebem nomes diferentes:parâmetros formais variáveis no cabeçalho de um

procedimento ou de uma função.parâmetros reais variáveis ou constantes que aparecem na

chamada dos procedimentos ou das funções.

Existem duas formas de se passar os parâmetros reais para osparâmetros formais: por valor ou por referência.

por valor o valor contido no parâmetro real é copiado parao espaço de memória reservado ao parâmetroformal.

por referência o endereço do parâmetro real é copiado para oparâmetro formal.

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Nomenclatura

Para efeito de diferenciação do momento em que são usados,os parâmetros de um procedimento recebem nomes diferentes:parâmetros formais variáveis no cabeçalho de um

procedimento ou de uma função.parâmetros reais variáveis ou constantes que aparecem na

chamada dos procedimentos ou das funções.Existem duas formas de se passar os parâmetros reais para osparâmetros formais: por valor ou por referência.

por valor o valor contido no parâmetro real é copiado parao espaço de memória reservado ao parâmetroformal.

por referência o endereço do parâmetro real é copiado para oparâmetro formal.

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Tradução

O último parâmetro estásempre no deslocamentok-4, o penúltimo em k-5 eassim por diante.

procedure p(x:integer;var y:integer);

y: k-4x: k-5.

TS: PF=VS + tipo depassagem (valor oureferência).

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Tradução

O último parâmetro estásempre no deslocamentok-4, o penúltimo em k-5 eassim por diante.procedure p(x:integer;var y:integer);

y: k-4x: k-5.

TS: PF=VS + tipo depassagem (valor oureferência).

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Tradução

O último parâmetro estásempre no deslocamentok-4, o penúltimo em k-5 eassim por diante.procedure p(x:integer;var y:integer);

y: k-4x: k-5.

TS: PF=VS + tipo depassagem (valor oureferência).

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPP

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPPAMEM 2

y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPPAMEM 2DSVS R00

R01:ENPR 1

p PROC [1,R01,?{}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPPAMEM 2DSVS R00

R01:ENPR 1

t PF [1,?,?]p PROC [1,R01,?{}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPPAMEM 2DSVS R00

R01:ENPR 1

t PF [1,?,int]p PROC [1,R01,?{}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPPAMEM 2DSVS R00

R01:ENPR 1

t PF [1,-4,int]p PROC [1,R01,1{int,valor}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPPAMEM 2DSVS R00

R01:ENPR 1AMEM 1

z VS [1,0,int]t PF [1,-4,int]p PROC [1,R01,1{int,valor}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPPAMEM 2DSVS R00

R01:ENPR 1AMEM

z VS [1,0,int]t PF [1,-4,int]p PROC [1,R01,1{int,valor}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPP R02: NADAAMEM 2 CRVL 0,1DSVS R00 ARMZ 1,0

R01:ENPR 1 CRVL 1,0AMEM 1 CRVL 1,-4CRVL 1,-4 MULTCRCT 1 ARMZ 0,1CMMADSVF R03CRVL 1,-4CRCT 1SUBTCHPR R01,1DSVS R02 <======????

R03:NADACRCT 1ARMZ 0,1

z VS [1,0,int]t PF [1,-4,int]p PROC [1,R01,1{int,valor}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPP R02: NADAAMEM 2 CRVL 0,1DSVS R00 ARMZ 1,0

R01:ENPR 1 CRVL 1,0AMEM 1 CRVL 1,-4CRVL 1,-4 MULTCRCT 1 ARMZ 0,1CMMA DMEM 1DSVF R03CRVL 1,-4CRCT 1SUBTCHPR R01,1DSVS R02

R03:NADACRCT 1ARMZ 0,1

z VS [1,0,int]t PF [1,-4,int]p PROC [1,R01,1{int,valor}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPP R02: NADAAMEM 2 CRVL 0,1DSVS R00 ARMZ 1,0

R01:ENPR 1 CRVL 1,0AMEM 1 CRVL 1,-4CRVL 1,-4 MULTCRCT 1 ARMZ 0,1CMMA DMEM 1DSVF R03 RTPR 1,1CRVL 1,-4CRCT 1SUBTCHPR R01,1DSVS R02

R03:NADACRCT 1ARMZ 0,1

t PF [1,-4,int]p PROC [1,R01,1{int,valor}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPP R02: NADAAMEM 2 CRVL 0,1DSVS R00 ARMZ 1,0

R01:ENPR 1 CRVL 1,0AMEM 1 CRVL 1,-4CRVL 1,-4 MULTCRCT 1 ARMZ 0,1CMMA DMEM 1DSVF R03 RTPR 1,1CRVL 1,-4 R00:NADACRCT 1 LEITSUBT ARMZ 0,0CHPR R01,1 CRVL 0,0DSVS R02 CHPR R01,0

R03:NADA CRVL 0,0CRCT 1 IMPRARMZ 0,1 CRVL 0,1

IMPRDMEM 2PARA

p PROC [1,R01,1{int,valor}]y VS [0,1,int]x VS [0,0,int]

Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

INPP R02: NADAAMEM 2 CRVL 0,1DSVS R00 ARMZ 1,0

R01:ENPR 1 CRVL 1,0AMEM 1 CRVL 1,-4CRVL 1,-4 MULTCRCT 1 ARMZ 0,1CMMA DMEM 1DSVF R03 RTPR 1,1CRVL 1,-4 R00:NADACRCT 1 LEITSUBT ARMZ 0,0CHPR R01,1 CRVL 0,0DSVS R02 CHPR R01,0

R03:NADA CRVL 0,0CRCT 1 IMPRARMZ 0,1 CRVL 0,1

IMPRDMEM 2PARA Símb. Cat. Infos

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Execução

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Principal

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

03 ?302 ?201 ?100 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ??04 ??03 ??02 ??01 ??00 ??

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Principal

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

03 ?302 ?201 ?100 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ??04 ??03 ??02 ??01 ??00 ??

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Principal

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

03 ?302 ?201 ?100 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ??04 ??03 ??02 ??01 ??00 ??

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Principal

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x);write (x,y)

end.

03 ?302 ?201 ?100 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ??04 ??03 ??02 ??01 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Principal

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.CRVL 0,0CHPR rot,k { M[s+1]:=i;

M[s+2]:=k;s:=s+2i:=rot}

03 ?302 ?201 ?100 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ??04 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

ENPR k { s:=s+1;M[s]:=D[k]D[k]:=s+1 }

03 ?302 ?201 0600 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 0600 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1);else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 0600 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.CRVL 0,0 / CRCT 1 / SUBTCHPR rot,k { M[s+1]:=i;

M[s+2]:=k;s:=s+2i:=rot}

03 ?302 ?201 0600 00

14 ??13 ??12 ??11 ??10 ??09 0108 2©07 0206 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

ENPR k { s:=s+1;M[s]:=D[k]D[k]:=s+1 }

03 ?302 ?201 1100 00

14 ??13 ??12 ??11 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 1100 00

14 ??13 ??12 ??11 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 1100 00

14 ??13 ??12 ??11 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.CRVL 0,0 / CRCT 1 / SUBTCHPR rot,k { M[s+1]:=i;

M[s+2]:=k;s:=s+2i:=rot}

03 ?302 ?201 1100 00

14 0113 2©12 0111 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

ENPR k { s:=s+1;M[s]:=D[k]D[k]:=s+1 }

03 ?302 ?201 1600 00

14 0113 2©12 0111 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 11

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 1600 00

14 0113 2©12 0111 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 11

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 1600 00

14 0113 2©12 0111 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 ??00 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 11

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 1600 00

14 0113 2©12 0111 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 0100 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 11

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 1600 00

14 0113 2©12 0111 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 0100 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 0115 11

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

p(3) -> p(2) -> p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 1600 00

14 0113 2©12 0111 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 0100 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 0115 11

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

princ <- p(3) <- p(2) <- p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

DMEM 1RTPR k,n { D[K]:=M[s];

i:=M[s-2];s:=s-(n+3)}

03 ?302 ?201 1100 00

14 ??13 ??12 ??11 ??10 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 0100 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

princ <- p(3) <- p(2) <- p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 1100 00

14 ??13 ??12 ??11 0110 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 0100 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

princ <- p(3) <- p(2) <- p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 1100 00

14 ??13 ??12 ??11 0110 0609 0108 2©07 0206 ??05 ?104 0003 1©02 0301 0200 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

princ <- p(3) <- p(2) <- p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

DMEM 1RTPR k,n { D[K]:=M[s];

i:=M[s-2];s:=s-(n+3)}

03 ?302 ?201 0600 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ?104 0003 1©02 0301 0200 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

princ <- p(3) <- p(2) <- p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 0600 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 0205 ?104 0003 1©02 0301 0200 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

princ <- p(3) <- p(2) <- p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 0600 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 0205 ?104 0003 1©02 0301 0600 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

princ <- p(3) <- p(2) <- p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

DMEM 1RTPR k,n { D[K]:=M[s];

i:=M[s-2];s:=s-(n+3)}

03 ?302 ?201 ?100 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ??04 ??03 ??02 ??01 0600 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

princ <- p(3) <- p(2) <- p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ?302 ?201 ?100 00

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ??04 ??03 ??02 ??01 0600 03

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

princ <- p(3) <- p(2) <- p(1)

program proc2 (input, output);var x, y: integer;

procedure p(t:integer);var z:integer;

beginif (t>1)

then p(t-1); 2©else y:=1;

z:= y;y:=z*t;

endbegin

read(x);p(x); 1©write (x,y)

end.

03 ??02 ??01 ??00 ??

14 ??13 ??12 ??11 ??10 ??09 ??08 ??07 ??06 ??05 ??04 ??03 ??02 ??01 ??00 ??

29 ??28 ??27 ??26 ??25 ??24 ??23 ??22 ??21 ??20 ??19 ??18 ??17 ??16 ??15 ??

44 ??43 ??42 ??41 ??40 ??39 ??38 ??37 ??36 ??35 ??34 ??33 ??32 ??31 ??30 ??

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Acrescente a chamada de procedimentos com parâmetrospassados por valor ao compilador.

No exemplo apresentado nesta aula, só há um parâmetro.Quando houverem mais parâmetros, determinar o endereçoléxico é um pouco mais complicado, pois o último parâmetro équem será associado ao endereço léxico (k-4) Por exemplo:

procedure p(a,b:integer), a⇒ (k ,−5), b⇒ (k,−4)procedure q(a,b,c:integer), a⇒ (k,−6), b⇒ (k,−5),c⇒ (k,−4)

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Acrescente a chamada de procedimentos com parâmetrospassados por valor ao compilador.No exemplo apresentado nesta aula, só há um parâmetro.

Quando houverem mais parâmetros, determinar o endereçoléxico é um pouco mais complicado, pois o último parâmetro équem será associado ao endereço léxico (k-4) Por exemplo:

procedure p(a,b:integer), a⇒ (k ,−5), b⇒ (k,−4)procedure q(a,b,c:integer), a⇒ (k,−6), b⇒ (k,−5),c⇒ (k,−4)

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Acrescente a chamada de procedimentos com parâmetrospassados por valor ao compilador.No exemplo apresentado nesta aula, só há um parâmetro.Quando houverem mais parâmetros, determinar o endereçoléxico é um pouco mais complicado, pois o último parâmetro équem será associado ao endereço léxico (k-4) Por exemplo:

procedure p(a,b:integer), a⇒ (k,−5), b⇒ (k,−4)procedure q(a,b,c:integer), a⇒ (k,−6), b⇒ (k,−5),c⇒ (k,−4)

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Acrescente a chamada de procedimentos com parâmetrospassados por valor ao compilador.No exemplo apresentado nesta aula, só há um parâmetro.Quando houverem mais parâmetros, determinar o endereçoléxico é um pouco mais complicado, pois o último parâmetro équem será associado ao endereço léxico (k-4) Por exemplo:

procedure p(a,b:integer), a⇒ (k ,−5), b⇒ (k,−4)

procedure q(a,b,c:integer), a⇒ (k,−6), b⇒ (k,−5),c⇒ (k,−4)

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Acrescente a chamada de procedimentos com parâmetrospassados por valor ao compilador.No exemplo apresentado nesta aula, só há um parâmetro.Quando houverem mais parâmetros, determinar o endereçoléxico é um pouco mais complicado, pois o último parâmetro équem será associado ao endereço léxico (k-4) Por exemplo:

procedure p(a,b:integer), a⇒ (k ,−5), b⇒ (k,−4)procedure q(a,b,c:integer), a⇒ (k ,−6), b⇒ (k,−5),c⇒ (k,−4)

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Página para anotações

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor

Sintaxe Nomenclatura Tradução Execução Projeto

Licença

Slides desenvolvidos somente com software livre:LATEX usando beamer;Inkscape.

Licença:Creative Commons Atribuição-Uso Não-Comercial-Vedada aCriação de Obras Derivadas 2.5 Brasil License. http://creativecommons.org/licenses/by-nc-nd/2.5/br/

Bruno Müller Junior Departamento de Informática UFPR

Construção de Compiladores Período Especial Aula 11: Chamadas de Procedimento Parâmetros passados por Valor