Update README.md

master
clyne 7 years ago committed by GitHub
parent d31f2c9aa6
commit a93654c1de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,25 +1,27 @@
# interpreter # interpreter
*interpreter* is a minimal scripting language aimed at low-spec embedded systems. *interpreter* is a minimal scripting language aimed at low-memory embedded systems.
Many other scripting languages currently exist for embedded use, including Lua, Tcl, and BASIC; however, their implementations require certain system calls (e.g. read()/write()) that may not be available or used on an embedded device. As a result, *interpreter* was made with the goal to allow advanced scripts to be run in minimal conditions. This included things like having only a few built-in functions, and only loading script from C-strings one at a time. Many other scripting languages currently exist for embedded use, including Lua, Tcl, and BASIC; however, their implementations require certain system calls (e.g. read()/write()) that may not be available or used on an embedded device. Additionally, their memory and/or non-volatile memory requirements may be too large for the targeted device. As a result, *interpreter* was made with the goal to allow advanced scripts to be run in minimal conditions. This included things like having only a few built-in functions, and only loading script from C-strings.
To use *interpreter* with your own device, you will need some malloc/free implementation and a freestanding standard library. Newlib can work well for this, although functions like atoi() and snprintf() will probably need to be rewritten (if you don't have an \_sbrk defined). To use *interpreter* with your own device, you will need some malloc/free implementation and a freestanding standard library. Newlib can work well for this, although functions like atoi() and snprintf() will probably need to be rewritten (if you don't have an \_sbrk defined).
### interpreter features: ### interpreter features:
* Variable/function definition - in C and in script * Variable/function definition - in C and in script
* dynamic arrays
* if/else conditionals * if/else conditionals
* while loops * while loops
* a solve function to parse strings at script runtime * a solve function to parse strings at script runtime
### inconvenient features: ### inconvenient features:
* some code formatting is enforced due to parser limitation * some code formatting is enforced due to parser limitation
* all variables are global * all variables are global (i.e. scopes don't exist)
* whitespace is not always ignored * whitespace is not always ignored
### some TODO items: ### some TODO items:
* add better error messages * add better error messages
* better array support * better array support
* better string support
* for loops * for loops
* variable scopes * variable scopes
@ -27,9 +29,9 @@ To use *interpreter* with your own device, you will need some malloc/free implem
This project can be made for the host system (```mv shell.c.bak shell.c; make```) or an ARM system (```mv shell.c shell.c.bak; make arm```). Make's ```-j``` argument may be used to multithread compilation. This project can be made for the host system (```mv shell.c.bak shell.c; make```) or an ARM system (```mv shell.c shell.c.bak; make arm```). Make's ```-j``` argument may be used to multithread compilation.
To run on the host system, run ```./shell some_script_file```. Note that no IO functions are built in, so you must define your own. To run on the host system, run ```./shell some_script_file```. Note that IO functions are **not** built in, so you must define your own.
To use on an ARM device, simply link ```libinterp.a``` into your program and use the header files. See ```shell.c``` for an idea of how to the interpreter. To use on an ARM device, simply link ```libinterp.a``` into your program and use the header files. See ```shell.c``` for an idea of how to the interpreter.
   
This project is still in heavy development, so don't expect too much. See the wiki for a scripting guide. This project is still in heavy development, so don't expect too much. See the wiki for a scripting guide.

Loading…
Cancel
Save