boost-spirit-qi

    3熱度

    1回答

    在一個簡單的解析器測試Live On Coliru, std::string str("x123x"); boost::iterator_range<boost::range_iterator<decltype(str)>::type> attr; if(x3::parse(boost::begin(str), boost::end(str), x3::lit('x') >> x3::raw[

    0熱度

    1回答

    做下面的函數改變迭代器,它首先指向s.begin(),並且指向s.begin() + 1?我是對的? #include <boost/spirit/include/qi.hpp> #include <string> #include <iostream> using namespace boost::spirit; int main() { std::string s;

    2熱度

    1回答

    我有一個有點簡單的問題,我無法找到任何答案。在解析更大的語法時,我發現解析任何大於15個字符的字符串會導致解析器返回失敗。解析器是這樣的: namespace parser { template <typename Iterator> struct p_grammar : qi::grammar<Iterator, standard::space_type> { p

    2熱度

    1回答

    我剛剛在Qi中實現了一個基本的分析器來驗證指定的TCP端口範圍,例如, 80-444。 template<class It> struct port_range_grammar : qi::grammar<It, port_range_type()> { port_range_grammar() : port_range_grammar::base_typ

    1熱度

    1回答

    我想實現一個語法要求解析實例名稱和路徑,其中的路徑是由分隔分隔實例名稱的列表。分隔可以是.在輸入文件中給出(週期)或/(斜線)的路徑列之前,例如: DIVIDER . a.b.c x.y.z 一旦設定,除法器從不改變整個文件(如果設置爲即.,遇到類似的路徑應該a/b/c不能正確解析)。因爲我不知道分頻器是事先什麼,我想將它存儲在我的語法的變量,並在相應的char_解析器(當然使用該值,實際

    0熱度

    1回答

    試圖學習Boost :: Spirit並想要解決c樣式標識符的一個簡單示例。下面的語法不會聲稱'incompatible_start_rule'。目標是讓這個語法返回一個字符串,而不是一個字符串向量,因爲默認屬性傳播規則會。 template <typename IT> struct cppIdentifier : qi::grammar<IT, std::string, space_type(

    3熱度

    1回答

    我是使用qi的新手,遇到了困難。我想解析等的輸入: X + Y + Z,A + B 成字符串的兩個向量。 我有代碼這樣做,但只有當語法解析單個字符。理想情況下,以下行應該是可讀的: 曦+葉+鄒敖+碧 使用簡單的更換,如elem = +(char_ - '+') % '+'無法解析,因爲它會消耗「」第一ELEM,但我還沒有找到一個簡單的方法來解決這個問題。 這是我的單字符代碼,以供參考: #incl

    3熱度

    1回答

    我試圖解析一個由空格分隔的,可選標記的關鍵字字符串。例如, descr:expense type:receivable customer 27.3 其中冒號之前的表達是標記,並且它是可選的(即,假定默認標記)。 我不能完全得到解析器來做我想做的事。我對canonical example做了一些小修改,其目的是解析鍵/值對(很像HTTP查詢字符串)。 typedef std::pair<boos

    2熱度

    1回答

    齊::規則與繼承屬性假設我們有一個規則1 qi::rule<std::string::iterator, int()> rule1 = qi::int_[qi::_val=qi::_1]; 而且我們決定讓一個int屬性是不夠的,我們也希望得到的原始數據(升壓:: iterator_range的)。我們可能會有許多與rule1相同類型的規則。所以最好有一個通用的解決方案。因此我們可以定義另一個規

    1熱度

    1回答

    我在編譯boost關鍵字解析器的示例代碼時遇到了一些麻煩。我使用boost 1.63.0和gcc 6.3.0並指定C++ 11.我跑: g++ -std=c++11 -I boost-1.63-0/include keywords-1.cpp ,被編譯器錯誤的一個巨大的牆擊中。 第一個錯誤是: no type named 'type' in struct boost::mpl::apply...