00001
00002
00003
00004
00005
00006 #ifndef FITYK_CPARSER_H_
00007 #define FITYK_CPARSER_H_
00008
00009 #include <string>
00010 #include "ui.h"
00011 #include "lexer.h"
00012 #include "eparser.h"
00013 #include "tplate.h"
00014
00015 class DataAndModel;
00016
00017 enum CommandType
00018 {
00019 kCmdDebug,
00020 kCmdDefine,
00021 kCmdDelete,
00022 kCmdDeleteP,
00023 kCmdExec,
00024 kCmdFit,
00025 kCmdGuess,
00026 kCmdInfo,
00027 kCmdPlot,
00028 kCmdPrint,
00029 kCmdQuit,
00030 kCmdReset,
00031 kCmdSet,
00032 kCmdSleep,
00033 kCmdTitle,
00034 kCmdUndef,
00035 kCmdUse,
00036 kCmdShell,
00037 kCmdLoad,
00038 kCmdDatasetTr,
00039 kCmdNameFunc,
00040 kCmdNameVar,
00041 kCmdAssignParam,
00042
00043 kCmdChangeModel,
00044 kCmdPointTr,
00045 kCmdAllPointsTr,
00046 kCmdResizeP,
00047 kCmdNull
00048 };
00049
00050 struct Command
00051 {
00052 CommandType type;
00053 std::vector<Token> args;
00054 Tplate::Ptr defined_tp;
00055 };
00056
00057 struct Statement
00058 {
00059 std::vector<int> datasets;
00060 std::vector<Token> with_args;
00061 std::vector<Command> commands;
00062 std::vector<VMData> vdlist;
00063 };
00064
00065
00066 extern const char* command_list[];
00067 extern const char* info_args[];
00068 extern const char* debug_args[];
00069
00070 const char* commandtype2str(CommandType c);
00071
00072 class Parser
00073 {
00074 public:
00075 Parser(const Ftk* F);
00076 ~Parser();
00077
00078
00079
00080 bool parse_statement(Lexer& lex);
00081
00082 Statement& statement() { return st_; }
00083
00084
00085 bool check_syntax(const std::string& str);
00086
00087
00088 std::string get_statements_repr() const;
00089
00090
00091 void parse_info_args(Lexer& lex, std::vector<Token>& args);
00092 void parse_print_args(Lexer& lex, std::vector<Token>& args);
00093 void parse_define_rhs(Lexer& lex, Tplate *tp);
00094 Tplate::Ptr parse_define_args(Lexer& lex);
00095
00096 private:
00097 const Ftk* F_;
00098 ExpressionParser ep_;
00099 Statement st_;
00100
00101 Token read_expr(Lexer& lex,
00102 ExpressionParser::ParseMode mode=ExpressionParser::kNormalMode);
00103 Token read_and_calc_expr(Lexer& lex);
00104 Token read_var(Lexer& lex);
00105 Token read_define_arg(Lexer& lex,
00106 const std::vector<std::string>& allowed_names,
00107 std::vector<std::string> *new_names);
00108 Token read_default_value(Lexer& lex);
00109 void parse_fz(Lexer& lex, Command &cmd);
00110 void parse_assign_func(Lexer& lex, std::vector<Token>& args);
00111 void parse_command(Lexer& lex, Command& cmd);
00112 void parse_component(Lexer& lex, const std::vector<std::string>& lhs_vars,
00113 Tplate::Component* c);
00114 void parse_set_args(Lexer& lex, std::vector<Token>& args);
00115 CommandType parse_xysa_args(Lexer& lex, std::vector<Token>& args);
00116 void parse_real_range(Lexer& lex, std::vector<Token>& args);
00117 void parse_func_id(Lexer& lex, std::vector<Token>& args, bool accept_fz);
00118 void parse_guess_args(Lexer& lex, std::vector<Token>& args);
00119 void parse_one_info_arg(Lexer& lex, std::vector<Token>& args);
00120 void parse_fit_args(Lexer& lex, std::vector<Token>& args);
00121 };
00122
00123 #endif //FITYK_CPARSER_H_