- while(1)
- {
- Statement st = parse_statement();
- if(st.keyword=="__kwd")
- {
- int id = st.args[0].get<int>();
- if(id<=0)
- throw bad_definition("__kwd");
-
- const string &kw = st.args[1].get<const string &>();
- const string &args = st.args[2].get<const string &>();
- for(string::const_iterator i=args.begin(); i!=args.end(); ++i)
- for(unsigned j=0; valid_signatures[j]!=*i; ++j)
- if(!valid_signatures[j])
- throw bad_definition("__kwd");
-
- dict[id] = DictEntry(kw, args);
- }
- else if(st.keyword=="__str")
- {
- int id = st.args[0].get<int>();
- if(id<=0)
- throw bad_definition("__str");
-
- strings[id] = st.args[1].get<const string &>();
- }
- else if(st.keyword=="__flt")
- float_precision = st.args[0].get<unsigned>();
- else
- return st;
- }
-}
-
-Statement BinaryParser::parse_statement()
-{
- while(first && in.peek()=='\n')
- in.get();
- first = false;
-