#ifndef DBC_PARSER_H #define DBC_PARSER_H #include #include #include #include "dbc_database.h" /** * @brief Minimal DBC parser. * * Supports: * - BO_ * - SG_ * - CM_ BO_ * - CM_ SG_ * * Ignores: * - attributes * - multiplexing * - value tables */ class DbcParser { public: /** * @brief Parse DBC file. * @param filePath Path to input file. * @return Parsed database. * @throws std::runtime_error on file or parse errors. */ DbcDatabase ParseFile (const std::string &filePath) const; private: static bool IsFrameLine (const std::string &line); static bool IsSignalLine (const std::string &line); static bool IsCommentLine (const std::string &line); static std::string Trim (const std::string &text); static std::vector SplitReceivers (const std::string &text); static std::uint32_t TryExtractPgn (std::uint32_t canId, bool &hasPgn); static FrameInfo ParseFrameLine (const std::string &line); static SignalInfo ParseSignalLine (const std::string &line); static void ParseCommentLine (const std::string &line, DbcDatabase &database); static FrameInfo *FindFrameById (DbcDatabase &database, std::uint32_t canId); static SignalInfo *FindSignalByName (FrameInfo &frame, const std::string &signalName); }; #endif /* DBC_PARSER_H */