2014-12-04 46 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

相关问题