boost-spirit

    0热度

    1回答

    我尝试使用qi创建泛型分析器元素,因为我不幸(MSVC必须支持)不能使用X3。 这个想法是有一个模板结构: template<class T> struct parse_type; ,我可以用这样的: template<class T> T from_string(std::string const& s) { T res; parse_type<T> t; .

    0热度

    1回答

    我目前正在尝试使用boost spirit x3编写一个编译器。 我完成了解析器(现在没有语义操作和错误处理,只是解析为ast)。 由于我想实现支持范围和函数调用的语言,我问自己什么时候检查被调用的函数是否存在? 我应该在构建ast时检查当前范围中是否存在函数(在使用语义操作进行解析时),还是应该在编译ast时检查该函数? 与范围堆栈相同。我应该在解析,使用语义操作时,还是编译出ast时构建范围堆

    1热度

    1回答

    在精神X3我可以建立这样的解析器: const auto p = ("Number:" >> x3::_int) | ("String:" >> +x3::alpha); 如果我知道后面的字符串Number而来的,是int和String一后我一直可以用字符串>来说Number后面只有一个数字等等。 const auto p = ("Number:" > x3::_int)

    -1热度

    1回答

    我正在使用Boost.Spirit实现的编程语言(full project here),我正在努力解决以下问题。我有一个功能(在this file线77)以下声明: function_body_rule %= identifier_rule >> lit(L":=") >> lit(L"(") >> -parameter_declaration_rule %

    0热度

    1回答

    我的问题如下。我有被定义为像一个AST节点如下: struct foo_node{ std::vector<std::string> value; } ,我有一个这样的解析器解析成的结构,工作正常: typedef x3::rule<struct foo_node_class, foo_node> foo_node_type; const foo_node_type foo_no

    1热度

    1回答

    我一直在用boost :: spirit实现一个解析器,它需要在输出中生成google :: protobuf生成的类。 我试图按照page作为背景。不幸的是,我不能使用属性语法,因为google :: protobuf生成的类只提供set/get方法。于是,我试着用DEFERED的boost ::凤凰约束力,但我不知道如何从A类绑定add_param()方法(见下面的代码和行99评论): #de

    2热度

    1回答

    假设我们有一个正则表达式“start :(?:([0-9] {1,2}))?([0-9]。*)”。 它将匹配 std::string string1 = "start: 01 0ab"; 和 std::string string2 = "start: 0ab"; 我们也可以分别得到2匹配的字符串。 我尝试使用boost :: spirit :: qi解析器来解析string2,但它无法匹配

    1热度

    1回答

    我知道如何添加标记定义与标识符: this->self.add(identifier, ID_IDENTIFIER); 而且我知道如何添加标记定义与语义动作: this->self += whitespace [ lex::_pass = lex::pass_flags::pass_ignore ]; 不幸的是,这并不工作: this->self.add(whitespace

    1热度

    1回答

    双解析器加倍使用升压精神X3与此解析器: boost::spirit::x3::real_parser<double, x3::strict_real_policies<double> > const strict_double = {}; 但它也解析像.356和356.双打,我想避免这种情况,并且具有用户编写0.356和356.0。 Hoow能对这个现有的解析器应用这样的限制吗? 有没有办法从头

    3热度

    2回答

    我目前正在使用boost spirit X3实现表达式和我的DSL的运算符层次结构。 我认为我的语法分析器在语义上是正确的,但是当我编译它时,编译时,gcc和clang具有巨大的内存占用,编译了无限的时间,然后退出“g ++:internal compiler error:杀死(程序cc1plus)“。 我试图减少约于表达式解析器的代码,但它在某种程度上不是小事 Here是一个演示。 有人可以告诉