#ifndef AST_TO_C_H #define AST_TO_C_H AST_TO_C_H #include #include #include #include #include #include #include struct State_And_Transitions; void ast_to_c(char *output_name,struct AST_Translation_Unit *tree,struct Options *options); void ast_translation_unit_to_c_print_header_part(FILE *out,char *base_name,struct AST_Translation_Unit *translation_unit,struct Options *options); void ast_translation_unit_to_c_print_body_part(FILE *out,char *base_name,struct AST_Translation_Unit *translation_unit,struct Options *options); void ast_translation_unit_to_c_print_external_part(FILE *out,char *base_name,struct AST_Translation_Unit *translation_unit,struct Options *options); void ast_translation_unit_to_c_print_base_name(FILE *out, char *base_name); void ast_translation_unit_to_c_print_header_string(FILE *out,char *base_name,char *file_suffix); void ast_translation_unit_to_c_print_footer_string(FILE *out,char *base_name,char *file_suffix); void ast_translation_unit_to_c_print_external_commands(FILE *out,char *base_name,struct AST_Translation_Unit *translation_unit); void ast_translation_unit_to_c(FILE *out,struct AST_Translation_Unit *translation_unit); void ast_machine_to_c(FILE *out,struct AST_Machine *machine,struct Options *options); void ast_machine_to_c_make_header_part(FILE *out,struct AST_Machine *machine,struct Options *options); void ast_machine_to_c_make_body_part(FILE *out,struct AST_Machine *machine,struct Options *options); void ast_events_to_c(FILE *out,struct AST_Machine *machine,struct Options *options); void ast_states_to_c(FILE *out,struct AST_Machine *machine,struct Options *options); void ast_command_to_c(FILE *out,struct AST_Command *command,char *hold_buffer); /*note the ordering of parameters*/ void ast_command_to_c_extern_declaration(struct AST_Command *command,FILE *out); void ast_pipeline_to_c(FILE *out,size_t indentation,struct AST_Pipeline *pipeline); void ast_transitions_of_state_to_c(FILE *out,struct AST_Machine *machine,struct State_And_Transitions *vector,struct Options *options); void ast_token_to_c(FILE *out,struct token *token); void ast_machine_enum_tag(FILE *out,struct AST_Machine *machine); void ast_state_to_c_signature(FILE *out,struct AST_Machine *machine,struct AST_State *state,struct Options *options); void ast_state_to_c_function_name(FILE *out,struct AST_Machine *machine,struct AST_State *state); void ast_machines_to_c_array(FILE *out,struct AST_Translation_Unit *translation_unit,struct Options *options,short indent); void ast_machines_to_c_enum(FILE *out,struct AST_Translation_Unit *translation_unit); void ast_event_to_c_enum(FILE *out,struct AST_Machine *machine,struct AST_Event *event); void ast_statement_to_c(FILE *out,size_t indentation,struct AST *statement,struct Options *options); void ast_if_to_c(FILE *out,size_t indentation,struct AST_If_Statement *statement,struct Options *options); void ast_expression_to_c(FILE *out,struct AST *expression,struct Options *options); void ast_expression_state_to_c(FILE *out,struct AST_State *state,struct Options *options); void ast_to_c_print_internal_stuff_for_header(FILE *out,struct AST_Translation_Unit *translation_unit,struct Options *options); void ast_to_c_print_internal_stuff_for_body(FILE *out,struct AST_Translation_Unit *translation_unit,struct Options *options); void ast_to_c_print_comment(FILE *out,char *comment); void ast_to_c_print_event_struct_queue_declaration(FILE *out,struct Options *options); void ast_to_c_print_event_functions_queue_declaration(FILE *out,struct Options *options); void ast_to_c_print_event_queue_definition(FILE *out,struct Options *options); void ast_print_machine_buffer_declarations(FILE *out); void ast_print_machine_buffer_definitions(FILE *out); /* :X */ void ast_to_c_print_tabs(FILE *out,size_t number_of_tabs); #endif