/* Copyright (C) 1995 Bjoern Beutel. */
/* Description. =============================================================*/
/* This module manages the symbol table for constants, variables and rules. */
/* Functions that use the symbol table for rules and functions. =============*/
extern int_t enter_rule( string_t name,
int_t first_instr,
rule_type_t type,
int_t param_count,
int_t rule_line,
string_t rule_file );
/* Enter into the symbol table the rule NAME of TYPE that starts at FIRST_INSTR
* and takes PARAM_COUNT parameters. The source is at RULE_LINE in RULE_FILE.
* The rule number will be returned. */
extern void enter_function( string_t name, int_t index );
/* Associate standard function NAME with INDEX. */
extern rule_t *find_subrule( string_t name,
int_t *rule_number,
int line, string_t file );
/* Find subrule or standard function NAME and return its rule descriptor.
* If the rule descriptor is NULL, NAME denotes a standard function.
* If RULE_NUMBER != NULL, save the rule index in *RULE_NUMBER. */
extern rule_t *find_combi_rule( string_t name,
int_t *rule_number,
int line, string_t file );
/* Find combi-rule or end-rule NAME and return its rule descriptor.
* If the rule descriptor is NULL, NAME describes a standard function.
* If RULE_NUMBER != NULL, save the rule index in *RULE_NUMBER. */
extern void check_rules_defined( void );
/* Check if all rules in the symbol tree are defined. */
extern string_t get_rule_file( string_t name );
/* Return file where rule NAME is defined. */
extern int_t get_rule_line( string_t name );
/* Return line where rule NAME is defined. */
/* Functions that use the symbol table for variables. =======================*/
extern string_t define_variable( string_t name, int_t stack_index );
/* Define the value on index STACK_INDEX to be a new variable with NAME.
* Return a copy of its name in the string pool. */
extern void undefine_variable( string_t name );
/* Close the scope of variable NAME. */
extern int_t find_variable( string_t name );
/* Find variable NAME in the symbol table and return its stack index. */
/* Functions that use the symbol table for constants. =======================*/
extern int_t find_constant( string_t name );
/* Find constant NAME in the symbol table and return its value pool index.
* If the constant only has a default value, it becomes the real value. */
extern void define_constant( string_t name, int_t const_index, bool_t fixed );
/* Define constant NAME with value at CONST_INDEX in the value pool.
* If FIXED is FALSE, the value given is only a default value. */
/*---------------------------------------------------------------------------*/
extern void dump_variables_and_constants( void );
/* Dump all variables and constants in the table. */
extern void free_symbols( void );
/* Free all memory used by the symbol table. */
/* End of file. =============================================================*/