Пример #1
0
bool Assembler::Assemble(const char *filename, Assembly& assembly)
{
  assembly.Clear();
  LabelVector labels;

  FILE *in = fopen(filename, "rt");
  if(in == null) return false;
 
  char buffer[256];

  int linecount = 0;
  while(fgets(buffer, sizeof(buffer), in)) {
    size_t lc = strlen(buffer) - 1;
    if(buffer[lc] == '\n') buffer[lc] = '\0';

    string line(buffer);
    if(ParseLine(line, linecount, assembly, labels) == false) {
      printf("Syntax error on line %d: \"%s\"\n", linecount + 1, buffer);
      fclose(in);
      return false;
    }
    linecount ++;
  }

  fclose(in);

  // replace label indices with code positions
  return SetLabels(assembly, labels);
}