VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
VMlib::Preprocessor Class Reference

Класс, позволяющий выполнять предварительную обработку файлов More...

#include <Preprocessor.h>

Collaboration diagram for VMlib::Preprocessor:

Public Member Functions

 Preprocessor (const std::string &fileName)
 Конструктор, принимающий на вход имя обрабатываемого файла
 
 ~Preprocessor ()
 Деструктор
 

Public Attributes

std::string initialInput
 Строка, содержащая исходный файл в первоначальном виде
 
std::string intermediateOutput
 Строка, содержащая результат промежуточной обработки файла
 
std::string resultString
 Строка, содержащая окончательный результат обработки файла
 
std::stringstream resultStream
 

Private Member Functions

void normalParser (char ch, std::string &str)
 Обработчик символа в режиме обычного состояния парcера
 
void inStringParser (char ch, std::string &str)
 Обработчик символа в режиме парсера строки (внутри двойных кавычек)
 
void inCharParser (char ch, std::string &str)
 Обработчик символа в режиме парсера символа (внутри одинарных кавычек)
 
void afterSlashParser (char ch, std::string &str)
 Обработчик символа в режиме парсера выражения после слэша
 
void inInlineCommentParser (char ch, std::string &str)
 Обработчик символа в режиме парсера однострочного комментария (после //)
 
void inMultilineCommentParser (char ch, std::string &str)
 Обработчик символа в режиме парсера многострочного комментария
 
char processSymbol (char ch)
 Базовая функция обработки символа В зависимости от входого символа возвращает на выход:
 

Private Attributes

bool inStringLastEscape
 Признак встречи слэша внутри строки (внутри двойных кавычек)
 
bool inCharLastEscape
 Признак встречи слэша внутри символа (внутри одинарных кавычек)
 
bool inInlineLastEscape
 Признак встречи слэша внутри однострочного комментария (после //)
 
bool inMultilineLastStar
 Признак встречи звездочки внутри многострочного комментария (после '/*')
 
void(Preprocessor::* currentParser )(char ch, std::string &str)
 Опредедение currentParser как указателя на функцию-члена класса
 

Detailed Description

Класс, позволяющий выполнять предварительную обработку файлов

Выполняет следующие действия:

  • Исключает из файла однострочные и многостройчные комментарии в стиле С/С++
  • Разрывы строк заменяет на пробелы
  • Точки с запятой заменяет на разрывы строк
Author
Марчевский Илья Константинович \Version 1.14
Date
6 марта 2026 г.

Definition at line 62 of file Preprocessor.h.

Constructor & Destructor Documentation

◆ Preprocessor()

Preprocessor::Preprocessor ( const std::string &  fileName)

Конструктор, принимающий на вход имя обрабатываемого файла

После посимвольной обработки формирует промежуточный вывод intermediateOutput
Затем убирает из вывода пробелы и знаки табуляции и формирует окончательный поток вывода resultStream

Parameters
[in]fileNameконстантная ссылка на строку — имя обрабатываемого файла

Definition at line 47 of file Preprocessor.cpp.

48 :
49 inStringLastEscape(false),
50 inCharLastEscape(false),
51 inInlineLastEscape(false),
54{
55#pragma warning (push)
56#pragma warning (disable: 4996)
57 FILE * inputFile = fopen(fileName.c_str(), "r");
58#pragma warning (pop)
59
60 int symbol;
61
62 while ((symbol = fgetc(inputFile)) != EOF)
63 {
64 initialInput.push_back(symbol);
65 (this->*currentParser)(symbol, intermediateOutput);
66 }
67
68 fclose(inputFile);
69
70 std::stringstream ss(intermediateOutput);
71
72 std::string readline;
73
74 while (ss.good())
75 {
76 getline(ss, readline);
77
78 readline.erase(std::remove(readline.begin(), readline.end(), ' '), readline.end());
79 readline.erase(std::remove(readline.begin(), readline.end(), '\t'), readline.end());
80
81#if defined(_WIN32)
82#else
83 readline.erase(std::remove(readline.begin(), readline.end(), 0x0D), readline.end());
84#endif
85
86 resultStream << readline << std::endl;
87 }
88
90}//Preprocessor(...)
std::string intermediateOutput
Строка, содержащая результат промежуточной обработки файла
void(Preprocessor::* currentParser)(char ch, std::string &str)
Опредедение currentParser как указателя на функцию-члена класса
std::string initialInput
Строка, содержащая исходный файл в первоначальном виде
bool inInlineLastEscape
Признак встречи слэша внутри однострочного комментария (после //)
void normalParser(char ch, std::string &str)
Обработчик символа в режиме обычного состояния парcера
bool inMultilineLastStar
Признак встречи звездочки внутри многострочного комментария (после '/*')
bool inCharLastEscape
Признак встречи слэша внутри символа (внутри одинарных кавычек)
std::string resultString
Строка, содержащая окончательный результат обработки файла
bool inStringLastEscape
Признак встречи слэша внутри строки (внутри двойных кавычек)
std::stringstream resultStream

◆ ~Preprocessor()

VMlib::Preprocessor::~Preprocessor ( )
inline

Деструктор

Definition at line 162 of file Preprocessor.h.

162{ };

Member Function Documentation

◆ afterSlashParser()

void Preprocessor::afterSlashParser ( char  ch,
std::string &  str 
)
private

Обработчик символа в режиме парсера выражения после слэша

При появлении символов / или * переключает парсер в режим обработки однострочного или многострочного комментария
Отальные символы выводит в поток после его предварительной обработки фукцией Preprocessor::processSymbol

Parameters
[in]chобрабатываемый символ
[out]strссылка на строку, в которую сохряняется результат

Definition at line 152 of file Preprocessor.cpp.

153{
154 switch (ch)
155 {
156 case '/':
158 return;
159
160 case '*':
162 return;
163
164 default:
165 str.push_back(processSymbol(ch));
166 }
167}//afterSlashParser(...)
void inMultilineCommentParser(char ch, std::string &str)
Обработчик символа в режиме парсера многострочного комментария
char processSymbol(char ch)
Базовая функция обработки символа В зависимости от входого символа возвращает на выход:
void inInlineCommentParser(char ch, std::string &str)
Обработчик символа в режиме парсера однострочного комментария (после //)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ inCharParser()

void Preprocessor::inCharParser ( char  ch,
std::string &  str 
)
private

Обработчик символа в режиме парсера символа (внутри одинарных кавычек)

При появлении парного апострофа переводит парсер в обычный режим, обрабатываемый символ в неизменном виде передается в поток

Parameters
[in]chобрабатываемый символ
[out]strссылка на строку, в которую сохряняется результат

Definition at line 142 of file Preprocessor.cpp.

143{
144 str.push_back(ch);
145 if (ch == '\'' && !inCharLastEscape)
147 inCharLastEscape = (ch == '\\') && !inCharLastEscape;
148}//inCharParser(...)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ inInlineCommentParser()

void Preprocessor::inInlineCommentParser ( char  ch,
std::string &  str 
)
private

Обработчик символа в режиме парсера однострочного комментария (после //)

Игнорирует все симводы до появления конца строки.
При появлении конца строки переключает парсер в обычный режим и выводит конец строки в результирующую строчку

Parameters
[in]chобрабатываемый символ
[out]strссылка на строку, в которую сохряняется результат

Definition at line 171 of file Preprocessor.cpp.

172{
173 if (ch == '\n' && !inInlineLastEscape)
174 {
175 str.push_back(processSymbol(ch));
177 }
178 inInlineLastEscape = (ch == '\\') && !inInlineLastEscape;
179}//inInlineCommentParser(...)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ inMultilineCommentParser()

void Preprocessor::inMultilineCommentParser ( char  ch,
std::string &  str 
)
private

Обработчик символа в режиме парсера многострочного комментария

Игнорирует все симводы до появления сочетания, соответствующего окончанию комментария.

При появлении символов окончания комментария выводит в результирующую строку пробел и переключает парсер в обычный режим

Parameters
[in]chобрабатываемый символ
[out]strссылка на строку, в которую сохряняется результат

Definition at line 183 of file Preprocessor.cpp.

184{
185 if (ch == '/' && inMultilineLastStar)
186 {
187 str.push_back(' ');
189 }
190 inMultilineLastStar = (ch == '*');
191}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ inStringParser()

void Preprocessor::inStringParser ( char  ch,
std::string &  str 
)
private

Обработчик символа в режиме парсера строки (внутри двойных кавычек)

При появлении парной кавычки переводит парсер в обычный режим, обрабатываемый символ в неизменном виде передается в поток

Parameters
[in]chобрабатываемый символ
[out]strссылка на строку, в которую сохряняется результат

Definition at line 132 of file Preprocessor.cpp.

133{
134 str.push_back(ch);
135 if (ch == '\"' && !inStringLastEscape)
137 inStringLastEscape = (ch == '\\') && !inStringLastEscape;
138}//inStringParser(...)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ normalParser()

void Preprocessor::normalParser ( char  ch,
std::string &  str 
)
private

Обработчик символа в режиме обычного состояния парcера

При появлении символов ", ', / переключает парсер в соответствующий режим Выводит обрабатываемый символ в поток (кроме слэша, который игнорируется) после его предварительной обработки фукцией Preprocessor::processSymbol

Parameters
[in]chобрабатываемый символ
[out]strссылка на строку, в которую сохряняется результат

Definition at line 111 of file Preprocessor.cpp.

112{
113 switch (ch)
114 {
115 case '\"':
117 break;
118
119 case '\'':
121 break;
122
123 case '/':
125 return;
126 }
127 str.push_back(processSymbol(ch));
128}//normalParser(...)
void afterSlashParser(char ch, std::string &str)
Обработчик символа в режиме парсера выражения после слэша
void inStringParser(char ch, std::string &str)
Обработчик символа в режиме парсера строки (внутри двойных кавычек)
void inCharParser(char ch, std::string &str)
Обработчик символа в режиме парсера символа (внутри одинарных кавычек)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ processSymbol()

char Preprocessor::processSymbol ( char  ch)
private

Базовая функция обработки символа В зависимости от входого символа возвращает на выход:


  • (конец строки) — пробел
  • ; (точка с зарятой) — конец строки
  • исходный символ в остальных случаях
Parameters
[in]chобрабатываемый символ return символ, который отправляется в обработанный файл

Definition at line 94 of file Preprocessor.cpp.

95{
96 switch (ch)
97 {
98 case '\n':
99 return ' ';
100
101 case ';':
102 return '\n';
103
104 default:
105 return ch;
106 }
107}//processSymbol(...)
Here is the caller graph for this function:

Member Data Documentation

◆ currentParser

void(Preprocessor::* VMlib::Preprocessor::currentParser) (char ch, std::string &str)
private

Опредедение currentParser как указателя на функцию-члена класса

Definition at line 78 of file Preprocessor.h.

◆ inCharLastEscape

bool VMlib::Preprocessor::inCharLastEscape
private

Признак встречи слэша внутри символа (внутри одинарных кавычек)

Definition at line 69 of file Preprocessor.h.

◆ inInlineLastEscape

bool VMlib::Preprocessor::inInlineLastEscape
private

Признак встречи слэша внутри однострочного комментария (после //)

Definition at line 72 of file Preprocessor.h.

◆ initialInput

std::string VMlib::Preprocessor::initialInput

Строка, содержащая исходный файл в первоначальном виде

Definition at line 146 of file Preprocessor.h.

◆ inMultilineLastStar

bool VMlib::Preprocessor::inMultilineLastStar
private

Признак встречи звездочки внутри многострочного комментария (после '/*')

Definition at line 75 of file Preprocessor.h.

◆ inStringLastEscape

bool VMlib::Preprocessor::inStringLastEscape
private

Признак встречи слэша внутри строки (внутри двойных кавычек)

Definition at line 66 of file Preprocessor.h.

◆ intermediateOutput

std::string VMlib::Preprocessor::intermediateOutput

Строка, содержащая результат промежуточной обработки файла

Definition at line 149 of file Preprocessor.h.

◆ resultStream

std::stringstream VMlib::Preprocessor::resultStream

Definition at line 166 of file Preprocessor.h.

◆ resultString

std::string VMlib::Preprocessor::resultString

Строка, содержащая окончательный результат обработки файла

Definition at line 165 of file Preprocessor.h.


The documentation for this class was generated from the following files: