#include "grammar.h" #include #include "rule.h" using namespace std; Grammar::Grammar(const vector& rules, const vector& feature_names) : rules(rules), feature_names(feature_names) {} vector Grammar::GetRules() const { return rules; } vector Grammar::GetFeatureNames() const { return feature_names; } ostream& operator<<(ostream& os, const Grammar& grammar) { vector rules = grammar.GetRules(); vector feature_names = grammar.GetFeatureNames(); os << setprecision(12); for (Rule rule: rules) { os << "[X] ||| " << rule.source_phrase << " ||| " << rule.target_phrase << " |||"; for (size_t i = 0; i < rule.scores.size(); ++i) { os << " " << feature_names[i] << "=" << rule.scores[i]; } os << " |||"; for (auto link: rule.alignment) { os << " " << link.first << "-" << link.second; } os << endl; } return os; }