Ошибка связи Q1
Это выглядит так, как будто что-то не так с функцией isatty (). Он не отображается в коде, который вы показываете, но на него может ссылаться код, сгенерированный flex Если это так, то кажется, что вы компилируете с помощью компилятора C ++, а функция isatty () рассматривается как функция со связью C ++ и не обнаруживается - обычно это функция со связью C и ее необходимо объявить с помощью 'extern "C" int isatty(int);
' в коде C ++.
Чтобы решить, отследите, появляется ли isatty()
в сгенерированном C. Если это так, также отследите, где он объявлен (стандартный заголовок POSIX для него - <unistd.h>
).
Q2 Main
Вам не нужно помещать основную программу в файл с лексером. На самом деле, вы часто этого не делаете, или основная программа там будет просто фиктивной фигурой, используемой для проверки лексера изолированно (и только условно скомпилированной в код - внутри #ifdef TEST / #endif
или эквивалентной).
Что заставляет вас думать, что вы должны это сделать?