Skip to content
Snippets Groups Projects
Commit d066e9b0 authored by viniciusmioto's avatar viniciusmioto
Browse files

chamada de procedimentos completa

parent 8245e24b
No related branches found
No related tags found
No related merge requests found
...@@ -14,8 +14,7 @@ R00: NADA ...@@ -14,8 +14,7 @@ R00: NADA
CRCT 8 CRCT 8
ARMZ 0,0 ARMZ 0,0
CREN 0,0 CREN 0,0
CRCT 2 CRCT 8
SOMA
CRCT 2 CRCT 2
CRCT 3 CRCT 3
SOMA SOMA
......
...@@ -338,6 +338,7 @@ lista_parametros_parenteses: lista_parametros_parenteses VIRGULA ...@@ -338,6 +338,7 @@ lista_parametros_parenteses: lista_parametros_parenteses VIRGULA
expressao_simples expressao_simples
{ {
num_param++; // Incrementa para cada parâmetro real num_param++; // Incrementa para cada parâmetro real
val_ou_ref = VLR;
} }
| { | {
char buffer[50]; char buffer[50];
...@@ -349,6 +350,7 @@ lista_parametros_parenteses: lista_parametros_parenteses VIRGULA ...@@ -349,6 +350,7 @@ lista_parametros_parenteses: lista_parametros_parenteses VIRGULA
expressao_simples expressao_simples
{ {
num_param++; // Conta o primeiro parâmetro real num_param++; // Conta o primeiro parâmetro real
val_ou_ref = VLR;
} }
; ;
...@@ -401,9 +403,15 @@ expressao: expressao IGUAL expressao_simples { ...@@ -401,9 +403,15 @@ expressao: expressao IGUAL expressao_simples {
; ;
expressao_simples: expressao_simples MAIS termo { expressao_simples: expressao_simples MAIS termo {
if (val_ou_ref == REF)
yyerror("Erro: tentativa de EXPRESSAO em passagem por REFERENCIA\n");
else
geraCodigo(NULL, "SOMA"); // Adiciona operação de soma geraCodigo(NULL, "SOMA"); // Adiciona operação de soma
} }
| expressao_simples MENOS termo { | expressao_simples MENOS termo {
if (val_ou_ref == REF)
yyerror("Erro: tentativa de EXPRESSAO em passagem por REFERENCIA\n");
else
geraCodigo(NULL, "SUBT"); // Adiciona operação de subt geraCodigo(NULL, "SUBT"); // Adiciona operação de subt
} }
| termo | termo
...@@ -435,7 +443,6 @@ fator: IDENT { ...@@ -435,7 +443,6 @@ fator: IDENT {
sprintf(buffer, "CRVL %d,%d", l_elem->nivel, l_elem->info.vs.desloc); sprintf(buffer, "CRVL %d,%d", l_elem->nivel, l_elem->info.vs.desloc);
} }
geraCodigo(NULL, buffer); geraCodigo(NULL, buffer);
val_ou_ref = VLR;
} }
} }
| NUMERO { | NUMERO {
......
...@@ -8,5 +8,5 @@ program proc1 (input, output); ...@@ -8,5 +8,5 @@ program proc1 (input, output);
end; end;
begin begin
x := 8; x := 8;
p(x, 2+3); p(x+9, 2+3);
end. end.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment