я использую Flexc ++ а также Bisonc ++ реализовать небольшой язык.
Flexc ++ предоставляет простой конструктор
Scanner(std::string const &infile, std::string const &outfile)
установить входной и выходной файлы.
Однако при интеграции с Bisconc ++ я не могу найти простой способ использовать этот конструктор для объекта сканера внутри сгенерированного парсера.
Автоматически сгенерированный Parser.h содержит объект сканера:
...
Scanner d_scanner;
....
По умолчанию класс синтаксического анализатора не имеет конструктора с аргументами ввода / вывода, а функция синтаксического анализа не имеет параметров. Поведение по умолчанию — анализ со стандартного ввода и вывода на стандартный вывод.
То, что я ищу, в основном так же, как этот вопрос (см. 2.), но ответы на самом деле не охватывают этот критерий.
На данный момент я анализирую со стандартного ввода с
int main(....) {
Parser parser;
parser.parse()
}
Вместо этого я хотел бы указать путь к файлу и предоставить его функции синтаксического анализа или даже конструктору.
int main(....) {
std::string filePath;
Parser parser; // or (filePath) here
parser.parse(filePath)
}
Конечно, я мог бы просто добавить функциональность после генерации парсера, но это не самый лучший вариант, так как все должно генерироваться автоматически.
Я не вижу, как это сделать с помощью предоставленных заголовочных файлов .ih.
И да, я хочу использовать Flexc ++ и Bisonc ++.
Задача ещё не решена.
Других решений пока нет …