2011-12-20 73 views
2

最近我一直在玩boost :: spirit :: qi,並一直試圖寫我自己的(非常非常簡單)它將解析的腳本語言。當我掌握腳本中的if語句時,遇到了麻煩。如果函數調用返回,我需要解析器跳過部分輸入。例如,我將令牌定義爲接受變量名(a-zA-Z_)並將比較集設置爲接受「>」或「<」。代碼示例如下。如果函數調用返回,跳過boost :: spirit :: qi中的輸入部分

comparison_statement = token >> comparison >> token; 
statement   = lit("if ") >> comparison_statement[&compare] >> "then"; 

qi::phrase_parse(first, last, script, space); // This call the parser 

如果函數比較返回true,我該如何跳過下一節?

+1

這正是在[小量解析器](http://www.boost.org/libs/spirit/doc/html/spirit/qi/reference/auxiliary/eps .html)是爲了;你試過了嗎? – ildjarn 2011-12-20 03:43:40

+0

不,我是Boost新手,從未見過這個。我查看了文檔,但有點令人困惑,您能否給我一個如何使用它的例子?謝謝:) – Codahk 2011-12-20 04:03:06

+0

「語義謂詞」段是相關的例子。 – ildjarn 2011-12-20 04:03:55

回答

3

解析器中的條件可以通過使用Epsilon Parser來編寫。這將調用你提供給它的函數,如果這個函數返回false,那麼這個特定的檢查就會失敗,並繼續下一步。

例如:

qi::rule<Iterator, std::string(), ascii::space_type> rool; 
rool = a | b | eps(f) | d 
相關問題