2011-12-15 24 views
15

standart ascii::space_type kaptan yorumlarımı atlamayın tabii yapar. dokümanlar kendi atlama ayrıştırıcı yapabilir ama aslında bunu nasıl hiçbir örnek yoktur söz.Custom Atla Ayrıştırıcı :: Ruh

Sadece, şimdi 2 saat googling oldum bir örnek kod ya da bir şey gerekiyordu.

bana examples işaret etmeyin, işe birkaç bağlantı Ruh 1.6 ile uğraşan, umutsuzca eski.

+0

Eğer Boost dağılımı ile gelen örnekler baktım mı? –

cevap

27

bazı denemeler sonra, ben özel bir kaptan belirtmek için bir yol bulduk ve burada açıklayacağım:

template<typename Iterator> 
struct pl0_skipper : public qi::grammar<Iterator> { 

    pl0_skipper() : pl0_skipper::base_type(skip, "PL/0") { 
     skip = ascii::space | ('{' >> *(qi::char_ - '}') >> '}'); 
    } 
    qi::rule<Iterator> skip; 
}; 

template<typename Iterator, typename Skipper = pl0_skipper<Iterator>> 
struct pl0_grammar : public qi::grammar<Iterator, Skipper> { 

    /* The rules use our skipper */ 
    qi::rule<Iterator, Skipper> start; 
    qi::rule<Iterator, Skipper> block; 
    qi::rule<Iterator, Skipper> statement; 

}; 

gizli yalan ayrıştırıcı çağrısında. Bunu kullanarak parse_phrase ayrıştırmak istiyor nedense, için, bir kaptan dilbilgisi nesnesi vermek zorunda. Bunun farkında değildim:

Bu çalışır.

+1

Bunun için teşekkürler. Bugün bana çok zaman kurtardın! – Dilawar