Я пытаюсь перевести кодовую базу для моего языка программирования из Lua в C++. Я только что начал. Я не эксперт на C++, и я надеюсь, что смогу узнать больше , пока написал его, но я уже столкнулся с препятствием, которое заставило меня остановиться.Возвращение совершенно разных типов данных из функции
Теперь я пишу модуль лексического анализатора. Предполагается, что он возвращает дважды связанный список токенов, но, конечно, ошибка может возникать при анализе исходного кода, например. когда многострочный комментарий или строка не имеет конечной скобки и тому подобного.
Я мог бы, конечно, когда я столкнулся с ошибкой, распечатал сообщение и просто закончил программу. Но поскольку я хочу сделать эти ошибки доступными, самая легкая вещь, о которой я могу думать, - это вернуть эти ошибки, так что если функция обработки ошибок получит эту ошибку, она может ее обработать, но если она получит все путь вниз к интерпретатору, его сообщение затем печатается.
В Lua это было легко. Я мог бы заставить функцию возвращать либо дважды связанный список токенов (я использовал массивы без массивов, но это неважно), если функция лексического анализатора не обнаружила ошибок в переданном тексте или объект ошибки, обрабатываемый вызывающим.
Поскольку C++ должен указывать тип возврата, однако, как я могу заставить функцию возвращать объект ошибки, если это необходимо, чтобы можно было корректно обрабатывать? Или я должен изменить подход и использовать что-то другое, чем система возврата?
К сожалению, я не могу найти огромную базу данных языков, таких как Python, чтобы посмотреть, как они справляются с этой ситуацией, поэтому даже ссылка на эти файлы может помочь.
Наследование - базовый класс «Ошибка» несет сообщение и местоположение - часть консоли/протоколирования должна соответствовать этому.Из 'Error' выведите свои конкретные классы для переноса информации, требуемой вашим« кодом восстановления », чтобы выполнить свою работу. Ах, и верните эти ошибки как 'std :: shared_ptr'. Для фактического возврата вашего списка токенов верните их в параметр функции (указатель/ссылка) –