przekazać atrybut do reguły dziecka w duchu wzmocnienia
Mam dwie reguły z tym samym atrybutem.
Czy jest możliwe przekazanie atrybutu reguły matrix_ do reguły child matrycBlock_? Chcę, aby dyrektywa repeat nie tworzyła atrybutu wektora formy <>. Zamiast tego powinien po prostu wpisywać do atrybutu matrix_ (czasy numBlocks). Próbowałem przekazać atrybut jako atrybut dziedziczony do reguły podrzędnej i kompiluje się (patrz poniżej). Ale dostaję kilka wpisów „duchów” w moim wektorze, które nie pochodzą od feniksa :: push_back. Wydaje się, że nie jest to dla mnie optymalny sposób. Czy możliwe jest automatyczne propagowanie atrybutów w matrixBlock_ zamiast działań semantycznych?
typedef vector<columnT> Matrix;
matrix_ = repeat(numBlocks)[ matrixBlock_(_val) ];
matrixBlock_ = *column[phoenix::push_back(_r1, _1)];
qi::rule<Iterator, Matrix(), ascii::space_type> matrix_;
qi::rule<Iterator, void(Matrix&), ascii::space_type> matrixBlock_;
Aktualizacjawyjaśnić pytanie:
jeśli napiszę regułę bez działań semantycznych, to zsyntetyzowany atrybut matrix_ będzie
vector< vector< columnT > >
-
typedef vector<columnT> Matrix;
matrix_ = repeat(numBlocks)[ matrixBlock_ ];
matrixBlock_ = *column;
qi::rule<Iterator, Matrix(), ascii::space_type> matrix_;
qi::rule<Iterator, Matrix(), ascii::space_type> matrixBlock_;
Chcę, aby miał ten sam typ atrybutu co matrixBlock_, tablica 1-dimansional.
moim rzeczywistym rozwiązaniem jest użycie tylko jednej reguły. (wygląda na łatwe :-))
typedef vector<columnT> Matrix;
matrix_ = repeat(numBlocks)[ *column_[ phoenix::push_back(_val, _1) ] ];
//matrixBlock_ = *column;
qi::rule<Iterator, Matrix(), ascii::space_type> matrix_;
//qi::rule<Iterator, Matrix(), ascii::space_type> matrixBlock_;
AktualizacjaUdało mi się odtworzyć wpisy fantomowe z tym kodem w vs2010 i zwiększyć 1.46.1
http://liveworkspace.org/code/505091dc4631a379763567168a728e0c
wyjście: 42, 45, -9, 3, 2, 1, 12, 34, 56, 0, 0, 0
Mój błąd polegał na użyciu starej wersji Boosta. Brak phontoms z 1,5.
Teraz mam dwie działające wersje mojej gramatyki. Czy możliwe jest przeprojektowanie gramatyki bez użycia akcji semantycznej push_back?