#include<stdio.h>
#include<stdlib.h>
#include<string.h>


static void error (const char *msg, int line) {
  fprintf(stderr, "erro %s na linha %d\n", msg, line);
  exit(EXIT_FAILURE);
}

void checkVar(char var, int idx, int line) {
  switch (var) {
    case 'v':
      if ((idx < 0) || (idx > 9))
       error("operando invalido", line);
      break;
    case 'p':
      if ((idx < 0) || (idx > 4))
       error("operando invalido", line);
      break;
    default:
       error("operando invalido", line);
   }
}
     
int main (void) {
  int line = 1;
  int  c;
  FILE *myfp;

  if ((myfp = fopen ("programa", "r")) == NULL)
    perror ("nao conseguiu abrir arquivo!");

  while ((c = fgetc(myfp)) != EOF) {
    switch (c) {
      case 'r': {  /* retorno */
        fscanf(myfp, "et");
        printf("ret\n");
        break;
      }
      case 'w': {  /* while */
        int idx;
        char var;
        if (fscanf(myfp, "hile %c%d", &var, &idx) != 2)
          error("comando invalido i",line);
        if (var != '$') checkVar(var, idx, line);
        printf("while %c%d\n", var, idx);
        break;
      }
      case 'e': {  /* end */
        fscanf(myfp, "nd");
        printf("end\n");
        break;
      }
      case 'v': case 'p': case '$': {  /* atribuicao */
        int idx0, idx1, idx2;
        char var0 = c, var1, var2;
        char op;
        if (fscanf(myfp, "%d = %c%d %c %c%d",
                   &idx0, &var1, &idx1, &op, &var2, &idx2) != 6)
          error("comando invalido", line);
        checkVar(var0, idx0, line);
        if (var1 != '$') checkVar(var1, idx1, line);
        if (var2 != '$') checkVar(var2, idx2, line);
        printf("%c%d = %c%d %c %c%d\n",
                var0, idx0, var1, idx1, op, var2, idx2);
        break;
      }
      default: error("comando desconhecido", line);
    }
    line ++;
    fscanf(myfp, " ");
  }
  return 0;
}