C++ flex lexer是用于简单正则表达式识别和替换的高性能(快速)转换器吗?

C++ flex lexer是用于简单正则表达式识别和替换的高性能(快速)转换器吗?,c++,flex-lexer,C++,Flex Lexer,我正在为我的大学做一个项目,需要处理相当大的文件(>50MB),我使用flex基本上重写了一个由以下行组成的文件 1 1:41 3:54 7:40 13:8 2 4:7 7:8 23:85 进入 (基本上,将number\u a:number\u b转换为number\u a,并在执行时在文件中打印输出) 我的问题是,因为我在C++中写下了我的程序:既然Flex应该是快的(在Flex中快速地写 f>代码>),还是我错了,在C++中有更简单和更有效的方法来实现这一点,那是一个很好的反射吗? 我对

我正在为我的大学做一个项目,需要处理相当大的文件(>50MB),我使用flex基本上重写了一个由以下行组成的文件

1 1:41 3:54 7:40 13:8
2 4:7 7:8 23:85
进入

(基本上,将
number\u a:number\u b
转换为
number\u a
,并在执行时在文件中打印输出)

我的问题是,因为我在C++中写下了我的程序:既然Flex应该是快的(在Flex中快速地写<代码> f>代码>),还是我错了,在C++中有更简单和更有效的方法来实现这一点,那是一个很好的反射吗? <>我对C++非常陌生,所以我有很多C代码反射和对所有可用工具的了解,以及它们的性能。

下面是我在flex中编写的一段代码:

%{
#include<stdio.h> 
unsigned int nb_doc = 1;//prend en compte le premier doc
unsigned int i;
%}
couple_entiers      [0-9]+:[0-9]+
retour_chariot      \n[0-9]+
autre               .
%%
{couple_entiers}      {i=0;
                       while(yytext[i] != ':'){
                            printf("%c",yytext[i]);
                            i++;
                         }
                      }
{retour_chariot}      {nb_doc ++; printf("%s",yytext);}
{autre}               {printf("%s",yytext);}

%%
int main (void){
    yylex();
    printf("\n\n%d",nb_doc);
    return 0;
}
%{
#包括
未签名的int nb_doc=1;//prend en compte le premier doc
无符号整数i;
%}
夫妻关系[0-9]+:[0-9]+
返回战车\n[0-9]+
奥特雷。
%%
{couple_entiers}{i=0;
while(yytext[i]!=':'){
printf(“%c”,yytext[i]);
i++;
}
}
{retour_chariot}{nb_doc++;printf(“%s”,yytext);}
{autre}{printf(“%s”,yytext);}
%%
内部主(空){
yylex();
printf(“\n\n%d”,nb\U文件);
返回0;
}

考虑用通用解决方案替换自定义代码:

system("sed -E 's/:\d+ / /g'");

:)

Flex速度很快。但是速度够快吗?你可以做很多事情来加速你的程序。此外,还有很多简单的方法可以编写纯C++中的代码。但你还需要做更多吗?如果你在C++中写一个简单的“读一行,发出其他数”函数,它会很快,但不会理解“行”,所以如果你需要增加更多的功能,你会遇到麻烦。然而,如果您保留flex代码,您可以轻松地使用成对的第二个数字来做一些事情。哪种可能性更大?事实上,在这种情况下,最有可能的是我不需要更多的功能,但简单地提出这一点会让我意识到这一点,这很好;因为我只知道项目的第一部分,所以我倾向于将其保留在flex中,以保持整个项目的灵活性。@AustinHastings实际上,老师只是增加了一些事情要做,例如创建随机的“部分”文件集,以及其他一些功能:您的评论非常棒,再次感谢!
system("sed -E 's/:\d+ / /g'");