WsParser_VS/libSyntax/ast_basic.h

108 lines
3.6 KiB
C
Raw Normal View History

2024-03-17 07:58:28 +00:00
#pragma once
#include <memory>
#include <QList>
#include <libtoken.h>
#include "libsyntax.h"
namespace ast_basic {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB7A8> ================================================================================================
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻڵ<EFBFBD>/<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>ڵ<EFBFBD>
2024-03-17 07:58:28 +00:00
*/
class Expression {
2024-03-17 07:58:28 +00:00
public:
virtual ~Expression() = default;
2024-03-17 07:58:28 +00:00
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2024-03-17 07:58:28 +00:00
* @return
*/
virtual std::shared_ptr<const lib_syntax::ExpressionRule> definedRule() const = 0;
2024-03-17 07:58:28 +00:00
//=====================================================
2024-03-17 07:58:28 +00:00
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>.
*
* \return <EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>
2024-03-17 07:58:28 +00:00
*/
virtual QString filePath() const = 0;
2024-03-17 07:58:28 +00:00
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>token<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*
* \return token<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2024-03-17 07:58:28 +00:00
*/
virtual QList<std::shared_ptr<const lib_token::Token>> tokens() const = 0;
virtual void tokensReset(const QList<std::shared_ptr<const lib_token::Token>> &list) = 0;
2024-03-17 07:58:28 +00:00
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tokenʵ<EFBFBD><EFBFBD>.
*
* \param token_inst ʵ<EFBFBD><EFBFBD>
2024-03-17 07:58:28 +00:00
*/
virtual void addToken(std::shared_ptr<const lib_token::Token> token_inst) = 0;
2024-03-17 07:58:28 +00:00
//=====================================================
2024-03-17 07:58:28 +00:00
/**
* @brief <EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2024-03-17 07:58:28 +00:00
* @return
*/
virtual QList<std::shared_ptr<const Expression>> children() const = 0;
2024-03-17 07:58:28 +00:00
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD>ʽ.
*
* \param inst <EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD>ʽʵ<EFBFBD><EFBFBD>
2024-03-17 07:58:28 +00:00
*/
virtual void addChild(std::shared_ptr<const Expression> inst) = 0;
2024-03-17 07:58:28 +00:00
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ==========================================================================================
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>ڵ<EFBFBD>
2024-03-17 07:58:28 +00:00
*/
class LIBSYNTAX_EXPORT ExpressionElement : public ast_basic::Expression,
public std::enable_shared_from_this<ExpressionElement> {
2024-03-17 07:58:28 +00:00
private:
std::shared_ptr<const lib_syntax::ExpressionRule> _expr_rule;
QList<std::shared_ptr<const Expression>> children_store;
QList<std::shared_ptr<const lib_token::Token>> tokens_bind;
2024-03-17 07:58:28 +00:00
public:
ExpressionElement(std::shared_ptr<const lib_syntax::ExpressionRule> bind);
2024-03-17 07:58:28 +00:00
// ͨ<><CDA8> Expression <20>̳<EFBFBD>
std::shared_ptr<const lib_syntax::ExpressionRule> definedRule() const override;
QString filePath() const override;
QList<std::shared_ptr<const lib_token::Token>> tokens() const override;
void tokensReset(const QList<std::shared_ptr<const lib_token::Token>>& list) override;
void addToken(std::shared_ptr<const lib_token::Token> token_inst) override;
QList<std::shared_ptr<const Expression>> children() const override;
void addChild(std::shared_ptr<const Expression> inst) override;
2024-03-17 07:58:28 +00:00
};
class LIBSYNTAX_EXPORT ExpressionContext : public lib_syntax::ParseContext, public std::enable_shared_from_this<ExpressionContext> {
2024-03-17 07:58:28 +00:00
private:
QList<std::shared_ptr<const lib_syntax::BaseRule>> rule_stack;
QList<std::shared_ptr<Expression>> expression_stack;
2024-03-17 07:58:28 +00:00
public:
ExpressionContext(){}
2024-03-17 07:58:28 +00:00
// ͨ<><CDA8> ParseContext <20>̳<EFBFBD>
std::shared_ptr<ast_basic::Expression> currentInst() const override;
void pushInst(std::shared_ptr<ast_basic::Expression> current_inst) override;
std::shared_ptr<ast_basic::Expression> popInst() override;
std::shared_ptr<const lib_syntax::BaseRule> currentExpressionRule() const override;
void pushExpressionRule(std::shared_ptr<const lib_syntax::BaseRule> inst) override;
std::shared_ptr<const lib_syntax::BaseRule> popExpressionRule() override;
2024-03-17 07:58:28 +00:00
};
}