void add_types(void) { til_t *t = new_til("efi.til", "efi header types"); parse_decls(t, efi_types, msg, HTI_PAK1); sort_til(t); efi_image_data_directory_struct = import_type(t, -1, "EFI_IMAGE_DATA_DIRECTORY"); efi_image_te_header_struct = import_type(t, -1, "EFI_IMAGE_TE_HEADER"); efi_image_section_header_struct = import_type(t, -1, "EFI_IMAGE_SECTION_HEADER"); free_til(t); }
struct algo *parse_procedure() { eat(PROCEDURE); eat(IDENTIFIER); char *ident = strdup(tok->val); eat(EOL); struct declarations *decls = parse_decls(); eat(BEGIN); eat(EOL); instructionlist_t block = parse_block(); eat(END); eat(ALGORITHM); eat(PROCEDURE); eat(IDENTIFIER); if (lookahead[0]->type == EOL) eat(EOL); return algo(ident, NULL, decls, block); }
struct algo *parse_function() { eat(FUNCTION); eat(IDENTIFIER); char *ident = strdup(tok->val); eat(COLON); eat(IDENTIFIER); char *returntype = strdup(tok->val); eat(EOL); struct declarations *decls = parse_decls(); eat(BEGIN); eat(EOL); instructionlist_t block = parse_block(); eat(END); eat(ALGORITHM); eat(FUNCTION); eat(IDENTIFIER); if (lookahead[0]->type == EOL) eat(EOL); return algo(ident, returntype, decls, block); }