Пример #1
0
// Entry Point
int main(int argc, char * argv[]) {

    bool st = false, ast = false;
    std::filebuf fb;
    int lexdecision=0;
    std::string program_name;
    
    if (argc < 2){
      std::cout << "No filename was given." << std::endl;
      exit(0);
    }
    
    if (argc > 2){
      for (int i = 1; i < argc-1; i++) {  
        if (strcmp(argv[i], "-a") ==0) ast= true;
        if (strcmp(argv[i], "-t") ==0) st= true;
        
      }
      //std::cout << argv[argc-1];
      fb.open (argv[argc-1] ,std::ios::in);
      program_name = argv[argc-1];
      lexdecision = selectLexer(argv[argc-1]);
    } else {
      fb.open (argv[1] ,std::ios::in);
      program_name = argv[1];      
      lexdecision = selectLexer(argv[1]);
    }
    
    std::istream is(&fb);
    Xplode::FlexScanner *scanner;
    Program *program;
    if (lexdecision==1) scanner = new Xplode::ClassicScanner(&is);
    else scanner = new Xplode::XplodeScanner(&is);
    Xplode::Parser parser(&program,scanner);
    parser.parse();
    //program->check();
    if(errorlog->existError()){
      errorlog->print();
      return 0;   
    
    } else {
    
      if (st) program->printTable(); 
      if (ast) program->print();
    }
    
    //El programa es correcto, empieza el TAC
    
    TAC_Program *tac; 
    tac= program->toTAC(program_name); 
    tac->tofile(program_name);
    
    MIPS_Program *assembler = new MIPS_Program();
    assembler->create(tac);
    assembler->tofile(program_name);
                    
    //if (st) program->printTable(); 
    return 0;

}
Пример #2
0
// Entry Point
int main(int argc, char * argv[]) {

    bool st = false, ast = false;
    std::filebuf fb;
    int lexdecision=0;

    
    if (argc < 2){
      std::cout << "No filename was given." << std::endl;
      exit(0);
    }
    
    if (argc > 2){
      for (int i = 1; i < argc-1; i++) {  
        if (strcmp(argv[i], "-a") ==0) ast= true;
        if (strcmp(argv[i], "-t") ==0) st= true;
        
      }
      std::cout << argv[argc-1];
      fb.open (argv[argc-1] ,std::ios::in);
      lexdecision = selectLexer(argv[argc-1]);
    } else {
      fb.open (argv[1] ,std::ios::in);
      lexdecision = selectLexer(argv[1]);
    }
    
    std::istream is(&fb);
    Xplode::FlexScanner *scanner;
    Program *program;
    if (lexdecision==1) scanner = new Xplode::ClassicScanner(&is);
    else scanner = new Xplode::XplodeScanner(&is);
    Xplode::Parser parser(&program,scanner);
    parser.parse();
    //program->check();
    if(errorlog->existError()){
      errorlog->print();
    }  
    else{
      if (st) program->printTable(); 
      if (ast) program->print();
    }
    return 0;

}