BISON FLEX. Неожиданный вывод при вводе файла - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь создать калькулятор с flex и bison, который получает набор операций (результаты присваиваются переменным). Калькулятор использует память для хранения этих переменных. Когда я делаю эти вычисления через терминал (клавиатура стандартного ввода), все работает нормально. Однако когда я пытаюсь использовать файл, в памяти ничего не сохраняется.

У меня есть .y и .l

Это то, что я указал в .y.

extern FILE* yyin;

А в основном методе:

yyin = fopen(argv[1], "rt");
yyparse ();     
listTofile(list, argv[2]); //method that backups memory into a file
fclose(yyin);

Когда я, например, наберу A = 2 + 2, в файле будут храниться переменная name и результат. Это прекрасно сработает, когда подскажут у меня инструкцию. Однако, когда предоставляется файл, парсер обнаруживает все, но ничего не сохраняет (проверяется с помощью flex -d)

1 Ответ

0 голосов
/ 20 апреля 2019

При использовании flex, как правило, вам нужно вызвать yyrestart(yyin);, чтобы переключиться на новый источник входного сигнала, чтобы сбросить все источники буферизации.Тем не менее, если вы никогда не читали что-либо из yyin до вызова fopen, это не должно иметь никакого значения, так как не должно быть никакого содержимого кэшируемого буфера для сброса.

...