Aprepro  5.0x
SEAMS::Aprepro Class Reference

#include <aprepro.h>

Collaboration diagram for SEAMS::Aprepro:

Public Types

enum  SYMBOL_TYPE {
  SYMBOL_TYPE::VARIABLE = 1, SYMBOL_TYPE::STRING_VARIABLE = 2, SYMBOL_TYPE::UNDEFINED_VARIABLE = 5, SYMBOL_TYPE::FUNCTION = 3,
  SYMBOL_TYPE::STRING_FUNCTION = 4, SYMBOL_TYPE::ARRAY_FUNCTION = 6, SYMBOL_TYPE::ARRAY_VARIABLE = 7, SYMBOL_TYPE::IMMUTABLE_VARIABLE = 11,
  SYMBOL_TYPE::IMMUTABLE_STRING_VARIABLE = 12
}
 

Public Member Functions

 Aprepro ()
 construct a new parser aprepro context More...
 
 ~Aprepro ()
 
bool state_is_immutable () const
 
const std::ostringstream & parsing_results () const
 
void clear_results ()
 
std::string version () const
 
bool parse_stream (std::istream &in, const std::string &in_name="stream input")
 
bool parse_string (const std::string &input, const std::string &sname="string stream")
 
bool parse_strings (const std::vector< std::string > &input, const std::string &sname)
 
bool parse_string_interactive (const std::string &input)
 
bool string_interactive ()
 
bool parse_file (const std::string &filename)
 
void statistics (std::ostream *out=nullptr) const
 
SEAMS::symrecgetsym (const char *sym_name) const
 
SEAMS::symrecgetsym (const std::string &sym_name) const
 
SEAMS::symrecputsym (const std::string &sym_name, SYMBOL_TYPE sym_type, bool is_internal)
 
void add_variable (const std::string &sym_name, const std::string &sym_value, bool immutable=false, bool internal=false)
 
void add_variable (const std::string &sym_name, double sym_value, bool immutable=false, bool internal=false)
 
void add_variable (const std::string &sym_name, array *value)
 
std::vector< std::string > get_variable_names (bool doInternal=false)
 
void remove_variable (const std::string &sym_name)
 
int set_option (const std::string &option, const std::string &optional_value=std::string(""))
 
std::fstream * open_file (const std::string &file, const char *mode)
 
std::fstream * check_open_file (const std::string &file, const char *mode)
 
int get_error_count () const
 
void error (const std::string &msg, bool line_info=true, bool prefix=true) const
 
void warning (const std::string &msg, bool line_info=true, bool prefix=true) const
 
void info (const std::string &msg, bool line_info=false, bool prefix=true) const
 
void set_error_streams (std::ostream *c_error, std::ostream *c_warning, std::ostream *c_info)
 
void dumpsym (const char *type, bool doInternal) const
 
void dumpsym (int type, bool doInternal) const
 
void dumpsym (int type, const char *pre, bool doInternal) const
 
void add_history (const std::string &original, const std::string &substitution)
 
const std::vector< history_data > & get_history ()
 
void clear_history ()
 

Public Attributes

aprepro_options ap_options
 
std::stack< file_recap_file_list
 
std::stack< std::ostream * > outputStream
 
class Scannerlexer {nullptr}
 
std::ostream * infoStream {&std::cout}
 
bool stateImmutable {false}
 
bool doLoopSubstitution {true}
 
bool doIncludeSubstitution {true}
 
bool isCollectingLoop {false}
 
bool inIfdefGetvar {false}
 

Private Member Functions

void init_table (const char *comment)
 

Private Attributes

std::vector< symrec * > sym_table
 
std::ostringstream parsingResults
 
std::istringstream stringInput
 
bool stringInteractive {false}
 
class ScannerstringScanner {nullptr}
 
std::ostream * errorStream {&std::cerr}
 
std::ostream * warningStream {&std::cerr}
 
std::vector< history_datahistory
 
int parseErrorCount {0}
 

Detailed Description

The Aprepro class brings together all components. It creates an instance of the Parser and Scanner classes and connects them. Then the input stream is fed into the scanner object and the parser gets it's token sequence. Furthermore the aprepro object is available in the grammar rules as a parameter. Therefore the aprepro class contains a reference to the structure into which the parsed data is saved.

Member Enumeration Documentation

◆ SYMBOL_TYPE

Enumerator
VARIABLE 
STRING_VARIABLE 
UNDEFINED_VARIABLE 
FUNCTION 
STRING_FUNCTION 
ARRAY_FUNCTION 
ARRAY_VARIABLE 
IMMUTABLE_VARIABLE 
IMMUTABLE_STRING_VARIABLE 

Constructor & Destructor Documentation

◆ Aprepro()

SEAMS::Aprepro::Aprepro ( )

construct a new parser aprepro context

◆ ~Aprepro()

SEAMS::Aprepro::~Aprepro ( )

Member Function Documentation

◆ add_history()

void SEAMS::Aprepro::add_history ( const std::string &  original,
const std::string &  substitution 
)

◆ add_variable() [1/3]

void SEAMS::Aprepro::add_variable ( const std::string &  sym_name,
array value 
)

◆ add_variable() [2/3]

void SEAMS::Aprepro::add_variable ( const std::string &  sym_name,
const std::string &  sym_value,
bool  immutable = false,
bool  internal = false 
)

◆ add_variable() [3/3]

void SEAMS::Aprepro::add_variable ( const std::string &  sym_name,
double  sym_value,
bool  immutable = false,
bool  internal = false 
)

◆ check_open_file()

std::fstream * SEAMS::Aprepro::check_open_file ( const std::string &  file,
const char *  mode 
)

◆ clear_history()

void SEAMS::Aprepro::clear_history ( )

◆ clear_results()

void SEAMS::Aprepro::clear_results ( )

◆ dumpsym() [1/3]

void SEAMS::Aprepro::dumpsym ( const char *  type,
bool  doInternal 
) const

◆ dumpsym() [2/3]

void SEAMS::Aprepro::dumpsym ( int  type,
bool  doInternal 
) const

◆ dumpsym() [3/3]

void SEAMS::Aprepro::dumpsym ( int  type,
const char *  pre,
bool  doInternal 
) const

◆ error()

void SEAMS::Aprepro::error ( const std::string &  msg,
bool  line_info = true,
bool  prefix = true 
) const

Return number of errors reported during parse

◆ get_error_count()

int SEAMS::Aprepro::get_error_count ( ) const
inline

Error handling.

◆ get_history()

const std::vector< history_data > & SEAMS::Aprepro::get_history ( )

◆ get_variable_names()

std::vector< std::string > SEAMS::Aprepro::get_variable_names ( bool  doInternal = false)

◆ getsym() [1/2]

symrec * SEAMS::Aprepro::getsym ( const char *  sym_name) const

◆ getsym() [2/2]

symrec * SEAMS::Aprepro::getsym ( const std::string &  sym_name) const

◆ info()

void SEAMS::Aprepro::info ( const std::string &  msg,
bool  line_info = false,
bool  prefix = true 
) const

◆ init_table()

void SEAMS::Aprepro::init_table ( const char *  comment)
private

◆ open_file()

std::fstream * SEAMS::Aprepro::open_file ( const std::string &  file,
const char *  mode 
)

◆ parse_file()

bool SEAMS::Aprepro::parse_file ( const std::string &  filename)

Invoke the scanner and parser on a file. Use parse_stream with a std::ifstream if detection of file reading errors is required.

Parameters
filenameinput file name
Returns
true if successfully parsed

◆ parse_stream()

bool SEAMS::Aprepro::parse_stream ( std::istream &  in,
const std::string &  in_name = "stream input" 
)

Invoke the scanner and parser for a stream.

Parameters
ininput stream
in_namestream name for error messages
Returns
true if successfully parsed

◆ parse_string()

bool SEAMS::Aprepro::parse_string ( const std::string &  input,
const std::string &  sname = "string stream" 
)

Invoke the scanner and parser on an input string.

Parameters
inputinput string
snamestream name for error messages
Returns
true if successfully parsed

◆ parse_string_interactive()

bool SEAMS::Aprepro::parse_string_interactive ( const std::string &  input)

Invoke the scanner and parser on an input string in an interactive manner.

Parameters
inputinput stringInput
Returns
true if successfully parsed

◆ parse_strings()

bool SEAMS::Aprepro::parse_strings ( const std::vector< std::string > &  input,
const std::string &  sname 
)

Invoke the scanner and parser on a vector of strings.

Parameters
inputvector of input strings
snamestream name for error messages
Returns
true if successfully parsed

◆ parsing_results()

const std::ostringstream& SEAMS::Aprepro::parsing_results ( ) const
inline

Return an std::ostringstream reference to get the results of the parse_* call (* = stream, file, or string).

◆ putsym()

symrec * SEAMS::Aprepro::putsym ( const std::string &  sym_name,
SYMBOL_TYPE  sym_type,
bool  is_internal 
)

◆ remove_variable()

void SEAMS::Aprepro::remove_variable ( const std::string &  sym_name)

◆ set_error_streams()

void SEAMS::Aprepro::set_error_streams ( std::ostream *  c_error,
std::ostream *  c_warning,
std::ostream *  c_info 
)

◆ set_option()

int SEAMS::Aprepro::set_option ( const std::string &  option,
const std::string &  optional_value = std::string("") 
)

◆ state_is_immutable()

bool SEAMS::Aprepro::state_is_immutable ( ) const
inline

◆ statistics()

void SEAMS::Aprepro::statistics ( std::ostream *  out = nullptr) const

◆ string_interactive()

bool SEAMS::Aprepro::string_interactive ( )
inline

Get the string interactive flag, which indicates if we are in the middle of parsing a string in an interactive manner.

◆ version()

std::string SEAMS::Aprepro::version ( ) const

Return string representation of current version of aprepro.

◆ warning()

void SEAMS::Aprepro::warning ( const std::string &  msg,
bool  line_info = true,
bool  prefix = true 
) const

Member Data Documentation

◆ ap_file_list

std::stack<file_rec> SEAMS::Aprepro::ap_file_list

◆ ap_options

aprepro_options SEAMS::Aprepro::ap_options

◆ doIncludeSubstitution

bool SEAMS::Aprepro::doIncludeSubstitution {true}

◆ doLoopSubstitution

bool SEAMS::Aprepro::doLoopSubstitution {true}

◆ errorStream

std::ostream* SEAMS::Aprepro::errorStream {&std::cerr}
private

◆ history

std::vector<history_data> SEAMS::Aprepro::history
private

◆ infoStream

std::ostream* SEAMS::Aprepro::infoStream {&std::cout}

◆ inIfdefGetvar

bool SEAMS::Aprepro::inIfdefGetvar {false}
mutable

◆ isCollectingLoop

bool SEAMS::Aprepro::isCollectingLoop {false}

◆ lexer

class Scanner* SEAMS::Aprepro::lexer {nullptr}

Pointer to the current lexer instance, this is used to connect the parser to the scanner. It is used in the yylex macro.

◆ outputStream

std::stack<std::ostream *> SEAMS::Aprepro::outputStream

◆ parseErrorCount

int SEAMS::Aprepro::parseErrorCount {0}
mutableprivate

◆ parsingResults

std::ostringstream SEAMS::Aprepro::parsingResults
private

◆ stateImmutable

bool SEAMS::Aprepro::stateImmutable {false}

◆ stringInput

std::istringstream SEAMS::Aprepro::stringInput
private

◆ stringInteractive

bool SEAMS::Aprepro::stringInteractive {false}
private

◆ stringScanner

class Scanner* SEAMS::Aprepro::stringScanner {nullptr}
private

◆ sym_table

std::vector<symrec *> SEAMS::Aprepro::sym_table
private

◆ warningStream

std::ostream* SEAMS::Aprepro::warningStream {&std::cerr}
private

The documentation for this class was generated from the following files: