ParserMode(i, s),
first(true)
{
- dict[1]=DictEntry("__kwd", "iss");
- dict[2]=DictEntry("__str", "is");
+ dict[1] = DictEntry("__kwd", "iss");
+ dict[2] = DictEntry("__str", "is");
}
Statement BinaryParser::parse()
{
while(1)
{
- Statement st=parse_statement();
+ Statement st = parse_statement();
if(st.keyword=="__kwd")
{
if(st.args.size()!=3)
throw_at(TypeError("Keyword definition must have three arguments"), src);
- const unsigned id=st.args[0].get<unsigned>();
- const string &kw=st.args[1].get<const string &>();
- const string &args=st.args[2].get<const string &>();
- dict[id]=DictEntry(kw, args);
+ const unsigned id = st.args[0].get<unsigned>();
+ const string &kw = st.args[1].get<const string &>();
+ const string &args = st.args[2].get<const string &>();
+ dict[id] = DictEntry(kw, args);
}
else if(st.keyword=="__str")
{
if(st.args.size()!=2)
throw_at(TypeError("String definition must have two arguments"), src);
- const unsigned id=st.args[0].get<unsigned>();
- strings[id]=st.args[1].get<const string &>();
+ const unsigned id = st.args[0].get<unsigned>();
+ strings[id] = st.args[1].get<const string &>();
}
else
return st;
{
while(first && in.peek()=='\n')
in.get();
- first=false;
+ first = false;
- unsigned id=parse_int();
+ unsigned id = parse_int();
if(!in)
return Statement();
- Dictionary::const_iterator i=dict.find(id);
+ Dictionary::const_iterator i = dict.find(id);
if(i==dict.end())
throw_at(KeyError("Unknown statement ID", lexical_cast(id)), src);
- const DictEntry &de=i->second;
+ const DictEntry &de = i->second;
Statement result;
- result.keyword=de.keyword;
- result.source=src;
+ result.keyword = de.keyword;
+ result.source = src;
- for(unsigned j=0; j<de.args.size(); ++j)
+ for(unsigned j = 0; j<de.args.size(); ++j)
{
switch(de.args[j])
{
- case 'i':
+ case IntType::signature:
result.args.push_back(parse_int());
break;
- case 'f':
+ case FloatType::signature:
result.args.push_back(parse_float());
break;
- case 's':
+ case StringType::signature:
result.args.push_back(parse_string());
break;
- case 'b':
+ case BoolType::signature:
result.args.push_back(parse_bool());
break;
- case 'e':
- result.args.push_back(Value(ENUM, parse_enum()));
+ case SymbolType::signature:
+ result.args.push_back(Symbol(parse_enum()));
break;
}
}
- unsigned nsub=parse_int();
- for(unsigned j=0; j<nsub; ++j)
+ unsigned nsub = parse_int();
+ for(unsigned j = 0; j<nsub; ++j)
result.sub.push_back(parse());
- result.valid=true;
+ result.valid = true;
return result;
}
long long BinaryParser::parse_int()
{
- long long result=0;
- unsigned bits=0;
+ long long result = 0;
+ unsigned bits = 0;
while(in)
{
- int c=in.get();
+ int c = in.get();
- result=(result<<7) | (c&0x7F);
- bits+=7;
+ result = (result<<7) | (c&0x7F);
+ bits += 7;
if(!(c&0x80))
break;
}
- const long long mask=1LL<<(bits-1);
- result=(result^mask)-mask;
+ const long long mask = 1LL<<(bits-1);
+ result = (result^mask)-mask;
return result;
}
};
#if BYTE_ORDER == LITTLE_ENDIAN
- for(unsigned i=sizeof(float); i--;)
- d[i]=in.get();
+ for(unsigned i = sizeof(float); i--;)
+ d[i] = in.get();
#else
- for(unsigned i=0; i<sizeof(float); ++i)
- d[i]=in.get();
+ for(unsigned i = 0; i<sizeof(float); ++i)
+ d[i] = in.get();
#endif
return f;
string BinaryParser::parse_string()
{
- int len=parse_int();
+ int len = parse_int();
if(len>=0)
{
string result;
result.reserve(len);
- for(int i=0; i<len; ++i)
- result+=in.get();
+ for(int i = 0; i<len; ++i)
+ result += in.get();
return result;
}
else
const string &BinaryParser::lookup_string(unsigned id) const
{
- StringMap::const_iterator i=strings.find(id);
+ StringMap::const_iterator i = strings.find(id);
if(i==strings.end())
throw_at(KeyError("Unknown string", lexical_cast(id)), src);
return i->second;