我正在尝试使用flex生成器及其工作方式,下面的代码将文本文件{number number}中的符号序列替换为{“d”ws“d”},并计算出数字替换
%{
int count = 0;
%}
DIGIT [0-9]
%%
{DIGIT}{DIGIT} {count++; printf("d d");}
%%
int main()
{
yylex();
printf( "\n#Report: %d changes made!", count);
return 0;
}
int yywrap()
{
return 1;
}
提交带有输入文件规则的文件并编译flex lex.yy.c后,收到一个可执行文件。我们提交以下数据流的可执行文件的输入
====================test.in============================
wefwe
f
weferg54gfwsfwe
fwef
wefwefwf
wefewf21321dsfredf
sdf
===========================================================
获得的输出
============================ test.out ================ ==
wefwe
f
wefergd dgfwsfwe
fwef
wefwefwf
wefewfd dd d1dsfredf
sdf
#Report: 3 changes made!
=============================================== =========
我的问题是如果我想要怎么做 在给定的文本中将符号序列{辅音辅音}替换为{辅音«a»辅音}并计算替换次数
答案 0 :(得分:2)
我不确定你坚持的概念是什么。也许这是写一个字符类来匹配辅音的想法:让我们考虑“Y”作为这个问题的辅音,并且只匹配小写字母。也许这是如何访问匹配输入的单个字符的问题:一种方法是将yytext
声明为%array
。无论如何,你想要的代码是这样的:
%{
int count = 0;
int consonantPatternCount = 0;
%}
%array
DIGIT [0-9]
CONSONANT [bcdfghjklmnpqrstvwxyz]
%%
{DIGIT}{DIGIT} {count++; printf("d d");}
{CONSONANT}{CONSONANT} { consonantPatternCount++; printf("%c a %c", yytext[0], yytext[1]);}
%%
int main()
{
yylex();
printf( "\n#Report: %d changes made!", count);
printf("\n#Report: %d consonant changes made", consonantPatternCount);
return 0;
}
int yywrap()
{
return 1;
}