All pastes #2124697 Raw Edit

No error???

public text v1 · immutable
#2124697 ·published 2012-03-05 22:27 UTC
rendered paste body
/*
 Parsegen stuff.
*/

/*
Line Tracking and Error Control
*/
class Location
{
public:
 size_t line_number;
 size_t column_number;

 void error( const char *str );
};

/*
Structures used to store config data.
*/
class nstack
{
public:
 nstack( void );
 ~nstack( void );

 bool top( void );
 bool all_true( void );
 bool empty( void );
 size_t size( void );
 void pop( void );
 void push(bool data);

private:
 vector<bool> data;
};

namespace variable
{
 typedef enum { NT, UC, US, UD, SC, SS, SD, LT } ctype;
 typedef enum { none, single, quoted, mult, mult_packed, ptr } storage_format;

 static struct
{
  const char *CTypeSpace;
  const char *CTypeUnderscore;
  char FormatChar;
  bool Signed;
} info[7] =
{
{ "", "", 0, false },
{ "unsigned char", "unsigned_char", 'u', false },
{ "unsigned short", "unsigned_short", 'u', false },
{ "unsigned int", "unsigned_int", 'u', false },
{ "char", "char", 'd', true },
{ "short", "short", 'd', true },
{ "int", "int", 'd', true }
};

 typedef struct
{
  string name;
  storage_format format;
  ctype type;
  size_t length;
  string dependancy;
  string comment;
  bool operator==(const string& name) const;
} config_data_element;

 typedef vector<config_data_element> config_data_array;

 ctype GetCType( const char *str );

 static class ConfigData
{
private:
  config_data_array data_array;

  bool duplicate_name( string &name );

public:
  void add_comment( string comment );
  void add_var_single( string &name, ctype type, string dependancy, string comment );
  void add_var_single( string &name, const char *type, string dependancy, string comment );
  void add_var_quoted( string &name, string dependancy, string comment );
  void add_var_mult( string &name, ctype type, size_t length, string dependancy, string comment );
  void add_var_mult( string &name, const char *type, size_t length, string dependancy, string comment );
  void add_var_packed( string &name, size_t length, string dependancy, string comment );
  void add_var_ptr( string &name, ctype type, size_t length, string dependancy, string comment );
  void add_var_ptr( string &name, const char *type, size_t length, string dependancy, string comment );
  bool ctype_mult_used( ctype type );
  bool ctype_ptr_used( ctype type );
  bool packed_used( void );
  bool quoted_used( void );
  bool unsigned_used( void );
  config_data_array::iterator begin( void );
  config_data_array::iterator end( void );
} config_data;

}

/* Convert asm types to C types. */
const char *convert_asm_type( const char *str, bool unsigned_var );
void output_parser_start( ostream &c_stream, string &cheader_file );
void output_cheader_start( ostream &cheader_stream );
void output_cheader_end( ostream &cheader_stream );
void output_extsym_dependancies( ostream &c_stream );
void output_init_var( ostream &c_stream );
void output_packed_write( ostream &c_stream );
void output_array_write( ostream &c_stream, variable::ctype type );
void output_write_var( ostream &c_stream );
void output_packed_read( ostream &c_stream );
void output_array_read( ostream &c_stream, variable::ctype type );
void output_read_var( ostream &c_stream );
void handle_directive( const char *instruction, const char *label );
/* Return the comment from global line variable. */
char *get_comment( char comment_seperator );
void output_parser_comment( ostream &c_stream, const char *comment );
void output_header_conditional( ostream &cheader_stream, const char *instruction, const char *label );
void parser_generate( istream &psr_stream, ostream &c_stream, ostream &cheader_stream, string cheader_file );