KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
After I've read the tutorials on boost::spirit , I quite liked it because of the parser combinator syntax. Making a parser is so easy. Unfortunately, the tutorials were not as exact on the matter of getting a complex data structure out of the parser. I am trying to get to the Kaleidoscope AST . Anyway, here be my AST code: #ifndef __AST_HPP__ #define __AST_HPP__ #include <boost/fusion/include/adapt_struct.hpp> #include <boost/variant/recursive_variant.hpp> #include <boost/lexical_cast.hpp> #include <boost/variant/apply_visitor.hpp> #include <string> #include <vector> namespace ast { struct add; struct sub; struct mul; struct div; struct func_call; template<typename OpTag> struct binary_op; typedef boost::variant<double, std::string, boost::recursive_wrapper<binary_op< add>>, boost::recursive_wrapper<binary_op<sub>>, boost::recursive_wrapper<binary_op<mul>>, boost::recursive_wrapper< binary_op<div>>, boost::recursive_wrapper<func_call>> expression; template<typename OpTag> struct binary_op { expression left; expression right; binary_op(const expression & lhs, const expression & rhs) : left(lhs), right(rhs) { } }; struct func_call { std::string callee; std::vector<expression> args; func_call(const std::string func, const std::vector<expression> &args) : callee(func), args(args) { } }; struct prototype { std::string name; std::vector<std::string> args; prototype(const std::string &name, const std::vector<std::string> &args) : name(name), args(args) { } }; struct function
Tags (comma-separated)
Save Edits
Cancel