boost之spirit学习-mini_c(3)

前一章分析完了main.cpp,了解了mini_c的主流程。现在来看看抽象语法树的定义:ast.hpp


首先,为一些对象打上id,方便编译错误时由对象的id查找到出错的位置(这个是由annotation记录的,后边会讲)

    struct tagged
    {   
        int id; // Used to annotate the AST with the iterator position.
                // This id is used as a key to a map<int, Iterator>
                // (not really part of the AST.)
    };  

带id的对象包括:identifier、function_call、function、return_statement。


    struct nil {}; 
    struct unary;
    struct function_call;
    struct expression;

    struct identifier : tagged
    {   
        identifier(std::string const& name = "") : name(name) {}
        std::string name;
    };  

    typedef boost::variant<
            nil 
          , bool
          , unsigned int 
          , identifier
          , boost::recursive_wrapper<unary>
          , boost::recursive_wrapper<function_call>
          , boost::recursive_wrapper<expression>
        >   
    operand;

后边是对nil的定义,unary(一元表达式)、function_call、expression进行提前声明。

identifier的定义没啥好说的。

operand(操作数)的定义有点意思。操作数可以是空,也可以是bool、unsigned int 或 变量 或 一元表达式 或 函数调用 或 更general的表达式。它用variant来表达这种概念。

但unary、function_call、expression为什么要用boost::recursive_wrapper来定义呢?

因为它们有循环包含关系

  • unary(一元表达式)里有两个成员,一个是optoken,另一个就是operand。
  • expression包含了operation的列表,operation又包含了operand,所以是循环的。
  • function_call里有一个expression的list,所以也是循环包含的

对于这种循环包含的对象,我们一般都用指针相互指向,对象动态分配获得。但这样的话我们就要负责对象的动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB是一种用于进行数值计算和数据可视化的软件平台。使用MATLAB可以进行各种科学计算、工程计算以及数据分析等。MATLAB提供了丰富的工具箱和函数库,能够满足不同领域的科学计算需求。 在MATLAB中,boost_thread-vc120-mt-1_56.dll是一个动态链接库文件,用于支持多线程编程。多线程编程可以提高程序的性能和效率,使程序能够同时执行多个任务。这个库文件是用于Windows平台上使用Visual Studio 2013进行编译的。 要下载boost_thread-vc120-mt-1_56.dll,可以按照以下步骤进行: 1. 打开MATLAB软件。 2. 在MATLAB命令窗口中输入"mex -setup",回车。 3. 在弹出的窗口中选择"Y",表示需要重新配置MEX编译器。 4. 在编译器选项中选择"Microsoft Visual C++ Compiler",回车。 5. 在弹出的窗口中选择"Y",表示需要下载并安装支持的编译器。 6. 下载和安装完成后,重新打开MATLAB。 7. 在MATLAB命令窗口中输入"mex -setup",回车。 8. 在弹出的窗口中选择"Y",表示要重新配置MEX编译器。 9. 选择相应的编译器选项,回车。 10. 设置完成后,在MATLAB命令窗口中输入"mex -setup",回车。 11. 在编译器选项中选择"Microsoft Visual C++ Compiler",回车。 12. 在弹出的窗口中选择"Y",表示需要下载并安装支持的编译器。 13. 下载和安装完成后,重新打开MATLAB。 14. 在MATLAB命令窗口中输入"mex -setup",回车。 15. 在弹出的窗口中选择"Y",表示要重新配置MEX编译器。 16. 选择相应的编译器选项,回车。 17. 设置完成后,可以在MATLAB环境中使用boost_thread-vc120-mt-1_56.dll库文件进行多线程编程了。 以上是关于MATLAB下载boost_thread-vc120-mt-1_56.dll的简单步骤说明,希望对您有所帮助。如果有任何其他问题,请随时向我们提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值