#ifndef TOKEN_IMPLS_H #define TOKEN_IMPLS_H #include "lex_foundation.h" namespace Lex { /** * \brief 閺傚洦婀扮拠宥堫嚔鐟欙絾鐎界€圭偟骞囩猾 */ class TokenWord : public WordBase { public: virtual ~TokenWord() = default; /** * \brief 閺傛澘缂撶拠宥堫嚔鐎圭偘绶 * \param file_path 閺傚洣娆㈢捄顖氱窞娑撳秴褰查崣 */ explicit TokenWord(const QString &file_path); /** * \brief 閼惧嘲褰囬崘鍛啇 */ virtual QString content() const override; /** * \brief 閼惧嘲褰囬弬鍥︽鐠侯垰绶 */ virtual QString filePath() const override; /** * \brief 閼惧嘲褰囨禒锝囩垳鐞 */ virtual int row() const override; /** * \brief 閼惧嘲褰囨禒锝囩垳閸 */ virtual int column() const override; /** * @brief 鐠у鈧壈绻嶇粻妤冾儊閿涘奔鎱ㄩ弨瑙勫閺堝鍞寸€ * @param other * @return */ // virtual WordBase &operator=(const WordBase &other) override; /** * \brief 鐠佸墽鐤嗙€圭偘绶ラ惃鍕敶鐎圭懓鐣炬稊 /// 鐠囧秷顕㈤弬鍥ㄦ拱 /// 鐞涘苯鐣炬稊/param> /// 閸掓鐣炬稊/param> */ void reset(const QString &word, int row, int col); private: QString content_val; QString filepath_val; int row_val, column_val; }; /** * @brief 瑜版挸澧犵憴锝嗙€介崘鍛啇 */ class TokenResult : public Token { private: TokenDef *const def_store; WordBase *remains_store; QString content_store; QString filepath_store; int row_store, col_store; public: /** * @brief 閺嬪嫬缂揟oken鐟欙絾鐎界紒鎾寸亯鐎圭偘绶 * @param def 鐟欙絾鐎介張鍝勫煑鐎规矮绠 * @param word 閺傚洦婀扮€圭偘绶ラ崘鍛啇 * @param length 缂佹挻鐏夐柅鍌炲帳闂€鍨 */ TokenResult(TokenDef *def, const WordBase &word, int length); virtual ~TokenResult() = default; /** * @brief Token鐟欙絾鐎界€规矮绠 * @return 鐎规矮绠熺€圭偘绶ラ敍宀€顓搁悶鍡樻綀娑撳秶些娴 */ virtual TokenDef *def() const override; /** * @brief 鐟欙絾鐎介崜鈺€绗呴惃鍕敶鐎 * @return 閼惧嘲褰囬崜鈺€绗呴惃鍕槤鐠 */ virtual WordBase *remains() const override; /** * \brief 閼惧嘲褰嘥oken閸栧懎鎯堥崘鍛啇 * \return 閸愬懎顔 */ virtual QString content() const override; /** * \brief 閼惧嘲褰嘥oken缂佹垵鐣鹃惃鍕瀮濡楋綀鐭惧 * \return 鐠侯垰绶 */ virtual QString filePath() const override; /** * \brief 閺堢悡oken濠ф劒鍞惍浣筋攽鐎规矮绠 * \return 鐞涘苯褰 */ virtual int row() const override; /** * \brief 閺堢悡oken濠ф劒鍞惍浣稿灙鐎规矮绠 * \return 閸掓褰 */ virtual int column() const override; /** * @brief 閸愬懎顔愭径宥呭煑閿涘奔绗夋导姘叏閺€鐟扮暰娑斿琚崹瀣拨鐎规艾鎷伴崜鈺€缍戦崘鍛啇鐎规矮绠 * @param other 閸忔湹绮崘鍛啇 * @return */ // virtual WordBase &operator=(const WordBase &other); }; } // namespace Lex #endif // TOKEN_IMPLS_H