Сва позната процурења меморије запушена, поправљен матурски рад, енкодирање изворног кода учињено изричитим за компајлер
This commit is contained in:
parent
bea145baec
commit
ff4e73a624
6
Makefile
6
Makefile
|
@ -1,4 +1,4 @@
|
||||||
# cirilisp - компајлер за ћирилични дијалекат лиспа
|
# cirilisp - интерпретер за ћирилични дијалекат лиспа
|
||||||
|
|
||||||
# ћирилисп верзија
|
# ћирилисп верзија
|
||||||
VERSION = 0,9
|
VERSION = 0,9
|
||||||
|
@ -9,8 +9,8 @@ LIBPREFIX = $(PREFIX)/lib
|
||||||
|
|
||||||
# флегови за C компајлер и линкер
|
# флегови за C компајлер и линкер
|
||||||
CPPFLAGS = -D_POSIX_C_SOURCE=2 -DDESTDIR=\"$(DESTDIR)\" -DVERSION=\"$(VERSION)\"
|
CPPFLAGS = -D_POSIX_C_SOURCE=2 -DDESTDIR=\"$(DESTDIR)\" -DVERSION=\"$(VERSION)\"
|
||||||
# CFLAGS = -g -std=c99 -pedantic -Wall -O0
|
CFLAGS = -g -std=c99 -pedantic -Wall -Wextra -O0 -fexec-charset=UTF-8 -finput-charset=UTF-8 -fwide-exec-charset=UTF-32LE
|
||||||
CFLAGS = -std=c99 -pedantic -Wall -O3
|
# CFLAGS = -std=c99 -pedantic -Wall -Wextra -O3 -fexec-charset=UTF-8 -finput-charset=UTF-8 -fwide-exec-charset=UTF-32LE
|
||||||
LDFLAGS = -lm -lc
|
LDFLAGS = -lm -lc
|
||||||
|
|
||||||
CC = cc
|
CC = cc
|
||||||
|
|
33
cirilisp.c
33
cirilisp.c
|
@ -8,6 +8,8 @@
|
||||||
#include "eval.h"
|
#include "eval.h"
|
||||||
#include "print.h"
|
#include "print.h"
|
||||||
|
|
||||||
|
extern env globalEnv;
|
||||||
|
|
||||||
extern int eofStatus;
|
extern int eofStatus;
|
||||||
int load(char *pathname)
|
int load(char *pathname)
|
||||||
{
|
{
|
||||||
|
@ -33,13 +35,30 @@ int load(char *pathname)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void exitCirilisp(int exitStatus)
|
||||||
|
/* терминира програм са жељеним излазним статусом, притом брише глобално
|
||||||
|
* окружење које једино и може бити активно током изласка из програма, и
|
||||||
|
* брише још неке динамички алоциране предмете у меморији */
|
||||||
|
{
|
||||||
|
if (globalEnv != NULL)
|
||||||
|
{
|
||||||
|
removeEnvironment(globalEnv);
|
||||||
|
}
|
||||||
|
extern wchar_t *globalBuffer;
|
||||||
|
if (globalBuffer != NULL)
|
||||||
|
{
|
||||||
|
free(globalBuffer);
|
||||||
|
}
|
||||||
|
exit(exitStatus);
|
||||||
|
}
|
||||||
|
|
||||||
void init()
|
void init()
|
||||||
{
|
{
|
||||||
if (setlocale(LC_ALL, "sr_RS.utf8") == NULL)
|
if (setlocale(LC_ALL, "sr_RS.utf8") == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "lokal programa se nije mogao podesiti na\
|
fprintf(stderr, "lokal programa se nije mogao podesiti na\
|
||||||
\"sr_RS.utf8\", proverite da li ste ga osposobili na vasem sistemu\n");
|
\"sr_RS.utf8\", proverite da li ste ga osposobili na vasem sistemu\n");
|
||||||
exit(0);
|
exitCirilisp(0);
|
||||||
}
|
}
|
||||||
/* Омогућава библиотекама коришћеним у интерпретеру да протумаче српску
|
/* Омогућава библиотекама коришћеним у интерпретеру да протумаче српску
|
||||||
* ћирилицу */
|
* ћирилицу */
|
||||||
|
@ -92,7 +111,7 @@ void init()
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Није пронађена стандардна ЋИРЛИСП библиотека\
|
fprintf(stderr, "Није пронађена стандардна ЋИРЛИСП библиотека\
|
||||||
\nПрограм се није могао правилно покренути\n");
|
\nПрограм се није могао правилно покренути\n");
|
||||||
exit(3);
|
exitCirilisp(3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,15 +139,15 @@ int main(int argc, char **argv)
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
printf("Верзија: " VERSION "\n");
|
printf("Верзија: " VERSION "\n");
|
||||||
exit(0);
|
exitCirilisp(0);
|
||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
printf(help);
|
printf(help);
|
||||||
exit(0);
|
exitCirilisp(0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Непозната командна опција");
|
fprintf(stderr, "Непозната командна опција");
|
||||||
exit(1);
|
exitCirilisp(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,14 +157,14 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Није било могуће отворити фајл %s.\n\
|
fprintf(stderr, "Није било могуће отворити фајл %s.\n\
|
||||||
Проверите да ли дати фајл заиста постоји\n", argv[optind]);
|
Проверите да ли дати фајл заиста постоји\n", argv[optind]);
|
||||||
exit(2);
|
exitCirilisp(2);
|
||||||
}
|
}
|
||||||
++optind;
|
++optind;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quitFlag)
|
if (quitFlag)
|
||||||
{
|
{
|
||||||
exit(0);
|
exitCirilisp(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Добродошли у ЋИРИЛИСП ЧПШП окружење, верзија: " VERSION "\n");
|
printf("Добродошли у ЋИРИЛИСП ЧПШП окружење, верзија: " VERSION "\n");
|
||||||
|
|
|
@ -1278,11 +1278,11 @@ int main(int argc, char **argv)
|
||||||
\newpage
|
\newpage
|
||||||
\section*{Биографија матуранта}
|
\section*{Биографија матуранта}
|
||||||
\addcontentsline{toc}{section}{\protect\numberline{}Биографија Матуранта}
|
\addcontentsline{toc}{section}{\protect\numberline{}Биографија Матуранта}
|
||||||
Ја сам Петар Каприш, ученик гимназије ,,Јован Јовановић Змај'', рођен 11. јула 2019.
|
Ја сам Петар Каприш, ученик гимназије ,,Јован Јовановић Змај'', рођен 11. јула 2000.
|
||||||
|
|
||||||
\begin{wrapfigure}{r}{0.5\textwidth}
|
\begin{wrapfigure}{r}{0.5\textwidth}
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\includegraphics[width=0.5\linewidth]{../../IBI_7206.JPG}
|
\includegraphics[width=0.5\linewidth]{../../MMM_5394.jpg}
|
||||||
\end{center}
|
\end{center}
|
||||||
\caption{Моја слика}
|
\caption{Моја слика}
|
||||||
\end{wrapfigure}
|
\end{wrapfigure}
|
||||||
|
|
|
@ -358,6 +358,7 @@ object defineInt(object parameters, env currentEnv)
|
||||||
currentEnv);
|
currentEnv);
|
||||||
addSymbolVariable(SYM(result), proc,
|
addSymbolVariable(SYM(result), proc,
|
||||||
currentEnv);
|
currentEnv);
|
||||||
|
deleteObject(proc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -400,6 +401,7 @@ object defineMacroInt(object parameters, env currentEnv)
|
||||||
object proc = lambdaInt(parameters, currentEnv);
|
object proc = lambdaInt(parameters, currentEnv);
|
||||||
PROC_SPECIAL(proc) = 1;
|
PROC_SPECIAL(proc) = 1;
|
||||||
addSymbolVariable(SYM(result), proc, currentEnv);
|
addSymbolVariable(SYM(result), proc, currentEnv);
|
||||||
|
deleteObject(proc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
3
read.c
3
read.c
|
@ -244,6 +244,7 @@ object getToken(FILE *stream)
|
||||||
SYM(result) = malloc((strlen(s) + 1) * sizeof(char));
|
SYM(result) = malloc((strlen(s) + 1) * sizeof(char));
|
||||||
strcpy(SYM(result), s);
|
strcpy(SYM(result), s);
|
||||||
}
|
}
|
||||||
|
free(s);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -365,6 +366,7 @@ object dispatchedChar(wint_t c, FILE *stream)
|
||||||
break;
|
break;
|
||||||
case WEOF:
|
case WEOF:
|
||||||
SIGERR(unexpectedEOFError);
|
SIGERR(unexpectedEOFError);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
SIGERR(invalidHashSequenceError);
|
SIGERR(invalidHashSequenceError);
|
||||||
break;
|
break;
|
||||||
|
@ -392,6 +394,7 @@ object macroFunction(wchar_t m, FILE *stream)
|
||||||
!strcmp(ERR(currentObject),
|
!strcmp(ERR(currentObject),
|
||||||
commonErrs[unmatchedParenError]))
|
commonErrs[unmatchedParenError]))
|
||||||
{
|
{
|
||||||
|
deleteObject(currentObject);
|
||||||
TYPE(*listCurrent) = nilObject;
|
TYPE(*listCurrent) = nilObject;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
8
util.c
8
util.c
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
env globalEnv = NULL;
|
||||||
|
|
||||||
char *commonErrs[] =
|
char *commonErrs[] =
|
||||||
{
|
{
|
||||||
"Конс објекат мора бити правилна листа да би могао бити евалуиран",
|
"Конс објекат мора бити правилна листа да би могао бити евалуиран",
|
||||||
|
@ -192,11 +194,13 @@ void deleteObject(object input)
|
||||||
free(ERR(input));
|
free(ERR(input));
|
||||||
ERR(input) = NULL;
|
ERR(input) = NULL;
|
||||||
}
|
}
|
||||||
else if (TYPE(input) == procedureObject &&
|
else if (TYPE(input) == procedureObject)
|
||||||
PROC_TYPE(input) == compoundProc)
|
{
|
||||||
|
if (PROC_TYPE(input) == compoundProc)
|
||||||
{
|
{
|
||||||
deleteObject(PROC_COMP_ARGS(input));
|
deleteObject(PROC_COMP_ARGS(input));
|
||||||
deleteObject(PROC_COMP_BODY(input));
|
deleteObject(PROC_COMP_BODY(input));
|
||||||
|
}
|
||||||
free(PROC(input));
|
free(PROC(input));
|
||||||
PROC(input) = NULL;
|
PROC(input) = NULL;
|
||||||
}
|
}
|
||||||
|
|
2
util.h
2
util.h
|
@ -171,8 +171,6 @@ struct procedure
|
||||||
} value;
|
} value;
|
||||||
};
|
};
|
||||||
|
|
||||||
env globalEnv;
|
|
||||||
|
|
||||||
/******************************* функције везане за окружења */
|
/******************************* функције везане за окружења */
|
||||||
env createEnvironment(env enclosing);
|
env createEnvironment(env enclosing);
|
||||||
void removeEnvironment(env input);
|
void removeEnvironment(env input);
|
||||||
|
|
Loading…
Reference in a new issue