【发布时间】:2016-09-02 08:39:38
【问题描述】:
我想使用 flex 将文本中的 C cmets 大写。
这是我的弹性代码:
%{
#include <ctype.h>
%}
%%
\/\/.* {
for(int i = 0; i < strlen(yytext); i++)
printf("%c", toupper(yytext[i]));
}
\/\*[^\*]*\*(\*|[^\*\/][^\*]*)*\/ {
for(int i = 0; i < strlen(yytext); i++)
printf("%c", toupper(yytext[i]));
}
%%
int main(int argc ,char* argv[]) {
yylex();
return 0;
}
int yywrap() {
return 1;
}
这是测试文本:
/*aBc*aBc/aBc*/
/** /aBc*/
/*aBc*/aBc*/
aBc
aBc/*aBC
aBc/aBc*aBc
aBc**/
/*aBc/*aBc
//aBc
//aBc
aBc
结果:
/*ABC*ABC/ABC*/
/** /ABC*/
/*ABC*/aBc*/
aBc
aBc/*ABC
ABC/ABC*ABC
ABC**/
/*ABC/*ABC
//ABC
//aBc
aBc
结果中倒数第二行和第四行很奇怪。
我的程序有什么问题?
【问题讨论】:
标签: compiler-construction flex-lexer lex