Поправљен 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
|
PREFIX = /usr/local
|
||||||
|
|
||||||
# флегови за C компајлер и линкер
|
# флегови за C компајлер и линкер
|
||||||
CFLAGS = -g -std=c99 -pedantic -Wall -O0
|
# CFLAGS = -g -std=c99 -pedantic -Wall -O0
|
||||||
# CFLAGS = -std=c99 -pedantic -Wall -O1
|
CFLAGS = -std=c99 -pedantic -Wall -O1
|
||||||
LDFLAGS = -lm -lc
|
LDFLAGS = -lm -lc
|
||||||
|
|
||||||
CC = cc
|
CC = cc
|
||||||
|
|
|
@ -27,18 +27,17 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
token *tokenList, *current;
|
token *tokenList, *current;
|
||||||
|
|
||||||
current = tokenList = lexLine(input);
|
current = tokenList = lexLine(input);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (current != NULL)
|
while (current != NULL)
|
||||||
{
|
{
|
||||||
printf("Токен бр. %d: \"%s\", тип:%s\n", i,
|
printf("Токен бр. %d: \"%s\", тип:%s\n", i, current->lexeme, current->type == number ? "number" : (current->type == symbol ? "symbol" : "parenthesis"));
|
||||||
current->lexeme, current->type == number ? "number" : (current->type == symbol
|
|
||||||
? "symbol" : "parenthesis"));
|
|
||||||
current = current->next;
|
current = current->next;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
freeLexedLine(tokenList);
|
||||||
free(input);
|
free(input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
18
lexer.c
18
lexer.c
|
@ -94,3 +94,21 @@ token *lex1Token(char *input, int *i)
|
||||||
|
|
||||||
return result;
|
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,
|
number,
|
||||||
symbol,
|
symbol,
|
||||||
parenthesis
|
parenthesis
|
||||||
} tokenType ;
|
} tokenType;
|
||||||
|
|
||||||
typedef struct _Token
|
typedef struct _Token
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,8 @@ typedef struct _Token
|
||||||
struct _Token *next;
|
struct _Token *next;
|
||||||
} token;
|
} token;
|
||||||
|
|
||||||
/* функција lexLine као аргумент добија ред са стандардног улаза, а као излаз
|
|
||||||
враћа лексичке елементе у повезаној листи */
|
|
||||||
token *lexLine(char *input);
|
token *lexLine(char *input);
|
||||||
|
/* као аргумент добија ред са стандардног улаза, а као излаз
|
||||||
|
враћа лексичке елементе у повезаној листи */
|
||||||
|
void freeLexedLine(token *list);
|
||||||
|
/* ослобађа меморију коју је заузела листа токена узета из корисничког улаза */
|
||||||
|
|
Loading…
Reference in a new issue