29 #ifndef CORE_PARSER_PARSER_H
30 #define CORE_PARSER_PARSER_H 1
61 class ParserFunctionCatalog;
62 class ParserScriptFunction;
164 ParserNode(
int kind,
const std::string& value,
const std::string& type) :
180 void set_value(
const std::string& value) { value_ = value; }
188 if (j >= args_.size()) args_.resize(j+1);
195 if (j >= args_.size()) args_.resize(j+1);
205 void set_type(
const std::string& type) { type_ = type; }
211 void print(
int level)
const;
228 std::vector<ParserNodeHandle> args_;
244 expression_(expression),
257 void set_type(
const std::string& type) { type_ = type; }
267 std::string varname_;
292 std::pair<std::string,ParserTreeHandle> expression(expression_string,expression_tree);
293 expressions_.push_back(expression);
299 std::string& expression_string,
302 expression_string = expressions_[expression_num].first;
303 expression_handle = expressions_[expression_num].second;
309 expression_handle = expressions_[expression_num].second;
330 var_list = input_variables_;
335 var_list = output_variables_;
353 size_t num_const_variables();
354 size_t num_single_variables();
355 size_t num_sequential_variables();
362 size_t num_const_functions();
363 size_t num_single_functions();
364 size_t num_sequential_functions();
381 std::vector<std::pair<std::string,ParserTreeHandle> > expressions_;
397 std::vector<ParserScriptVariableHandle> const_variables_;
398 std::vector<ParserScriptVariableHandle> single_variables_;
399 std::vector<ParserScriptVariableHandle> sequential_variables_;
401 std::vector<ParserScriptFunctionHandle> const_functions_;
402 std::vector<ParserScriptFunctionHandle> single_functions_;
403 std::vector<ParserScriptFunctionHandle> sequential_functions_;
423 function_id_(function_id),
424 function_type_(type) {}
426 ParserFunction(
const std::string& function_id,
const std::string& type,
int fflags) :
427 function_id_(function_id),
428 function_type_(type),
429 function_flags_(fflags) {}
444 std::string function_id_;
447 std::string function_type_;
470 bool find_function(
const std::string& function_id,
498 name_(name), flags_(0), function_(function) {}
501 const std::string&
get_name()
const {
return (name_); }
508 if (j < input_variables_.size())
return (input_variables_[j]);
514 if (j >= input_variables_.size()) input_variables_.resize(j+1);
515 input_variables_[j] = handle;
541 std::vector<ParserScriptVariableHandle> input_variables_;
579 scalar_value_(value),
585 const std::string& value) :
591 string_value_(value),
604 const std::string&
get_type()
const {
return (type_); }
605 void set_type(
const std::string& type) { type_ = type; }
621 const std::string&
get_name()
const {
return (name_); }
624 const std::string&
get_uname()
const {
return (uname_); }
625 void set_uname(
const std::string& uname) { uname_ = uname; }
663 std::string dependence_;
666 double scalar_value_;
667 std::string string_value_;
683 class BinaryOperator {
685 std::string operator_;
686 std::string funname_;
690 class UnaryOperator {
692 std::string operator_;
693 std::string funname_;
700 std::string& expressions,
704 const std::string&
name,
705 const std::string& type,
709 const std::string& name,
710 const std::string& type =
"U",
714 const std::string& name);
717 const std::string& name, std::string& type);
720 const std::string& name, std::string& type);
724 const std::string& name,
729 const std::string& name,
750 void add_binary_operator(
const std::string& op,
const std::string& funname,
int priority);
751 void add_unary_pre_operator(
const std::string& op,
const std::string& funname);
752 void add_unary_post_operator(
const std::string& op,
const std::string& funname);
755 void add_numerical_constant(
const std::string& name,
double val);
760 bool scan_expression(std::string& expressions,
761 std::string& expression);
769 bool split_expression(std::string& expression,
770 std::string& varname,
771 std::string& vartree);
774 bool parse_expression_tree(std::string& expression,
780 bool scan_sub_expression(std::string& expression, std::string& subexpression);
783 bool scan_subs_expression(std::string& expression, std::string& subexpression);
790 bool scan_constant_value(std::string& expression, std::string& value);
800 bool scan_variable_name(std::string& expression, std::string& var_name);
805 bool scan_constant_string(std::string& expression, std::string& str);
810 bool scan_function(std::string& expression, std::string&
function);
814 bool scan_equal_sign(std::string& expression);
818 void split_function(std::string& expression,
819 std::string& fun_name,
820 std::vector<std::string>& fun_args);
823 void split_subs(std::string& expression,
824 std::vector<std::string>& start_args,
825 std::vector<std::string>& step_args,
826 std::vector<std::string>& end_args,
827 std::string& varname);
831 bool check_syntax(std::string& expression, std::string& error);
835 bool scan_binary_operator(std::string& expression,
836 std::string& binary_operator);
839 bool scan_pre_unary_operator(std::string& expression,
840 std::string& unary_operator);
843 bool scan_post_unary_operator(std::string& expression,
844 std::string& unary_operator);
848 bool get_unary_function_name(std::string& unary_operator,
849 std::string& fun_name);
853 bool get_binary_function_name(std::string& binary_operator,
854 std::string& fun_name);
858 bool get_binary_priority(std::string& binary_operator,
int& priority);
864 bool remove_global_parentices(std::string& expression);
867 void remove_comments(std::string& expression);
876 std::string& expression);
884 std::list<ParserScriptVariableHandle>& variables,
885 std::map<std::string,ParserScriptVariableHandle>& named_variables,
886 std::list<ParserScriptFunctionHandle>& functions,
893 std::map<std::string,BinaryOperator> binary_operators_;
895 std::map<std::string,UnaryOperator> unary_pre_operators_;
897 std::map<std::string,UnaryOperator> unary_post_operators_;
900 std::map<std::string,double> numerical_constants_;
ParserFunction(const std::string &function_id, const std::string &type)
Definition: Parser.h:422
void get_input_variables(ParserVariableList &var_list)
Definition: Parser.h:328
int get_kind()
Definition: Parser.h:171
void clear_flags()
Definition: Parser.h:525
int get_flags() const
Definition: Parser.h:440
std::string get_varname()
Definition: Parser.h:249
void set_arg(size_t j, ParserNode *ptr)
Definition: Parser.h:193
void clear_dependence()
Definition: Parser.h:636
boost::shared_ptr< ParserFunctionCatalog > ParserFunctionCatalogHandle
Definition: Parser.h:72
int get_flags()
Definition: Parser.h:137
const std::string & get_name() const
Definition: Parser.h:501
size_t num_args()
Definition: Parser.h:208
void get_output_variables(ParserVariableList &var_list)
Definition: Parser.h:333
void set_flags(int flags)
Definition: Parser.h:609
std::string get_type()
Definition: Parser.h:174
boost::shared_ptr< ParserNode > ParserNodeHandle
Definition: Parser.h:63
void print() const
Definition: Parser.cc:230
void get_expression(int expression_num, ParserTreeHandle &expression_handle)
Definition: Parser.h:306
void get_expression(int expression_num, std::string &expression_string, ParserTreeHandle &expression_handle)
Definition: Parser.h:298
ParserTree(const std::string &varname, ParserNodeHandle expression)
Definition: Parser.h:241
ParserScriptVariableHandle get_output_var() const
Definition: Parser.h:518
void set_type(const std::string &type)
Definition: Parser.h:257
const std::string & get_type() const
Definition: Parser.h:604
#define SCISHARE
Definition: share.h:39
void set_const_var()
Definition: Parser.h:612
void set_type(std::string type)
Definition: Parser.h:134
const std::string & get_name() const
Definition: Parser.h:621
const std::string & get_uname() const
Definition: Parser.h:624
void add_input_variable(const std::string &name, const std::string &type="U", int flags=0)
Definition: Parser.h:317
int ref_cnt
Definition: Parser.h:109
const std::string & get_type()
Definition: Parser.h:260
void set_type(const std::string &type)
Definition: Parser.h:205
ParserNode(int kind, const std::string &value)
Definition: Parser.h:158
int get_kind() const
Definition: Parser.h:601
int ref_cnt
Definition: Parser.h:237
ParserFunction(const std::string &function_id, const std::string &type, int fflags)
Definition: Parser.h:426
std::map< std::string, ParserVariableHandle > ParserVariableList
Definition: Parser.h:277
boost::shared_ptr< ParserScriptVariable > ParserScriptVariableHandle
Definition: Parser.h:74
double get_scalar_value() const
Definition: Parser.h:629
ParserScriptVariable(const std::string &uname, const std::string &type, int flags)
Definition: Parser.h:563
void add_output_variable(const std::string &name, const std::string &type="U", int flags=0)
Definition: Parser.h:323
void set_catalog(ParserFunctionCatalogHandle catalog)
Definition: Parser.h:339
int get_flags() const
Definition: Parser.h:608
std::string get_name()
Definition: Parser.h:140
size_t num_expressions()
Definition: Parser.h:313
const char * name[]
Definition: BoostGraphExampleTests.cc:87
void set_single_var()
Definition: Parser.h:613
void set_output_var(ParserScriptVariableHandle &handle)
Definition: Parser.h:519
int get_flags() const
Definition: Parser.h:523
int ref_cnt
Definition: Parser.h:282
size_t num_input_vars() const
Definition: Parser.h:504
const std::string & get_return_type() const
Definition: Parser.h:438
void set_sequential_var()
Definition: Parser.h:614
ParserScriptVariable(const std::string &name, const std::string &uname, const std::string &type, int flags)
Definition: Parser.h:552
ParserVariable(std::string name, std::string type)
Definition: Parser.h:112
void clear_flags()
Definition: Parser.h:610
const std::string & get_function_id() const
Definition: Parser.h:435
ParserNodeHandle get_expression_tree()
Definition: Parser.h:252
boost::shared_ptr< ParserProgram > ParserProgramHandle
Definition: Parser.h:70
bool is_const_var() const
Definition: Parser.h:616
ParserFunctionHandle get_function() const
Definition: Parser.h:521
const std::string & get_string_value() const
Definition: Parser.h:630
ParserNode(int kind, const std::string &value, const std::string &type)
Definition: Parser.h:164
void set_type(const std::string &type)
Definition: Parser.h:605
void set_expression_tree(ParserNodeHandle handle)
Definition: Parser.h:254
ParserProgram()
Definition: Parser.h:285
void set_parent(ParserScriptFunctionHandle &handle)
Definition: Parser.h:597
boost::shared_ptr< class ParserFunction > ParserFunctionHandle
Definition: Parser.h:153
std::string get_type()
Definition: Parser.h:132
void set_value(const std::string &value)
Definition: Parser.h:180
void compute_dependence()
Definition: Parser.cc:261
void set_input_var(size_t j, ParserScriptVariableHandle &handle)
Definition: Parser.h:512
void set_function(ParserFunctionHandle func)
Definition: Parser.h:200
void print() const
Definition: Parser.cc:218
std::string get_value()
Definition: Parser.h:177
const std::string & get_dependence() const
Definition: Parser.h:635
bool is_single_var() const
Definition: Parser.h:617
void set_var_number(int var_number)
Definition: Parser.h:639
ParserFunctionHandle get_function()
Definition: Parser.h:202
ParserScriptVariable(const std::string &uname, double value)
Definition: Parser.h:573
ParserNodeHandle get_arg(size_t j)
Definition: Parser.h:183
bool is_sequential_var() const
Definition: Parser.h:618
void set_flags(int flags)
Definition: Parser.h:524
void set_kind(int kind)
Definition: Parser.h:602
ParserScriptFunctionHandle get_parent() const
Definition: Parser.h:598
void add_expression(const std::string &expression_string, ParserTreeHandle expression_tree)
Definition: Parser.h:289
ParserScriptVariableHandle get_input_var(size_t j) const
Definition: Parser.h:506
boost::shared_ptr< ParserScriptFunction > ParserScriptFunctionHandle
Definition: Parser.h:73
std::map< std::string, ParserFunctionHandle > ParserFunctionList
Definition: Parser.h:454
int get_var_number() const
Definition: Parser.h:638
void set_uname(const std::string &uname)
Definition: Parser.h:625
ParserFunctionCatalogHandle get_catalog()
Definition: Parser.h:338
void set_arg(size_t j, ParserNodeHandle handle)
Definition: Parser.h:186
ParserScriptFunction(const std::string &name, ParserFunctionHandle function)
Definition: Parser.h:497
ParserVariable(std::string name, std::string type, int flags)
Definition: Parser.h:119
ParserScriptVariable(const std::string &uname, const std::string &value)
Definition: Parser.h:584
boost::shared_ptr< ParserVariable > ParserVariableHandle
Definition: Parser.h:71
virtual ~ParserFunction()
Definition: Parser.h:432
void set_name(const std::string &name)
Definition: Parser.h:622
boost::shared_ptr< ParserTree > ParserTreeHandle
Definition: Parser.h:69