avid 0.6.1

A plug-and-play scripting language
Documentation
# Avid Syntax
Avid's syntax is heavily inspired by forth and uses [reverse polish notation](https://en.wikipedia.org/wiki/Reverse_Polish_notation).
This means that all functions operate on an implicit "stack," pushing and popping
elements as needed. Let's take a look at an example:
```ignore
/* stack is now empty */

/* Pushes `1` to the stack */
1

/* stack: 1 */
/* Pushes `2` to the stack */
2

/* stack: 1 2 */
/* Pops the top two elements from the stack, sums them up, and pushes the result onto the stack */
+

/* stack: 3 */
/* Pops an element from the top of the stack and prints it. */
print

/* stack is now empty */
```

Avid also allows strings:
```ignore
/* Stack is now empty */
/* Pushes itself onto the stack */
"Hello, "

/* Stack: "Hello, " */
"World!"

/* Stack: "Hello, " "World!" */
/* Swaps the top two items on the stack */
swap

/* Stack: "World!" "Hello, " */
/* Prints "Hello, World!" */
print print 


/* This prints: */
/*
all of these escape codes are allowed!: "Quotes", preventing new lines, adding
 new lines, 'Single quotes,'
urns,age ret
         tabs, and \\ slashes! \\
*\
"all of these escape codes are allowed!: \"Quotes\", preventing \
new lines, adding \n new lines, \'Single quotes,\' 
carriage ret\rurns,
\t tabs, and \\ slashes! \\" print


/* Stack is now empty */
```

And lists:
```ignore
/* Stack is now empty */
/* Pushes a new list to the stack */
list

/* Stack: [] */
/* Pushes several new items to the stack and appends each to the list */
1 append
2 append
3 append

/* Stack: [1, 2, 3] */
/* Copies the top item on the stack */
dup

/* Stack: [1, 2, 3] [1, 2, 3] */
/* Prints: [1, 2, 3] */

/* Stack: [1, 2, 3] */
/* The list can be used again */
```

## Control Flow
Control flow is very simple in Avid: an `if` statement just pops from the top of the stack, sees
if that value is truthy, and continues into the `if` statement if it is. `while` loops are similar:
on each iteration of the loop, the code between the `while` and the `do` parts is executed, and
if what is left on top of the stack is truthy, the code inside the block is executed and
execution returns to the `while` for reevaluation.

Both of these types of blocks are terminated by `end` statements.

Now, some examples!

```ignore
0
while
    1 +
    dup 11 != dup

    /* You can do if statements anywhere, even inside the conditions of while loops! */
    if
        "The value is not eleven! " print
    end
do
    "The value is: " print
    dup print
    "! " print
end
```

## Functions
Currently, you cannot define your own functions in Avid, but you can in rust! Check out the rust documentation for more details, and [the list of pre-defined functions](./StandardLib.md) too!