Olá, estou na minha saga de compilador Pascal para Mepa e estou com outra duvida. Agora em relação a precedência de operadores lógicos, relacionais e aritméticos. Gostaria de saber se oque eu fiz está correto, se está na precedência correta ou se teria de alterar algo.
Deixo novamente meu link com os arquivos, esta parte foi retirada do “sintatico.y”: Pascal-para-Mepa---Parcialmente-implementado/TrabFinal at main · VictorHugX/Pascal-para-Mepa---Parcialmente-implementado · GitHub
expressao
: expressao_simples S_IGUAL expressao_simples
{ fprintf(arq_mep, "%s\n","CMIG"); }
| expressao_simples S_DIFERENTE expressao_simples
{ fprintf(arq_mep, "%s\n","CMDG"); }
| expressao_simples S_MENOR expressao_simples
{ fprintf(arq_mep, "%s\n","CMME"); }
| expressao_simples S_MAIOR expressao_simples
{ fprintf(arq_mep, "%s\n","CMMA"); }
| expressao_simples S_MEIGUAL expressao_simples
{ fprintf(arq_mep, "%s\n","CMEG"); }
| expressao_simples S_MAIGUAL expressao_simples
{ fprintf(arq_mep, "%s\n","CMAG"); }
| expressao_simples
;
expressao_simples
: expressao_simples S_MAIS termo
{ fprintf(arq_mep, "%s\n","SOMA"); }
| expressao_simples S_MENOS termo
{ fprintf(arq_mep, "%s\n","SUBT"); }
| expressao_simples S_OR termo
{ fprintf(arq_mep, "%s\n","DISJ"); }
| S_MAIS termo
| S_MENOS termo
{ fprintf(arq_mep, "%s\n","INVR"); }
| termo
;
termo
: termo S_VEZES fator
{ fprintf(arq_mep, "%s\n","MULT"); }
| termo S_DIV fator
{ fprintf(arq_mep, "%s\n","DIVI"); }
| termo S_AND fator
{ fprintf(arq_mep, "%s\n","CONJ"); }
| fator
;