diff options
author | sbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2013-07-29 16:14:18 +0000 |
---|---|---|
committer | sbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2013-07-29 16:14:18 +0000 |
commit | 677fef1c09eddc56d13b1f500399efc862cab209 (patch) | |
tree | 9d1e9809b7f7945958e2b1bea4cb8a3040c859b1 /src | |
parent | 6d2556e527db748b6b6bee3298ea97f83326c1c2 (diff) |
Make the --python flag work.
git-svn-id: http://svn.cactuscode.org/flesh/trunk@5037 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src')
-rw-r--r-- | src/piraha/Generic.cc | 9 | ||||
-rw-r--r-- | src/piraha/Group.cc | 54 | ||||
-rw-r--r-- | src/piraha/Piraha.hpp | 2 |
3 files changed, 64 insertions, 1 deletions
diff --git a/src/piraha/Generic.cc b/src/piraha/Generic.cc index 21012a85..d9b3f84b 100644 --- a/src/piraha/Generic.cc +++ b/src/piraha/Generic.cc @@ -17,7 +17,7 @@ void read_file(const char *file,std::string& buf) { } void usage() { - std::cerr << "usage: generic [--perl] grammar input" << std::endl; + std::cerr << "usage: generic [--perl|--python] grammar input" << std::endl; exit(2); } @@ -50,6 +50,7 @@ bool newEnd(std::string& in,const char *new_end,std::string& out) { int main(int argc,char **argv) { std::string grammarArg, inputArg; bool perlFlag = false; + bool pythonFlag = false; bool oFlag = false; std::string outFile; int narg = 0; @@ -57,6 +58,8 @@ int main(int argc,char **argv) { std::string arg = argv[n]; if(arg == "--perl") { perlFlag = true; + } else if(arg == "--python") { + pythonFlag = true; } else if(arg == "-o") { outFile = argv[++n]; oFlag = true; @@ -76,6 +79,8 @@ int main(int argc,char **argv) { if(!oFlag) { if(perlFlag) { newEnd(inputArg,".pm",outFile); + } else if(pythonFlag) { + newEnd(inputArg,".py",outFile); } else { newEnd(inputArg,".pegout",outFile); } @@ -101,6 +106,8 @@ int main(int argc,char **argv) { mg->children.push_back(src_file); if(perlFlag) { mg->dumpPerl(o); + } else if(pythonFlag) { + mg->dumpPython(o); } else { mg->dump(o); } diff --git a/src/piraha/Group.cc b/src/piraha/Group.cc index 11e1ac61..c236bf4c 100644 --- a/src/piraha/Group.cc +++ b/src/piraha/Group.cc @@ -80,6 +80,60 @@ void Group::dumpPerl(std::ostream &o,int indent) { o << "}" << std::endl; } +void Group::dumpPython(std::ostream& o) { + o << "VAR = "; + dumpPython(o,0); +} +void Group::dumpPython(std::ostream &o,int indent) { + for(int i=0;i<indent;i++) + o << ' '; + o << "{" << std::endl; + indent += 2; + for(int i=0;i<indent;i++) + o << ' '; + o << "'name' : \"" << getPatternName() << "\"," << std::endl; + if(children.size()==0) { + for(int i=0;i<indent;i++) + o << ' '; + o << "'children' : []," << std::endl; + for(int i=0;i<indent;i++) + o << ' '; + o << "'text' : \""; + for(int i=start_;i<end_;i++) + insertc(o,input[i]); + o << "\"," << std::endl; + } else { + for(int i=0;i<indent;i++) + o << ' '; + o << "'children' : [" << std::endl; + typedef vector<smart_ptr<Group> >::iterator group_iter; + for(group_iter gi = children.begin(); + gi != children.end(); + ++gi) { + (*gi)->dumpPython(o,indent+2); + for(int i=0;i<indent;i++) + o << ' '; + o << "," << std::endl; + } + for(int i=0;i<indent;i++) + o << ' '; + o << "]," << std::endl; + } + for(int i=0;i<indent;i++) + o << ' '; + o << "'start' : " << start() << "," << std::endl; + for(int i=0;i<indent;i++) + o << ' '; + o << "'end' : " << end() << "," << std::endl; + for(int i=0;i<indent;i++) + o << ' '; + o << "'line' : " << line() << "," << std::endl; + indent -= 2; + for(int i=0;i<indent;i++) + o << ' '; + o << "}" << std::endl; +} + std::string Group::substring() { std::string sub; for(int i=start_;i<end_;i++) { diff --git a/src/piraha/Piraha.hpp b/src/piraha/Piraha.hpp index 004a3ba0..bd2d70a5 100644 --- a/src/piraha/Piraha.hpp +++ b/src/piraha/Piraha.hpp @@ -57,6 +57,8 @@ public: void dump(int n,std::ostream& o,int indent=0); void dumpPerl(std::ostream&o=std::cout); void dumpPerl(std::ostream&o,int indent); + void dumpPython(std::ostream&o=std::cout); + void dumpPython(std::ostream&o,int indent); int groupCount() { return children.size(); } smart_ptr<Group> group(int i) { return children[i]; } smart_ptr<Group> group(const char *nm,int ix=0) { |