Действительно простой способ - просто использовать flex:
Вы можете создать действительно простой лексер для приложения C ++ в несколько строк, которые будут очень удобочитаемыми.
Примечание:
Я бы отметил, что вы должны быть осторожны с '\ r \ n'. Если вы откроете файл в текстовом режиме (по умолчанию), то стандартное чтение потока преобразует стандартную последовательность завершения строки в '\ n'. На некоторых платформах последовательность завершения строки заканчивается на «\ r \ n», поэтому, если вы читаете поток из файла, вы можете увидеть только символ «\ n».
split.lex
%option c++
%option noyywrap
%%
\" return 1;
\r\n return 2;
[^"\r\n]* return 3;
%%
main.cpp
#include "FlexLexer.h"
int main()
{
yyFlexLexer lexer(&std::cin, &std::cout);
int token;
while((token = lexer.yylex()) != 0)
{
std::string tok(lexer.YYText(), lexer.YYText() + lexer.YYLeng());
std::cout << "Token: " << token << "(" << tok << ")\n";
}
}
Сложение
% flex split.lex
% g++ main.cpp lex.yy.cc
Выполнить (для предварительно обработанного файла)
% cat testfile | ./a.exe
Token: 3(Here is some text)
Token: 2(
)
Token: 1(")
Token: 3(here is another line)
Token: 1(")
Token: 2(
)
Token: 3(And another line)