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

expressoes entre parenteses + msgs de erro

parent ef74179d
No related branches found
No related tags found
No related merge requests found
Showing
with 857 additions and 859 deletions
.DS_Store 0 → 100644
File added
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
EXEMPLOS="Exemplo5 Exemplo7.01 Exemplo7.02 Exemplo7.03 Exemplo7.04 Exemplo7.05 Exemplo8.05 Exemplo8.06 Exemplo8.07 Exemplo8.08 Exemplo8.09 Exemplo8.10 ExemploErro1 ExemploErro2" EXEMPLOS="Exemplo5 Exemplo7.01 Exemplo7.02 Exemplo7.03 Exemplo7.04 Exemplo7.05 Exemplo8.05 Exemplo8.06 Exemplo8.07 Exemplo8.08 Exemplo8.09 Exemplo8.10 ExemploErro1 ExemploErro2"
echo "Usage: avaliaTrab.sh <arquivo executavel compilador" echo "Usage: avaliaTrab.sh < compilador"
for exemplo in $EXEMPLOS; do for exemplo in $EXEMPLOS; do
echo -n $exemplo "... " echo -n $exemplo "... "
cp $exemplo"/pgma.pas" "./" cp $exemplo/pgma.pas .
cp $exemplo"/MEPA" "MEPA-Res" cp $exemplo/MEPA MEPA-Res
$1 ./pgma.pas > res $1 pgma.pas > res
diff MEPA MEPA-Res -bBt diff MEPA MEPA-Res -bBt
done done
File mode changed from 100644 to 100755
...@@ -50,3 +50,5 @@ R00: NADA ...@@ -50,3 +50,5 @@ R00: NADA
IMPR IMPR
CRVL 0, 0 CRVL 0, 0
IMPR IMPR
DMEM 1
PARA
This diff is collapsed.
...@@ -125,7 +125,7 @@ tipo : IDENT ...@@ -125,7 +125,7 @@ tipo : IDENT
} else if (strcmp(token, "boolean") == 0) { } else if (strcmp(token, "boolean") == 0) {
atualiza_tipo(num_vars, BOOLEAN, ts); atualiza_tipo(num_vars, BOOLEAN, ts);
} else { } else {
yyerror("Tipo não reconhecido. Somente 'integer' ou 'boolean' são permitidos."); yyerror("ERRO: Tipo não reconhecido. Somente 'integer' ou 'boolean' são permitidos.");
} }
mostra_ts(ts); // Mostra a tabela após a inserção mostra_ts(ts); // Mostra a tabela após a inserção
} }
...@@ -321,7 +321,7 @@ atribuicao_ou_procedimento_token: atribuicao ...@@ -321,7 +321,7 @@ atribuicao_ou_procedimento_token: atribuicao
atribuicao: { atribuicao: {
if (l_elem == NULL) { if (l_elem == NULL) {
yyerror("Variável de destino não declarada"); yyerror("ERRO: Variável de destino não declarada");
} else { } else {
if (l_elem->categ == PF && l_elem->info.pf.passagem == REF) if (l_elem->categ == PF && l_elem->info.pf.passagem == REF)
atr_indireto = REF; atr_indireto = REF;
...@@ -334,7 +334,7 @@ atribuicao: { ...@@ -334,7 +334,7 @@ atribuicao: {
else if(l_elem->categ == FUN) else if(l_elem->categ == FUN)
destino_desloc = l_elem->info.fun.desloc; destino_desloc = l_elem->info.fun.desloc;
else else
yyerror("Tentativa de atribuir em procedimento"); yyerror("ERRO: Tentativa de atribuir em procedimento");
} }
} ATRIBUICAO expressao_simples { } ATRIBUICAO expressao_simples {
...@@ -352,7 +352,7 @@ atribuicao: { ...@@ -352,7 +352,7 @@ atribuicao: {
chamada_procedimento: chamada_procedimento:
{ {
if (l_elem == NULL){ if (l_elem == NULL){
yyerror("Procedimento não declarado"); yyerror("ERRO: Procedimento não declarado");
} else{ } 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);
...@@ -375,11 +375,11 @@ chamada_procedimento: ...@@ -375,11 +375,11 @@ chamada_procedimento:
// 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
char error_msg[100]; char error_msg[100];
if (l_elem->categ == PR && num_param != l_elem->info.pr.quant) { 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 && num_param != l_elem->info.fun.quant){ } 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);
} }
...@@ -475,13 +475,13 @@ expressao: expressao IGUAL expressao_simples { ...@@ -475,13 +475,13 @@ expressao: expressao IGUAL expressao_simples {
expressao_simples: expressao_simples MAIS termo { expressao_simples: expressao_simples MAIS termo {
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
} }
| expressao_simples MENOS termo { | expressao_simples MENOS termo {
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
} }
...@@ -508,7 +508,7 @@ fator: IDENT { ...@@ -508,7 +508,7 @@ fator: IDENT {
desempilha(buffer, proc); desempilha(buffer, proc);
l_elem = busca(buffer, ts); l_elem = busca(buffer, ts);
if (l_elem == NULL) { if (l_elem == NULL) {
yyerror("Variável não declarada"); yyerror("ERRO: Variável não declarada");
} else { } else {
if (val_ou_ref == REF) { if (val_ou_ref == REF) {
if (l_elem->categ == VS){ if (l_elem->categ == VS){
...@@ -520,7 +520,7 @@ fator: IDENT { ...@@ -520,7 +520,7 @@ fator: IDENT {
geraCodigo(NULL, buffer); geraCodigo(NULL, buffer);
} }
else else
yyerror("Tentativa de passagem de referencia de procedimento ou funcao"); yyerror("ERRO: Tentativa de passagem de referencia de procedimento ou funcao");
} }
else if (l_elem->categ == PF && l_elem->info.pf.passagem == REF) { else if (l_elem->categ == PF && l_elem->info.pf.passagem == REF) {
...@@ -545,10 +545,12 @@ fator: IDENT { ...@@ -545,10 +545,12 @@ fator: IDENT {
if (val_ou_ref == VLR) if (val_ou_ref == VLR)
sprintf(buffer, "CRCT %s", token); sprintf(buffer, "CRCT %s", token);
else { else {
yyerror("Erro: passagem de constante por REFERENCIA.\n"); yyerror("ERRO: passagem de constante por REFERENCIA.\n");
} }
geraCodigo(NULL, buffer); geraCodigo(NULL, buffer);
}; }
| ABRE_PARENTESES expressao FECHA_PARENTESES
;
numero: NUMERO; numero: NUMERO;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment