Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

Parser Class Reference

#include <parser.h>

Collaboration diagram for Parser:

Collaboration graph
List of all members.

Public Member Functions

 Parser (Tokenizer *)
ArrayreadArray ()
HashreadHash ()
ValuereadValue ()

Private Attributes

Tokenizertokenizer

Constructor & Destructor Documentation

Parser::Parser Tokenizer  ) 
 

Definition at line 115 of file parser.cpp.

00115                                     :
00116     tokenizer(_tokenizer)
00117 {
00118 }


Member Function Documentation

Array * Parser::readArray  ) 
 

Definition at line 121 of file parser.cpp.

References Tokenizer::nextToken(), Tokenizer::pushBack(), readValue(), and tokenizer.

Referenced by readValue().

00122 {
00123     Tokenizer::TokenType tok = tokenizer->nextToken();
00124     if (tok != Tokenizer::TokenBeginArray)
00125     {
00126         tokenizer->pushBack();
00127         return NULL;
00128     }
00129 
00130     Array* array = new Array();
00131 
00132     Value* v = readValue();
00133     while (v != NULL)
00134     {
00135         array->insert(array->end(), v);
00136         v = readValue();
00137     }
00138     
00139     tok = tokenizer->nextToken();
00140     if (tok != Tokenizer::TokenEndArray)
00141     {
00142         tokenizer->pushBack();
00143         delete array;
00144         return NULL;
00145     }
00146 
00147     return array;
00148 }

Hash * Parser::readHash  ) 
 

Definition at line 151 of file parser.cpp.

References AssociativeArray::addValue(), Tokenizer::getNameValue(), Tokenizer::nextToken(), Tokenizer::pushBack(), readValue(), and tokenizer.

Referenced by readValue().

00152 {
00153     Tokenizer::TokenType tok = tokenizer->nextToken();
00154     if (tok != Tokenizer::TokenBeginGroup)
00155     {
00156         tokenizer->pushBack();
00157         return NULL;
00158     }
00159 
00160     Hash* hash = new Hash();
00161 
00162     tok = tokenizer->nextToken();
00163     while (tok != Tokenizer::TokenEndGroup)
00164     {
00165         if (tok != Tokenizer::TokenName)
00166         {
00167             tokenizer->pushBack();
00168             delete hash;
00169             return NULL;
00170         }
00171         string name = tokenizer->getNameValue();
00172 
00173         Value* value = readValue();
00174         if (value == NULL)
00175         {
00176             delete hash;
00177             return NULL;
00178         }
00179         
00180         hash->addValue(name, *value);
00181 
00182         tok = tokenizer->nextToken();
00183     }
00184 
00185     return hash;
00186 }

Value * Parser::readValue  ) 
 

Definition at line 189 of file parser.cpp.

References Tokenizer::getNameValue(), Tokenizer::getNumberValue(), Tokenizer::getStringValue(), Tokenizer::nextToken(), Tokenizer::pushBack(), readArray(), readHash(), and tokenizer.

Referenced by StarDatabase::load(), DSODatabase::load(), LoadCelestiaMesh(), LoadSolarSystemObjects(), LoadVirtualTexture(), CommandParser::parseCommand(), readArray(), ReadAsterismList(), ReadCelestiaConfig(), ReadDestinationList(), ReadFavoritesList(), and readHash().

00190 {
00191     Tokenizer::TokenType tok = tokenizer->nextToken();
00192     switch (tok)
00193     {
00194     case Tokenizer::TokenNumber:
00195         return new Value(tokenizer->getNumberValue());
00196 
00197     case Tokenizer::TokenString:
00198         return new Value(tokenizer->getStringValue());
00199 
00200     case Tokenizer::TokenName:
00201         if (tokenizer->getNameValue() == "false")
00202             return new Value(false);
00203         else if (tokenizer->getNameValue() == "true")
00204             return new Value(true);
00205         else
00206         {
00207             tokenizer->pushBack();
00208             return NULL;
00209         }
00210 
00211     case Tokenizer::TokenBeginArray:
00212         tokenizer->pushBack();
00213         {
00214             Array* array = readArray();
00215             if (array == NULL)
00216                 return NULL;
00217             else
00218                 return new Value(array);
00219         }
00220 
00221     case Tokenizer::TokenBeginGroup:
00222         tokenizer->pushBack();
00223         {
00224             Hash* hash = readHash();
00225             if (hash == NULL)
00226                 return NULL;
00227             else
00228                 return new Value(hash);
00229         }
00230 
00231     default:
00232         tokenizer->pushBack();
00233         return NULL;
00234     }
00235 }


Member Data Documentation

Tokenizer* Parser::tokenizer [private]
 

Definition at line 96 of file parser.h.

Referenced by readArray(), readHash(), and readValue().


The documentation for this class was generated from the following files:
Generated on Sat Jan 14 22:33:30 2006 for Celestia by  doxygen 1.4.1