WsParser_VS/libParse/libparse.h

74 lines
1.7 KiB
C
Raw Normal View History

2024-03-17 07:58:28 +00:00
#pragma once
#include "libparse_global.h"
#include <ast_basic.h>
#include <ast_gen.h>
namespace lib_parse {
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
class LIBPARSE_EXPORT CheckException {
private:
QString msg_store;
public:
CheckException(const QString& msg);
virtual ~CheckException() = default;
virtual QString message() const;
};
/**
* @brief У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
class CheckProvider {
public:
2024-06-15 01:18:33 +00:00
virtual QString name() const = 0;
2024-03-17 07:58:28 +00:00
virtual void validCheck(std::shared_ptr<const ast_gen::ElementAccess> root) const = 0;
};
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
*/
class LIBPARSE_EXPORT Analyzer {
private:
QList<std::shared_ptr<const CheckProvider>> check_providers;
public:
Analyzer(const QList<std::shared_ptr<const CheckProvider>>& providers);
std::shared_ptr<const ast_gen::ElementAccess> validCheckWith(std::shared_ptr<const ast_gen::ElementAccess> root) const;
};
2024-06-22 15:19:14 +00:00
enum class VisitMode {
FirstParent, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LastParent, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
class TreeVisitor {
public:
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ģʽ.
*
* \return
*/
virtual VisitMode mode() const = 0;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>нڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*
* \param syntax_element <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ʽڵ<EFBFBD>
* \return <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD>
*/
virtual bool visit(std::shared_ptr<const ast_gen::ElementAccess> syntax_element) = 0;
};
class LIBPARSE_EXPORT VisitorControl {
public:
bool visitWith(std::shared_ptr<const ast_gen::ElementAccess> syntax_elm, std::shared_ptr<TreeVisitor> visitor);
};
2024-03-17 07:58:28 +00:00
}