#include <cstdio>
#include <memory>
#include "openfst/lib/matcher-fst.h"
using namespace fst;
int main(int argc, char** argv) {
if (argc < 2) {
printf("usage: readback <arc_lookahead fst>\n");
return 2;
}
const std::unique_ptr<StdArcLookAheadFst> fst(StdArcLookAheadFst::Read(argv[1]));
if (!fst) {
printf("READ FAILED\n");
return 1;
}
printf("start=%d\n", fst->Start());
for (StateIterator<StdArcLookAheadFst> s(*fst); !s.Done(); s.Next()) {
for (ArcIterator<StdArcLookAheadFst> a(*fst, s.Value()); !a.Done(); a.Next()) {
printf(" %d: %d/%d/%g -> %d\n", s.Value(), a.Value().ilabel,
a.Value().olabel, a.Value().weight.Value(), a.Value().nextstate);
}
printf(" final(%d)=%g\n", s.Value(), fst->Final(s.Value()).Value());
}
printf("isyms=%s\n",
fst->InputSymbols() ? fst->InputSymbols()->Name().c_str() : "(none)");
return 0;
}