2024-03-17 07:58:28 +00:00
|
|
|
#pragma once
|
|
|
|
#include <QList>
|
|
|
|
#include <QFileInfo>
|
2024-09-22 02:18:33 +00:00
|
|
|
#include <QDir>
|
2024-04-02 12:39:25 +00:00
|
|
|
#include <QDomDocument>
|
2024-03-17 07:58:28 +00:00
|
|
|
|
|
|
|
#include <ast_gen.h>
|
|
|
|
#include <parse_novel.h>
|
|
|
|
|
2024-03-28 13:11:12 +00:00
|
|
|
namespace printer {
|
2025-02-15 15:47:42 +00:00
|
|
|
/**
|
|
|
|
* @brief Ast输出构建器.
|
|
|
|
*/
|
2024-06-22 15:19:14 +00:00
|
|
|
class AstGenerate : public lib_parse::TreeVisitor {
|
|
|
|
private:
|
2024-09-22 02:18:33 +00:00
|
|
|
QDir src_root;
|
2024-06-22 15:19:14 +00:00
|
|
|
QDomDocument doc;
|
|
|
|
QList<QDomElement> element_stack;
|
|
|
|
|
|
|
|
void append_tokens(QDomElement _elm, std::shared_ptr<const ast_gen::SyntaxElement> inst);
|
|
|
|
|
|
|
|
public:
|
2024-09-22 02:18:33 +00:00
|
|
|
AstGenerate(const QDir &src_root);
|
2024-06-22 15:19:14 +00:00
|
|
|
|
|
|
|
QString content() const;
|
|
|
|
|
2025-02-15 15:47:42 +00:00
|
|
|
// 通过 TreeVisitor 继承
|
2024-06-22 15:19:14 +00:00
|
|
|
lib_parse::VisitMode mode() const override;
|
2025-02-15 15:47:42 +00:00
|
|
|
bool visit(std::shared_ptr<const ast_gen::ElementAccess> ast_element) override;
|
2024-06-22 15:19:14 +00:00
|
|
|
};
|
2024-03-28 13:11:12 +00:00
|
|
|
}
|