boost-spirit-lex

    5熱度

    1回答

    我嘗試學習使用boost :: spirit。要做到這一點,我想創建一個簡單的詞法分析器,將它們結合起來,然後使用spirit開始分析。我試着修改這個例子,但它沒有像預期的那樣運行(結果r不正確)。 這裏的詞法分析器: #include <boost/spirit/include/lex_lexertl.hpp> namespace lex = boost::spirit::lex; te

    2熱度

    1回答

    我想創建一個法:: token_def <>包含像「[」或「]」或「&>」 我試圖逃脫字符序列必要的字符: namespace lex = boost::spirit::lex; enum LexerIDs { ID_IDENTIFIER, ID_WHITESPACE, ID_INTEGER, ID_FLOAT, ID_PUNCTUATOR }; template <typename Le

    6熱度

    1回答

    我試着繼續處理我之前的例子並擴展規則。我的問題是,使用ID_IDENTIFIER的規則不起作用 - 雖然我知道詞法分析器正在工作(使用單元測試)。 這裏的例子: #include <boost/spirit/include/qi.hpp> #include <boost/spirit/include/lex_lexertl.hpp> namespace qi = boost::spirit:

    4熱度

    1回答

    我有一個基於spirit::lexertl的詞法分析器,它產生用lex::token_def<std::string>定義的標記。我希望使用qi::symbols<>表匹配該表中的標記,並使用符號表中的關聯數據作爲規則中的屬性。事情是這樣的[凝結從實際代碼]: qi::symbols<char, int> mode_table; mode_table.add("normal", 0)("ligh

    4熱度

    1回答

    當我嘗試從iterator_range轉換一個標記的值時,詞法分析器在嘗試讀取下一個標記時失敗。 這裏的令牌結構,其持有令牌的定義:(我不認爲這是相關的,但我包括以防萬一。) template <typename Lexer> struct Tokens : boost::spirit::lex::lexer<Lexer> { Tokens(); boost::spiri

    6熱度

    1回答

    我有一個從spirit :: lex和spirit :: qi構建的簡單配置文件解析器。當詞法分析器達到include "path"模式時,我想要包含文件的文本。正如你可能知道,精神::詞法分析::開始()開始掃描: // Read file contents into a std::string ... // _first and _last are const char* _first

    3熱度

    2回答

    我想知道boost :: spirit :: lex是否有辦法將令牌值寫回輸入流(可能在編輯之後)並再次重新掃描。我基本上尋找的是類似於Flex中unput()提供的功能。 謝謝!

    4熱度

    3回答

    我有一個非常簡單的路徑構造,我試圖用boost spirit.lex解析。 我們有以下的語法: token := [a-z]+ path := (token : path) | (token) 所以我們只是在談論結腸此時分離小寫ASCII字符串。我有三個例子「XYZ」,「ABC:XYZ」,「ABC:XYZ:」。 前兩項應被視爲有效。第三個,有一個尾隨冒號,不應被視爲有效。不幸的是,我認爲這三

    2熱度

    1回答

    是否有可能從Spirit分析器的語義操作中檢索在詞法分析器中定義的標記的標識,如下所示:token_def<> tok;。 我想要做的是使用每個運算符的標識ID(如+, - ,*等),並從解析器語義操作(如添加,減,時間等) 據我明白,在象生產: toks.symbol >> >> toks.plus toks.symbol; 如果toks.plus是或類型token_def<> plus;,_1

    1熱度

    1回答

    我有一個語法規則,看起來像這樣禁用這種情況下,因爲語義 行動在那裏。儘管如此,我看到裏面 三元編譯錯誤()這表明_1的類型不是向量作爲我 所期望的,而它是:​​ vector< variant<std::string, fusion::vector2<utree, fusion::vector2<long unsigned int, utree>