refactor BASIC interpreter code

Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
This commit is contained in:
2021-08-08 02:36:32 +05:30
parent 7f9b359c8e
commit 382f98ed40
4 changed files with 63 additions and 66 deletions

View File

@@ -4,15 +4,15 @@ SPDX-FileCopyrightText: 2021 Avinal Kumar <avinal.xlvii@gmail.com>
#]=======================================================================]
cmake_minimum_required(VERSION 3.16)
project(basic LANGUAGES C CXX)
project(basic LANGUAGES C)
file(GLOB BASIC_SRC src/*.c)
add_library(basic "")
target_sources(basic PRIVATE ${BASIC_SRC})
target_include_directories(basic PRIVATE include/basic)
add_executable(basic_exec main.cc)
target_include_directories(basic_exec PRIVATE include/basic include)
target_link_libraries(basic_exec PRIVATE basic)
#add_executable(basic_exec main.cc)
#target_include_directories(basic_exec PRIVATE include/basic)
#target_link_libraries(basic_exec PRIVATE basic)

View File

@@ -1,60 +0,0 @@
/**
* SPDX-License-Identifier: Apache-2.0
* SPDX-FileCopyrightText: 2021 Avinal Kumar <avinal.xlvii@gmail.com>
*
* @file basic.hpp
* @brief Wrapper around basic
*/
#ifndef BASIC_BASIC_HPP_
#define BASIC_BASIC_HPP_
#include <string>
extern "C" {
#include "basic/parser.h"
}
class basic {
private:
std::string last_error = "";
static std::string output;
static int out(int ch) {
output.push_back(ch);
return 1;
}
static int in() { return getchar(); }
public:
basic();
~basic();
bool evaluate_line(const std::string& line);
std::string run();
std::string get_error();
};
std::string basic::output = "";
basic::basic() {
basic_init(1024 * 8, 2048);
basic_register_io(out, in);
}
basic::~basic() { basic_destroy(); }
bool basic::evaluate_line(const std::string& line) {
char* input = const_cast<char*>(line.c_str());
basic_eval(input);
if (evaluate_last_error()) {
last_error.append(evaluate_last_error());
clear_last_error();
return false;
}
return true;
}
std::string basic::get_error() { return last_error; }
std::string basic::run() { return output; }
#endif // BASIC_BASIC_HPP_

View File

@@ -0,0 +1,57 @@
/**
* SPDX-License-Identifier: Apache-2.0
* SPDX-FileCopyrightText: 2021 Avinal Kumar <avinal.xlvii@gmail.com>
*
* @file basic.hpp
* @brief Wrapper around basic
*/
#ifndef BASIC_BASIC_HPP_
#define BASIC_BASIC_HPP_
#include <string>
extern "C" {
#include "parser.h"
}
class basic {
private:
std::string last_error = "";
static std::string output;
static int out(int ch) {
output.push_back(ch);
return 1;
}
static int in() { return getchar(); }
public:
basic() {
basic_init(1024 * 8, 2048);
basic_register_io(out, in);
}
~basic() { basic_destroy(); }
bool evaluate_line(const std::string& line) {
char* input = const_cast<char*>(line.c_str());
basic_eval(input);
if (evaluate_last_error()) {
last_error.append(evaluate_last_error());
clear_last_error();
return false;
}
return true;
}
std::string get_error() { return last_error; }
std::string run() {
evaluate_line("RUN");
return output;
}
void clear_output() { output = ""; }
};
#endif // BASIC_BASIC_HPP_

View File

@@ -8,9 +8,9 @@
#ifndef BASIC_PARSER_H_
#define BASIC_PARSER_H_
#include <io.h>
#include "io.h"
#include <stdbool.h>
#include <tokenizer.h>
#include "tokenizer.h"
float evaluate(char* expression_string);