int main(int argc, char** argv){ NProgram program(argc, argv); NMLParser parser; // parse the NML code into N code nvar code = parser.parseFile("test.nml"); cout << "code is: " << code << endl; // reconstruct the NML code from N code (just for demonstration // purposes) NMLGenerator generator; stringstream sstr; generator.generate(sstr, code); cout << "------------- reconstructed NML" << endl; cout << sstr.str() << endl; // execute the code we parsed NObject interpreter; interpreter.process(code); return 0; }
int main(int argc, char** argv){ Program::opt("help", "h", false, "Display usage"); Program::opt("math", "m", false, "Use Mathematica"); Program::opt("show", "s", false, "Show N input/output"); Program::opt("history", "", 100, "Number of lines to keep in history"); Program program(argc, argv); nvar args = program.args(); if(args["help"]){ cout << program.usage("neu [OPTION]... [NML FILE]..."); program.exit(0); } bool show = args["show"]; NObject* o = args["math"] ? new NMObject : new NObject; Parser parser; NMLGenerator generator; if(args.empty()){ stifle_history(args["history"]); for(;;){ parser.reset(); nvar n = parser.parse(); if(parser.done()){ cout << endl; NProgram::exit(0); } if(n == none){ continue; } if(show){ cout << "<< " << n << endl; } try{ nvar r = o->process(n); if(show){ cout << ">> " << r << endl; } if(r != none){ generator.generate(cout, r); cout << endl; } } catch(NError& e){ cerr << e << endl; } } } for(size_t i = 0; i < args.size(); ++i){ nvar n = parser.parseFile(args[i]); if(n == none){ NProgram::exit(1); } if(show){ cout << "<< " << n << endl; } nvar r = o->process(n); if(show){ cout << ">> " << r << endl; } } NProgram::exit(0); return 0; }