47 std::string usage =
"Shortest path in a (bounded-stack) PDT.\n\n Usage: ";
49 usage +=
" in.pdt [out.fst]\n";
51 SET_FLAGS(usage.c_str(), &argc, &argv,
true);
57 const std::string in_name =
58 (argc > 1 && (strcmp(argv[1],
"-") != 0)) ? argv[1] :
"";
59 const std::string out_name =
60 (argc > 2 && (strcmp(argv[2],
"-") != 0)) ? argv[2] :
"";
62 std::unique_ptr<FstClass> ifst(FstClass::Read(in_name));
65 if (FST_FLAGS_pdt_parentheses.empty()) {
66 LOG(ERROR) << argv[0] <<
": No PDT parenthesis label pairs provided";
70 std::vector<std::pair<int64_t, int64_t>> parens;
73 VectorFstClass ofst(ifst->ArcType());
76 if (FST_FLAGS_queue_type ==
"fifo") {
78 }
else if (FST_FLAGS_queue_type ==
"lifo") {
80 }
else if (FST_FLAGS_queue_type ==
"state") {
83 LOG(ERROR) <<
"Unknown queue type: " << FST_FLAGS_queue_type;
87 const s::PdtShortestPathOptions opts(
88 qt, FST_FLAGS_keep_parentheses, FST_FLAGS_path_gc);
92 return !ofst.Write(out_name);
void ShowUsage(bool long_usage=true)
void ShortestPath(const FstClass &ifst, const std::vector< std::pair< int64_t, int64_t >> &parens, MutableFstClass *ofst, const PdtShortestPathOptions &opts)
#define SET_FLAGS(usage, argc, argv, rmflags)
int pdtshortestpath_main(int argc, char **argv)
DECLARE_string(queue_type)
DECLARE_bool(keep_parentheses)
bool ReadLabelPairs(std::string_view source, std::vector< std::pair< Label, Label >> *pairs)