Lex : 同时匹配多个正则表达式

Lex :Match multiple regex at the same time

我有以下代码: 我想使用

计算字符数
(.)   {charCount++;}

同时使用

统计字数
([a-zA-Z0-9])*    {wordcount++;}

这是否可能使用 lex 规则,或者我是否必须使用 c 代码中的文件流来计算它"manaully/programmatically"。基本上有 "continue matching/ regex"

的代码
%% 
[\t ]+  ; //ignore white space
"\n" ;  //ignore next line // 
([a-zA-Z0-9])*    {wordcount++;}
(.)   {charCount++;}
%% 
int yywrap(void){} 
int main() 
{    
    // The function that starts the analysis 
    yyin=fopen("input.txt", "r");
    yylex(); 
    printf("The number of words in the file is %d and charCount %d",count,wordSize);
    return 0; 
}

规则匹配的字符数在yyleng中可用,所以你可以这样做:

[ \t\n]         ;
[a-zA-Z0-9]+    { ++wordcount; charcount += yyleng; }
.               { ++charcount; }

但是 (f)lex 并非设计用于对输入进行多次扫描。所以没有简单的通用解决方案。

FWIW,我会使用 [[:alnum:]] 而不是 [a-zA-Z0-9][[:space:]] 而不是 [ \t\n]