Improved the fasta parser for better memory handling and better parsing

of the last parts of fasta headers (definitions)
This commit is contained in:
Celine Mercier
2017-10-13 18:54:17 +02:00
parent 52e94bbea7
commit a258d334b1
5 changed files with 83 additions and 84 deletions

View File

@ -798,7 +798,7 @@ YY_RULE_SETUP
(*p_header)[*nbf].value = (char*) malloc(sizeof(char)*size_needed);
strcpy(((*p_header)[*nbf]).value,header_yytext);
(*nbf)++;
p_header = check_and_realloc_mem_in_header_table(p_header, nbf, memory_allocated);
}
YY_BREAK
case 3:
@ -820,7 +820,7 @@ YY_RULE_SETUP
case 5:
YY_RULE_SETUP
#line 69 "fasta_header_parser.l"
{
{ // TODO
/*fprintf(stderr,"\n<REGNAME>{SPACE} **%s**",header_yytext);*/
if (i != 0)
field = store_in_field(field,header_yytext,&free_size,&i);
@ -886,24 +886,21 @@ case YY_STATE_EOF(REGVAL):
#line 113 "fasta_header_parser.l"
{
field = store_in_header_table(field, &((*p_header)[*nbf].value), &free_size, &i);
p_header = check_and_realloc_mem_in_header_table(p_header, nbf, memory_allocated);
(*nbf)++;
end_header_table(p_header, *nbf);
free(field);
BEGIN(INITIAL);
return 0;
}
YY_BREAK
case YY_STATE_EOF(REGNAME):
#line 123 "fasta_header_parser.l"
#line 122 "fasta_header_parser.l"
{
/*(*p_header)[*nbf].name = (char*) malloc(sizeof(char)*19);
strcpy((*p_header)[*nbf].name,"other_informations");
(*p_header)[*nbf].name = (char*) malloc(sizeof(char)*19);
strcpy((*p_header)[*nbf].name,"definition");
field = store_in_header_table(field, &((*p_header)[*nbf].value), &free_size, &i);
p_header = check_and_realloc_mem_in_header_table(p_header, nbf, memory_allocated);
*/
end_header_table(p_header, *nbf);
(*nbf)++;
end_header_table(p_header, nbf);
free(field);
BEGIN(INITIAL);
return 0;
@ -911,10 +908,10 @@ case YY_STATE_EOF(REGNAME):
YY_BREAK
case 12:
YY_RULE_SETUP
#line 136 "fasta_header_parser.l"
#line 133 "fasta_header_parser.l"
ECHO;
YY_BREAK
#line 918 "<stdout>"
#line 915 "<stdout>"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(REGID):
yyterminate();
@ -1912,7 +1909,7 @@ void header_yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
#line 136 "fasta_header_parser.l"
#line 133 "fasta_header_parser.l"
@ -1923,38 +1920,32 @@ int header_yywrap()
element_from_header* header_parser_main(char *h)
{
int nbfields,memory_allocated;
int nbfields, memory_allocated;
element_from_header* header;
char* nbfields_n;
char* nbfields_v;
nbfields_n = (char*) malloc(9*sizeof(char));
nbfields_v = (char*) malloc(5*sizeof(char));
YY_BUFFER_STATE state;
state=header_yy_scan_string(h);
memory_allocated=MEMALLOCATED;
header = (element_from_header*) malloc(memory_allocated * sizeof(element_from_header));
nbfields_n = (char*) malloc(9*sizeof(char));
strcpy(nbfields_n, "nbfields");
header[0].name = nbfields_n;
// Initialize memory to store the number of fields
header[0].value = (char*) malloc(10*sizeof(char));
nbfields=1;
strcpy(nbfields_n, "nbfields");
strcpy(nbfields_v, "1");
header = (element_from_header*) malloc(memory_allocated * sizeof(element_from_header));
header[0].name = nbfields_n;
header[0].value = nbfields_v;
YY_BUFFER_STATE state;
state=header_yy_scan_string(h);
header_parser(&nbfields, &memory_allocated, &header);
header_yy_delete_buffer(state);
return header;
}