Adding custom functions to the parser
Hi, all. I'm trying to add custom functions to GiNaC::parser in a way similar to how it's done in default_reader.cpp: #include <ginac/ginac.h> #include <ginac/parser.h> #include <iostream> #include <sstream> #include <string> static GiNaC::ex sqrt_reader(const GiNaC::exvector& ev) { return GiNaC::sqrt(ev[0]); } int main() { std::string input = "sqrt(4)"; std::istringstream instream(input); auto proto = GiNaC::prototype_table(); proto[std::make_pair("sqrt", 1)] = sqrt_reader; auto symtab = GiNaC::symtab(); auto reader = GiNaC::parser(symtab, false, proto); GiNaC::ex expr = reader(instream); std::cout << input << " = " << expr << "\n"; } This unfortunately crashes before entering sqrt_reader. Here's a backtrace: #0 GiNaC::function::eval (this=0x7fffffffcd10) at function.cpp:1450 #1 0x000000000045c212 in GiNaC::ex::construct_from_basic (other=...) at ex.cpp:309 #2 0x000000000059e0d5 in GiNaC::ex::ex (other=..., this=0x7fffffffcc50) at ./ex.h:268 #3 GiNaC::dispatch_reader_fcn (args=std::vector of length 1, capacity 1 = {...}, ptr=<optimized out>) at parser/parser.cpp:62 #4 GiNaC::parser::parse_identifier_expr (this=<optimized out>) at parser/parser.cpp:103 #5 0x000000000059db7d in GiNaC::parser::parse_primary (this=this@entry=0x7fffffffd310) at parser/parser.cpp:173 #6 0x000000000059dc3f in GiNaC::parser::parse_expression (this=this@entry=0x7fffffffd310) at parser/parser.cpp:194 #7 0x000000000059e919 in GiNaC::parser::operator() (this=0x7fffffffd310, input=...) at parser/parser.cpp:226 #8 0x0000000000423e35 in main () at parsingcrash.cpp:21 Can anyone tell me how to do this correctly?
participants (1)
-
Vitaly Magerya