Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

paladin-t/my_basic

Repository files navigation

 _____ __ __ _____ _____ _____ _____ _____ 
| | | |___| __ | _ | __| | |
| | | |_ _|___| __ -| |__ |- -| --|
|_|_|_| |_| |_____|__|__|_____|_____|_____|

Copyright (C) 2011 - 2025 Tony Wang

Build status MIT license

Web playground

Contents

Introduction

MY-BASIC is a lightweight BASIC interpreter written in standard C in dual files. It aims to be embeddable, extendable and portable. It is a dynamic typed programming language, reserves structured syntax, supports a style of prototype-based programming (OOP), also implements a functional paradigm by lambda abstraction. The core is written in a C source file and an associated header file. It's easy to either use it as a standalone interpreter or embed it with existing projects in C, C++, Java, Objective-C, Swift, C#, etc. and totally customizable by adding your own scripting interface.

Main features

MY-BASIC offers a wide range of features including:

  • Written in standard C, source code is portable to a dozen of platforms
  • Lightweight (within less than 128KB footprint), fast, and configurable
  • With both retro and modern BASIC syntax
  • Case-insensitive tokenization, and many other indelible BASIC flavour
  • Unicode support
  • Prototype-based programming, with reflection support
  • Lambda abstraction enhanced functional programming
  • Customizable referenced/non-referenced usertype
  • Collection construction and manipulation functions for LIST and DICT
  • Automatic releasing for referenced values (prototype, lambda, referenced usertype, list, dictionary, etc.) benefited from reference counting and garbage collection
  • Common numeric and string functions
  • Structured sub routine definition with the DEF/ENDDEF statements
  • Structured IF/THEN/ELSEIF/ELSE/ENDIF
  • Structured FOR/TO/STEP/NEXT, FOR/IN/NEXT, WHILE/WEND, DO/UNTIL
  • Reserved retro GOTO, GOSUB/RETURN
  • Importing multiple source files with the IMPORT statement
  • Debug API
  • Customizable memory pool
  • Easy API, for extending new BASIC functions
  • Easy interacting BASIC facilities at native side, and vice versa
  • More features under development

BASIC8

Get BASIC8 - the Fantasy Computer powered by MY-BASIC - on Steam for game and other program development in an integrated environment.

See awesome user creations.

BASIC at a glance

A "Hello World" convention in MY-BASIC:

input "What is your name: ", n$
def greeting(a, b)
	return a + " " + b + " by " + n$ + "."
enddef
print greeting("Hello", "world");

Read the MY-BASIC Quick Reference to get details about how to program in MY-BASIC.

Installation

Using standalone interpreter binary

This repository contains precompiled binaries for Windows, macOS and Linux, the easiest way is to download to get a direct playground. Or you can make a build by:

  • Using the Visual Studio solution my_basic.sln for Windows build
  • Using the Xcode workspace my_basic_mac.xcodeproj for macOS build
  • Using the makefile for Linux build

Follow these steps to compile an interpreter binary manually for other platform:

  1. Retrieve everything under the core and shell folders for a minimum setup
  2. Setup your toolchain for compiling and linking
  3. Compile core/my_basic.c and shell/main.c, while both includes core/my_basic.h; then link up an executable

The standalone interpreter supports three running modes:

  • Execute the binary without arguments to use the interactive mode
    • Type "HELP" and hint Enter to see usages
  • Pass a file to the binary to load and run that BASIC source code
  • Pass an argument -e followed with an expression to evaluate and print instantly as a simple calculator, eg. -e "22 / 7"

Combining with existing projects

Just copy core/my_basic.c and core/my_basic.h to your project and add them to the build pipeline. You can link with MY-BASIC as a lib as well.

For details about using MY-BASIC after integration, see MY-BASIC Quick Reference and read the Wiki pages.

MY-BASIC's workflow diagram can be concluded in a single image.

A simple setup:

#include "my_basic.h"
int main() {
	struct mb_interpreter_t* bas = NULL;
	mb_init();
	mb_open(&bas);
	mb_load_string(bas, "print 22 / 7;", true);
	mb_run(bas, true);
	mb_close(&bas);
	mb_dispose();
	return 0;
}

The manual explains most of the fundamental topics, however it doesn't cover everything; read the Wiki for supplements, like machinism behind MY-BASIC, efficient practice, etc:

Donate

List of donors.

Consider supporting MY-BASIC development with a donation if you like this project.

One-off donation via PayPal.

About

A lightweight BASIC interpreter written in standard C in dual files. Aims to be embeddable, extendable and portable.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6

Languages

AltStyle によって変換されたページ (->オリジナル) /