Поправљен memory-leak везан за лексерски део интерпретера

This commit is contained in:
kappa 2019-01-06 21:13:13 +01:00
parent e560ef8a3c
commit 0a28cfda01
4 changed files with 28 additions and 9 deletions

View file

@ -7,8 +7,8 @@ VERSION = 0.0
PREFIX = /usr/local
# флегови за C компајлер и линкер
CFLAGS = -g -std=c99 -pedantic -Wall -O0
# CFLAGS = -std=c99 -pedantic -Wall -O1
# CFLAGS = -g -std=c99 -pedantic -Wall -O0
CFLAGS = -std=c99 -pedantic -Wall -O1
LDFLAGS = -lm -lc
CC = cc

View file

@ -27,18 +27,17 @@ int main(int argc, char **argv)
}
token *tokenList, *current;
current = tokenList = lexLine(input);
int i = 0;
while (current != NULL)
{
printf("Токен бр. %d: \"%s\", тип:%s\n", i,
current->lexeme, current->type == number ? "number" : (current->type == symbol
? "symbol" : "parenthesis"));
printf("Токен бр. %d: \"%s\", тип:%s\n", i, current->lexeme, current->type == number ? "number" : (current->type == symbol ? "symbol" : "parenthesis"));
current = current->next;
++i;
}
freeLexedLine(tokenList);
free(input);
}
}

18
lexer.c
View file

@ -94,3 +94,21 @@ token *lex1Token(char *input, int *i)
return result;
}
void freeLexedLine(token *list)
{
if (list == NULL)
{
return;
}
else
{
freeLexedLine(list->next);
if (list->lexeme != NULL)
{
free(list->lexeme);
}
free(list);
return;
}
}

View file

@ -6,7 +6,7 @@ typedef enum
number,
symbol,
parenthesis
} tokenType ;
} tokenType;
typedef struct _Token
{
@ -15,6 +15,8 @@ typedef struct _Token
struct _Token *next;
} token;
/* функција lexLine као аргумент добија ред са стандардног улаза, а као излаз
враћа лексичке елементе у повезаној листи */
token *lexLine(char *input);
/* као аргумент добија ред са стандардног улаза, а као излаз
враћа лексичке елементе у повезаној листи */
void freeLexedLine(token *list);
/* ослобађа меморију коју је заузела листа токена узета из корисничког улаза */