aiscript 0.6.0
aiscript: ^0.6.0 copied to clipboard
Parser and interpreter for AiScript, a lightweight scripting language, written in Dart.
AiScript for Dart #
AiScript parser and interpreter for Dart. Based on the reference implementation (syuilo/aiscript). This library has a very similar API to the original.
AiScript is a lightweight scripting language that was designed to run on top of JavaScript. For more information, check out the original repo's Getting started guide (en)
This package also contains a command line REPL program in bin/repl.dart
Implementation details #
Core:vwill correspond to the latest AiScript version that this is compatible with (not the library's actual version).- Currently fully compatible with: AiScript v0.16.0
- Mostly acts the same as the original implementation. If you find any differences, please report it as a bug (unless explicitly specified below).
- Similar to the original, the API of this library is still unstable. Please be careful when upgrading to a new minor version (e.g. 0.1.0 -> 0.2.0) as breaking API changes might be present.
Non-standard behaviors #
- Out of range array assignments are allowed for now. Empty spots will be filled with null values.
- Null safety: All functions must return a Value object. If a function doesn't need to return a value, it must still return a NullValue object.
- Number values are passed to functions as a copy. Other types of values are marked as final and cannot be changed once initialized.
- Modules are supported through an unofficial extension. You can import modules in your script using the
require()function. This feature can be disabled by setting thedisableExtensionsparameter totruewhen creating anInterpreter. - Nested namespaces are allowed.
- Error values act similar to and can be used as string values. However, you cannot perform string operations on them.
API reference #
Examples #
See /example for more examples.
import 'package:aiscript/aiscript.dart';
void main() async {
// Create the parser
final parser = Parser();
// Parse the script
final ParseResult res = parser.parse('<: "Hello world!"');
// Create the interpreter state with the print function (optional)
final state = Interpreter({}, printFn: print);
// (Optional) Set the preprocessed source of the program
// This will be used for error messages
state.source = res.source;
// Finally, execute the script
await state.exec(res.ast); // Output: Hello world!
}
License #
This project's test suite contains code from syuilo/aiscript which also uses the same license.