llvm cookbook 2.3 定義AST

定義抽象語法樹,也就是各種表達(dá)式的數(shù)據(jù)結(jié)構(gòu)。

class BaseAST {
 public:
  virtual ~BaseAST();
};

class VariableAST : public BaseAST {
  std::string var_name_;
 public:
  VariableAST(std::string &name) : var_name_(name) {}
};

class NumericAST : public BaseAST {
  int numeric_val_;
 public:
  NumericAST(int val) : numeric_val_(val) {}
};

class BinaryAST : public BaseAST {
  std::string operator_;
  BaseAST *lhs_, *rhs_;
 public:
  BinaryAST(std::string op, BaseAST* lhs, BaseAST* rhs) :
      operator_(op), lhs_(lhs), rhs_(rhs) {}
};

class FunctionDeclAST {
  std::string func_name_;
  std::vector<std::string> args_;
 public:
  FunctionDeclAST(const std::string &name, const std::vector<std::string> &args) :
      func_name_(name), args_(args) {}
};

class FunctionDefnAST {
  FunctionDeclAST *func_decl_;
  BaseAST* body_;
 public:
  FunctionDefnAST(FunctionDeclAST *proto, BaseAST *body) :
      func_decl_(proto), body_(body) {}
};

class FunctionCallAST : public BaseAST {
  std::string callee_;
  std::vector<BaseAST*> args_;
 public:
  FunctionCallAST(const std::string &callee, const std::vector<BaseAST*> args) :
      callee_(callee), args_(args) {}
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容