boost-spirit-qi

    1熱度

    1回答

    我需要解析包含鍵/值對和鍵/子表達式對,像1行的表達式: 123=a 456=b 789=(a b c) 111=((1=a 2=b 3=c) (1=x 2=y 3=z) (123=(x y z))) 666=evil 爲了讓解析器簡單,我願意做分析的幾個步驟,分離一級標籤(這裏123,456,789,111和666,然後分析他們在另一個步驟的內容。 這裏789的值將是"a b c",111的

    1熱度

    1回答

    我是Boost.Spirit的新手,我有一個與我正試圖使用​​庫實現的小型解釋器相關的問題。作爲剖析我的語言的子任務,我需要從表單的輸入提取文件的路徑: "path = \"/path/to/file\"" ,並把它作爲一個字符串(不帶引號),以語義動作。 我寫了一些代碼,可以解析這種類型的輸入,但傳遞解析的字符串並不像預期的那樣工作,可能是因爲我缺乏Boost.Spirit的經驗。 任何人都

    5熱度

    1回答

    基本上我正在執行一個表達式解析器。因爲我需要儘可能好的性能,並且根據文檔的語法結構可能會非常慢,所以我希望在解析之前重新使用語法並綁定符號表。由於語法的客戶端可能有一個符號表,它在解析之前構建和維護,我理想的情況是避免複製實際的表,因此我導致下面的代碼(簡化)用於翻譯術語: qi::symbols< char, double >* m_Symbols; qi::rule< Iterator, d

    2熱度

    1回答

    所以我知道有上Boost.Qi XML parsing官方教程,但我挺鋼不明白如何與它這樣的XML解析: <host url="http://www.site.com"/> <run app="myApp" version=443 url="/folderName/innerFolder/myApp.exe"/> <folder name="folderName" version=443>

    1熱度

    1回答

    在我的規則之一中有一個以stl容器作爲參數的qi :: locals <>。當我編譯我的程序沒有BOOST_SPIRIT_QI_DEBUG時,一切正常。但是當我打開BOOST_SPIRIT_QI_DEBUG時,程序無法編譯,因爲缺少運算符< <。 簡單的代碼片段: typedef std::list<int> TlstValues; template <typename Iterator, t

    0熱度

    1回答

    爲了將它們與Boost.Spirit V2.x(特別是Boost.Spirit.Qi)一起使用,是否真的需要用Boost.Fusion包裝結構體/類?我寧願使用語義動作來分配給成員。如果我的記憶爲我服務,那麼這就是它以前在V1.x中完成的方式... calculator example表明它應該仍然有可能。到目前爲止,我還沒有找到一個好方法來做到這一點。 我想看看你會怎麼做employee exa

    13熱度

    1回答

    我想知道是否有Boost.Spirit.Qi的方式在運行時動態相結合的規則的任意號碼。 Boost.Spirit的內部工作對我來說仍然有點神祕,但是由於規則是作爲對象實現的,所以它似乎是可行的。我的動機是讓我的語法的某些部分容易擴展。 考慮以下人爲的例子: namespace qi = boost::spirit::qi; namespace px = boost::phoenix; typ

    0熱度

    1回答

    我有一種說不出的煩惱: qi::rule <Iterator, std::string()> str = +alnum; // will not parse given input //param = "WELL" >> space >> str >> ((space >> no_case[control]) || (space >> no_case[limit])) >> space >>

    2熱度

    1回答

    這可能是一個很容易的問題,尤其是因爲我已經成功使用QI來解析簡單結構一段時間了,並且可能應該已經知道答案,但它躲開我不管...... 比方說,我們有這樣一個容器: struct GenderTally { std::vector<std::string> males; std::vector<std::string> females; }; 和像 m:Steve; f:Dora;

    4熱度

    1回答

    如何報告解析器警告? 與報告錯誤類似,但解析器不能停止。 只有日誌警告消息和該子表達式導致警告。 例輸入: select * from table where row>='' && row<>'hello' 預期輸出: Warning: expression is always true: row>='' Warning: && is deprecated, use AND: row>=''