2009-02-22 98 views

回答

0

你是指所有比賽?你正在使用正則表達式函數或字符串函數嗎?使用全局標誌。

至於flex,我認爲你不能這樣做。您一次測試一種模式的匹配,因此可能超出範圍。你爲什麼要那個?作爲優化?範圍界定問題?

+0

說實話,我相當新的flex和我不確定。我以爲我正在使用正則表達式和字符串匹配的組合。 下面是一個例子 「(」 \t \t {返回L_PAREN;} {INT} {yylval.Int =的atoi(yytext中);返回INT;} 我想是能夠在一次返回兩個令牌。 – Eburetto 2009-02-22 09:44:23

2

我一直這樣做的方法是創建一個待返回令牌隊列,並在yylex()開頭,檢查令牌並返回它們。

-1

通常,這是由掃描器頂部的解析器處理的,它爲您提供了更簡潔的代碼。你可以模仿在一定程度上與各州:

%option noyywrap 

%top { 
#define TOKEN_LEFT_PAREN 4711 
#define TOKEN_RIGHT_PAREN 4712 
#define TOKEN_NUMBER  4713 
} 

%x PAREN_STATE 
%% 
"("   BEGIN(PAREN_STATE); return TOKEN_LEFT_PAREN; 
<PAREN_STATE>{ 
    [0-9]+ return TOKEN_NUMBER; 
    ")"  BEGIN(INITIAL); return TOKEN_RIGHT_PAREN; 
    .|\n  /* maybe signal syntax error here */ 
} 
%% 
int main (int argc, char *argv []) 
{ 
    int i; 

    while ((i = yylex())) 
    printf ("%d\n", i); 

    return 0; 
} 

但是這將變得非常凌亂,只要你的語法變得更加複雜。

相關問題