| #ifndef _AUTOMATON_PARSER_H |
| #define _AUTOMATON_PARSER_H |
| |
| #define NUMINPUTS 500 |
| #define MAX_PROGRAM_LENGTH 20000 |
| #define MAX_PROGRAM_WALK_LENGTH 5000 |
| #define MAX_TERMINAL_NUMS 5000 |
| #define MAX_TERMINAL_LENGTH 1000 |
| #define MAX_PROGRAM_NAME_LENGTH 5000 |
| |
| #include "gramfuzz.h" |
| |
| // represents an edge in the FSA |
| struct terminal_meta { |
| |
| int state_name; |
| int trigger_idx; |
| int dest; |
| |
| }; |
| |
| // represents a set of edges |
| struct terminal_arr { |
| |
| struct terminal_meta *start; |
| size_t len; |
| |
| }; |
| |
| // essentially a string array |
| struct symbols_arr { |
| |
| char **symbols_arr; |
| size_t len; |
| |
| }; |
| |
| struct symbols_arr *symbols; // symbols contain all the symbols in the language |
| map_t pda_map; // a map that maps each symbol in the language to a set of edges |
| struct symbols_arr |
| * first_chars; // an array of first characters, only temperary array |
| map_t first_char_to_symbols_map; // a map that maps each first character to a |
| // set of symbols (the symbols are sorted in |
| // descending order) |
| |
| // freeing terminal arrays |
| int free_terminal_arr(any_t placeholder, any_t item); |
| |
| // return a map that maps each symbol in the language to a set of edges |
| // populate symbols_arr with all the symbols in the language |
| map_t create_pda_hashmap(state *pda, struct symbols_arr *symbols_arr); |
| |
| // print the string array |
| void print_symbols_arr(struct symbols_arr *arr); |
| |
| // free hashmap |
| // the function pointer contains function to free the values in the hashmap |
| void free_hashmap(map_t m, int (*f)(any_t, any_t)); |
| |
| // free string array |
| int free_array_of_chars(any_t placeholder, any_t item); |
| |
| // free the pda |
| void free_pda(state *pda); |
| |
| // create a string array |
| struct symbols_arr *create_array_of_chars(); |
| |
| map_t create_first_char_to_symbols_hashmap(struct symbols_arr *symbols, |
| struct symbols_arr *first_chars); |
| |
| // return the automaton represented by the seed |
| Array *automaton_parser(const uint8_t *seed_fn); |
| |
| int add_element_to_symbols_arr(struct symbols_arr *symbols_arr, char *symbol, |
| size_t symbol_len); |
| |
| #endif |
| |