0

我正在尝试使用 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!

==================================================== ======

我的问题是,如果我想在给定的文本中将符号序列 {consonant consonant} 替换为 {consonant «a» consonant} 并计算替换次数怎么办

4

1 回答 1

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;
}
于 2012-06-18T13:47:40.030 回答