2012-05-13 31 views
0

我正在嘗試使用Flex生成器以及它如何工作,下面的代碼將{文本文件{number number}中的符號序列替換爲{「d」ws「d」 },並且它計算替換瞭解Flex生成器中的規則

%{ 
    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; 
} 

的數量提交與輸入文件的規則的文件,並編譯撓曲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

我不明白你的問題,只是它似乎不同意你的標題。請再試一次。 – EJP

+0

我刪除了「Adobe Flex」標籤並將其替換爲w/gnu-flex。 – JeffryHouser

回答

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; 
}