__ __ __ __ _______ _______ _______ ___ _______
| |_| || | | | | _ || _ || || | | |
| || |_| | ____ | |_| || |_| || _____|| | | |
| || ||____| | || || |_____ | | | |
| ||_ _| | _ | | ||_____ || | | _|
| ||_|| | | | | |_| || _ | _____| || | | |_
|_| |_| |___| |_______||__| |__||_______||___| |_______|
Copyright (C) 2011 - 2017 Wang Renxin. All rights reserved.
Contents
- Introduction
- Compatibility
- Main features
- Script at a glance
- Related projects
- Installation
- Interpreter workflow diagram
- Wiki
- References
- Support MY-BASIC development/List of donors
Introduction
MY-BASIC is a lightweight cross-platform easy extendable BASIC interpreter written in pure C with less than twenty thousand lines of source code. MY-BASIC is a dynamic typed programming language. It supports structured grammar, and implements a style of OOP called prototype-based programming paradigm, furthermore it offers a functional programming ability with lambda abstraction. It is aimed to be either an embeddable scripting language or a standalone interpreter. The core is very lightweight; all in a C source file and an associated header file; simpleness of source file layout and tightness dependency make it extraordinarily tough. Anyone even C programming newbies could learn how to use it and add new scripting interfaces in five minutes. It's able to easily combine MY-BASIC with an existing project in C, C++, Java, Objective-C, Swift, C# and many other languages. Script driven can make your projects more powerful, elegant and neat. It's also able to learn how to build an interpreter from scratch with MY-BASIC, or build your own interpreter easily based on it.
"MY-" in the name could be understood literally as "My" or "Make Your", it's up to you.
Compatibility
It fits well on a large scale of Workstation, PC, Tablet, Pad, Mobile Phone, PDA, Video Game Console, Raspberry Pi, Intel Edison, Arduino and even MCU; totally portable to Windows, macOS, Unix, Linux, iOS, Android, RTOS, etc.
For Arduino
There is a MY-BASIC interpreter porting of Arduino, with a totally rewritten shell and user manual. Please see MY-BASIC ARDU.
Main features
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 purpose under the MIT license
- Written in clean ANSI C, source code is portable to a dozen of platforms
- Lightweight (within memory usage less than 128KB), fast, and cuttable
- 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
- Dynamic typed integer, real, string, boolean, usertype, etc. with array support
- Standard numeric functions, and standard string functions
- Referenced usertype support
- Collection implementation and manipulation functions for
LIST
andDICT
- Automatic releasing of referenced objects (list, dictionary, referenced usertype, prototype, lambda, etc.) benefited from Reference Counting and Garbage Collection
- Multiple source file support by
IMPORT
statement - Structured user customizable sub routine definition by
DEF/ENDDEF
support, including tail recursion optimization - Structured
IF/THEN/ELSEIF/ELSE/ENDIF
support - Structured
FOR/TO/STEP/NEXT
,FOR/IN/NEXT
,WHILE/WEND
,DO/UNTIL
support - Reserved retro
GOTO
,GOSUB/RETURN
support - Debug APIs
- Customizable memory pool
- High expansibility, easy to use APIs, easy to write customized scripting interfaces
- Powerful interactive ability to manipulate script facilities at native side; or to use native functionalities in script, and vice versa
- More features under development
You may wondering if it's possible to introduce another feature to MY-BASIC, you may would like to take a look at this page. You may also would like to take a look at the language design to find some of my plan.
Script at a glance
Come along with a traditional "Hello World" script in MY-BASIC:
input "What is your name: ", n$
def foo(a, b)
return a + " " + b + " by " + n$ + "."
enddef
print foo("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.
Related projects
I've been making some other projects, which make use of MY-BASIC, and make more benefits.
- MY-BASIC Code Editor (Unity)
- A code editor for MY-BASIC powered by the Unity3D engine.
Installation
Use standalone interpreter binary
This repository contains precompiled binaries for Windows and macOS, it's easy to download one of them and have a first impressive 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 were using other *nix OS, then 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 the steps:
- Retrieve at least
core
andshell
folders for a minimum build - Setup your compile toolchain configuration
- Compile
core/my_basic.c
andshell/main.c
, they both requirecore/my_basic.h
; then link up your own executable
The standalone interpreter supports three running modes:
- Execute the binary without arguments to enter the interactive mode of MY-BASIC
- Pass a file path to the binary to load and run that script file directly
- Pass an argument
-e
followed by an expression to evaluate it and print the result, eg.-e "2 * (3 + 4)"
Type "HELP" and hint Enter under interactive mode to view full detail usage of the interpreter.
Combine with exist projects
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 your project folder 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 be integrated with a project, please see MY-BASIC Quick Reference or read the Wiki pages.
Interpreter workflow diagram
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.
More detail are issued on the Wiki pages.
Wiki
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, effective practice, etc; all of them are issued in the Wiki:
- Principles
- Code with MY-BASIC
- Understanding data type system in MY-BASIC
- Standalone shell
- Integration
- Customization
- More scripting APIs
- FAQ
References
Support MY-BASIC development/List of donors
You can support MY-BASIC development with a donation.

Or see the list of donors.