小编Dan*_*iel的帖子

使用 boost 精神的递归 BNF 规则

我正在尝试使用boost 精神 (Boost v1.64)为以下 BNF 规则编写解析器
规则是:

<numeric-literal>::= integer  
<type-name> ::= "in" | "out" | "in_out"  
<array-type-spec> ::= <type-spec> "[" [<numeric-literal>] "]"  
<tuple-type-spec> ::= "(" <type-spec> ("," <type-spec>)+ ")"
<type-spec> ::= <type-name> | <array-type-spec> | <tuple-type-spec>  
Run Code Online (Sandbox Code Playgroud)

下面是我的尝试,使用boost::make_recursive_variant
它似乎可以在字符串上正常工作,in
但在in[2].
我的错误在哪里?
什么是优雅的解决方案?

namespace Ast {
enum class TypeName { IN, OUT, INOUT};
using NumericLiteral = int;
    using TypeSpec = boost::make_recursive_variant
    <
    TypeName,
    std::pair<boost::recursive_variant_, NumericLiteral>,
    std::vector < boost::recursive_variant_ >
    >::type;
}
//grammar:
namespace myGrammar {
namespace qi …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-spirit-qi

5
推荐指数
1
解决办法
505
查看次数

标签 统计

boost ×1

boost-spirit-qi ×1

c++ ×1