2017-08-05 91 views
0
digit [0-9] 
letter [A-Za-z] 
%{ 
int count; 
%} 
%% 
    /* match identifier */ 
{letter}({letter}|{digit})* count++; 
%% 
int main(void) { 
yylex(); 
printf("number of identifiers = %d\n", count); 
return 0; 
} 

不起作用printf語句。 你能解釋我應該在這段代碼中包含什麼嗎?爲什麼下面的flex代碼不顯示輸出?

+0

程序是否正確終止? – Jack

+0

no不終止。 –

+0

歡迎來到Stack Overflow。請儘快閱讀[關於]和[問]部分,更急切地想知道如何創建MCVE([MCVE])。你已經提供了代碼,這很好。您沒有描述輸入數據,也沒有描述如何將數據提供給程序。你的解釋「不工作printf語句」沒有幫助。你應該更清楚你所觀察到的。此外,請注意[tag:flex]與[tag:flex-lexer]不同 - 後者是用於Flex詞法分析器(或詞法分析器)的正確選項。另一個標籤用於Adobe Web語言Flex。 –

回答

0

如果你有yywrap錯誤 - 只需要添加%option noyywrap

digit [0-9] 
letter [A-Za-z] 
%{ 
    int count; 
%} 

%option noyywrap 

%% 
    /* match identifier */ 
{letter}({letter}|{digit})* count++; 
%% 

int main(void) { 
    yylex(); 
    printf("number of identifiers = %d\n", count); 
    return 0; 
} 

然後編譯:

flex f.l 
gcc lex.yy.c 

運行和不要忘記在最後發送EOF(用Ctrl -D)

./a.out 
a a a 

number of identifiers = 3 
相關問題