00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef parser_h
00019 #define parser_h
00020
00021 #include <map>
00022 #include "agenda_class.h"
00023 #include "sourcetext.h"
00024 #include "methods.h"
00025
00026
00027 class ArtsParser {
00028 public:
00029 ArtsParser(Agenda& tasklist, String controlfile);
00030
00031 void parse_tasklist ();
00032
00033 private:
00034 void parse_main();
00035
00036 void parse_agenda(Agenda& tasklist);
00037
00038 void parse_method(Index& id,
00039 ArrayOfIndex& output,
00040 ArrayOfIndex& input,
00041 Agenda& tasks,
00042 ArrayOfIndex& auto_vars,
00043 Array<TokVal>& auto_vars_values,
00044 String& include_file,
00045 bool no_eot=false);
00046
00047 void parse_generic_input(const MdRecord*& mdd,
00048 Index& id,
00049 String& methodname,
00050 ArrayOfIndex& input,
00051 ArrayOfIndex& auto_vars,
00052 Array<TokVal>& auto_vars_values,
00053 bool& first,
00054 bool& still_supergeneric,
00055 String& supergeneric_args,
00056 Index& supergeneric_index);
00057
00058 void parse_generic_output(const MdRecord*& mdd,
00059 Index& id,
00060 String& methodname,
00061 ArrayOfIndex& output,
00062 bool& first,
00063 bool& still_supergeneric,
00064 String& supergeneric_args,
00065 Index& supergeneric_index);
00066
00067 void parse_specific_input(const MdRecord* mdd,
00068 ArrayOfIndex& input,
00069 ArrayOfIndex& auto_vars,
00070 Array<TokVal>& auto_vars_values,
00071 bool& first);
00072
00073 void parse_specific_output(const MdRecord* mdd,
00074 ArrayOfIndex& output,
00075 bool& first);
00076
00077 void parse_method_args(const MdRecord*& mdd,
00078 Index& id,
00079 String& methodname,
00080 ArrayOfIndex& output,
00081 ArrayOfIndex& input,
00082 ArrayOfIndex& auto_vars,
00083 Array<TokVal>& auto_vars_values);
00084
00085 String set_gin_to_default(const MdRecord* mdd,
00086 ArrayOfIndex& auto_vars,
00087 Array<TokVal>& auto_vars_values,
00088 Index keyword_index);
00089
00090 void tasklist_insert_set_delete(const ArrayOfIndex& auto_vars,
00091 const Array<TokVal>& auto_vars_values,
00092 const Index method_type,
00093 Agenda& tasklist);
00094
00095 bool is_whitespace(const char c);
00096
00097 void eat_whitespace();
00098
00099 void eat_whitespace_from_string(String& str, size_t& pos);
00100
00101 void read_name(String& name);
00102
00103 Index read_name_or_value( String& name,
00104 ArrayOfIndex& auto_vars,
00105 Array<TokVal>& auto_vars_values,
00106 const String& default_name,
00107 const MdRecord* mdd,
00108 const Index group);
00109
00110 void assertain_character(char c);
00111
00112 void parse_String(String& res);
00113
00114 void read_integer(String& res);
00115
00116 void read_numeric(String& res);
00117
00118 void parse_integer(Index& n);
00119
00120 void parse_numeric(Numeric& n);
00121
00122 void parse_Stringvector(ArrayOfString& res);
00123
00124 void parse_intvector(ArrayOfIndex& res);
00125
00126 void parse_numvector(Vector& res);
00127
00128 bool parse_numvector_from_string (Vector& res, String& str);
00129
00130 bool parse_stringarray_from_string (ArrayOfString& res, String& str);
00131
00132 Agenda& mtasklist;
00133
00134 String mcfile;
00135
00136 SourceText msource;
00137
00138 Index mcfile_version;
00139 };
00140
00141 #endif
00142