// This Source Code Form is subject to the terms of the Mozilla Public License // v. 2.0. If a copy of the MPL was not distributed with this file, You can // obtain one at http://mozilla.org/MPL/2.0/. #include "elna/boot/driver.h" namespace elna { namespace boot { position make_position(const yy::location& location) { position result; result.line = static_cast(location.begin.line); result.column = static_cast(location.begin.column); return result; } syntax_error::syntax_error(const std::string& message, const char *input_file, const yy::location& location) : error(input_file, make_position(location)), message(message) { } std::string syntax_error::what() const { return message; } driver::driver(const char *input_file) : input_file(input_file) { } void driver::error(const yy::location& loc, const std::string& message) { m_errors.emplace_back(new boot::syntax_error(message, input_file, loc)); } const std::list>& driver::errors() const noexcept { return m_errors; } char escape_char(char escape) { switch (escape) { case 'n': return '\n'; case 'a': return '\a'; case 'b': return '\b'; case 't': return '\t'; case 'f': return '\f'; case 'r': return '\r'; case 'v': return '\v'; case '\\': return '\\'; case '\'': return '\''; case '"': return '"'; case '?': return '\?'; case '0': return '\0'; default: return escape_invalid_char; } } } }