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