- Tokenizer::Token t(GetToken());
- tok.Putback(t);
- if (BeginOfPropertyList(t)) {
- auto_ptr<PropertyList> propertyList(ParsePropertyList());
- auto_ptr<Definition> dfn(new Definition(typeName, identifier));
- dfn->SetValue(propertyList.release());
- product.AddDefinition(dfn.get());
- return dfn.release();
- } else if (BeginningOfLiteral(t)) {
- auto_ptr<Literal> literal(ParseLiteral());
- auto_ptr<Definition> dfn(new Definition(typeName, identifier));
- dfn->SetValue(literal.release());
- product.AddDefinition(dfn.get());
- return dfn.release();
- } else {
- return new Declaration(typeName, identifier);
+ if (tok.HasMore()) {
+ Tokenizer::Token t(GetToken());
+ tok.Putback(t);
+ if (BeginOfPropertyList(t)) {
+ auto_ptr<PropertyList> propertyList(ParsePropertyList());
+ auto_ptr<Definition> dfn(new Definition(typeName, identifier));
+ dfn->SetValue(propertyList.release());
+ product.AddDefinition(dfn.get());
+ return dfn.release();
+ } else if (BeginningOfPrimitiveLiteral(t)) {
+ auto_ptr<Literal> literal(ParseLiteral());
+ auto_ptr<Definition> dfn(new Definition(typeName, identifier));
+ dfn->SetValue(literal.release());
+ product.AddDefinition(dfn.get());
+ return dfn.release();
+ }