命令行接口-在用C语言编写的CLI程序上嵌入yyprse(),由Flex和Bison生成



我正在研究bison手册中给出的mfcalc示例的改进版本,您可以在这里找到代码。

我一直在尝试使用main.c文件中的yyprse(),实际上代码与配合得很好

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 ("%sn", output);
        fclose (fp);
    }
}

也就是说,将yyin从stdin重新定义为一个常规文件,放入一条提示消息,在yyin上执行解析器,读取yout的输出并打印到屏幕。但这不正确,我只得到一行空白。当我证明我得到的程序:

[mfcalc]: 3 + 4
[mfcalc]:

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

提前谢谢。

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

为什么不重写mfcalc的扫描程序,从字符串中提取字符,而不是从文件中提取字符?

最新更新