我正在研究野牛手册中给出的mfcalc示例的改进版本,您可以找到代码here

我被困试图使用main.c文件中的yyparse(),实际上代码可以与

int main (int argc, char const *argv[]) {
    init_table ();
    return yyparse ();
}


但是我想添加一个提示,所以我写了

int main (int argc, char const *argv[]) {
    char command[101];
    FILE *fp;
    init_table ();

    while (1) {
        printf ("[mfcalc]: "); /*prompt*/
        memset (command, 0x00, sizeof(command));
        fgets (command, 100, stdin);
        fp = fopen("command.txt", "w+");
        fprintf(fp, "%s", command);
        yyin = fp;
        yyparse ();
        fscanf (yyout, "%s", output);
        printf ("%s\n", output);
        fclose (fp);
    }
}


这是将yyin从stdin重新定义为常规文件,发出提示消息,对yyin执行解析器,读取yyout的输出并打印到屏幕。但这不能正常工作,我只是空白行。当我证明程序时,我得到:

[mfcalc]: 3 + 4

[mfcalc]:


此外,未显示错误代码。有什么解决办法吗?

提前致谢。

最佳答案

我尚未编译它,但是在阅读您的代码后,我认为问题可能出在文件上。文件指针在写入后位于文件的末尾,因此没有yyparse的输入。
您可以使用fseek和fsetpos对其进行修复。

关于c - 将由Flex和Bison生成的yyparse()嵌入到用C语言编写的CLI程序中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14928137/

10-09 01:55