WsParser_VS/libSyntax/ast_basic.cpp

77 lines
2.2 KiB
C++
Raw Normal View History

2024-03-17 07:58:28 +00:00
#include "ast_basic.h"
2025-02-07 15:26:20 +00:00
#include "libsyntax.h"
2024-06-18 17:09:45 +00:00
#include <QDebug>
2024-03-17 07:58:28 +00:00
using namespace ast_basic;
using namespace lib_token;
using namespace lib_syntax;
2025-02-07 15:26:20 +00:00
ExprInstance::ExprInstance(std::shared_ptr<const ExprRule> bind) : _expr_rule(bind) { }
2024-03-17 07:58:28 +00:00
2025-02-04 14:26:34 +00:00
std::shared_ptr<const ExprRule> ExprInstance::definedRule() const {
return _expr_rule;
2024-03-17 07:58:28 +00:00
}
2025-02-04 14:26:34 +00:00
QString ExprInstance::filePath() const {
if (!tokens_bind.size())
2025-02-11 14:32:10 +00:00
throw new SyntaxException("InternalError[0x0002]一个空的非法无效节点");
return tokens_bind.first()->file();
}
2024-03-17 07:58:28 +00:00
2025-02-04 14:26:34 +00:00
void ExprInstance::addToken(std::shared_ptr<const IToken> token_inst) {
this->tokens_bind.append(token_inst);
2024-03-17 07:58:28 +00:00
}
2025-02-07 15:26:20 +00:00
QList<std::shared_ptr<const IExprInstance>> ExprInstance::children() const {
return this->children_store;
}
2024-03-17 07:58:28 +00:00
2025-02-07 15:26:20 +00:00
void ExprInstance::addChild(std::shared_ptr<const IExprInstance> inst) {
2025-02-15 15:47:42 +00:00
std::const_pointer_cast<IExprInstance>(inst)->setParent(shared_from_this());
this->children_store.append(inst);
}
2025-02-15 15:47:42 +00:00
void ast_basic::ExprInstance::setParent(std::weak_ptr<const IExprInstance> pinst) {
this->_parent_bind = pinst;
}
std::weak_ptr<const IExprInstance> ast_basic::ExprInstance::parentExpr() const {
return this->_parent_bind;
}
2025-02-04 14:26:34 +00:00
QList<std::shared_ptr<const IToken>> ExprInstance::tokens() const {
return this->tokens_bind;
2024-03-17 07:58:28 +00:00
}
2025-02-07 15:26:20 +00:00
ExprProgram::ExprProgram(const QString& root) : _program_root(root) { }
std::shared_ptr<const ExprRule> ExprProgram::definedRule() const {
return std::shared_ptr<const ExprRule>();
}
QString ExprProgram::filePath() const {
return this->_program_root;
}
QList<std::shared_ptr<const IToken>> ExprProgram::tokens() const {
return QList<std::shared_ptr<const IToken>>();
}
void ExprProgram::addToken(std::shared_ptr<const IToken> token_inst) { }
QList<std::shared_ptr<const IExprInstance>> ExprProgram::children() const {
return _children_store;
}
void ExprProgram::addChild(std::shared_ptr<const IExprInstance> inst) {
2025-02-15 15:47:42 +00:00
std::const_pointer_cast<IExprInstance>(inst)->setParent(shared_from_this());
2025-02-07 15:26:20 +00:00
_children_store.append(inst);
}
2025-02-15 15:47:42 +00:00
void ast_basic::ExprProgram::setParent(std::weak_ptr<const IExprInstance> pinst) { }
std::weak_ptr<const IExprInstance> ast_basic::ExprProgram::parentExpr() const {
return std::weak_ptr<const IExprInstance>();
}