0

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

我一直在尝试使用 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 from 重新定义stdin为常规文件,发出提示信息,在 yyin 上执行解析器,读取 yyout 的输出并打印到屏幕。但这不能正常工作,我只得到一个空行。当我证明我得到的程序时:

[mfcalc]: 3 + 4

[mfcalc]:

此外,未显示错误代码。有什么想法可以解决这个问题吗?

提前致谢。

4

2 回答 2

2

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

于 2013-02-18T01:34:14.560 回答
0

Why don't you just rewrite mfcalc's scanner to take characters from the string instead of a file?

于 2013-02-18T02:01:57.327 回答