Learning Spirit 2

Learning Spirit 2

Phase level vs. character level

parse函数有4种形式的重载。

template <typename IteratorT, typename DerivedT>

    parse_info<IteratorT>

    parse

    (

        IteratorT const&        first,

        IteratorT const&        last,

        parser<DerivedT> const& p

    );
    template <typename CharT, typename DerivedT>

    parse_info<CharT const*>

    parse

    (

        CharT const*            str,

        parser<DerivedT> const& p

    );

以上两种是字符层次parse

template <typename IteratorT, typename ParserT, typename SkipT>

    parse_info<IteratorT>

    parse

    (

        IteratorT const&        first,

        IteratorT const&        last,

        parser<ParserT> const&  p,

        parser<SkipT> const&    skip

    );
    template <typename CharT, typename ParserT, typename SkipT>

    parse_info<CharT const*>

    parse

    (

        CharT const*            str,

        parser<ParserT> const&  p,

        parser<SkipT> const&    skip

    );

以上是短语层次parse

短语层次使用一个skip parser参数来过滤输入中的“空白”符号(这里空白的意思由skip参数决定,可以是空格、回车、甚至是“/*...*/”这样的c语言注释)。而字符层次则严格的分析每一个字符。

例如:

parse(“a 123” ,ch_p(‘a’)>>int_p,space_p)==true;//phase level

parse(“a 123” ,ch_p(‘a’)>>int_p)==true;//character level

parse(“a 123” ,ch_p(‘a’)>>int_p)==false;

 

Semantic Action

语义动作是指在分析的过程中执行的动作。每个parser可以附带一个或多个语义动作,当这个parser匹配了一段输入后,就会调用这个动作。

语义动作可以是一个函数:

template<typename Iterator>

void func(Iterator first, Iterator last);

也可以是仿函数:

struct myfunctor

{

       template<typename Iterator>

       void operator()(Iterator first, Iterator last) const;

}

注意()重载的const不能去掉。

可以这样使用:

rule<> r = (a>>b)[&func];

rule<> s= (a[myfunctor()] | b[&func])[&func];

特殊的语义动作:

对于一些特殊的parser,例如:int_p,ch_p。除了可以使用上述的语义动作外,还提供了与其类型有关的语义动作。

对于int_pvoid func(int val);  对于ch_pvoid func(char c)

 

那么,现在我们就可以完成我们上一篇教程的题目了。

#include<iostream>

#include<string>

#include<boost/spirit.hpp>//spirit的头文件

using namespace std;

using namespace boost::spirit;

struct Assign

{

       int & var;

       Assign(int & v):var(v){}

       void operator()(int val) const

       {

              var=val;

       }

};

struct Increase

{

       int & var;

       Increase(int & v):var(v){}

       void operator()(int val) const

       {

              var+=val;

       }

};

int main()

{

       int count;

 

       rule<phrase_scanner_t> s

              =int_p[Assign(count)]

              >> *( ch_p(',')

                     >>int_p[Increase(count)]);

 

       string str;

      

       while(getline(cin,str))

       {

              parse_info<> info = parse(str.c_str(),s,space_p);

              if (info.full)

              {

                     cout<<"Parse successful."<<endl;

                     cout<<"Result is "<<count<<endl;

              }

              else

              {

                     cout<<"Parse fail."<<endl;

              }

       }

       return 0;

}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 《Python深度学习第2版》是由Francois Chollet撰写的Python编程相关的著作。本书旨在为读者提供一本全面而且深入的深度学习指南,内容包括了深度学习的基础知识、深度神经网络的架构和训练方法、计算机视觉、自然语言处理及序列学习等方面。 全书内容结构清晰,每一个部分都会给出学习目标和实践项目。此外,本书还提供了丰富的案例和实例,用户可以借此获得深刻的理解和实战经验。 另外,本书特别强调了Python作为深度学习技术的开发平台的重要性。作者详细解释了Python和TensorFlow、Keras等开源工具之间的关系,并且提供了丰富的示例代码供读者参考实践。 总的来说,除了提供大量的理论知识,本书更多的是着重于将深度学习技术应用到实际生产环境中。相信这本书能够吸引广大的编程爱好者和人工智能从业者,成为深度学习领域的一本重要参考书籍。 ### 回答2: 深度学习(Deep Learning)是一种强大的机器学习方法,已经在人工智能(AI)领域扮演了越来越重要的角色。《Deep Learning with Python 2nd Edition》是一本由 François Chollet 写作的深度学习指南,它提供了对深度学习算法的全面介绍和深入剖析。该书的第二版扩充了第一版的内容,并增加了全新的主题,如GAN和剪枝等。此外,本书还配有实用的示例,演示如何在 Python 中使用深度学习技术进行各种任务,如文本分类、图像识别和语音处理等。 此外,本书提供了一个深入的 Python 框架 Keras 的教程,该框架可以帮助开发人员更轻松地使用深度学习技术构建和训练神经网络。总之,《Deep Learning with Python 2nd Edition》是一本实用且深入的指南,有助于理解深度学习的原理并解决实际问题。 ### 回答3: 《Deep Learning with Python,第2版》是一本由深度学习领域的专家Francois Chollet撰写的优秀著作。本书详细讲解了深度学习的核心概念和应用,并提供了实用的代码和示例来帮助读者深入了解深度学习的实现。 本书主要分为三部分。第一部分介绍了深度学习和人工智能的基本要素,包括神经网络、数字图像处理、自然语言处理等领域的相关理论和应用。第二部分涵盖了深度学习的核心技术,例如卷积神经网络、循环神经网络、自动编码器等。第三部分则着重讲解了如何应用深度学习,包括图像分类、语音识别、自然语言处理等实际应用场景,并提供了相应的代码和示例,帮助读者进行实践。 《Deep Learning with Python,第2版》的优点在于,它不仅提供了深度学习的理论知识,还结合实际案例进行了深入探讨,使得读者可以更容易地理解和应用深度学习技术。此外,本书所提供的代码和示例非常实用,可以直接应用于项目实践中,非常适合深度学习初学者和相关领域的技术人员借鉴学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值