2017-04-19 20:21:04 +08:00
2017-04-19 20:21:04 +08:00
2017-02-26 14:42:10 +08:00
2017-02-26 14:42:10 +08:00
2016-12-26 16:38:01 +08:00
2016-08-05 09:51:41 +08:00
2017-04-06 13:45:05 +08:00
2017-04-08 17:11:05 +08:00
2016-12-31 17:38:45 +08:00

 __   __  __   __         _______  _______  _______  ___   _______ 
|  |_|  ||  | |  |       |  _    ||   _   ||       ||   | |       |
|       ||  |_|  | ____  | |_|   ||  |_|  ||  _____||   | |       |
|       ||       ||____| |       ||       || |_____ |   | |       |
|       ||_     _|       |  _   | |       ||_____  ||   | |      _|
| ||_|| |  |   |         | |_|   ||   _   | _____| ||   | |     |_ 
|_|   |_|  |___|         |_______||__| |__||_______||___| |_______|

Copyright (C) 2011 - 2017 Wang Renxin. All rights reserved.

简体中文

Build status MIT license

Contents

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 and DICT
  • 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.

I've been making some other projects, which make use of MY-BASIC, and make more benefits.

Installation

Use standalone interpreter binary

This repository contains precompiled binaries for Windows and macOS, it's efficient 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 an macOS executable
  • If you were using a *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:

  1. Retrieve at least core and shell folders for a minimum build
  2. Setup your compile toolchain configuration
  3. Compile core/my_basic.c and shell/main.c, they both require core/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 impression.

More detail are issued in 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:

References

Support MY-BASIC development/List of donors

You can support MY-BASIC development with a donation.

Or see the list of donors.

Description
No description provided
Readme MIT 32 MiB
Languages
C 99%
HTML 0.8%