Пример #1
0
void CFormulaParser::ParseFile(CArchive& formula_file) {
  InitNewParse();
  p_function_collection->DeleteAll(false, true);
  p_function_collection->SetTitle(formula_file.GetFile()->GetFileName());
  p_function_collection->SetPath(formula_file.GetFile()->GetFilePath());
  while (true) {
    int starting_line = _formula_file_splitter.starting_line_of_current_function();
    _formula_file_splitter.ScanForNextFunctionOrList(formula_file);
    CString function_header = _formula_file_splitter.GetFunctionHeader(); 
    if (function_header.GetLength() <= 0) {
	    write_log(preferences.debug_parser(), 
	      "[FormulaParser] Empty function received. Parse finished.\n");
	    goto ExitLoop;
    }
    if (!VerifyFunctionHeader(function_header)) {
      // Skip this function
      continue;
    }
    ParseSingleFormula(_formula_file_splitter.GetFunctionText(), starting_line);
  }
ExitLoop:
  FinishParse();
  // Dump function collection to log
  write_log(preferences.debug_formula() || preferences.debug_parser(),
    "[CFormulaParser] ParseFile() done: %s\n",
    formula_file.GetFile()->GetFileName());
  p_function_collection->Dump();
}
CFormulaFileSplitter::CFormulaFileSplitter() {
  InitNewParse();
}