boost-spirit-qi

    0熱度

    1回答

    我已經開始研究基於Boost.Spirit的簡單分析器,它將解析類似C++的文件(唯一的C++ - ish部分是內置模板類型;例如map<string, smart_ptr<int>> name_object_map; - 但這是內置在編譯器中的,用戶不能聲明模板類)。儘管如此,除了用於初始化枚舉數聲明的常量表達式之外,該語法旨在包含數據結構聲明,而不包含表達式; enum E { a = 4 *

    3熱度

    1回答

    我不明白這兩個運營商之間的區別。讓我們舉一個例子來解析像"AA,BB,CC,DD"這樣的輸入到字符串向量中。 namespace qi = boost::spirit::qi; class my_grammar : public qi::grammar<string::const_iterator, string()> { public: my_grammar() : base_t

    3熱度

    1回答

    Boost Spirit qi :: symbols實現了鍵值對的映射:給出一個字符串的鍵,它可以返回一個特定的值。我的問題是: 1)對於空白字符串,是否可以返回默認值? (代碼中的Q1) 2)對於非空字符串或鍵值對映射中列出的鍵的字符串,是否可以返回表示鍵無效的值? (Q2代碼) **以下代碼基於BOOST SPIRIT文檔。 **預先感謝您的任何建議。 #include <boost/spir

    1熱度

    1回答

    在這裏提升靈魂新手。 我有一個字符串形式的「Key:Value \ r \ nKey2:Value2 \ r \ n」,我試圖解析。在這個特定的形式中,用Boost Spirit進行解析是微不足道的。但是,爲了更加穩健,我還需要處理這樣的情況下一個: 「我的鑰匙:價值\ r \ n My2ndKey:龍< 4個空格>值\ r \ n」 個 在這種情況下,我需要修剪領導和前後鍵/值分隔後的空間,讓我

    2熱度

    1回答

    我想解析一些整數提升精神,我必須檢查數據的溢出和精神doc說所有整數解析器檢查溢出,但它只適用於無符號類型,如果我嘗試解析帶符號整數,精神將不再檢查溢出。 char const* b = "6600452345243524352340"; char const* e = b + strlen("6600452345243524352340"); int32_t res = 0; bool v

    -1熱度

    1回答

    我正在寫一個解析器,我試圖插入一個迭代器作爲模板。 當我編寫template<typedef class Iterator = std::string::iterator>時,代碼按預期編譯。我想我應該可以刪除默認值,所以我想寫template<typedef class Iterator>。我認爲這應該是確定的,因爲我稍後專門化了模板。但是,這不會編譯錯誤:Error (active) type

    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;

    2熱度

    1回答

    使用鳳,像這樣的規則: start_ = (Rule1[SA1] >> +Rule2[SA2] >> Rule3) [ SA ]; 難道糾正,裏面SA, _1是規則1的屬性 _2(+規則2)的屬性 _3是Rule3的屬性? ?

    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回答

    我想了解將語義操作「附加」到解析器的準確含義,更準確地說,我想了解語義操作何時以及持續了多長時間解析器。 對於這一點,我稍微修改以下述方式升壓精神庫的employee.cpp例如: 1°/增加了一個函數print()其輸出僅跟蹤時它被稱爲: void print(const struct employee & e) { std::cout << e.surname << "\n"} 2°/在類