Skip to content
Snippets Groups Projects
Commit a3a79772 authored by ilor's avatar ilor
Browse files

add -V option to wcclparser to dump variable status after query processing

parent e34bd768
Branches
No related merge requests found
......@@ -6,7 +6,10 @@
#define WCCL_VALUE_PREAMBLE \
static const char* type_name; \
const char* get_type_name() const { return type_name; } \
static std::string var_repr(const std::string &var_name);
static std::string var_repr(const std::string &var_name); \
std::string make_var_repr(const std::string &var_name) const { \
return var_repr(var_name); \
}
namespace Wccl {
......@@ -35,6 +38,8 @@ public:
virtual ~Value() {}
virtual std::string make_var_repr(const std::string&) const = 0;
/**
* String representation function, in general, a tagset is required,
* but some classes might not need that, so by default just forward
......
......@@ -90,8 +90,17 @@ void libedit_read_loop(boost::function<bool (const std::string&)>& line_cb)
}
#endif
void dumpvariables(const Wccl::Variables& vars, const Corpus2::Tagset& tagset)
{
typedef std::pair<std::string, boost::shared_ptr<Wccl::Value> > v_t;
foreach (const v_t& v, vars.get_all<Wccl::Value>()) {
std::cerr << v.second->make_var_repr(v.first) << "="
<< v.second->to_string(tagset) << "\n";
}
}
bool process_line(const std::string& line, Wccl::Parser& parser,
Wccl::SentenceContext& sc, bool all_positions)
Wccl::SentenceContext& sc, bool all_positions, bool dump_variables)
{
if (line.empty() || line == "exit" || line == "quit") {
return true;
......@@ -123,6 +132,9 @@ bool process_line(const std::string& line, Wccl::Parser& parser,
<< "Parsed expression: "
<< retVal->to_string(parser.tagset())
<< std::endl;
if (dump_variables) {
dumpvariables(*cx.variables(), parser.tagset());
}
} else {
std::cerr << "Problem while parsing -- "
<< "retVal is NULL!" << std::endl;
......@@ -156,6 +168,7 @@ int main(int argc, char** argv)
std::string query_load = "";
std::string position = "0";
bool quiet = false;
bool dump_variables = false;
using boost::program_options::value;
boost::program_options::options_description desc("Allowed options");
......@@ -172,6 +185,8 @@ int main(int argc, char** argv)
"Query to run (disables interactive mode)\n")
("quiet,q", value(&quiet)->zero_tokens(),
"Suppress messages\n")
("variables,V", value(&dump_variables)->zero_tokens(),
"Dump variables after running each query\n")
("help,h", "Show help")
;
boost::program_options::variables_map vm;
......@@ -214,14 +229,14 @@ int main(int argc, char** argv)
sc.set_position(pos);
Wccl::Parser parser(tagset);
if (!query.empty()) {
process_line(query, parser, sc, position == "all");
process_line(query, parser, sc, position == "all", dump_variables);
return 0;
} else if (!query_load.empty()) {
std::ifstream qf(query_load.c_str());
if (qf.good()) {
std::stringstream ss;
ss << qf.rdbuf();
process_line(ss.str(), parser, sc, position == "all");
process_line(ss.str(), parser, sc, position == "all", dump_variables);
return 0;
} else {
throw Wccl::FileNotFound(sentence_load, "", "Query file");
......@@ -229,7 +244,7 @@ int main(int argc, char** argv)
}
boost::function<bool (const std::string&)> f;
f = boost::bind(&process_line, _1, boost::ref(parser), boost::ref(sc),
position == "all");
position == "all", dump_variables);
#ifdef HAVE_LIBEDIT
libedit_read_loop(f);
#else
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment