diff --git a/a8/lisp.h b/a8/lisp.h new file mode 100644 index 0000000..9e3d67f --- /dev/null +++ b/a8/lisp.h @@ -0,0 +1,61 @@ +#pragma once + +/* + 数据类型 + 符号: symbol + 列表: list + 原子: atom + */ +namespace a8 +{ + + namespace lisp + { + + struct List + { + std::vector> elements; + }; + + struct Atom + { + double val = 0; + }; + + struct Symbol + { + std::string name; + }; + + struct Value + { + int value_type = 0; + std::shared_ptr atom; + std::shared_ptr list; + } + + class Scope + { + private: + std::map vars_; + std::shared_ptr outer_; + }; + + class Expr + { + public: + + bool Compile(const std::string& script); + std::shared_ptr Eval(); + + std::shared_ptr GetExprList() { return list_; }; + + private: + + std::shared_ptr list_; + + }; + + } + +}