#include #include #include #include "internals.h" #include "read.h" #include "eval.h" #include "print.h" extern int eofStatus; int load(char *pathname) { FILE *stream; if ((stream = fopen(pathname, "r")) == NULL) { return 0; } object exp; while (TYPE(exp = eval(read("", stream), globalEnv)) != EOFObject) deleteObject(exp); eofStatus = 0; fclose(stream); return 1; } 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); } /* Омогућава библиотекама коришћеним у интерпретеру да протумаче српску * ћирилицу */ globalEnv = createEnvironment(NULL); addSymbolInternal("+", &addInt, 0); addSymbolInternal("-", &subtractInt, 0); addSymbolInternal("*", &multiplyInt, 0); addSymbolInternal("/", ÷Int, 0); addSymbolInternal("навод", "eInt, 1); addSymbolInternal("опиши", &defineInt, 1); addSymbolInternal("опиши-складњу", &defineMacroInt, 1); addSymbolInternal("тачно->нетачно", &exactToInexactInt, 0); addSymbolInternal("нетачно->тачно", &inexactToExactInt, 0); addSymbolInternal("ламбда", &lambdaInt, 1); addSymbolInternal("<", &lessInt, 0); addSymbolInternal(">", &greaterInt, 0); addSymbolInternal("=", &eqNumInt, 0); addSymbolInternal("ако", &ifInt, 1); addSymbolInternal("нил?", &nilQInt, 0); addSymbolInternal("конс?", &consQInt, 0); addSymbolInternal("број?", &numberQInt, 0); addSymbolInternal("симбол?", &symbolQInt, 0); addSymbolInternal("процедура?", &procedureQInt, 0); addSymbolInternal("булски?", &boolQInt, 0); addSymbolInternal("ниска?", &stringQInt, 0); addSymbolInternal("карактер?", &charQInt, 0); addSymbolInternal("листа?", &listQInt, 0); addSymbolInternal("надовежи", &appendInt, 0); addSymbolInternal("конс", &consInt, 0); addSymbolInternal("сар", &carInt, 0); addSymbolInternal("сдр", &cdrInt, 0); addSymbolInternal("јед?", &eqvQInt, 0); addSymbolInternal("примени", &applyInt, 0); addSymbolInternal("прикажи", &displayInt, 0); addSymbolInternal("штампај", &printInt, 0); addSymbolInternal("почни", &beginInt, 0); addSymbolInternal("направи-ниску", &makeStrInt, 0); addSymbolInternal("дужина-ниске", &strLengthInt, 0); if (!load(DESTDIR"/usr/local/lib/cirilisp/инит.ћ")) { fprintf(stderr, "Није пронађена стандардна ЋИРЛИСП библиотека\ \nПрограм се није могао правилно покренути\n"); exit(0); } } int main(int argc, char **argv) { init(); while (print(eval(read("ШКЉ> ", stdin), globalEnv))) ; printf("\nДостигнут крај улазног тока.\nЗбогом и дођите нам опет!\n"); return 0; }