Copyright (C) 2011 - 2015 Wang Renxin. All rights reserved.
Why are existing script interpreters so complex? Why is it so difficult to integrate with them? Why not try MY-BASIC today! Script should be simple and enjoyable.
- Introduction
- Main features
- Script at a glance
- Interpreter workflow diagram
- Installation
- Wiki
- References
MY-BASIC is a lightweight cross-platform easy extendable BASIC interpreter written in pure C with about 10,000 lines of source code. Its grammar is similar to structured BASIC. It is aimed to be either an embeddable scripting language or a standalone interpreter. The core is pretty light; all in a C source file and an associated header file; simpleness of source file layout and tightness dependency make it feels extraordinarily tough. It's able to easily combine MY-BASIC with an existing project in C, C++, Objective-C, etc. Script driven can make your projects more powerful, elegant and neat.
- It is totally free to use MY-BASIC for individual or commercial purpose under the MIT license
- Written in clean ANSI C, source code is portable for a dozen of platforms
- With most common BASIC syntax
- Lightweight (within memory usage less than 128KB) and fast
- Case-insensitive tokenization
- Integer, float point, string, boolean, user defined data types, 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, etc.) benefited from Reference Counting and Garbage Collection
- Multiple 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/WHILE-WEND/DO-UNTIL
support GOTO/GOSUB-RETURN
support- Debug APIs
- Customizable memory pool
- High expansibility, easy to use APIs, easy to write customized scripting interfaces
- It's able to use it as a standalone interpreter, or integrate it with existing projects in C, C++, Objective-C, etc.
- It's able to learn how to build an interpreter from scratch with MY-BASIC
- It's able to build your own dialect easily based on MY-BASIC
- More features/modules under developing
Come along with a traditional "hello world" script in MY-BASIC:
print "What is your name: "
input 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.
This repository contains precompiled binaries for Windows and OS X, it's efficient to download it 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 OS X to build an OS X executable - If you are not using VS or Xcode, use the
makefile
with a "make" toolchain to build an interpreter binary according to your own platform
To compile an interpreter binary for your own platform manually, please follow the steps:
- Retrieve at least
core
andshell
folders for minimum build - Setup your compile toolchain configuration
- Use your compiler to compile
core/my_basic.c
andshell/main.c
, includingcore/my_basic.h
is required for both source files, then link up your own executable
The standalone interpreter supports three modes:
- Execute the binary directly without arguments to enter MY-BASIC interactive mode
- Pass a file path to the binary to load and run that script file
- Pass an argument
-e
followed by an expression to evaluate and print it, eg.-e "2 * (3 + 4)"
MY-BASIC is cleanly written in a single C source file and an associated header file. Just copy my_basic.c
and 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's already integrated with a project, please see MY-BASIC Quick Reference.
Most of the fundamental topics are mentioned in the MY-BASIC Quick Reference. There are some other scattered topics besides these aspects, such as the desine principle, machinism behind MY-BASIC, effective practice, etc; they are issued in the Wiki:
- Principles
- Passes
- Interpreter workflow diagram
- Code with MY-BASIC
- Module (namespace)
- Sub routine
- Understanding data type system in MY-BASIC
- Collection manipulation
- Manipulate an array
- Automatic memory management
- Use usertype values
- Integration
- Link with MY-BASIC
- Write a debugger
- Customization
- Customize a memory allocator
- Redirect PRINT and INPUT
- Redefine int_t and real_t
- Customize macros
- More scripting APIs
- String matching module
- File module
- Bit operation module
- Miscellaneous module
- FAQ