# 159.341 Assignment 1 - String Interpreter [![Build status](https://ci.software.kauripeak.co.nz/api/projects/status/44sgyt4dadc2il99?svg=true)](https://ci.software.kauripeak.co.nz/project/AppVeyor/159-341-assignment-1)
## A basic interpreter for a simple programming language.
There is only one implicit type definition - strings.
This program is written in C# (.NET Core 3.0*) and specifically avoids the use of the `regex` class and the
```cs
string.split()
```
method to show an understanding of the implementation.
\* *.NET Core 3.0 **should** be supported on the lab machines*
The application accepts piped input streams via `StreamReader` and piped input via `type | `
There are preconfigured build options that will automatically pipe the example files:
[![VS Build Configuration](https://git.software.kauripeak.co.nz/content/upload/159.341/159-341-assignment-1-build-configuration.png)](https://git.software.kauripeak.co.nz/content/upload/159.341/159-341-assignment-1-build-configuration.png)
These examples are automatically copied to the output directory at build.
This stream is navigated character-by-character (not byte-by-byte)
Example usage:
```py
set somevar "NewValue";
set othervar somevar + SPACE + ";";
list;
exit;
```
Would output:
```
┌─────────────┬──────────────────────┬─────────┐
│ Symbol │ Value │ Flags │
├─────────────┼──────────────────────┼─────────┤
│somevar │NewValue │00000000 │
├─────────────┼──────────────────────┼─────────┤
│othervar │NewValue ; │00000000 │
└─────────────┴──────────────────────┴─────────┘
```
## Additional Parameters | Behaviours
* The option `list;` may be augmented with the parameter `all` (i.e. `list all;`), which will additionally list the constant/global symbols.
* It is possible to save the command list on `exit;`; this is prompted and guided.
* The program instances its operation; at `exit;` you will have the option to load a new file or write a new program
* A quick help option is available by using the command `h` (semi-colon not required)