_____ __ __ _____ _____ _____ _____ _____
| | | |___| __ | _ | __| | |
| | | |_ _|___| __ -| |__ |- -| --|
|_|_|_| |_| |_____|__|__|_____|_____|_____|
Copyright (C) 2011 - 2018 Wang Renxin. All rights reserved.
- Introduction
- Main features
- BASIC at a glance
- Awesome
- Installation
- Interpreter workflow diagram
- Wiki
- References
- Donate/List of donors
MY-BASIC is a lightweight BASIC interpreter written in standard C, with only dual files. It is a dynamic typed programming language, and aimed to be embeddable, extendable and portable. MY-BASIC supports structured syntax; implements a style of OOP called prototype-based programming paradigm; and it offers a functional programming ability with lambda abstraction. The kernel is written with a C source file and an associated header file. It's easy to either embed it or use it as a standalone interpreter. You can get how to use it and how to add new scripting interfaces in five minutes. It's possible to combine MY-BASIC with existing projects in C, C++, Java, Objective-C, Swift, C# and many other languages. Script driven can make your projects configurable, scalable and elegant. It's also possible to learn how to build an interpreter from scratch with MY-BASIC, or build your own dialect based on it.
The prefix "MY-" in the name means either literally "My" or "Make Your".
MY-BASIC is a dynamic typed programming language with BASIC syntax and has a very dynamic nature; it makes it flexible and easy to use. MY-BASIC offers a wide range of features including:
- It is totally free to use MY-BASIC for commercial or noncommercial purposes under the MIT license
- Written in clean 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 feelings
- Unicode support
- Prototype-based programming (OOP) paradigm, with reflection support
- Lambda abstraction enhanced functional programming
- Customizable referenced usertype
- Collection construction and manipulation functions for
LIST
andDICT
- Automatic releasing of referenced objects (prototype, lambda, referenced usertype, list, dictionary, etc.) benefited from Reference Counting and Garbage Collection
- Dynamic typed integer, real, string, boolean, usertype, and other advanced types with array support
- Standard numeric functions, and standard string functions
- Importing multiple source files with the
IMPORT
statement - 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
- Debug API
- Customizable memory pool
- High expansibility, easy to use API, easy to extend new BASIC functions
- Powerful interactive ability to manipulate BASIC facilities at native side; or to use native functionalities in BASIC
- More features under development
I write some of my plans in the language design page.
Get BASIC8 on Steam; a fantasy computer for game and other program development powered by MY-BASIC!
Come along with 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 (especially the "Programming with BASIC" section) to get more details about how to program in MY-BASIC.
See the list for some user creations.
Don't forget to share with us about your creativity!
This repository contains precompiled binaries for Windows and macOS, the easiest way is to download one of them to get a playground. Or you could make a build as follow:
- Open the Visual Studio solution
my_basic.sln
on Windows to build an executable - Open the Xcode solution
my_basic_mac.xcodeproj
on macOS to build a macOS executable - If you are using other *nix OS, use the
makefile
with a "make" toolchain to build an interpreter binary according to your specific platform
To compile an interpreter binary for your own platform manually, please follow these steps:
- Retrieve everything under the
core
andshell
folders for a minimum build - Setup your compiling toolchain configuration
- Compile
core/my_basic.c
andshell/main.c
, they both requirecore/my_basic.h
; then link up an executable
The standalone interpreter supports three running modes:
- Execute the binary without arguments to enter the interactive mode
- Type "HELP" and hint Enter to get detail usages of the interpreter
- Pass a file path to the binary to load and run that BASIC file directly
- Pass an argument
-e
followed by an expression to evaluate and print instantly, as a simple calculator, eg.-e "2 * (3 + 4)"
MY-BASIC is cleanly written in a single C source file and an associated header file. Just copy core/my_basic.c
and core/my_basic.h
to the folder of your project and add them to a build configuration.
You can definitely link with MY-BASIC as a lib as well.
For more details about using MY-BASIC when it has been integrated with a project, see MY-BASIC Quick Reference or read the Wiki pages.
It's necessary to know some principle of MY-BASIC before doing deep customization; nothing's better than a workflow diagram to get a first image.
A simplest setup as follow:
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 MY-BASIC Quick Reference includes most of the fundamental topics, however, it hasn't covered everything, such as the design principle, machinism behind MY-BASIC, efficient practice, etc; some of these topics are mentioned in the Wiki:
- Principles
- Code with MY-BASIC
- Understanding data type system in MY-BASIC
- Standalone shell
- Integration
- Customization
- More scripting API
- FAQ
I need your supports to keep this project alive. Consider supporting MY-BASIC development with a donation.
One-off donation via PayPal.