# [symbols.h] Type: Symbol

## contents

#include "standard.h"

        This module implements the symbol type for a unique representation of strings
        and the symbol table in which they are stored. One intention is the reduction
        of place- and time-complexity when dealing with many identical strings.

        Specification
        1) forall String s : strcmp(s,symbolToString(stringToSymbol(s))) == 0.
        2) forall Symbol s : equalSymbols(s,stringToSymbol(symbolToString(s)).
        3) equalSymbols is an equality.

## The Type

symbol | Abstract symbol type

## Init & Quit

    void initSymbols(void)
| initializes the symbol table
    void freeSymbols(void)
| releases the symbol table

## Conversion

    symbol stringToSymbol(c_string str)
| converts string 'str' into a symbol
    symbol lstringToSymbol(c_string str)
| converts ( lower case ) string 'str' into a symbol
    symbol ustringToSymbol(c_string str)
| converts ( upper case ) string 'str' into a symbol
    c_string symbolToString(symbol sym)
| string corresponding to symbol 'sym'
    symbol bstringToSymbol(c_bstring bstr)
| converts binary string 'bstr' into a symbol
    c_bstring symbolToBString(symbol sym)
| binary string corresponding to symbol 'sym'

## Predicates

    c_bool equalSymbols(symbol a, symbol b)
| whether two symbols 'a' and 'b' are equal
    c_bool binarySymbol(symbol s)
| whether symbol 's' represents a binary string

## Debugging

    void printSymbols(int indent)
| prints the symbol table to stdout
    long countSymbols(void)
| number of symbols in the symbol table