#include "ast_basic.h" #include "libsyntax.h" #include using namespace ast_basic; using namespace lib_token; using namespace lib_syntax; ExprInstance::ExprInstance(std::shared_ptr bind) : _expr_rule(bind) { } std::shared_ptr ExprInstance::definedRule() const { return _expr_rule; } QString ExprInstance::filePath() const { if (!tokens_bind.size()) throw new SyntaxException("InternalError[0x0002]一个空的非法无效节点"); return tokens_bind.first()->file(); } void ExprInstance::addToken(std::shared_ptr token_inst) { this->tokens_bind.append(token_inst); } QList> ExprInstance::children() const { return this->children_store; } void ExprInstance::addChild(std::shared_ptr inst) { std::const_pointer_cast(inst)->setParent(shared_from_this()); this->children_store.append(inst); } void ast_basic::ExprInstance::setParent(std::weak_ptr pinst) { this->_parent_bind = pinst; } std::weak_ptr ast_basic::ExprInstance::parentExpr() const { return this->_parent_bind; } QList> ExprInstance::tokens() const { return this->tokens_bind; } ExprProgram::ExprProgram(const QString& root) : _program_root(root) { } std::shared_ptr ExprProgram::definedRule() const { return std::shared_ptr(); } QString ExprProgram::filePath() const { return this->_program_root; } QList> ExprProgram::tokens() const { return QList>(); } void ExprProgram::addToken(std::shared_ptr token_inst) { } QList> ExprProgram::children() const { return _children_store; } void ExprProgram::addChild(std::shared_ptr inst) { std::const_pointer_cast(inst)->setParent(shared_from_this()); _children_store.append(inst); } void ast_basic::ExprProgram::setParent(std::weak_ptr pinst) { } std::weak_ptr ast_basic::ExprProgram::parentExpr() const { return std::weak_ptr(); }