Mscript: A lightweight interpreted scripting language
Project description
Mscript Interpreter
it.py – Interpreter for the Mscript language
Version: 0.6.9
Author: Momo-AUX1
Date: 2025-05-21
Table of Contents
- Overview
- Features
- Requirements
- Installation
- Usage
- Standard Library
- Python Interoperability
- Language Grammar
- Built-in Functions
- Examples
- Version History
- Roadmap
- Contributing
- License
Overview
Mscript is a small, Python-powered scripting language with braces-based blocks and built-in support for variables, arithmetic, control flow, functions, data structures, I/O, FFI, and seamless Python interop. This repository provides:
- it.py – the Lark-based interpreter
- language.def – the grammar definition
- mscript_builtins.py – core built-ins
- std/ – standard library modules written in Mscript
Features
- Variable assignment and lookup
- Arithmetic (
+,-,*,/,%,**) - Control flow:
if/elif/else,while,for,break,continue - First-class functions, with parameters and
return - Lists and dictionaries
- Module import (
import "std/..."orimport python) - Exception handling:
try/catch - Built-in functions:
input,print,str,int,type, file I/O, math, JSON, regex, time, environment, FFI, and more - REPL with history
- Foreign Function Interface (FFI) to call C libraries via
ctypes - Seamless Python interop: any Python package installed via
pipis immediately accessible under thepythonmodule
Requirements
- Python 3.7+
- Lark parser
Install Lark with:
pip install lark
Installation
Install via PyPI:
pip install mscript-lang
Or clone the repo:
git clone https://github.com/your-org/mscript.git
cd mscript
Usage
Interactive REPL
Start the REPL with no arguments:
mscript
You'll see:
Mscript REPL 0.6.9 by Momo-AUX1 (type Ctrl-D to exit)
>>>
Type Mscript statements or expressions; results and errors print immediately.
Running Scripts
Run a .mscript file:
mscript myscript.mscript
--version: print interpreter version and exit--debug: show parse tree
Standard Library
A collection of Mscript modules installed under std/, importable via:
import "std/module_name"
Included modules:
- datetime.mscript:
today(),now(),strftime(),parse() - ffi.mscript:
load(),sym(),func(),buffer(),buffer_ptr(),offset(), read/write helpers - json.mscript:
loads(),dumps() - math.mscript:
sin(),cos(),tan(),log(),log10(),exp(),sqrt(),floor(),ceil(),pow(), constantsPI,E - platform.mscript:
system(),node(),release(),version(),machine(),processor(),full() - random.mscript:
random(),seed(),randint(),uniform(),choice(),shuffle() - re.mscript:
search(),match(),findall(),sub() - string.mscript:
upper(),lower(),strip(),lstrip(),rstrip(),find(),replace(),split(),join(),substring() - sys.mscript:
argv(),getenv(),setenv(),unsetenv(),platformproxy - time.mscript:
sleep(),time()
Python Interoperability
Mscript exposes a special python module that proxies into Python’s ecosystem:
import python
# call built-in Python functions
hi = python.print
hi("mscript!") # prints to stdout
# import any pip-installed package
req = python.requests.get("https://api.example.com").text
print req
- Any library installed in your Python environment (via
pip install …) can be imported and used directly in Mscript usingimport python. - Access modules, functions, classes, and attributes exactly as in normal Python.
Language Grammar
Defined in language.def (LALR):
?start: statement+
?statement: assign | index_assign | print_stmt | if_stmt | while_stmt
| for_stmt | func_def | return_stmt | expr_stmt | import_stmt
| break_stmt | continue_stmt | try_stmt
# (see full grammar in language.def)
Built-in Functions
| Category | Examples |
|---|---|
| Core | input, print, str(), int(), type(), len(), keys(), values() |
| File I/O | read(), write(), system() |
| Math | _sin(), _cos(), _log(), _sqrt(), _pow() |
| JSON | _json_loads(), _json_dumps() |
| Regex | _re_search(), _re_findall(), _re_sub() |
| Date/Time | _date_today(), _datetime_now(), _strftime() |
| Env/Sys | _getenv(), _setenv(), exit() |
| FFI | _ffi_open(), _ffi_sym(), _ffi_buffer(), _ffi_read_uint32() |
| Random | _random_random(), _random_choice(), _random_shuffle() |
| Platform | _platform_system(), _platform_platform() |
See mscript_builtins.py for full list.
Examples
Hello World
# hello.mscript
x = "hello world"
print str.upper(x)
Run:
mscript hello.mscript
# Output: HELLO WORLD
Foreign Function Interface (FFI)
import "std/ffi"
SDL = ffi.load("libSDL2.dylib")
SDL_Init = ffi.func(SDL, "SDL_Init", "int", ["uint"])
SDL_Quit = ffi.func(SDL, "SDL_Quit", "void", [])
if SDL_Init(32) != 0 {
print("SDL_Init failed!")
exit(1)
}
# ...
SDL_Quit()
Python Interop Example
import python
# use Python’s `math` module
print python.math.sqrt(2)
# HTTP request via `requests` (must be installed in your env)
resp = python.requests.get("https://httpbin.org/ip").json()
print resp["origin"]
# define function pointers directly to Mscript variables
hello = python.print
# use them as if they were our own
hello("world!")
Version History
- 0.6.9 – Current release (2025-05-22)
- 0.6.0 – Supporting more built-ins, enhancements to error handling
- 0.5.0 – True standard library
- 0.4.0 – Added more built-ins,
try/exceptsupport - 0.3.0 – Dotted names in functions and assignments
- 0.2.0 – Core interpreter improvements
- 0.1.0 – Initial release
Roadmap
- Package manager
- Expanded standard library
- Module namespace support
- Advanced debugging tools
License
This project is licensed under the MIT License. See LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mscript_lang-0.6.9.tar.gz.
File metadata
- Download URL: mscript_lang-0.6.9.tar.gz
- Upload date:
- Size: 18.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9211be68e45f1a750556ce7c51230d93522afca0bdcc18a97ff744b7825b1ecd
|
|
| MD5 |
30ee7ec6f4514fdf9e618f24d35fb608
|
|
| BLAKE2b-256 |
c31a229d2faacce251e5fb999779b935a08b9aa39e61a225ec09dfe95b7b0f9e
|
File details
Details for the file mscript_lang-0.6.9-py3-none-any.whl.
File metadata
- Download URL: mscript_lang-0.6.9-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
507bce1449d1ae466f9c35fa88ddcb3218ce8b65407ab978f72b898585aaca3b
|
|
| MD5 |
3f7b5993b1a3e0cf29aac2289aa6fe1b
|
|
| BLAKE2b-256 |
9db3c8752fef6c439e92f6ada6918b4aba5fa90a2c1c55118084df9aaa25bc84
|