boost-spirit

    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熱度

    2回答

    我真的放棄了(和以前的許多其他)一樣,自己找到這個仍然非常簡單的boost-spirit-業力圖書館。我想顯示的字符串之前,作爲許多白色空格作爲字符串中的字符: typedef enum {A, B, C} E; class EName : public ka::symbols<E, std::string> { public: EName() {add (A,"A") (B,"

    2熱度

    1回答

    我想解析包含連字符的逗號分隔的標記。但lexeme忽略所有的連字符。部分程序如下。 #include <boost/spirit/include/qi.hpp> #include <boost/spirit/include/support_utree.hpp> namespace qi = boost::spirit::qi; namespace bs = 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 %