devulder / my_basic

Easy extendable lightweight BASIC scripting interpreter written with C. It's able to use it as a standalone interpreter, or integrate it with existing projects. It fits well with workstation, PC, pad, tablet, mobile phone, PDA, video game console, Raspberry Pi and even MCU; totally portable to Windows, OS X, Linux, iOS, Android, RTOS, etc.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

Build status

Build Status

Contents

Introduction

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.

Main features

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

Script at a glance

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.

Installation

Use standalone interpreter binary

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:

  1. Retrieve at least core and shell folders for minimum build
  2. Setup your compile toolchain configuration
  3. Use your compiler to compile core/my_basic.c and shell/main.c, including core/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)"

Combine with exist projects

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:

References


You can support MY-BASIC development with a donation:
paypal

About

Easy extendable lightweight BASIC scripting interpreter written with C. It's able to use it as a standalone interpreter, or integrate it with existing projects. It fits well with workstation, PC, pad, tablet, mobile phone, PDA, video game console, Raspberry Pi and even MCU; totally portable to Windows, OS X, Linux, iOS, Android, RTOS, etc.

License:MIT License


Languages

Language:C 99.3%Language:Visual Basic 0.5%Language:Batchfile 0.1%Language:Makefile 0.1%