# xBASIC
xBASIC is designed to be a very simple language. The goal of this library is to make it easy to add
user-defined logic to your Rust project.
Features:
- Gracefully handles bad or malicious code.
- Allows setting a compute time limit.
- Allows calling xBASIC functions from Rust
- Allows calling Rust functions from xBASIC
- Allows defining custom IO, which `PRINT` and `INPUT` work with
- Entirely safe rust
TODO:
- Arrays
- Better standard library(string lengths, type conversions, etc)
A basic interpreter is also included in this project. It can be started with `cargo run`. It possesses a REPL, but can also run files.
## Syntax
As mentioned already, xBASIC is a very simple language. Like other BASIC languages, it is designed to be easy
for beginners to understand.
### Printing
```
print "hello world" // "hello world"
print "hello" "world" // "hello world"
print 5 "+" 3 "=" 5 + 3 // "5 + 3 = 8"
```
`PRINT` will automatically concatenate multiple expressions together.
### Reading
```
input a // Read in a line, store it in a
input b // Read in another line, store it in b
```
### Variables
```
a = 3
print a // "3"
print b // "0"
```
All variables are implicitly initialized to 0.
### Comparisons
```
a = 3
print a = 3 // "true"
print not a = 3 // \"false\"
print a < 3 // "false"
print a > 3 // "false"
print a <= 3 // "true"
print a >= 3 // "true"
```
Note that `a = 3` is an assignment when used as a statement, and a comparison when used as an expression.
### IF statements
```
if 3 = 3 then
print "hello world" // runs
end if
if not a then
print "hello world" // runs, because a is implicitly 0
end if
if b = 2 then
elseif b = 3 then
elseif b = 4 then
else
end if
```
Truthy values are `true` and all numbers other than 0. It is an error to attempt to evaluate the truthiness of a string.
### WHILE statements
```
a = 0
while a < 10
print a // prints 0 1 2 3 4 5 6 7 8 9, each on a newline
a += 1
wend
```
### FOR statements
```
for x = 10 to 20
print x // prints 10 11 12 13 14 15 16 17 18 19 20, each on a newline
next x
```
### Functions
```
print a("hello", "world") // "helloworld"
function a(b, c)
return b + c
end function
```
Functions can be defined before or after they are called. Return values can be specified with `return`,
otherwise they will implicitly return 0. Recursion is also allowed.
For more examples, check out the `examples` directory.