Поправљен memory-leak везан за лексерски део интерпретера
This commit is contained in:
parent
e560ef8a3c
commit
0a28cfda01
4
Makefile
4
Makefile
|
@ -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
|
||||
|
|
|
@ -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
18
lexer.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
8
lexer.h
8
lexer.h
|
@ -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);
|
||||
/* ослобађа меморију коју је заузела листа токена узета из корисничког улаза */
|
||||
|
|
Loading…
Reference in a new issue