static error_code_t on_document_end(generator_t *super, const YYLTYPE *yylloc, const char *file_name) { TDR_UNUSED(file_name); TDR_UNUSED(yylloc); generator_printline(super, 0, ""); generator_close(super); return E_TD_NOERROR; }
static error_code_t on_document_begin(generator_t *super, const YYLTYPE *yylloc, const char *file_name) { char header[MAX_PACKAGE_NAME_LENGTH]; TDR_UNUSED(yylloc); generator_open(super, file_name, GENERATOR_WRITER_C_SUFFIX); generator_printline(super, 0, "/**"); generator_printline(super, 0, " * Autogenerated by %s Compiler (%s)", PROJECT_NAME, VERSION); generator_printline(super, 0, " *"); generator_printline(super, 0, " * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING"); generator_printline(super, 0, " * @generated"); generator_printline(super, 0, " */"); generator_printline(super, 0, ""); //包含header的头文件 strncpy_notdir(header, file_name, MAX_PACKAGE_NAME_LENGTH - 1); generator_replace_extension(header, MAX_PACKAGE_NAME_LENGTH, GENERATOR_WRITER_H_SUFFIX); generator_printline(super, 0, "#include \"%s\"", header); generator_printline(super, 0, "#include <stdint.h>"); generator_printline(super, 0, "#include <tlibc_bool.h>"); generator_printline(super, 0, "#include \"tlibc_define.h\""); generator_printline(super, 0, ""); generator_printline(super, 0, ""); return E_TD_NOERROR; }
static error_code_t on_document_begin(generator_t *super, const YYLTYPE *yylloc, const char *file_name) { TDR_UNUSED(yylloc); generator_open(super, file_name, GENERATOR_TYPES_H_SUFFIX); generator_printline(super, 0, "/**"); generator_printline(super, 0, " * Autogenerated by %s Compiler (%s)", PROJECT_NAME, VERSION); generator_printline(super, 0, " *"); generator_printline(super, 0, " * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING"); generator_printline(super, 0, " * @generated"); generator_printline(super, 0, " */"); generator_printline(super, 0, ""); generator_printline(super, 0, "#ifndef _H_%s", super->document_name); generator_printline(super, 0, "#define _H_%s", super->document_name); generator_printline(super, 0, ""); generator_printline(super, 0, ""); generator_printline(super, 0, "#ifdef __cplusplus"); generator_printline(super, 0, "extern \"C\" {"); generator_printline(super, 0, "#endif"); generator_printline(super, 0, ""); generator_printline(super, 0, "#include <stdint.h>"); generator_printline(super, 0, "#include <tlibc_bool.h>"); generator_printline(super, 0, ""); generator_printline(super, 0, ""); return E_TD_NOERROR; }
static error_code_t on_document_end(generator_t *super, const YYLTYPE *yylloc, const char *file_name) { TDR_UNUSED(yylloc); TDR_UNUSED(file_name); generator_printline(super, 0, ""); generator_printline(super, 0, "#ifdef __cplusplus"); generator_printline(super, 0, "}"); generator_printline(super, 0, "#endif"); generator_printline(super, 0, ""); generator_printline(super, 0, ""); generator_printline(super, 0, "#endif //_H_%s", super->document_name); generator_printline(super, 0, ""); generator_close(super); return E_TD_NOERROR; }
static error_code_t on_document_begin(generator_t *super, const YYLTYPE *yylloc, const char *file_name) { char types_header[MAX_PACKAGE_NAME_LENGTH]; TDR_UNUSED(yylloc); generator_open(super, file_name, GENERATOR_WRITER_H_SUFFIX); generator_printline(super, 0, "/**"); generator_printline(super, 0, " * Autogenerated by %s Compiler (%s)", PROJECT_NAME, VERSION); generator_printline(super, 0, " *"); generator_printline(super, 0, " * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING"); generator_printline(super, 0, " * @generated"); generator_printline(super, 0, " */"); generator_printline(super, 0, ""); generator_printline(super, 0, "#ifndef _H_%s", super->document_name); generator_printline(super, 0, "#define _H_%s", super->document_name); generator_printline(super, 0, ""); generator_printline(super, 0, "#ifdef __cplusplus"); generator_printline(super, 0, "extern \"C\" {"); generator_printline(super, 0, "#endif"); generator_printline(super, 0, ""); generator_printline(super, 0, ""); generator_printline(super, 0, "#include <stdint.h>"); generator_printline(super, 0, "#include \"protocol/tlibc_abstract_writer.h\""); generator_printline(super, 0, "#include \"tlibc_error_code.h\""); //包含types的头文件 strncpy_notdir(types_header, file_name, MAX_PACKAGE_NAME_LENGTH - 1); generator_replace_extension(types_header, MAX_PACKAGE_NAME_LENGTH, GENERATOR_TYPES_H_SUFFIX); generator_printline(super, 0, "#include \"%s\"", types_header); generator_printline(super, 0, ""); generator_printline(super, 0, ""); return E_TD_NOERROR; }
static error_code_t on_definition(generator_t *super, const YYLTYPE *yylloc, const syn_definition_t *definition) { generator_writer_c_t *self = TDR_CONTAINER_OF(super, generator_writer_c_t, super); TDR_UNUSED(yylloc); switch(definition->type) { case E_DT_IMPORT: return _on_import(self, &definition->definition.de_import); case E_DT_CONST: return E_TD_NOERROR; case E_DT_ENUM: return _on_enum(self, &definition->definition.de_enum); case E_DT_STRUCT: return _on_struct(self, &definition->definition.de_struct); case E_DT_UNION: return _on_union(self, &definition->definition.de_union); case E_DT_TYPEDEF: return E_TD_NOERROR; case E_DT_UNIX_COMMENT: return E_TD_NOERROR; default: return E_TD_ERROR; } }