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]
。
我有以下代码: 我想使用
计算字符数(.) {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]
。