boost spirit介绍

boost spirit介绍

ID:38364039

大小:91.00 KB

页数:14页

时间:2019-06-11

boost spirit介绍_第1页
boost spirit介绍_第2页
boost spirit介绍_第3页
boost spirit介绍_第4页
boost spirit介绍_第5页
资源描述:

《boost spirit介绍》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、Spirit介绍Spirit,递归下降分析器框架,是传统的过程式代码;和STL都具有易于理解、流畅、高效等优秀特性。Spirit主要特性:模块性和可扩展性Spirit不是给你一个大锤,它提供方便打造大锤的正确成分。Spirit使用基本元素(终结符)和复合元素(产生式)的层次对象组合来模块化递归下降分析器。现在的Spirit版本使用了大量的表达式模版("ExpressionTemplates",C++Report,June1995)和静态多态特性。Spirit是一个面相对象的递归下降分析器生成器框架,以模板元编程技术实现。表达式模板使我们能够在C++中使用近似于

2、EBNF范式的语法。基于表达式模版技术,Spirit可以用C++代码来表示EBNF文法,这样就减少了传统编译器生成器中将EBNF文法转换未c、c++代码的步骤。在spirit中用如下符号来同等替代EBNF文法中的符号:C++EBNF=:=>>连接符

3、或者(选择符)()组合*前置*(KleeneStar);(结束规则)Spirit框架以层次结构来组织,因此当掌握了最小部分的核心内容和基本概念之后,所需要学习的,仅仅是需要使用的。Spirit的易用性和可伸缩性,使其在开发小型分析器时成为最佳的选择。为了简化开发和部署,Spirit整个框架只包含了头文件,不需要在编译时

4、链接库。所要作的只是把Spirit放到你的包含路径,编译,运行。代码规模?很小。分析器可以越来越大,嵌套越来越多。无论何时,当你把两个分析器粘到一块儿,你得到的是一个更大的分析器,这是一个重要的概念。二、Spirit基本概念以及简单用法1.基本概念规则(rule)分析器(parser)规则是分析器的组合,而你可以通过规则的名字来使用这些不同的组合。匹配(Match)扫描器(Scanner)语义动作(SemanticActions)Linerinput--->scanner--->parser--->Match---->actor--->parsertree(oth

5、erformats)2.Spirit简单使用:(1)创建分析器(可以使用预定义的分析器("_p"后缀))real_p>>*(ch_p(',')>>int_p)(2)创建一条规则用于存储复合规则r=real_p>>*(ch_p(',')>>int_p);(3)使用全局函数parse()使用分析器分析格式流parse_infoparse(input,parser,skip_parser);input:格式输入流parser:格式流分析器skip_parser:分析器元素之间字符忽略分析器parse函数返回一个对象(称为parse_info)用来保留分析的结果。(4)语

6、义动作语义动作依附于分析器,表示当输入匹配分析器时进行的动作。比如一个分析器P和一个函数F,如果想让P在成功匹配输入时调用F,可以以如下的方式连接:P[&F]。或者F是个函数对象:P[F];函数或函数对象的参数取决于分析器的类型,如果分析器的属性为nil_t,则函数原型为:VoidF(Iteratorfirst,Iterfaotrlast);orstructF{Voidopetator()(Iteratorfirst,Iteratorlast);};如果分析器的属性类型不为nil_t,则:VoidF(Tval);orStructF{Voidoperator()(T

7、val);};三、基本概念3.1分析器框架的中心,接受扫描器的输入,并根据语法规则对输入流进行匹配,匹配成功后执行语义动作,进行输入数据的处理。分析器分成两类:基本元素(Primitives)和复合元素(Composities)。相当于编译器中的终结符和非终结符。内嵌对象的灵活性和递归的合成,开创了一个统一的分析方法。派生类可以构成任意复杂度的聚合或算法。复杂的分析器可以仅经由少数元素类合成而创建。3.2扫描器扫描器分析线性输入流并输出给parser使用。scanner(IteratorT&first_,iter_param_tlast_,PoliciesTcon

8、st&policies=PoliciesT())[first_,last_)执行输入流范围,first_采用引用传递方便parser重定位。policies指定扫描器的扫描策略。扫描器策略用于控制扫描器的行为。Spirit预定义了一些扫描器策略,客户程序可以自定义扫描器策略来解析输入流。3.3匹配派生的分析器都要实现一个parse成员函数:typenameparser_result::typeparse(ScannerTconst&scan)const;parser_result<>元函数返回给定分析器和扫描器的匹配对象类型。匹配

9、对象的主要

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。