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(); }