1 Star 0 Fork 2

jjzhang166/my-basic

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT
 _____ __ __     _____ _____ _____ _____ _____ 
|     |  |  |___| __  |  _  |   __|     |     |
| | | |_   _|___| __ -|     |__   |-   -|   --|
|_|_|_| |_|     |_____|__|__|_____|_____|_____|

Copyright (C) 2011 - 2021 Tony Wang

Build status MIT license

Web playground

Contents

Introduction

MY-BASIC is a lightweight BASIC interpreter written in standard C in dual files. It aims to be embeddable, extendable and portable. It is a dynamic typed programming language, reserves structured syntax, supports a style of prototype-based programming (OOP), also implements a functional paradigm by lambda abstraction. The core is written in a C source file and an associated header file. It's easy to either use it as a standalone interpreter or embed it with existing projects in C, C++, Java, Objective-C, Swift, C#, etc. and totally customizable by adding your own scripting interface.

Main features

MY-BASIC offers a wide range of features including:

  • Written in 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 flavour
  • Unicode support
  • Prototype-based programming, with reflection support
  • Lambda abstraction enhanced functional programming
  • Customizable referenced/non-referenced usertype
  • Collection construction and manipulation functions for LIST and DICT
  • Automatic releasing for referenced values (prototype, lambda, referenced usertype, list, dictionary, etc.) benefited from reference counting and garbage collection
  • Common numeric and string functions
  • 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
  • Importing multiple source files with the IMPORT statement
  • Debug API
  • Customizable memory pool
  • Easy API, for extending new BASIC functions
  • Easy interacting BASIC facilities at native side, and vice versa
  • More features under development

BASIC8

Get BASIC8 - the fantasy computer powered by MY-BASIC - on Steam for game and other program development in an integrated environment.

See awesome user creations.

BASIC at a glance

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 to get details about how to program in MY-BASIC.

Installation

Using standalone interpreter binary

This repository contains precompiled binaries for Windows and macOS, the easiest way is to download to get a direct playground. Or you can make a build by:

  • Using the Visual Studio solution my_basic.sln for Windows build
  • Using the Xcode workspace my_basic_mac.xcodeproj for macOS build
  • Using the makefile for *nix build

Follow these steps to compile an interpreter binary manually for other platform:

  1. Retrieve everything under the core and shell folders for a minimum setup
  2. Setup your toolchain for compiling and linking
  3. Compile core/my_basic.c and shell/main.c, while both includes core/my_basic.h; then link up an executable

The standalone interpreter supports three running modes:

  • Execute the binary without arguments to use the interactive mode
    • Type "HELP" and hint Enter to see usages
  • Pass a file to the binary to load and run that BASIC source code
  • Pass an argument -e followed with an expression to evaluate and print instantly as a simple calculator, eg. -e "22 / 7"

Combining with existing projects

Just copy core/my_basic.c and core/my_basic.h to your project and add them to the build pipeline. You can link with MY-BASIC as a lib as well.

For details about using MY-BASIC after integration, see MY-BASIC Quick Reference and read the Wiki pages.

Interpreter workflow diagram

MY-BASIC's workflow diagram can be concluded in a single image.

A simple setup:

#include "my_basic.h"

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;
}

Wiki

The manual explains most of the fundamental topics, however it doesn't cover everything; read the Wiki for supplements, like machinism behind MY-BASIC, efficient practice, etc:

Donate

List of donors.

Consider supporting MY-BASIC development with a donation if you like this project.

One-off donation via PayPal.

The MIT License Copyright (C) 2011 - 2021 Tony Wang Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

my_basic 是简单可扩展的轻量级 BASIC 脚本解析器,使用 C 编写,可以作为独立的解析器使用,也可以集成到现有项目 展开 收起
README
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C/C++
1
https://gitee.com/jjzhang166/my-basic.git
git@gitee.com:jjzhang166/my-basic.git
jjzhang166
my-basic
my-basic
master

搜索帮助