我正在尝试使用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)