Mlaskal compiler support classes
Classes | Typedefs | Enumerations | Functions
mlc Namespace Reference

Classes

class  abstract_symbol
 abstract symbol representation More...
 
class  abstract_type
 abstract entry for a type More...
 
class  array_type
 entry for an (one-dimensional) array type More...
 
class  bool_const_symbol
 representation of a named boolean constant More...
 
class  bool_type
 entry for the 'boolean' type (singleton) More...
 
class  const_symbol
 common base of all named constant representations More...
 
class  field_entry
 record field More...
 
class  field_list_body
 list of record fields More...
 
struct  file_data
 
class  function_symbol
 representation of a function More...
 
class  global_variable_symbol
 global variable representation More...
 
class  int_const_symbol
 representation of a named integer constant More...
 
class  int_type
 entry for the 'integer' type (singleton) More...
 
class  integral_type
 common base for integer and range type entries More...
 
class  label_entry
 
class  label_symbol
 label entry More...
 
class  local_symbol_tables
 
class  local_variable_symbol
 local variable representation More...
 
class  ls_index_comparator
 
class  MlaskalCtx
 structure for bison context More...
 
class  parameter_by_reference_symbol
 representation of a parameter passed by reference ('var') More...
 
struct  parameter_entry
 function or procedure parameter entry More...
 
class  parameter_list_body
 list of function or procedure parameters More...
 
class  procedure_symbol
 representation of a procedure More...
 
class  range_type
 entry for a range type More...
 
class  real_const_symbol
 representation of a named real constant More...
 
class  real_type
 entry for the 'real' type (singleton) More...
 
class  record_type
 entry for a record type More...
 
class  str_const_symbol
 representation of a named string constant More...
 
class  str_type
 entry for the 'string' type (singleton) More...
 
class  subprogram_symbol
 common base of procedure and function entries More...
 
class  symbol_entry
 
class  symbol_tables
 all symbol tables together More...
 
class  type_entry
 
class  type_symbol
 representation of a named type More...
 
class  typed_symbol
 common base of all symbol entries that have a type More...
 
class  variable_symbol
 common base of all variable representations More...
 

Typedefs

typedef mlaskal::dumb_pointer< array_typearray_type_pointer
 pointer to an array_type entry More...
 
typedef mlaskal::dumb_pointer< bool_const_symbolbool_const_symbol_pointer
 pointer to a representation of a named boolean constant More...
 
typedef mlaskal::dumb_pointer< bool_typebool_type_pointer
 pointer to an bool_type entry More...
 
typedef mlaskal::dumb_pointer< const_symbolconst_symbol_reference
 pointer to const_symbol entry More...
 
typedef mlaskal::dumb_pointer< const field_list_bodyfield_list_const_ptr
 parameter list - read-only observer pointer More...
 
typedef std::shared_ptr< field_list_bodyfield_list_ptr
 parameter list - owner pointer More...
 
typedef mlaskal::dumb_pointer< const field_entryfield_pointer
 pointer to an field_entry More...
 
typedef std::vector< field_entryfield_vector
 
typedef mlaskal::dumb_pointer< function_symbolfunction_symbol_pointer
 pointer to function_symbol entry More...
 
typedef mlaskal::dumb_pointer< global_variable_symbolglobal_variable_symbol_pointer
 pointer to global_variable_symbol entry More...
 
typedef mlaskal::abstract_functions::iterator ic_function_pointer
 intermediate code label More...
 
typedef mlaskal::labeled_icblock::label_type ic_label
 intermediate code label More...
 
typedef std::shared_ptr< mlaskal::labeled_icblockicblock_pointer
 intermediate code block More...
 
typedef mlaskal::dumb_pointer< int_const_symbolint_const_symbol_pointer
 pointer to a representation of a named integer constant More...
 
typedef mlaskal::dumb_pointer< int_typeint_type_pointer
 pointer to an int_type entry More...
 
typedef std::map< ls_int_index, label_entry, ls_index_comparator< int, false > > label_map
 
typedef mlaskal::dumb_pointer< label_symbollabel_symbol_pointer
 pointer to a label entry More...
 
typedef mlaskal::dumb_pointer< local_variable_symbollocal_variable_symbol_pointer
 pointer to local_variable_symbol entry More...
 
typedef ls_id_type::const_pointer ls_id_index
 identifier index More...
 
typedef mlaskal::lit_storage< std::string, true > ls_id_type
 identifier storage type More...
 
typedef ls_int_type::const_pointer ls_int_index
 integer literal index More...
 
typedef mlaskal::lit_storage< int, false > ls_int_type
 integer literal storage type More...
 
typedef ls_real_type::const_pointer ls_real_index
 real literal index More...
 
typedef mlaskal::lit_storage< double, false > ls_real_type
 real literal storage type More...
 
typedef ls_str_type::const_pointer ls_str_index
 string literal index More...
 
typedef mlaskal::lit_storage< std::string, false > ls_str_type
 string literal storage type More...
 
typedef mlaskal::dumb_pointer< parameter_by_reference_symbolparameter_by_reference_symbol_pointer
 pointer to parameter_by_reference_symbol entry More...
 
typedef mlaskal::dumb_pointer< const parameter_list_bodyparameter_list_const_ptr
 parameter list - read-only observer pointer More...
 
typedef std::shared_ptr< parameter_list_bodyparameter_list_ptr
 parameter list - owner pointer More...
 
typedef std::vector< parameter_entryparameter_vector
 
typedef mlaskal::dumb_pointer< procedure_symbolprocedure_symbol_pointer
 pointer to procedure_symbol entry More...
 
typedef mlaskal::dumb_pointer< range_typerange_type_pointer
 pointer to an range_type entry More...
 
typedef mlaskal::dumb_pointer< real_const_symbolreal_const_symbol_pointer
 pointer to a representation of a named real constant More...
 
typedef mlaskal::dumb_pointer< real_typereal_type_pointer
 pointer to an real_type entry More...
 
typedef std::map< ls_id_index, const field_entry *, ls_index_comparator< std::string, true > > record_cache_type
 
typedef mlaskal::dumb_pointer< record_typerecord_type_pointer
 pointer to a record_type entry More...
 
typedef mlaskal::ICRELNUM stack_address
 stack offset type More...
 
typedef mlaskal::dumb_pointer< str_const_symbolstr_const_symbol_pointer
 pointer to a representation of a named string constant More...
 
typedef mlaskal::dumb_pointer< str_typestr_type_pointer
 pointer to an str_type entry More...
 
typedef mlaskal::dumb_pointer< subprogram_symbolsubprogram_symbol_pointer
 pointer to subprogram_symbol entry More...
 
typedef std::map< ls_id_index, symbol_entry, ls_index_comparator< std::string, true > > symbol_map
 
typedef mlaskal::dumb_pointer< abstract_symbolsymbol_pointer
 pointer to abstract symbol entry More...
 
using token_attr_i = std::pair< std::string, int >
 
using token_attr_n = std::string
 
using token_attr_r = std::pair< std::string, double >
 
using token_attr_s = std::pair< std::string, std::string >
 
typedef mlaskal::dumb_pointer< abstract_typetype_pointer
 pointer to representation of a type More...
 
typedef mlaskal::dumb_pointer< type_symboltype_symbol_reference
 pointer to type_symbol entry More...
 
typedef std::list< type_entrytype_vector
 
typedef mlaskal::dumb_pointer< typed_symboltyped_symbol_pointer
 pointer to typed_symbol entry More...
 
typedef mlaskal::dumb_pointer< variable_symbolvariable_symbol_pointer
 pointer to variable_symbol entry More...
 
typedef void * yyscan_t2
 

Enumerations

enum  DUTOKGE_FOR_DIRECTION { DUTOKGE_FOR_DIRECTION::DUTOKGE_TO, DUTOKGE_FOR_DIRECTION::DUTOKGE_DOWNTO }
 
enum  DUTOKGE_OPER_MUL {
  DUTOKGE_OPER_MUL::DUTOKGE_ASTERISK, DUTOKGE_OPER_MUL::DUTOKGE_SOLIDUS, DUTOKGE_OPER_MUL::DUTOKGE_DIV, DUTOKGE_OPER_MUL::DUTOKGE_MOD,
  DUTOKGE_OPER_MUL::DUTOKGE_AND
}
 
enum  DUTOKGE_OPER_REL {
  DUTOKGE_OPER_REL::DUTOKGE_LT, DUTOKGE_OPER_REL::DUTOKGE_LE, DUTOKGE_OPER_REL::DUTOKGE_NE, DUTOKGE_OPER_REL::DUTOKGE_GE,
  DUTOKGE_OPER_REL::DUTOKGE_GT
}
 
enum  DUTOKGE_OPER_SIGNADD { DUTOKGE_OPER_SIGNADD::DUTOKGE_PLUS, DUTOKGE_OPER_SIGNADD::DUTOKGE_MINUS }
 
enum  err_code {
  DUERR_OK, DUERR_NOK, DUERR_ERRS, DUERR_WARNING =1000,
  DUERR_INTOUTRANGE, DUERR_REALOUTRANGE, DUERR_CONVERSION, DUERR_NOLABELUSE,
  DUERR_NOLABELGOTO, DUERR_SEMWARN =2000, DUERR_ERROR =5000, DUERR_UNKCHAR,
  DUERR_EOFINCMT, DUERR_EOLINSTRCHR, DUERR_EOFINSTRCHR, DUERR_UNEXPENDCMT,
  DUERR_BADINT, DUERR_BADREAL, DUERR_SYNTAX, DUERR_SEMERROR =6000,
  DUERR_DUPSYM, DUERR_DUPLABEL, DUERR_NOTTYPE, DUERR_NOTORDINAL,
  DUERR_NOTLABEL, DUERR_NOTMINE, DUERR_NOTLVALUE, DUERR_NOTPARAMVAR,
  DUERR_TYPEMISMATCH, DUERR_NOTPROC, DUERR_NOTARRAY, DUERR_NOTRECORD,
  DUERR_NOTSCALAR, DUERR_PARNUM, DUERR_NOTVAR, DUERR_NOTFNC,
  DUERR_NOTCONST, DUERR_NOTINTEGRAL, DUERR_CANNOTCONVERT, DUERR_FORNOTLOCAL,
  DUERR_FORNOTINTEGER, DUERR_BADRANGE, DUERR_DUPLABELDEF, DUERR_MISLABELDEF,
  DUERR_NOTFIELD, DUERR_FATAL =10000, DUERR_NOINFILE, DUERR_NOOUTFILE
}
 
enum  parameter_mode { PMODE_UNDEF, PMODE_BY_VALUE, PMODE_BY_REFERENCE }
 function or procedure parameter modes More...
 
enum  symbol_kind {
  SKIND_UNDEF, SKIND_PROCEDURE, SKIND_FUNCTION, SKIND_GLOBAL_VARIABLE,
  SKIND_LOCAL_VARIABLE, SKIND_PARAMETER_BY_REFERENCE, SKIND_TYPE, SKIND_CONST
}
 symbol kind More...
 
enum  type_category {
  TCAT_UNDEF, TCAT_ARRAY, TCAT_RECORD, TCAT_BOOL,
  TCAT_RANGE, TCAT_INT, TCAT_REAL, TCAT_STR
}
 category of a type More...
 

Functions

field_list_ptr create_field_list ()
 creates an empty field list More...
 
std::unique_ptr< mlaskal::abstract_ic > create_ic ()
 
parameter_list_ptr create_parameter_list ()
 creates an empty parameter list More...
 
std::unique_ptr< symbol_tablescreate_tab (const config &c, const std::unique_ptr< mlaskal::abstract_ic > &e)
 
void dump_ic (const config &c, const std::unique_ptr< mlaskal::abstract_ic > &e)
 
void dump_tab (const config &c, const std::unique_ptr< symbol_tables > &f)
 
icblock_pointer icblock_create ()
 creates empty icblock More...
 
template<typename ... L>
icblock_pointer icblock_merge_and_kill (const L &... icbl)
 merge any number of icblocks More...
 
bool identical_type (type_pointer a, type_pointer b)
 compares two types More...
 
yyscan_t2 lexer_init (FILE *iff)
 
void lexer_shutdown (yyscan_t2 lx)
 
file_data open_file (config &c)
 
std::ostream & operator<< (std::ostream &os, type_category typecat)
 
std::ostream & operator<< (std::ostream &o, const type_entry &e)
 
std::ostream & operator<< (std::ostream &o, const field_entry &e)
 
std::ostream & operator<< (std::ostream &o, const parameter_entry &e)
 
std::ostream & operator<< (std::ostream &o, const parameter_list_body &e)
 
template<typename bison_parser >
void parse (const file_data &d, const std::unique_ptr< symbol_tables > &f)
 

Typedef Documentation

§ array_type_pointer

typedef mlaskal::dumb_pointer< array_type> mlc::array_type_pointer

pointer to an array_type entry

§ bool_const_symbol_pointer

typedef mlaskal::dumb_pointer< bool_const_symbol> mlc::bool_const_symbol_pointer

pointer to a representation of a named boolean constant

§ bool_type_pointer

typedef mlaskal::dumb_pointer< bool_type> mlc::bool_type_pointer

pointer to an bool_type entry

§ const_symbol_reference

typedef mlaskal::dumb_pointer< const_symbol> mlc::const_symbol_reference

pointer to const_symbol entry

§ field_list_const_ptr

typedef mlaskal::dumb_pointer< const field_list_body> mlc::field_list_const_ptr

parameter list - read-only observer pointer

§ field_list_ptr

typedef std::shared_ptr< field_list_body> mlc::field_list_ptr

parameter list - owner pointer

§ field_pointer

typedef mlaskal::dumb_pointer< const field_entry> mlc::field_pointer

pointer to an field_entry

§ field_vector

typedef std::vector< field_entry > mlc::field_vector

parameter entry vector

§ function_symbol_pointer

typedef mlaskal::dumb_pointer< function_symbol> mlc::function_symbol_pointer

pointer to function_symbol entry

§ global_variable_symbol_pointer

pointer to global_variable_symbol entry

§ ic_function_pointer

typedef mlaskal::abstract_functions::iterator mlc::ic_function_pointer

intermediate code label

§ ic_label

intermediate code label

§ icblock_pointer

intermediate code block

§ int_const_symbol_pointer

typedef mlaskal::dumb_pointer< int_const_symbol> mlc::int_const_symbol_pointer

pointer to a representation of a named integer constant

§ int_type_pointer

typedef mlaskal::dumb_pointer< int_type> mlc::int_type_pointer

pointer to an int_type entry

§ label_map

typedef std::map< ls_int_index, label_entry, ls_index_comparator< int, false> > mlc::label_map

label map

§ label_symbol_pointer

typedef mlaskal::dumb_pointer< label_symbol> mlc::label_symbol_pointer

pointer to a label entry

§ local_variable_symbol_pointer

pointer to local_variable_symbol entry

§ ls_id_index

identifier index

§ ls_id_type

typedef mlaskal::lit_storage<std::string, true> mlc::ls_id_type

identifier storage type

§ ls_int_index

integer literal index

§ ls_int_type

integer literal storage type

§ ls_real_index

real literal index

§ ls_real_type

typedef mlaskal::lit_storage<double, false> mlc::ls_real_type

real literal storage type

§ ls_str_index

string literal index

§ ls_str_type

typedef mlaskal::lit_storage<std::string, false> mlc::ls_str_type

string literal storage type

§ parameter_by_reference_symbol_pointer

§ parameter_list_const_ptr

typedef mlaskal::dumb_pointer< const parameter_list_body> mlc::parameter_list_const_ptr

parameter list - read-only observer pointer

§ parameter_list_ptr

typedef std::shared_ptr< parameter_list_body> mlc::parameter_list_ptr

parameter list - owner pointer

§ parameter_vector

typedef std::vector< parameter_entry> mlc::parameter_vector

parameter entry vector

§ procedure_symbol_pointer

typedef mlaskal::dumb_pointer< procedure_symbol> mlc::procedure_symbol_pointer

pointer to procedure_symbol entry

§ range_type_pointer

typedef mlaskal::dumb_pointer< range_type> mlc::range_type_pointer

pointer to an range_type entry

§ real_const_symbol_pointer

typedef mlaskal::dumb_pointer< real_const_symbol> mlc::real_const_symbol_pointer

pointer to a representation of a named real constant

§ real_type_pointer

typedef mlaskal::dumb_pointer< real_type> mlc::real_type_pointer

pointer to an real_type entry

§ record_cache_type

typedef std::map< ls_id_index, const field_entry *, ls_index_comparator< std::string, true> > mlc::record_cache_type

record field index

§ record_type_pointer

typedef mlaskal::dumb_pointer< record_type> mlc::record_type_pointer

pointer to a record_type entry

§ stack_address

typedef mlaskal::ICRELNUM mlc::stack_address

stack offset type

this type is used to store addresses of global and local variables

§ str_const_symbol_pointer

typedef mlaskal::dumb_pointer< str_const_symbol> mlc::str_const_symbol_pointer

pointer to a representation of a named string constant

§ str_type_pointer

typedef mlaskal::dumb_pointer< str_type> mlc::str_type_pointer

pointer to an str_type entry

§ subprogram_symbol_pointer

typedef mlaskal::dumb_pointer< subprogram_symbol> mlc::subprogram_symbol_pointer

pointer to subprogram_symbol entry

§ symbol_map

typedef std::map< ls_id_index, symbol_entry, ls_index_comparator< std::string, true> > mlc::symbol_map

symbol map

§ symbol_pointer

typedef mlaskal::dumb_pointer< abstract_symbol> mlc::symbol_pointer

pointer to abstract symbol entry

§ token_attr_i

using mlc::token_attr_i = typedef std::pair< std::string, int>

§ token_attr_n

using mlc::token_attr_n = typedef std::string

§ token_attr_r

using mlc::token_attr_r = typedef std::pair< std::string, double>

§ token_attr_s

using mlc::token_attr_s = typedef std::pair< std::string, std::string>

§ type_pointer

typedef mlaskal::dumb_pointer< abstract_type> mlc::type_pointer

pointer to representation of a type

§ type_symbol_reference

typedef mlaskal::dumb_pointer< type_symbol> mlc::type_symbol_reference

pointer to type_symbol entry

§ type_vector

typedef std::list< type_entry> mlc::type_vector

vector of type entries

§ typed_symbol_pointer

typedef mlaskal::dumb_pointer< typed_symbol> mlc::typed_symbol_pointer

pointer to typed_symbol entry

§ variable_symbol_pointer

typedef mlaskal::dumb_pointer< variable_symbol> mlc::variable_symbol_pointer

pointer to variable_symbol entry

§ yyscan_t2

typedef void* mlc::yyscan_t2

Enumeration Type Documentation

§ DUTOKGE_FOR_DIRECTION

Enumerator
DUTOKGE_TO 
DUTOKGE_DOWNTO 

§ DUTOKGE_OPER_MUL

enum mlc::DUTOKGE_OPER_MUL
strong
Enumerator
DUTOKGE_ASTERISK 
DUTOKGE_SOLIDUS 
DUTOKGE_DIV 
DUTOKGE_MOD 
DUTOKGE_AND 

§ DUTOKGE_OPER_REL

enum mlc::DUTOKGE_OPER_REL
strong
Enumerator
DUTOKGE_LT 
DUTOKGE_LE 
DUTOKGE_NE 
DUTOKGE_GE 
DUTOKGE_GT 

§ DUTOKGE_OPER_SIGNADD

Enumerator
DUTOKGE_PLUS 
DUTOKGE_MINUS 

§ err_code

Enumerator
DUERR_OK 
DUERR_NOK 
DUERR_ERRS 
DUERR_WARNING 
DUERR_INTOUTRANGE 
DUERR_REALOUTRANGE 
DUERR_CONVERSION 

conversion of real to integer

DUERR_NOLABELUSE 

label declared but never used

DUERR_NOLABELGOTO 

label declared but never jumped

DUERR_SEMWARN 
DUERR_ERROR 
DUERR_UNKCHAR 
DUERR_EOFINCMT 
DUERR_EOLINSTRCHR 
DUERR_EOFINSTRCHR 
DUERR_UNEXPENDCMT 
DUERR_BADINT 
DUERR_BADREAL 
DUERR_SYNTAX 
DUERR_SEMERROR 
DUERR_DUPSYM 

symbol %s already declared (in the same scope)

DUERR_DUPLABEL 

label %d already declared (in the same scope)

DUERR_NOTTYPE 

symbol %d does not denote a type

DUERR_NOTORDINAL 

type is not a range

DUERR_NOTLABEL 

label %d is not declared

DUERR_NOTMINE 

assigning return value to another function %s

DUERR_NOTLVALUE 

not an l-value on the left of :=

DUERR_NOTPARAMVAR 

actual of a parameter passed by reference is not an object

DUERR_TYPEMISMATCH 

type mismatch in a parameter passed by reference

DUERR_NOTPROC 

calling non-procedure symbol %s

DUERR_NOTARRAY 

subscript operator applied to non-array symbol %s

DUERR_NOTRECORD 

dot operator applied to non-record

DUERR_NOTSCALAR 

function return type %s is not a scalar

DUERR_PARNUM 

wrong number of actual parameters in call to %s

DUERR_NOTVAR 

symbol %s is not a variable, constant or function

DUERR_NOTFNC 

symbol %s is not a function

DUERR_NOTCONST 

symbol %s is not a constant

DUERR_NOTINTEGRAL 

symbol %s is not an integral constant

DUERR_CANNOTCONVERT 

incompatible operand, parameter or assigned value

DUERR_FORNOTLOCAL 

for-loop control variable %s is not a variable

DUERR_FORNOTINTEGER 

for-loop control variable %s is not integral

DUERR_BADRANGE 

Invalid range definition (lower > upper)

DUERR_DUPLABELDEF 

label defined twice

DUERR_MISLABELDEF 

label jumped but not defined

DUERR_NOTFIELD 

no field named %s

DUERR_FATAL 
DUERR_NOINFILE 
DUERR_NOOUTFILE 

§ parameter_mode

function or procedure parameter modes

Enumerator
PMODE_UNDEF 
PMODE_BY_VALUE 
PMODE_BY_REFERENCE 

§ symbol_kind

symbol kind

Enumerator
SKIND_UNDEF 
SKIND_PROCEDURE 
SKIND_FUNCTION 
SKIND_GLOBAL_VARIABLE 
SKIND_LOCAL_VARIABLE 
SKIND_PARAMETER_BY_REFERENCE 
SKIND_TYPE 
SKIND_CONST 

§ type_category

category of a type

Enumerator
TCAT_UNDEF 
TCAT_ARRAY 
TCAT_RECORD 
TCAT_BOOL 
TCAT_RANGE 
TCAT_INT 
TCAT_REAL 
TCAT_STR 

Function Documentation

§ create_field_list()

field_list_ptr mlc::create_field_list ( )

creates an empty field list

§ create_ic()

std::unique_ptr< mlaskal::abstract_ic> mlc::create_ic ( )

§ create_parameter_list()

parameter_list_ptr mlc::create_parameter_list ( )

creates an empty parameter list

§ create_tab()

std::unique_ptr< symbol_tables> mlc::create_tab ( const config &  c,
const std::unique_ptr< mlaskal::abstract_ic > &  e 
)

§ dump_ic()

void mlc::dump_ic ( const config &  c,
const std::unique_ptr< mlaskal::abstract_ic > &  e 
)

§ dump_tab()

void mlc::dump_tab ( const config &  c,
const std::unique_ptr< symbol_tables > &  f 
)

§ icblock_create()

icblock_pointer mlc::icblock_create ( )
inline

creates empty icblock

§ icblock_merge_and_kill()

template<typename ... L>
icblock_pointer mlc::icblock_merge_and_kill ( const L &...  icbl)
inline

merge any number of icblocks

source icblocks are emptied

§ identical_type()

bool mlc::identical_type ( type_pointer  a,
type_pointer  b 
)

compares two types

returns true if types are identical wrt. Mlaskal rules

§ lexer_init()

yyscan_t2 mlc::lexer_init ( FILE *  iff)

§ lexer_shutdown()

void mlc::lexer_shutdown ( yyscan_t2  lx)

§ open_file()

file_data mlc::open_file ( config &  c)

§ operator<<() [1/5]

std::ostream& mlc::operator<< ( std::ostream &  os,
type_category  typecat 
)

type_category dumper

§ operator<<() [2/5]

std::ostream& mlc::operator<< ( std::ostream &  o,
const type_entry e 
)

type_entry dumper

§ operator<<() [3/5]

std::ostream& mlc::operator<< ( std::ostream &  o,
const field_entry e 
)

parameter entry dumper

§ operator<<() [4/5]

std::ostream& mlc::operator<< ( std::ostream &  o,
const parameter_entry e 
)

parameter entry dumper

§ operator<<() [5/5]

std::ostream& mlc::operator<< ( std::ostream &  o,
const parameter_list_body e 
)

parameter list dumper

§ parse()

template<typename bison_parser >
void mlc::parse ( const file_data d,
const std::unique_ptr< symbol_tables > &  f 
)