Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
compilador
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
hm19
compilador
Commits
3af03988
Commit
3af03988
authored
8 months ago
by
hm19
Browse files
Options
Downloads
Patches
Plain Diff
funcao espera parametros certos
parent
7f8dde59
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
MEPA
+42
-12
42 additions, 12 deletions
MEPA
compilador
+0
-0
0 additions, 0 deletions
compilador
compilador.tab.c
+79
-80
79 additions, 80 deletions
compilador.tab.c
compilador.y
+17
-18
17 additions, 18 deletions
compilador.y
with
138 additions
and
110 deletions
MEPA
+
42
−
12
View file @
3af03988
...
@@ -2,22 +2,52 @@
...
@@ -2,22 +2,52 @@
AMEM 1
AMEM 1
DSVS R00
DSVS R00
R01: ENPR 1
R01: ENPR 1
AMEM
1
AMEM
2
DSVS R02
DSVS R02
R02: NADA
R02: NADA
CRVI 1,-5
CRVL 1,-5
ARMZ 1,0
CRCT 2
CMME
DSVF R03
CRVL 1,-5
ARMZ 1,-6
CRCT 0
ARMI 1,-4
DSVS R04
R03: NADA
AMEM 1
CRVL 1,-5
CRCT 1
CRCT 1
ARMI 1,-5
SUBT
DMEM 1
CREN 1,0
RTPR 1,2
CHPR R01,1
R00: NADA
AMEM 1
CRCT 8
CRVL 1,-5
ARMZ 0,0
CREN 0,0
CRCT 2
CRCT 2
CRCT 3
SUBT
CREN 1,1
CHPR R01,1
SOMA
SOMA
CHPR R01,0
ARMZ 1,-6
CRVL 1,0
CRVL 1,1
SOMA
CRCT 1
SOMA
ARMI 1,-4
R04: NADA
CRVL 1,-5
IMPR
CRVI 1,-4
IMPR
DMEM 2
R00: NADA
AMEM 1
CRCT 3
CREN 0,0
CHPR R01,-1
IMPR
CRVL 0,0
IMPR
DMEM 1
DMEM 1
PARA
PARA
This diff is collapsed.
Click to expand it.
compilador
+
0
−
0
View file @
3af03988
No preview for this file type
This diff is collapsed.
Click to expand it.
compilador.tab.c
+
79
−
80
View file @
3af03988
...
@@ -567,11 +567,11 @@ static const yytype_int16 yyrline[] =
...
@@ -567,11 +567,11 @@ static const yytype_int16 yyrline[] =
234
,
238
,
210
,
246
,
247
,
245
,
255
,
258
,
259
,
263
,
234
,
238
,
210
,
246
,
247
,
245
,
255
,
258
,
259
,
263
,
262
,
272
,
272
,
280
,
281
,
284
,
294
,
297
,
298
,
299
,
262
,
272
,
272
,
280
,
281
,
284
,
294
,
297
,
298
,
299
,
302
,
303
,
306
,
307
,
308
,
309
,
310
,
311
,
314
,
314
,
302
,
303
,
306
,
307
,
308
,
309
,
310
,
311
,
314
,
314
,
318
,
319
,
322
,
322
,
353
,
353
,
39
6
,
39
9
,
40
3
,
40
2
,
318
,
319
,
322
,
322
,
353
,
353
,
39
5
,
39
8
,
40
2
,
40
1
,
41
5
,
41
5
,
42
9
,
43
2
,
43
3
,
43
6
,
44
5
,
44
8
,
45
1
,
45
6
,
41
4
,
41
4
,
42
8
,
43
1
,
43
2
,
43
5
,
44
4
,
44
7
,
45
0
,
45
5
,
45
9
,
46
2
,
46
5
,
46
8
,
47
1
,
47
4
,
47
7
,
48
3
,
48
9
,
49
2
,
45
8
,
46
1
,
46
4
,
46
7
,
47
0
,
47
3
,
47
6
,
48
2
,
48
8
,
49
1
,
49
5
,
49
8
,
50
1
,
50
1
,
54
3
,
55
4
,
55
6
,
56
3
,
55
6
,
58
9
,
49
4
,
49
7
,
50
0
,
50
0
,
54
2
,
55
3
,
55
5
,
56
2
,
55
5
,
58
8
,
59
6
,
59
8
,
60
1
,
60
1
59
5
,
59
7
,
60
0
,
60
0
};
};
#endif
#endif
...
@@ -1811,39 +1811,38 @@ yyreduce:
...
@@ -1811,39 +1811,38 @@ yyreduce:
{
{
if
(
l_elem
==
NULL
){
if
(
l_elem
==
NULL
){
yyerror
(
"Procedimento não declarado"
);
yyerror
(
"Procedimento não declarado"
);
}
else
if
(
l_elem
->
categ
==
PR
||
l_elem
->
categ
==
FUN
)
{
}
else
{
// Gera código para chamar o procedimento
// Gera código para chamar o procedimento
empilha
(
l_elem
->
ident
,
proc
);
empilha
(
l_elem
->
ident
,
proc
);
}
}
if
(
l_elem
->
categ
==
FUN
)
if
(
l_elem
->
categ
==
FUN
)
geraCodigo
(
NULL
,
"AMEM 1"
);
geraCodigo
(
NULL
,
"AMEM 1"
);
if
(
l_elem
->
categ
==
PR
||
l_elem
->
categ
==
FUN
)
num_param
=
0
;
// Reinicia a contagem de parâmetros reais
num_param
=
0
;
// Reinicia a contagem de parâmetros reais
}
}
#line 182
3
"compilador.tab.c"
#line 182
4
"compilador.tab.c"
break
;
break
;
case
65
:
case
65
:
#line 36
7
"compilador.y"
#line 36
8
"compilador.y"
{
{
if
(
l_elem
->
categ
==
PR
||
l_elem
->
categ
==
FUN
)
{
char
buffer
[
50
];
char
buffer
[
50
];
mostra_ts
(
ts
);
mostra_ts
(
ts
);
desempilha
(
buffer
,
proc
);
desempilha
(
buffer
,
proc
);
l_elem
=
busca
(
buffer
,
ts
);
l_elem
=
busca
(
buffer
,
ts
);
if
(
l_elem
->
categ
==
PR
||
l_elem
->
categ
==
FUN
)
{
// Verifica se o número de parâmetros reais bate com os formais
// Verifica se o número de parâmetros reais bate com os formais
if
(
num_param
!=
l_elem
->
info
.
pr
.
quant
)
{
char
error_msg
[
100
];
char
error_msg
[
100
];
if
(
l_elem
->
categ
==
PR
)
{
if
(
l_elem
->
categ
==
PR
&&
num_param
!=
l_elem
->
info
.
pr
.
quant
)
{
sprintf
(
error_msg
,
"Erro: número de parâmetros incorreto. Esperado: %d, recebido: %d."
,
sprintf
(
error_msg
,
"Erro: número de parâmetros incorreto. Esperado: %d, recebido: %d."
,
l_elem
->
info
.
pr
.
quant
,
num_param
);
l_elem
->
info
.
pr
.
quant
,
num_param
);
yyerror
(
error_msg
);
yyerror
(
error_msg
);
}
else
if
(
l_elem
->
categ
==
FUN
){
}
else
if
(
l_elem
->
categ
==
FUN
&&
num_param
!=
l_elem
->
info
.
fun
.
quant
){
sprintf
(
error_msg
,
"Erro: número de parâmetros incorreto. Esperado: %d, recebido: %d."
,
sprintf
(
error_msg
,
"Erro: número de parâmetros incorreto. Esperado: %d, recebido: %d."
,
l_elem
->
info
.
fun
.
quant
,
num_param
);
l_elem
->
info
.
fun
.
quant
,
num_param
);
yyerror
(
error_msg
);
yyerror
(
error_msg
);
}
}
}
// Gera o código de chamada do procedimento
// Gera o código de chamada do procedimento
...
@@ -1851,11 +1850,11 @@ yyreduce:
...
@@ -1851,11 +1850,11 @@ yyreduce:
geraCodigo
(
NULL
,
buffer
);
geraCodigo
(
NULL
,
buffer
);
}
}
}
}
#line 185
5
"compilador.tab.c"
#line 185
4
"compilador.tab.c"
break
;
break
;
case
68
:
case
68
:
#line 40
3
"compilador.y"
#line 40
2
"compilador.y"
{
{
char
buffer
[
50
];
char
buffer
[
50
];
desempilha
(
buffer
,
proc
);
desempilha
(
buffer
,
proc
);
...
@@ -1863,20 +1862,20 @@ yyreduce:
...
@@ -1863,20 +1862,20 @@ yyreduce:
val_ou_ref
=
l_elem
->
info
.
pr
.
param
[
num_param
][
1
];
val_ou_ref
=
l_elem
->
info
.
pr
.
param
[
num_param
][
1
];
empilha
(
buffer
,
proc
);
empilha
(
buffer
,
proc
);
}
}
#line 186
7
"compilador.tab.c"
#line 186
6
"compilador.tab.c"
break
;
break
;
case
69
:
case
69
:
#line 41
1
"compilador.y"
#line 41
0
"compilador.y"
{
{
num_param
++
;
// Incrementa para cada parâmetro real
num_param
++
;
// Incrementa para cada parâmetro real
val_ou_ref
=
VLR
;
val_ou_ref
=
VLR
;
}
}
#line 187
6
"compilador.tab.c"
#line 187
5
"compilador.tab.c"
break
;
break
;
case
70
:
case
70
:
#line 41
5
"compilador.y"
#line 41
4
"compilador.y"
{
{
char
buffer
[
50
];
char
buffer
[
50
];
desempilha
(
buffer
,
proc
);
desempilha
(
buffer
,
proc
);
...
@@ -1884,20 +1883,20 @@ yyreduce:
...
@@ -1884,20 +1883,20 @@ yyreduce:
val_ou_ref
=
l_elem
->
info
.
pr
.
param
[
num_param
][
1
];
val_ou_ref
=
l_elem
->
info
.
pr
.
param
[
num_param
][
1
];
empilha
(
buffer
,
proc
);
empilha
(
buffer
,
proc
);
}
}
#line 188
8
"compilador.tab.c"
#line 188
7
"compilador.tab.c"
break
;
break
;
case
71
:
case
71
:
#line 42
3
"compilador.y"
#line 42
2
"compilador.y"
{
{
num_param
++
;
// Conta o primeiro parâmetro real
num_param
++
;
// Conta o primeiro parâmetro real
val_ou_ref
=
VLR
;
val_ou_ref
=
VLR
;
}
}
#line 189
7
"compilador.tab.c"
#line 189
6
"compilador.tab.c"
break
;
break
;
case
75
:
case
75
:
#line 43
6
"compilador.y"
#line 43
5
"compilador.y"
{
{
geraCodigo
(
NULL
,
"LEIT"
);
geraCodigo
(
NULL
,
"LEIT"
);
l_elem
=
busca
(
token
,
ts
);
l_elem
=
busca
(
token
,
ts
);
...
@@ -1905,123 +1904,123 @@ yyreduce:
...
@@ -1905,123 +1904,123 @@ yyreduce:
sprintf
(
buffer
,
"ARMZ %d,%d"
,
l_elem
->
nivel
,
l_elem
->
info
.
vs
.
desloc
);
sprintf
(
buffer
,
"ARMZ %d,%d"
,
l_elem
->
nivel
,
l_elem
->
info
.
vs
.
desloc
);
geraCodigo
(
NULL
,
buffer
);
geraCodigo
(
NULL
,
buffer
);
}
}
#line 190
9
"compilador.tab.c"
#line 190
8
"compilador.tab.c"
break
;
break
;
case
77
:
case
77
:
#line 44
8
"compilador.y"
#line 44
7
"compilador.y"
{
{
geraCodigo
(
NULL
,
"IMPR"
);
geraCodigo
(
NULL
,
"IMPR"
);
}
}
#line 191
7
"compilador.tab.c"
#line 191
6
"compilador.tab.c"
break
;
break
;
case
78
:
case
78
:
#line 45
1
"compilador.y"
#line 45
0
"compilador.y"
{
{
geraCodigo
(
NULL
,
"IMPR"
);
geraCodigo
(
NULL
,
"IMPR"
);
}
}
#line 192
5
"compilador.tab.c"
#line 192
4
"compilador.tab.c"
break
;
break
;
case
79
:
case
79
:
#line 45
6
"compilador.y"
#line 45
5
"compilador.y"
{
{
geraCodigo
(
NULL
,
"CMIG"
);
// Adiciona operação de cmig
geraCodigo
(
NULL
,
"CMIG"
);
// Adiciona operação de cmig
}
}
#line 193
3
"compilador.tab.c"
#line 193
2
"compilador.tab.c"
break
;
break
;
case
80
:
case
80
:
#line 45
9
"compilador.y"
#line 45
8
"compilador.y"
{
{
geraCodigo
(
NULL
,
"CMDG"
);
// Adiciona operação de cmdg
geraCodigo
(
NULL
,
"CMDG"
);
// Adiciona operação de cmdg
}
}
#line 194
1
"compilador.tab.c"
#line 194
0
"compilador.tab.c"
break
;
break
;
case
81
:
case
81
:
#line 46
2
"compilador.y"
#line 46
1
"compilador.y"
{
{
geraCodigo
(
NULL
,
"CMME"
);
// Adiciona operação de cmme
geraCodigo
(
NULL
,
"CMME"
);
// Adiciona operação de cmme
}
}
#line 194
9
"compilador.tab.c"
#line 194
8
"compilador.tab.c"
break
;
break
;
case
82
:
case
82
:
#line 46
5
"compilador.y"
#line 46
4
"compilador.y"
{
{
geraCodigo
(
NULL
,
"CMEG"
);
// Adiciona operação de cmeg
geraCodigo
(
NULL
,
"CMEG"
);
// Adiciona operação de cmeg
}
}
#line 195
7
"compilador.tab.c"
#line 195
6
"compilador.tab.c"
break
;
break
;
case
83
:
case
83
:
#line 46
8
"compilador.y"
#line 46
7
"compilador.y"
{
{
geraCodigo
(
NULL
,
"CMMA"
);
// Adiciona operação de cmma
geraCodigo
(
NULL
,
"CMMA"
);
// Adiciona operação de cmma
}
}
#line 196
5
"compilador.tab.c"
#line 196
4
"compilador.tab.c"
break
;
break
;
case
84
:
case
84
:
#line 47
1
"compilador.y"
#line 47
0
"compilador.y"
{
{
geraCodigo
(
NULL
,
"CMAG"
);
// Adiciona operação de cmag
geraCodigo
(
NULL
,
"CMAG"
);
// Adiciona operação de cmag
}
}
#line 197
3
"compilador.tab.c"
#line 197
2
"compilador.tab.c"
break
;
break
;
case
86
:
case
86
:
#line 47
7
"compilador.y"
#line 47
6
"compilador.y"
{
{
if
(
val_ou_ref
==
REF
)
if
(
val_ou_ref
==
REF
)
yyerror
(
"Erro: tentativa de EXPRESSAO em passagem por REFERENCIA
\n
"
);
yyerror
(
"Erro: tentativa de EXPRESSAO em passagem por REFERENCIA
\n
"
);
else
else
geraCodigo
(
NULL
,
"SOMA"
);
// Adiciona operação de soma
geraCodigo
(
NULL
,
"SOMA"
);
// Adiciona operação de soma
}
}
#line 198
4
"compilador.tab.c"
#line 198
3
"compilador.tab.c"
break
;
break
;
case
87
:
case
87
:
#line 48
3
"compilador.y"
#line 48
2
"compilador.y"
{
{
if
(
val_ou_ref
==
REF
)
if
(
val_ou_ref
==
REF
)
yyerror
(
"Erro: tentativa de EXPRESSAO em passagem por REFERENCIA
\n
"
);
yyerror
(
"Erro: tentativa de EXPRESSAO em passagem por REFERENCIA
\n
"
);
else
else
geraCodigo
(
NULL
,
"SUBT"
);
// Adiciona operação de subt
geraCodigo
(
NULL
,
"SUBT"
);
// Adiciona operação de subt
}
}
#line 199
5
"compilador.tab.c"
#line 199
4
"compilador.tab.c"
break
;
break
;
case
89
:
case
89
:
#line 49
2
"compilador.y"
#line 49
1
"compilador.y"
{
{
geraCodigo
(
NULL
,
"MULT"
);
// Adiciona operação de mult
geraCodigo
(
NULL
,
"MULT"
);
// Adiciona operação de mult
}
}
#line 200
3
"compilador.tab.c"
#line 200
2
"compilador.tab.c"
break
;
break
;
case
90
:
case
90
:
#line 49
5
"compilador.y"
#line 49
4
"compilador.y"
{
{
geraCodigo
(
NULL
,
"DIVI"
);
// Adiciona operação de divi
geraCodigo
(
NULL
,
"DIVI"
);
// Adiciona operação de divi
}
}
#line 201
1
"compilador.tab.c"
#line 201
0
"compilador.tab.c"
break
;
break
;
case
92
:
case
92
:
#line 50
1
"compilador.y"
#line 50
0
"compilador.y"
{
{
// Carrega variável
// Carrega variável
l_elem
=
busca
(
token
,
ts
);
l_elem
=
busca
(
token
,
ts
);
empilha
(
token
,
proc
);
empilha
(
token
,
proc
);
}
}
#line 202
1
"compilador.tab.c"
#line 202
0
"compilador.tab.c"
break
;
break
;
case
93
:
case
93
:
#line 50
7
"compilador.y"
#line 50
6
"compilador.y"
{
{
char
buffer
[
50
];
char
buffer
[
50
];
desempilha
(
buffer
,
proc
);
desempilha
(
buffer
,
proc
);
...
@@ -2058,11 +2057,11 @@ yyreduce:
...
@@ -2058,11 +2057,11 @@ yyreduce:
}
}
}
}
}
}
#line 206
2
"compilador.tab.c"
#line 206
1
"compilador.tab.c"
break
;
break
;
case
94
:
case
94
:
#line 54
3
"compilador.y"
#line 54
2
"compilador.y"
{
{
// Empilha constante
// Empilha constante
char
buffer
[
50
];
char
buffer
[
50
];
...
@@ -2073,11 +2072,11 @@ yyreduce:
...
@@ -2073,11 +2072,11 @@ yyreduce:
}
}
geraCodigo
(
NULL
,
buffer
);
geraCodigo
(
NULL
,
buffer
);
}
}
#line 207
7
"compilador.tab.c"
#line 207
6
"compilador.tab.c"
break
;
break
;
case
96
:
case
96
:
#line 55
6
"compilador.y"
#line 55
5
"compilador.y"
{
{
char
r_ini
[
4
];
char
r_ini
[
4
];
sprintf
(
r_ini
,
"R%02d"
,
rot_id
);
sprintf
(
r_ini
,
"R%02d"
,
rot_id
);
...
@@ -2085,11 +2084,11 @@ yyreduce:
...
@@ -2085,11 +2084,11 @@ yyreduce:
rot_id
+=
1
;
rot_id
+=
1
;
geraCodigo
(
r_ini
,
"NADA"
);
geraCodigo
(
r_ini
,
"NADA"
);
}
}
#line 208
9
"compilador.tab.c"
#line 208
8
"compilador.tab.c"
break
;
break
;
case
97
:
case
97
:
#line 56
3
"compilador.y"
#line 56
2
"compilador.y"
{
{
char
r_fim
[
4
];
char
r_fim
[
4
];
sprintf
(
r_fim
,
"R%02d"
,
rot_id
);
sprintf
(
r_fim
,
"R%02d"
,
rot_id
);
...
@@ -2100,11 +2099,11 @@ yyreduce:
...
@@ -2100,11 +2099,11 @@ yyreduce:
strcat
(
buffer
,
r_fim
);
strcat
(
buffer
,
r_fim
);
geraCodigo
(
NULL
,
buffer
);
geraCodigo
(
NULL
,
buffer
);
}
}
#line 210
4
"compilador.tab.c"
#line 210
3
"compilador.tab.c"
break
;
break
;
case
98
:
case
98
:
#line 57
3
"compilador.y"
#line 57
2
"compilador.y"
{
{
char
r_ini
[
4
];
char
r_ini
[
4
];
char
r_fim
[
4
];
char
r_fim
[
4
];
...
@@ -2119,21 +2118,21 @@ yyreduce:
...
@@ -2119,21 +2118,21 @@ yyreduce:
geraCodigo
(
r_fim
,
"NADA"
);
geraCodigo
(
r_fim
,
"NADA"
);
}
}
#line 212
3
"compilador.tab.c"
#line 212
2
"compilador.tab.c"
break
;
break
;
case
99
:
case
99
:
#line 58
9
"compilador.y"
#line 58
8
"compilador.y"
{
{
char
r_fim
[
4
];
char
r_fim
[
4
];
desempilha
(
r_fim
,
rot
);
desempilha
(
r_fim
,
rot
);
geraCodigo
(
r_fim
,
"NADA"
);
geraCodigo
(
r_fim
,
"NADA"
);
}
}
#line 213
3
"compilador.tab.c"
#line 213
2
"compilador.tab.c"
break
;
break
;
case
102
:
case
102
:
#line 60
1
"compilador.y"
#line 60
0
"compilador.y"
{
{
char
r_else
[
4
];
char
r_else
[
4
];
sprintf
(
r_else
,
"R%02d"
,
rot_id
);
sprintf
(
r_else
,
"R%02d"
,
rot_id
);
...
@@ -2149,11 +2148,11 @@ yyreduce:
...
@@ -2149,11 +2148,11 @@ yyreduce:
empilha
(
r_fim
,
rot
);
empilha
(
r_fim
,
rot
);
rot_id
+=
1
;
rot_id
+=
1
;
}
}
#line 215
3
"compilador.tab.c"
#line 215
2
"compilador.tab.c"
break
;
break
;
case
103
:
case
103
:
#line 61
6
"compilador.y"
#line 61
5
"compilador.y"
{
{
char
r_fim
[
4
];
char
r_fim
[
4
];
desempilha
(
r_fim
,
rot
);
desempilha
(
r_fim
,
rot
);
...
@@ -2168,11 +2167,11 @@ yyreduce:
...
@@ -2168,11 +2167,11 @@ yyreduce:
geraCodigo
(
r_else
,
"NADA"
);
geraCodigo
(
r_else
,
"NADA"
);
}
}
#line 217
2
"compilador.tab.c"
#line 217
1
"compilador.tab.c"
break
;
break
;
#line 217
6
"compilador.tab.c"
#line 217
5
"compilador.tab.c"
default:
break
;
default:
break
;
}
}
...
@@ -2404,7 +2403,7 @@ yyreturn:
...
@@ -2404,7 +2403,7 @@ yyreturn:
#endif
#endif
return
yyresult
;
return
yyresult
;
}
}
#line 63
3
"compilador.y"
#line 63
2
"compilador.y"
int
main
(
int
argc
,
char
**
argv
)
{
int
main
(
int
argc
,
char
**
argv
)
{
...
...
This diff is collapsed.
Click to expand it.
compilador.y
+
17
−
18
View file @
3af03988
...
@@ -353,37 +353,36 @@ chamada_procedimento:
...
@@ -353,37 +353,36 @@ chamada_procedimento:
{
{
if (l_elem == NULL){
if (l_elem == NULL){
yyerror("Procedimento não declarado");
yyerror("Procedimento não declarado");
} else
if (l_elem->categ == PR || l_elem->categ == FUN)
{
} else{
// Gera código para chamar o procedimento
// Gera código para chamar o procedimento
empilha(l_elem->ident, proc);
empilha(l_elem->ident, proc);
}
}
if (l_elem->categ == FUN)
if (l_elem->categ == FUN)
geraCodigo(NULL, "AMEM 1");
geraCodigo(NULL, "AMEM 1");
if (l_elem->categ == PR || l_elem->categ == FUN)
num_param = 0; // Reinicia a contagem de parâmetros reais
num_param = 0; // Reinicia a contagem de parâmetros reais
}
}
lista_parametros
lista_parametros
{
{
if (l_elem->categ == PR || l_elem->categ ==FUN) {
char buffer[50];
char buffer[50];
mostra_ts(ts);
mostra_ts(ts);
desempilha(buffer, proc);
desempilha(buffer, proc);
l_elem = busca(buffer, ts);
l_elem = busca(buffer, ts);
if (l_elem->categ == PR || l_elem->categ ==FUN) {
// Verifica se o número de parâmetros reais bate com os formais
// Verifica se o número de parâmetros reais bate com os formais
if (num_param != l_elem->info.pr.quant) {
char error_msg[100];
char error_msg[100];
if(l_elem->categ == PR
)
{
if
(l_elem->categ == PR
&& num_param != l_elem->info.pr.quant)
{
sprintf(error_msg, "Erro: número de parâmetros incorreto. Esperado: %d, recebido: %d.",
sprintf(error_msg, "Erro: número de parâmetros incorreto. Esperado: %d, recebido: %d.",
l_elem->info.pr.quant, num_param);
l_elem->info.pr.quant, num_param);
yyerror(error_msg);
yyerror(error_msg);
} else if(l_elem->categ == FUN){
} else if(l_elem->categ == FUN
&& num_param != l_elem->info.fun.quant
){
sprintf(error_msg, "Erro: número de parâmetros incorreto. Esperado: %d, recebido: %d.",
sprintf(error_msg, "Erro: número de parâmetros incorreto. Esperado: %d, recebido: %d.",
l_elem->info.fun.quant, num_param);
l_elem->info.fun.quant, num_param);
yyerror(error_msg);
yyerror(error_msg);
}
}
}
// Gera o código de chamada do procedimento
// Gera o código de chamada do procedimento
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment