2014-12-04 38 views
2

所以,事情是我試圖做一個詞法分析器,我從一個語法分析器調用它。是否可以對C中的單個char []行分析執行多個「返回」?

我有這樣的:

int lexico(char linea[MAXLINEA]) 
{ 
    if (linea[0] == '1') return 1; 
    else if (linea[0] == '2') return 2; 
    else if (linea[0] == '3') return 3; 
    else if (linea[0] == '4') return 4; 
    else return -1; 
    return 0;     
} 

int main(int argc, char *argv[]) 
{ 
    ... 
    FILE *fichero; 
    fich = fopen("test", "r"); 
    ... 
    int l; 
    char buffer[MAXLINEA]; 
    while(fgets(buffer,MAXLINEA,fich) != NULL){ 
     l = lexico(buffer); 
     ... 
    } 
} 

這僅僅是一個壞榜樣。

所以,想象我在linea[1]東西,並首次重返main後,我想回到lexico並繼續分析linea[1]。可能嗎?

預先感謝您。 PS:我知道我可以做到這一點,例如,使用結構和保存幾個int值,但我不想使用它。

+0

好吧,您可以根據您的意願使用該功能。只有在達到一定條件時才需要停止呼叫。 – 2014-12-04 11:42:02

+0

順便說一句,在你的函數中'return 0;'是不必要的,因爲你有一個完整的if/else在每種情況下你都返回,所以函數體的末尾可以達到;} – dhein 2014-12-04 11:43:14

+0

@NatashaDutta謝謝你的回答,但我不明白你的意思。 – Zariweya 2014-12-04 11:44:36

回答

2

如果您想要一個更簡單的解決方案,您可以添加另一個參數(使用通過引用方法傳遞)到lexico函數調用,並使用while循環從main函數調用。

int lexico(char linea[MAXLINEA], int *rccnt) 
{ 
    (*rccnt)++; 
    ...... 
    return 1; 
} 


int main(int argc, char *argv[]) 
{ 
    ... 
    FILE *fichero; 
    fich = fopen("test", "r"); 
    ... 
    int l; 
    char buffer[MAXLINEA]; 
    int chrcnt; 
    while(fgets(buffer,MAXLINEA,fich) != NULL){ 
     chrcnt = 0; //set to zero for every buffer fetch 
     while(chrcnt < strlen(buffer)) 
      l = lexico(buffer, &chrcnt); 

     ... 
    } 
} 

希望這個答案可以解決您的問題。

+0

謝謝你的答案。我會試試這個。 – Zariweya 2014-12-04 12:54:06

+3

應該是'(* rccnt)++' – 2014-12-04 13:23:00

+1

謝謝David Heffernan,它已被更正。 – 2014-12-04 13:28:23

相關問題