/* * Ground REPL (shows when ground is ran without any arguments) * Copyright (C) 2026 DiamondNether90 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "interpreter.h" #include "include/estr.h" #include "parser.h" #define BUFFER_SIZE 1024 int repl() { printf("Ground REPL\n"); printf("Copyright (C) DiamondNether90 2026\n"); printf("Distributed under the GNU GPL-3.0 license; type \"license\" for more info\n"); char input[BUFFER_SIZE]; GroundVariable* variables = NULL; GroundLabel* labels = NULL; GroundScope scope; scope.variables = &variables; scope.labels = &labels; scope.isMainScope = true; while (true) { Estr programString = CREATE_ESTR(""); *scope.labels = NULL; // Get program printf(">>> "); while (true) { fgets(input, BUFFER_SIZE, stdin); if (strcmp(input, "\n") == 0) { break; } APPEND_ESTR(programString, input); printf("..."); } // Interpret program GroundProgram program = createGroundProgram(); program = parseFile(programString.str); interpretGroundProgram(&program, &scope); freeGroundProgram(&program); DESTROY_ESTR(programString); } }